On Wed, 22 Dec 2010 23:58:09 -0600
Meador Inge <meador_i...@mentor.com> wrote:

> NOTE: The 'interrupt-parent' is implicit since message register nodes
>         are always children of interrupt controller nodes.
> 
> ** Example:
> 
>       mpic: p...@40000 {
>               interrupt-controller;
>               #address-cells = <0>;
>               #interrupt-cells = <2>;
>               reg = <0x40000 0x40000>;
>               compatible = "chrp,open-pic";
>               device_type = "open-pic";
>               protected-sources = <0xb1>;
> 
>               m...@1400 {
>                       compatible = "fsl,p2020-msgr", "fsl,mpic-msgr";
>                       reg = <0x1400 0x200>;
>                       cell-index = <0>;
>                       interrupts = <0xb0 0x2 0xb1 0x2
>                                        0xb2 0x2 0xb3 0x2>;
>               };
> 
>               m...@2400 {
>                       compatible = "fsl,p2020-msgr", "fsl,mpic-msgr";
>                       reg = <0x2400 0x200>;
>                       cell-index = <1>;
>                       interrupts = <0xb4 0x2 0xb5 0x2
>                                        0xb6 0x2 0xb7 0x2>;
>                };     
>       };

These nodes cannot go under the mpic node, because interrupt
controllers need #address-cells = <0>.

It would be nice if the binding provided some way of partitioning
up individual message interrupts within a block.

Interrupt generation could be exported as a "service", similar to
(inbound) interrupts and gpios.

Perhaps a something like this, with "doorbell" being a new standard
hw-independent service with its own binding:

msg1: mpic-...@1400 {
        compatible = "fsl,mpic-v3.0-msg";
        reg = <0x1400 0x200>;
        interrupts <176 2 178 2>;

        // We have message registers 0 and 2 for sending,
        // and 1 and 3 for receiving.
        // If absent, we own all message registers in this block.
        fsl,mpic-msg-send-mask = <0x5>;
        fsl,mpic-msg-receive-mask = <0xa>;

        doorbell-controller;

        // split into #doorbell-send-cells and #doorbell-receive-cells?
        #doorbell-cells = <1>;
};

some-amp-protocol-thingy {
        send-doorbells = <&msg1 0>; // generate messages on MSGR0
        receive-doorbells = <&msg1 0>; // receive messages on MSGR1
};

some-other-amp-protocol-thingy {
        send-doorbells = <&msg1 1>; // generate messages on MSGR2
        receive-doorbells = <&msg1 1>; // receive messages on MSGR3
};

Doorbell capabilities such as passing a 32-bit message can be negotiated
between the drivers for the doorbell controller and the doorbell client.

-Scott

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to