Query: PCIe range entry at pcie at 0 in dts files
Kumar Gala
galak at kernel.crashing.org
Fri Mar 25 15:20:56 EST 2011
On Mar 23, 2011, at 10:20 PM, Kushwaha Prabhakar-B32579 wrote:
>
> Hi all,
>
> I have query about usage of range field at pcie at 0 under PCIe controller. Please find snap shot from mpc8536_36.dts..
>
> pci3: pcie at fffe0b000 {
> compatible = "fsl,mpc8548-pcie";
> device_type = "pci";
> #interrupt-cells = <1>;
> #size-cells = <2>;
> #address-cells = <3>;
> reg = <0xf 0xffe0b000 0 0x1000>;
> bus-range = <0 0xff>;
> ranges = <0x02000000 0 0xe0000000 0xc 0x20000000 0 0x20000000
> 0x01000000 0 0x00000000 0xf 0xffc30000 0 0x00010000>;
> clock-frequency = <33333333>;
> interrupt-parent = <&mpic>;
> interrupts = <27 0x2>;
> interrupt-map-mask = <0xf800 0 0 7>;
> interrupt-map = <
> /* IDSEL 0x0 */
> 0000 0 0 1 &mpic 8 1
> 0000 0 0 2 &mpic 9 1
> 0000 0 0 3 &mpic 10 1
> 0000 0 0 4 &mpic 11 1
> >;
>
> pcie at 0 {
> reg = <0 0 0 0 0>;
> #size-cells = <2>;
> #address-cells = <3>;
> device_type = "pci";
> ranges = <0x02000000 0 0xe0000000 --> child/port start address
> 0x02000000 0 0xe0000000 --> Parent bus address
> 0 0x20000000
>
> 0x01000000 0 0x00000000
> 0x01000000 0 0x00000000
> 0 0x00100000>;
> };
> };
>
> Question:
> A) is ranges filed of pcie at 0 really required?
> I just went through the code and found scan_OF_for_pci_dev() called from pci_busdev_to_OF_node() touches pcie at 0 node. But, It does not even uses range filed.
>
> static struct device_node *scan_OF_for_pci_dev(struct device_node *parent,unsigned int devfn) {
> ---
> ---
> for_each_child_of_node(parent, np) {
> reg = of_get_property(np, "reg", &psize);
>
> ---
> ---
> if (!strcmp(np->name, "multifunc-device")) {
>
> }
>
> I also checked "Power_ePAPR_APPROVED_v1.0.pdf". It never say range filed required for child bus.
Part of the reason for the range is to match PCIe semantics of RC having a transparent bridge.
>
> B) if range field of pcie at 0 required. why does child/port start address same as Parent bus address? Range property provides mapping of port address to parent address space.
> So the value should be 0x00000000. Means port's address starting from 0x00000000 to size 0x20000000 is mapped parent's 0xe0000000.
>
> ranges = <0x02000000 0 0x00000000 --> Child/port's start address
> 0x02000000 0 0xe0000000 --> Parent bus address
> 0 0x20000000
>
> 0x01000000 0 0x00000000
> 0x01000000 0 0x00000000
> 0 0x00100000>;
because the bridge is transparent.
- k
More information about the Linuxppc-dev
mailing list