[U-Boot] [PATCH v3] dm: core: Enable optional use of fdt_translate_address()
Stephen Warren
swarren at wwwdotorg.org
Wed Sep 30 18:13:20 CEST 2015
On 09/29/2015 11:00 PM, Stefan Roese wrote:
> The current "simple" address translation simple_bus_translate() is not
> working on some platforms (e.g. MVEBU). As here more complex "ranges"
> properties are used in many nodes (multiple tuples etc). This patch
> enables the optional use of the common fdt_translate_address() function
> which handles this translation correctly.
This change makes sense to me, but one comment:
> diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
> +config OF_TRANSLATE
> + bool "Translate addresses using fdt_translate_address"
> + depends on DM && OF_CONTROL
> + default y
So this is on by default, which I think is correct since applying this
technique is required to parse DT correctly. However, ...
> diff --git a/drivers/core/device.c b/drivers/core/device.c
> + if (CONFIG_IS_ENABLED(OF_TRANSLATE)) {
> + /*
> + * Use the full-fledged translate function for complex
> + * bus setups.
> + */
> + return fdt_translate_address((void *)gd->fdt_blob,
> + dev->of_offset, reg);
fdt_translate_address() is a simple wrapper around
__of_translate_address(), and that function calls fdt_parent_offset()
which is "slow" per Simon. Surely this patch will receive the same
objection as when I added a (single) call to fdt_parent_offset() into
the DT address parsing routine (and this patch is worse, since it adds a
call to fdt_parent_offset() for each level of DT sub-nodes).
More information about the U-Boot
mailing list