lkml.org 
[lkml]   [2014]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 068/129] Revert "of/address: Handle #address-cells > 2 specially"
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Rob Herring <robh@kernel.org>

    commit 13fcca8f25f4e9ce7f55da9cd353bb743236e212 upstream.

    This reverts commit e38c0a1fbc5803cbacdaac0557c70ac8ca5152e7.

    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.

    Signed-off-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/of/address.c | 8 --------
    1 file changed, 8 deletions(-)

    --- a/drivers/of/address.c
    +++ b/drivers/of/address.c
    @@ -69,14 +69,6 @@ static u64 of_bus_default_map(__be32 *ad
    (unsigned long long)cp, (unsigned long long)s,
    (unsigned long long)da);

    - /*
    - * If the number of address cells is larger than 2 we assume the
    - * mapping doesn't specify a physical address. Rather, the address
    - * specifies an identifier that must match exactly.
    - */
    - if (na > 2 && memcmp(range, addr, na * 4) != 0)
    - return OF_BAD_ADDR;
    -
    if (da < cp || da >= (cp + s))
    return OF_BAD_ADDR;
    return da - cp;



    \
     
     \ /
      Last update: 2014-01-07 06:01    [W:4.214 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site