• Rob Herring's avatar
    Revert "of/address: Handle #address-cells > 2 specially" · 13fcca8f
    Rob Herring authored
    This reverts commit e38c0a1f.
    
    Nikita Yushchenko reports:
    While trying to make freescale p2020ds and  mpc8572ds boards working
    with mainline kernel, I faced that commit e38c0a1f (Handle
    
    Both these boards have uli1575 chip.
    Corresponding part in device tree is something like
    
                    uli1575@0 {
                            reg = <0x0 0x0 0x0 0x0 0x0>;
                            #size-cells = <2>;
                            #address-cells = <3>;
                            ranges = <0x2000000 0x0 0x80000000
                                      0x2000000 0x0 0x80000000
                                      0x0 0x20000000
    
                                      0x1000000 0x0 0x0
                                      0x1000000 0x0 0x0
                                      0x0 0x10000>;
                            isa@1e {
    ...
    
    I.e. it has #address-cells = <3>
    
    With commit e38c0a1f reverted, devices under uli1575 are registered
    correctly, e.g. for rtc
    
    OF: ** translation for device /pcie@ffe09000/pcie@0/uli1575@0/isa@1e/rtc@70 **
    OF: bus is isa (na=2, ns=1) on /pcie@ffe09000/pcie@0/uli1575@0/isa@1e
    OF: translating address: 00000001 00000070
    OF: parent bus is default (na=3, ns=2) on /pcie@ffe09000/pcie@0/uli1575@0
    OF: walking ranges...
    OF: ISA map, cp=0, s=1000, da=70
    OF: parent translation for: 01000000 00000000 00000000
    OF: with offset: 70
    OF: one level translation: 00000000 00000000 00000070
    OF: parent bus is pci (na=3, ns=2) on /pcie@ffe09000/pcie@0
    OF: walking ranges...
    OF: default map, cp=a0000000, s=20000000, da=70
    OF: default map, cp=0, s=10000, da=70
    OF: parent translation for: 01000000 00000000 00000000
    OF: with offset: 70
    OF: one level translation: 01000000 00000000 00000070
    OF: parent bus is pci (na=3, ns=2) on /pcie@ffe09000
    OF: walking ranges...
    OF: PCI map, cp=0, s=10000, da=70
    OF: parent translation for: 01000000 00000000 00000000
    OF: with offset: 70
    OF: one level translation: 01000000 00000000 00000070
    OF: parent bus is default (na=2, ns=2) on /
    OF: walking ranges...
    OF: PCI map, cp=0, s=10000, da=70
    OF: parent translation for: 00000000 ffc10000
    OF: with offset: 70
    OF: one level translation: 00000000 ffc10070
    OF: reached root node
    
    With commit e38c0a1f in place, address translation fails:
    
    OF: ** translation for device /pcie@ffe09000/pcie@0/uli1575@0/isa@1e/rtc@70 **
    OF: bus is isa (na=2, ns=1) on /pcie@ffe09000/pcie@0/uli1575@0/isa@1e
    OF: translating address: 00000001 00000070
    OF: parent bus is default (na=3, ns=2) on /pcie@ffe09000/pcie@0/uli1575@0
    OF: walking ranges...
    OF: ISA map, cp=0, s=1000, da=70
    OF: parent translation for: 01000000 00000000 00000000
    OF: with offset: 70
    OF: one level translation: 00000000 00000000 00000070
    OF: parent bus is pci (na=3, ns=2) on /pcie@ffe09000/pcie@0
    OF: walking ranges...
    OF: default map, cp=a0000000, s=20000000, da=70
    OF: default map, cp=0, s=10000, da=70
    OF: not found !
    
    Thierry Reding confirmed this commit was not needed after all:
    "We ended up merging a different address representation for Tegra PCIe
    and I've confirmed that reverting this commit doesn't cause any obvious
    regressions. I think all other drivers in drivers/pci/host ended up
    copying what we did on Tegra, so I wouldn't expect any other breakage
    either."
    
    There doesn't appear to be a simple way to support both behaviours, so
    reverting this as nothing should be depending on the new behaviour.
    
    Cc: stable@vger.kernel.org # v3.7+
    Signed-off-by: default avatarRob Herring <robh@kernel.org>
    13fcca8f
address.c 17.5 KB