From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Warren Date: Wed, 30 Sep 2015 10:13:20 -0600 Subject: [U-Boot] [PATCH v3] dm: core: Enable optional use of fdt_translate_address() In-Reply-To: <1443589243-9521-1-git-send-email-sr@denx.de> References: <1441174944-8878-1-git-send-email-sr@denx.de> <1443589243-9521-1-git-send-email-sr@denx.de> Message-ID: <560C0A20.8030909@wwwdotorg.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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).