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

2008-11-05 Thread Matthias Fuchs
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

2008-11-04 Thread Benjamin Herrenschmidt
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

2008-11-04 Thread Matthias Fuchs
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

2008-11-03 Thread Benjamin Herrenschmidt
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

2008-11-03 Thread Stefan Roese
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

2008-11-03 Thread Benjamin Herrenschmidt

> 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

2008-11-03 Thread Matthias Fuchs
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

2008-11-03 Thread Matthias Fuchs
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

2008-11-03 Thread Stefan Roese
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

2008-11-03 Thread Benjamin Herrenschmidt
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

2008-11-03 Thread Matthias Fuchs
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

2008-10-30 Thread Benjamin Herrenschmidt
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