dm: add manual relocation for devices
authorAngelo Dureghello <angelo@sysam.it>
Sat, 21 May 2016 10:05:49 +0000 (12:05 +0200)
committerSimon Glass <sjg@chromium.org>
Sun, 19 Jun 2016 23:05:55 +0000 (17:05 -0600)
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>
Acked-by: Simon Glass <sjg@chromium.org>
drivers/core/root.c

index 13c2713e615391e7ce2fb4194718d6b83f2fdabb..95886add2381fc864a75f976b3fe4e8f444b7bb6 100644 (file)
@@ -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);