• M
    core: ofnode: Fix translation for #size-cells == 0 · e8d52918
    Mario Six 提交于
    Commit 286ede65 ("drivers: core: Add translation in live tree case") made
    dev_get_addr always use proper bus translations for addresses read from
    the device tree. But this leads to problems with certain busses, e.g.
    I2C busses, which run into an error during translation, and hence stop
    working.
    
    It turns out that of_translate_address() and fdt_translate_address()
    stop the address translation with an error when they're asked to
    translate addresses for busses where #size-cells == 0 (comment from
    drivers/core/of_addr.c):
    
     * Note: We consider that crossing any level with #size-cells == 0 to mean
     * that translation is impossible (that is we are not dealing with a value
     * that can be mapped to a cpu physical address). This is not really specified
     * that way, but this is traditionally the way IBM at least do things
    
    To fix this case, we check in both the live-tree and non-live tree-case,
    whether the bus of the device whose address is about to be translated
    has size-cell size zero. If this is the case, we just read the address
    as a plain integer and return it, and only apply bus translations if the
    size-cell size if greater than zero.
    Signed-off-by: NMario Six <mario.six@gdsys.cc>
    Signed-off-by: NMartin Fuzzey <mfuzzey@parkeon.com>
    Reported-by: NMartin Fuzzey <mfuzzey@parkeon.com>
    Fixes: 286ede65 ("drivers: core: Add translation in live tree case")
    Reviewed-by: NSimon Glass <sjg@chromium.org>
    e8d52918
test.dts 9.4 KB