Subject: Re: Connecting to "PCI command write" interrupt on 4xx platforms

From: Matthias Fuchs <[email-masked]>
Date: Wed, 5 Nov 2008 21:32:31 +0100

Hi, 

we build some 4xx based PMC modules in the past. These boards can
run as host ("processor PMC" or so called "monarch" mode) or as PCI endpoint
("non-monarch" mode). I would like to use the same DT (and kernel) in both 
modes.
Currently I set the "status" property of the PCI node to "disabled" to prevent 
the kernel to do the host bride stuff (not good as I learned). But we need 
some info from the PCI node even in endpoint mode. So disable is not the best 
idea. 

In endpoint mode the current PCI node has many properties that
make no sense and others are missing. So one could think of a pci _and_ 
pci-endpoint node. The one that is not needed can be disabled, e.g. by 
U-Boot (if you are using U-Boot :-).

I could live with a mode or empty endpoint property, but I am not sure how
to keep the endpoint interrupt properties side-by-side with the host
interrupt mapping. I do not want to patch multiple properties by the 
bootloader to switch between host and endpoint. No can we have 
interrupt-parent + interrupts property in the same node with 
interrupt-map-mask + interrupt-map?

                PCI0: pci@1ec000000 {
                        device_type = "pci";
			endpoint; /* Ben's suggestion */

			/* makes only sense for endpoints */
                        interrupt-parent = <&UIC0>;
                        interrupts = <0x5 0x4 /* PCI command write */
                                      0x6 0x4>; /* PCI power management */

                        #interrupt-cells = <1>;
                        #size-cells = <2>;
                        #address-cells = <3>;
                        compatible = "ibm,plb440epx-pci", "ibm,plb-pci";
                        primary;
                        reg = <0x00000001 0xeec00000 0x00000008
                               0x00000001 0xeed00000 0x00000004
                               0x00000001 0xeed00000 0x00000004
                               0x00000001 0xef400000 0x00000040>;

			/* makes some sense for endpoints 
			Values might differ between host and endpoints */
                        ranges = <...>;

                        /* makes some sense for endpoints */
                        dma-ranges = <...>;

                        interrupt-map-mask = <...>;
                        interrupt-map = <...>;
                };
        };

Matthias

On Tuesday 04 November 2008 22:29:44 Benjamin Herrenschmidt wrote:
> On Tue, 2008-11-04 at 12:17 +0100, Matthias Fuchs wrote:
> > I must admit that I am not sure what you mean by (pci-endpoint)
> > _name_.
> > Do you mean something like this:
> >
> >         PCI: pci@abc {
> >                 endpoint = "pci-endpoint";
> >                 ...
> >
> > To many "endpoint" appearances for my taste:-)
>
> No, by name I meant
>
> 	PCI: pci-endpoint@xxxx {
> 	}
>
> But if we want to have the same device node easily convert between
> endpoint and host, maybe simply a property would be enough. Either just
> an empty "endoint" property or a "mode" property containing "endpoint"
>  vs. "host".
>
> I tend to prefer changing the name if we aren't going to be a host
> bridge though.
>
> Ben.
>
> _______________________________________________
> Linuxppc-dev mailing list
> [email-masked]
> https://ozlabs.org/mailman/listinfo/linuxppc-dev

-- 
-------------------------------------------------------------------------
Dipl.-Ing. Matthias Fuchs
Head of System Design

esd electronic system design gmbh
Vahrenwalder Str. 207 - 30165 Hannover - GERMANY
Phone: +49-511-37298-0 - Fax: +49-511-37298-68
Please visit our homepage http://www.esd.eu
Quality Products - Made in Germany
-------------------------------------------------------------------------
Geschäftsführer: Klaus Detering, Dr. Werner Schulze
Amtsgericht Hannover HRB 51373 - VAT-ID DE 115672832
-------------------------------------------------------------------------