Commit bccf09e0 authored by Vladimir Zapolskiy's avatar Vladimir Zapolskiy Committed by Tom Rini

sh: add shared relocate_code() function and call board_init_r()

Commits b61e90e6 ("sh: Drop the arch-specific board init") and
f41e6088 ("sh: Fix build errors for generic board") left code and
data relocation done in start.S, however further actual U-boot
configuration is not started anymore. Practically SH boards with the
code relocated into the expected position by start.S still can be
booted, so the change adds this option and provides an option how to
relocate code for board_init_r() execution.
Signed-off-by: default avatarVladimir Zapolskiy <vz@mleia.com>
Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
parent cdbb0cf8
......@@ -83,9 +83,3 @@ int dcache_status(void)
{
return 0;
}
void relocate_code(ulong start_addr_sp, gd_t *new_gd, ulong relocaaddr)
{
/* TODO(sh maintainer): Implement this */
while (1);
}
......@@ -66,9 +66,3 @@ int dcache_status(void)
{
return 0;
}
void relocate_code(ulong start_addr_sp, gd_t *new_gd, ulong relocaaddr)
{
/* TODO(sh maintainer): Implement this */
while (1);
}
......@@ -41,9 +41,3 @@ int cpu_eth_init(bd_t *bis)
#endif
return 0;
}
void relocate_code(ulong start_addr_sp, gd_t *new_gd, ulong relocaaddr)
{
/* TODO(sh maintainer): Implement this */
while (1);
}
......@@ -15,3 +15,21 @@ int dram_init(void)
return 0;
}
void relocate_code(ulong start_addr_sp, gd_t *new_gd, ulong relocaddr)
{
void (*reloc_board_init_r)(gd_t *gd, ulong dest) = board_init_r;
if (new_gd->reloc_off) {
memcpy((void *)new_gd->relocaddr,
(void *)(new_gd->relocaddr - new_gd->reloc_off),
new_gd->mon_len);
reloc_board_init_r += new_gd->reloc_off;
}
__asm__ __volatile__("mov.l %0, r15\n" : : "m" (new_gd->start_addr_sp));
while (1)
reloc_board_init_r(new_gd, 0x0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment