Re: Connecting to "PCI command write" interrupt on 4xx platforms
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: [EMAIL PROTECTED] { 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 = <0x0001 0xeec0 0x0008 0x0001 0xeed0 0x0004 0x0001 0xeed0 0x0004 0x0001 0xef40 0x0040>; /* 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: [EMAIL PROTECTED] { > > endpoint = "pci-endpoint"; > > ... > > > > To many "endpoint" appearances for my taste:-) > > No, by name I meant > > PCI: [EMAIL PROTECTED] { > } > > 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 > Linuxppc-dev@ozlabs.org > 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 - ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
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: [EMAIL PROTECTED] { > endpoint = "pci-endpoint"; > ... > > To many "endpoint" appearances for my taste:-) No, by name I meant PCI: [EMAIL PROTECTED] { } 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 Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Tuesday 04 November 2008 07:16, Benjamin Herrenschmidt wrote: > > It is device_type for PCIe right now, I'm afraid. This was what we agreed > > upon. Here a code sniplet from the patch: > > > > /* Check if device_type property is set to "pci" or "pci-endpoint". > > * Resulting from this setup this PCIe port will be configured > > * as root-complex or as endpoint. > > */ > > val = of_get_property(port->node, "device_type", NULL); > > if (!strcmp(val, "pci-endpoint")) { > > port->endpoint = 1; > > } else if (!strcmp(val, "pci")) { > > port->endpoint = 0; > > } else { > > printk(KERN_ERR "PCIE: missing or incorrect device_type for > > %s\n", > >np->full_name); > > return; > > } > > Allright, that was a bad idea from both of us, David will have my > skin ... > > We should try to move toward something like an "endpoint" property and a > "pci-endpoint" name instead. I must admit that I am not sure what you mean by (pci-endpoint) _name_. Do you mean something like this: PCI: [EMAIL PROTECTED] { endpoint = "pci-endpoint"; ... To many "endpoint" appearances for my taste:-) Matthias ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Tue, 2008-11-04 at 06:19 +0100, Stefan Roese wrote: > On Monday 03 November 2008, Benjamin Herrenschmidt wrote: > > > I will try to add endpoint support for PCI as well. I would like to have > > > a single PCI node and let the device_type attribute decide if we are > > > running in hostbridge or endpoint mode. > > > > Don't use device_type. Do the same we do for PCI-E (whatever it is, I > > don't have the source code at hand right now). > > It is device_type for PCIe right now, I'm afraid. This was what we agreed > upon. Here a code sniplet from the patch: > > /* Check if device_type property is set to "pci" or "pci-endpoint". >* Resulting from this setup this PCIe port will be configured >* as root-complex or as endpoint. >*/ > val = of_get_property(port->node, "device_type", NULL); > if (!strcmp(val, "pci-endpoint")) { > port->endpoint = 1; > } else if (!strcmp(val, "pci")) { > port->endpoint = 0; > } else { > printk(KERN_ERR "PCIE: missing or incorrect device_type for > %s\n", > np->full_name); > return; > } Allright, that was a bad idea from both of us, David will have my skin ... We should try to move toward something like an "endpoint" property and a "pci-endpoint" name instead. Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Monday 03 November 2008, Benjamin Herrenschmidt wrote: > > I will try to add endpoint support for PCI as well. I would like to have > > a single PCI node and let the device_type attribute decide if we are > > running in hostbridge or endpoint mode. > > Don't use device_type. Do the same we do for PCI-E (whatever it is, I > don't have the source code at hand right now). It is device_type for PCIe right now, I'm afraid. This was what we agreed upon. Here a code sniplet from the patch: /* Check if device_type property is set to "pci" or "pci-endpoint". * Resulting from this setup this PCIe port will be configured * as root-complex or as endpoint. */ val = of_get_property(port->node, "device_type", NULL); if (!strcmp(val, "pci-endpoint")) { port->endpoint = 1; } else if (!strcmp(val, "pci")) { port->endpoint = 0; } else { printk(KERN_ERR "PCIE: missing or incorrect device_type for %s\n", np->full_name); return; } Best regards, Stefan ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
> I will try to add endpoint support for PCI as well. I would like to have a > single PCI node and > let the device_type attribute decide if we are running in hostbridge or > endpoint mode. Don't use device_type. Do the same we do for PCI-E (whatever it is, I don't have the source code at hand right now). Cheers, Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Monday 03 November 2008 11:57, Benjamin Herrenschmidt wrote: > On Mon, 2008-11-03 at 10:10 +0100, Matthias Fuchs wrote: > > > > Adding this interrupt to the PCI node would make (logical) sense. But > > on PCI adapter (add-in cards) designs we typically disable the PCI node > > of the DT to disable PCI PnP. This should not prevent us from adding the > > interrupt to the node but it looks a little bit weird to take an interrupt > > from a disabled node, right? > > You can make a pci-endpoint node that isn't detected as a host bridge. > In fact, I think we have some way to even tell in the DT not to activate > host bridge function on 44x nowadays no ? I dont remember for sure but > it's easy enough to add. We have endpoint support for PCIe and the possibility to disable PCI through the status attribute. > > > > the actual PCI bridge, then you can stick an interrupts property in the > > > PCI host bridge node in the DT just fine. > > The PCI node already contains the interrupt-map for the PCI interrupts. > > Only relevant for master, not endpoint. > > > Doesn't adding a further interrupt property cause some trouble with the PCI > > interrupts? > > Not for endpoint. I see. I will try to add endpoint support for PCI as well. I would like to have a single PCI node and let the device_type attribute decide if we are running in hostbridge or endpoint mode. Matthias ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Monday 03 November 2008 12:54, Stefan Roese wrote: > On Monday 03 November 2008, Benjamin Herrenschmidt wrote: > > On Mon, 2008-11-03 at 10:10 +0100, Matthias Fuchs wrote: > > > Adding this interrupt to the PCI node would make (logical) sense. But > > > on PCI adapter (add-in cards) designs we typically disable the PCI node > > > of the DT to disable PCI PnP. This should not prevent us from adding the > > > interrupt to the node but it looks a little bit weird to take an > > > interrupt from a disabled node, right? > > > > You can make a pci-endpoint node that isn't detected as a host bridge. > > In fact, I think we have some way to even tell in the DT not to activate > > host bridge function on 44x nowadays no ? I dont remember for sure but > > it's easy enough to add. > > Yes, it's there. But "only" for PCIe and not for PCI(-X). This patch added it > for PCIe: > > [POWERPC] 4xx: Add endpoint support to 4xx PCIe driver > > It should be easy to add this for PCI and PCI-X as well. Yes, I already though about that. Currently I set the status attribute of the pci node to "disabled" when running as endpoint. But adding endpoint support similiar as you did for PCIe makes sense to me. Matthias ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Monday 03 November 2008, Benjamin Herrenschmidt wrote: > On Mon, 2008-11-03 at 10:10 +0100, Matthias Fuchs wrote: > > Adding this interrupt to the PCI node would make (logical) sense. But > > on PCI adapter (add-in cards) designs we typically disable the PCI node > > of the DT to disable PCI PnP. This should not prevent us from adding the > > interrupt to the node but it looks a little bit weird to take an > > interrupt from a disabled node, right? > > You can make a pci-endpoint node that isn't detected as a host bridge. > In fact, I think we have some way to even tell in the DT not to activate > host bridge function on 44x nowadays no ? I dont remember for sure but > it's easy enough to add. Yes, it's there. But "only" for PCIe and not for PCI(-X). This patch added it for PCIe: [POWERPC] 4xx: Add endpoint support to 4xx PCIe driver It should be easy to add this for PCI and PCI-X as well. Best regards, Stefan ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Mon, 2008-11-03 at 10:10 +0100, Matthias Fuchs wrote: > > Adding this interrupt to the PCI node would make (logical) sense. But > on PCI adapter (add-in cards) designs we typically disable the PCI node > of the DT to disable PCI PnP. This should not prevent us from adding the > interrupt to the node but it looks a little bit weird to take an interrupt > from a disabled node, right? You can make a pci-endpoint node that isn't detected as a host bridge. In fact, I think we have some way to even tell in the DT not to activate host bridge function on 44x nowadays no ? I dont remember for sure but it's easy enough to add. > > the actual PCI bridge, then you can stick an interrupts property in the > > PCI host bridge node in the DT just fine. > The PCI node already contains the interrupt-map for the PCI interrupts. Only relevant for master, not endpoint. > Doesn't adding a further interrupt property cause some trouble with the PCI > interrupts? Not for endpoint. Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
Hi Ben, On Thursday 30 October 2008 21:15, Benjamin Herrenschmidt wrote: > On Thu, 2008-10-30 at 11:58 +0100, Matthias Fuchs wrote: > > I need to connect to the "PCI command write" interrupt on a 440EPx > > platform. This is UIC0/int#5. > > > > Where should I add this interrupt in the DT? To the PCI node? In this > > case it will collide with the > > PCI interrupts. > > > > My application is a 440EPx on a PCI addon card. So the PCI node is > > disabled in the DT. > > > > Is there a way to get an interrupt number for request_irq() without > > querying the DT? > > What is this interrupt precisely ? What emits it ? If it's coming from The interrupt is emitted by the pci bridge when someone writes to the PCI_COMMAND register. We use it on PCI adapter hardware where the CPU is not the system CPU. In this case a "host" driver writes to the adapter's PCI_COMMAND register to trigger a remote interrupt that is handled by a special pci communication driver. Adding this interrupt to the PCI node would make (logical) sense. But on PCI adapter (add-in cards) designs we typically disable the PCI node of the DT to disable PCI PnP. This should not prevent us from adding the interrupt to the node but it looks a little bit weird to take an interrupt from a disabled node, right? > the actual PCI bridge, then you can stick an interrupts property in the > PCI host bridge node in the DT just fine. The PCI node already contains the interrupt-map for the PCI interrupts. Doesn't adding a further interrupt property cause some trouble with the PCI interrupts? Matthias > > Cheers, > Ben. > ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Connecting to "PCI command write" interrupt on 4xx platforms
On Thu, 2008-10-30 at 11:58 +0100, Matthias Fuchs wrote: > I need to connect to the "PCI command write" interrupt on a 440EPx > platform. This is UIC0/int#5. > > Where should I add this interrupt in the DT? To the PCI node? In this > case it will collide with the > PCI interrupts. > > My application is a 440EPx on a PCI addon card. So the PCI node is > disabled in the DT. > > Is there a way to get an interrupt number for request_irq() without > querying the DT? What is this interrupt precisely ? What emits it ? If it's coming from the actual PCI bridge, then you can stick an interrupts property in the PCI host bridge node in the DT just fine. Cheers, Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev