diff mbox

[U-Boot] dm: add manual relocation for devices

Message ID 1463825149-16380-1-git-send-email-angelo@sysam.it
State Accepted
Commit 5aeedebc33849efbbee2d422a4c7da8194e1b670
Delegated to: Simon Glass
Headers show

Commit Message

Angelo Dureghello May 21, 2016, 10:05 a.m. UTC
Some architectures as m68k still need to use CONFIG_NEEDS_MANUAL_RELOC,
and are not still using the device tree.

Signed-off-by: Angelo Dureghello <angelo@sysam.it>
---
 drivers/core/root.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

Comments

Simon Glass June 8, 2016, 2:42 a.m. UTC | #1
On 21 May 2016 at 03:05, Angelo Dureghello <angelo@sysam.it> wrote:
> Some architectures as m68k still need to use CONFIG_NEEDS_MANUAL_RELOC,
> and are not still using the device tree.
>
> Signed-off-by: Angelo Dureghello <angelo@sysam.it>
> ---
>  drivers/core/root.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)

Acked-by: Simon Glass <sjg@chromium.org>
Simon Glass June 9, 2016, 7:20 p.m. UTC | #2
On 7 June 2016 at 20:42, Simon Glass <sjg@chromium.org> wrote:
> On 21 May 2016 at 03:05, Angelo Dureghello <angelo@sysam.it> wrote:
>> Some architectures as m68k still need to use CONFIG_NEEDS_MANUAL_RELOC,
>> and are not still using the device tree.
>>
>> Signed-off-by: Angelo Dureghello <angelo@sysam.it>
>> ---
>>  drivers/core/root.c | 15 +++++++++++++++
>>  1 file changed, 15 insertions(+)
>
> Acked-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/drivers/core/root.c b/drivers/core/root.c
index 13c2713..95886ad 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -122,6 +122,20 @@  void fix_uclass(void)
 			entry->ops += gd->reloc_off;
 	}
 }
+
+void fix_devices(void)
+{
+	struct driver_info *dev =
+		ll_entry_start(struct driver_info, driver_info);
+	const int n_ents = ll_entry_count(struct driver_info, driver_info);
+	struct driver_info *entry;
+
+	for (entry = dev; entry != dev + n_ents; entry++) {
+		if (entry->platdata)
+			entry->platdata += gd->reloc_off;
+	}
+}
+
 #endif
 
 int dm_init(void)
@@ -137,6 +151,7 @@  int dm_init(void)
 #if defined(CONFIG_NEEDS_MANUAL_RELOC)
 	fix_drivers();
 	fix_uclass();
+	fix_devices();
 #endif
 
 	ret = device_bind_by_name(NULL, false, &root_info, &DM_ROOT_NON_CONST);