public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] dm: core: Enable optional use of fdt_translate_address()
@ 2015-09-02  6:22 Stefan Roese
  2015-09-04  3:56 ` Simon Glass
                   ` (2 more replies)
  0 siblings, 3 replies; 30+ messages in thread
From: Stefan Roese @ 2015-09-02  6:22 UTC (permalink / raw)
  To: u-boot

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.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
---
 drivers/core/Kconfig  | 30 ++++++++++++++++++++++++++++++
 drivers/core/device.c |  8 +++++++-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
index 41f4e69..15681df 100644
--- a/drivers/core/Kconfig
+++ b/drivers/core/Kconfig
@@ -120,4 +120,34 @@ config SPL_SIMPLE_BUS
 	  Supports the 'simple-bus' driver, which is used on some systems
 	  in SPL.
 
+config OF_TRANSLATE
+	bool "Translate addresses using fdt_translate_address"
+	depends on DM && OF_CONTROL
+	default y
+	help
+	  If this option is enabled, the reg property will be translated
+	  using the fdt_translate_address() function. This is necessary
+	  on some platforms (e.g. MVEBU) using complex "ranges"
+	  properties in many nodes. As this translation is not handled
+	  correctly in the default simple_bus_translate() function.
+
+	  If this option is not enabled, simple_bus_translate() will be
+	  used for the address translation. This function is faster and
+	  smaller in size than fdt_translate_address().
+
+config SPL_OF_TRANSLATE
+	bool "Translate addresses using fdt_translate_address"
+	depends on SPL_DM && SPL_OF_CONTROL
+	default n
+	help
+	  If this option is enabled, the reg property will be translated
+	  using the fdt_translate_address() function. This is necessary
+	  on some platforms (e.g. MVEBU) using complex "ranges"
+	  properties in many nodes. As this translation is not handled
+	  correctly in the default simple_bus_translate() function.
+
+	  If this option is not enabled, simple_bus_translate() will be
+	  used for the address translation. This function is faster and
+	  smaller in size than fdt_translate_address().
+
 endmenu
diff --git a/drivers/core/device.c b/drivers/core/device.c
index a6cd936..0cf73cf 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -11,6 +11,7 @@
 
 #include <common.h>
 #include <fdtdec.h>
+#include <fdt_support.h>
 #include <malloc.h>
 #include <dm/device.h>
 #include <dm/device-internal.h>
@@ -580,7 +581,12 @@ fdt_addr_t dev_get_addr(struct udevice *dev)
 	fdt_addr_t addr;
 
 	addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
-	if (CONFIG_IS_ENABLED(SIMPLE_BUS) && addr != FDT_ADDR_T_NONE) {
+	if (CONFIG_IS_ENABLED(OF_TRANSLATE)) {
+		const fdt32_t *reg = fdt_getprop(gd->fdt_blob, dev->of_offset,
+						 "reg", NULL);
+		addr = fdt_translate_address((void *)gd->fdt_blob,
+					     dev->of_offset, reg);
+	} else if (CONFIG_IS_ENABLED(SIMPLE_BUS) && addr != FDT_ADDR_T_NONE) {
 		if (device_get_uclass_id(dev->parent) == UCLASS_SIMPLE_BUS)
 			addr = simple_bus_translate(dev->parent, addr);
 	}
-- 
2.5.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2015-12-04 15:01 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-02  6:22 [U-Boot] [PATCH] dm: core: Enable optional use of fdt_translate_address() Stefan Roese
2015-09-04  3:56 ` Simon Glass
2015-09-04  5:11 ` [U-Boot] [PATCH v2] " Stefan Roese
2015-09-09 18:07   ` [U-Boot] [PATCH] " Simon Glass
2015-09-10  5:54     ` Stefan Roese
2015-09-11  0:42       ` Simon Glass
2015-09-11  5:41         ` Stefan Roese
2015-09-11 17:07     ` Stephen Warren
2015-09-14  5:25       ` Stefan Roese
2015-09-21 18:06         ` Stephen Warren
2015-10-03 12:50           ` Simon Glass
2015-10-03 19:17             ` Stephen Warren
2015-10-04  1:02               ` Simon Glass
2015-10-04  7:35                 ` Stefan Roese
2015-10-04 11:38                   ` Thomas Chou
2015-10-05  1:22                 ` Stephen Warren
2015-10-06 14:17                   ` Simon Glass
2015-09-15  7:31   ` [U-Boot] [PATCH v2] " Thomas Chou
2015-09-30  5:00 ` [U-Boot] [PATCH v3] " Stefan Roese
2015-09-30 16:13   ` Stephen Warren
2015-10-01  6:59     ` Stefan Roese
2015-10-03 12:53       ` Simon Glass
2015-10-18 23:16   ` Simon Glass
2015-12-03 13:34     ` Bin Meng
2015-12-03 14:12       ` Stefan Roese
2015-12-03 16:59         ` Stephen Warren
2015-12-04  5:31         ` Bin Meng
2015-12-04  6:17           ` Bin Meng
2015-12-04  7:52             ` Stefan Roese
2015-12-04 15:01               ` Bin Meng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox