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.

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>;


--Prabhakar

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to