aboutsummaryrefslogtreecommitdiff
path: root/drivers/core
diff options
context:
space:
mode:
authorLokesh Vutla2017-02-13 09:21:22 +0530
committerSimon Glass2017-03-22 07:27:19 -0600
commitb0d9512ab0f1b2c3f56346bf14b0978d45477ad2 (patch)
tree7c9e6bf58d4024c9d9761662c8306b70a48a4cf2 /drivers/core
parent5877d8f398de26617be6f1f57bc30c49e9f90ebb (diff)
dm: core: Fix Handling of global_data moving in SPL
commit 2f11cd9121658 ("dm: core: Handle global_data moving in SPL") handles relocation of GD in SPL if spl_init() is called before board_init_r(). So, uclass_root.next need not be initialized always and accessing uclass_root.next->prev gives an abort. Update the uclass_root only if it is available. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Diffstat (limited to 'drivers/core')
-rw-r--r--drivers/core/root.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/core/root.c b/drivers/core/root.c
index 93ab5682968..33cfde6a5c3 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -44,8 +44,10 @@ struct udevice *dm_root(void)
void dm_fixup_for_gd_move(struct global_data *new_gd)
{
/* The sentinel node has moved, so update things that point to it */
- new_gd->uclass_root.next->prev = &new_gd->uclass_root;
- new_gd->uclass_root.prev->next = &new_gd->uclass_root;
+ if (gd->dm_root) {
+ new_gd->uclass_root.next->prev = &new_gd->uclass_root;
+ new_gd->uclass_root.prev->next = &new_gd->uclass_root;
+ }
}
fdt_addr_t dm_get_translation_offset(void)