From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mario Six Date: Mon, 18 Dec 2017 09:34:02 +0100 Subject: [U-Boot] [PATCH v3] drivers: core: Add translation in live tree case Message-ID: <20171218083402.7712-1-mario.six@gdsys.cc> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de The function dev_read_addr calls ofnode_get_addr_index in the live tree case, which does not apply bus translations to the address read from the device tree. This results in illegal addresses on boards that rely on bus translations being applied. Fix this situation by applying bus translations in the live tree case as well. Signed-off-by: Mario Six --- v2 -> v3: * Fixed endianness issue on little-endian platforms v1 -> v2: * Added IS_ENABLED(CONFIG_OF_TRANSLATE) case distinction drivers/core/ofnode.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 0030ab962e..09f0aeab4f 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -200,13 +200,22 @@ fdt_addr_t ofnode_get_addr_index(ofnode node, int index) uint flags; u64 size; int na; + __be32 addr; prop_val = of_get_address(ofnode_to_np(node), index, &size, &flags); if (!prop_val) return FDT_ADDR_T_NONE; na = of_n_addr_cells(ofnode_to_np(node)); - return of_read_number(prop_val, na); + addr = of_read_number(prop_val, na); + + if (IS_ENABLED(CONFIG_OF_TRANSLATE)) { + u64 paddr = of_translate_address(ofnode_to_np(node), &addr); + + return be32_to_cpu((fdt_addr_t)paddr); + } else { + return addr; + } } else { return fdt_get_base_address(gd->fdt_blob, ofnode_to_offset(node)); -- 2.13.6