On Mar 23, 2011, at 10:20 PM, Kushwaha Prabhakar-B32579 wrote:

> 
> Hi all,
> 
> I have query about usage of range field at pcie@0 under PCIe controller. 
> Please find snap shot from mpc8536_36.dts..
> 
>       pci3: pcie@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@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@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@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@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
_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to