[U-Boot] [PATCH] core: ofnode: Fix translation for #size-cells == 0

Simon Glass sjg at chromium.org
Tue Mar 6 17:51:00 UTC 2018


Hi Mario,

On 5 March 2018 at 23:54, Mario Six <mario.six at gdsys.cc> wrote:
> Commit 286ede6 ("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: Mario Six <mario.six at gdsys.cc>
> Signed-off-by: Martin Fuzzey <mfuzzey at parkeon.com>
> Reported-by: Martin Fuzzey <mfuzzey at parkeon.com>
> Fixes: 286ede6 ("drivers: core: Add translation in live tree case")
> ---
>  drivers/core/fdtaddr.c | 17 +++++++++++------
>  drivers/core/ofnode.c  |  5 ++++-
>  2 files changed, 15 insertions(+), 7 deletions(-)

This looks right to me, but I really think we need to create a simple
test for it. Perhaps call this function in test/dm/test-fdt.c for a
few cases? You can add whatever you like to test.dts.

Regards,
Simon


More information about the U-Boot mailing list