dm: core: Add option to configure an offset for the address translation
Some platforms need to ability to configure an offset to the standard addresses extracted from the device-tree. This patch allows this by adding a function to DM to configure this offset (if needed). Signed-off-by: Stefan Roese <sr@denx.de> Acked-by: Simon Glass <sjg@chromium.org> Cc: Simon Glass <sjg@chromium.org> Fixed space before tab: Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Simon Glass
parent
9b20519887
commit
66eaea6cd1
@@ -597,22 +597,31 @@ fdt_addr_t dev_get_addr(struct udevice *dev)
|
||||
* Use the full-fledged translate function for complex
|
||||
* bus setups.
|
||||
*/
|
||||
return fdt_translate_address((void *)gd->fdt_blob,
|
||||
addr = fdt_translate_address((void *)gd->fdt_blob,
|
||||
dev->of_offset, reg);
|
||||
} else {
|
||||
/*
|
||||
* Use the "simple" translate function for less complex
|
||||
* bus setups.
|
||||
*/
|
||||
addr = fdtdec_get_addr_size_auto_parent(gd->fdt_blob,
|
||||
dev->parent->of_offset,
|
||||
dev->of_offset, "reg",
|
||||
0, NULL);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Use the "simple" translate function for less complex
|
||||
* bus setups.
|
||||
* Some platforms need a special address translation. Those
|
||||
* platforms (e.g. mvebu in SPL) can configure a translation
|
||||
* offset in the DM by calling dm_set_translation_offset() that
|
||||
* will get added to all addresses returned by dev_get_addr().
|
||||
*/
|
||||
addr = fdtdec_get_addr_size_auto_parent(gd->fdt_blob,
|
||||
dev->parent->of_offset,
|
||||
dev->of_offset, "reg",
|
||||
0, NULL);
|
||||
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);
|
||||
}
|
||||
addr += dm_get_translation_offset();
|
||||
|
||||
return addr;
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user