mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
common/board_f: introduce arch_setup_dest_addr()
In order to move ppc-specific code out of setup_dest_addr(), provide an arch-specific variant arch_setup_dest_addr(), that can be used by architecture code to fix up the initial reloc address. It is called at the end of setup_dest_addr() initcall and the default implementation is a nop stub. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Ovidiu Panait <ovpanait@gmail.com>
This commit is contained in:
parent
85e68ae001
commit
d63fc99435
3 changed files with 37 additions and 14 deletions
|
@ -13,6 +13,7 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <init.h>
|
#include <init.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/mp.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -30,3 +31,19 @@ int arch_reserve_stacks(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int arch_setup_dest_addr(void)
|
||||||
|
{
|
||||||
|
#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
|
||||||
|
/*
|
||||||
|
* We need to make sure the location we intend to put secondary core
|
||||||
|
* boot code is reserved and not used by any part of u-boot
|
||||||
|
*/
|
||||||
|
if (gd->relocaddr > determine_mp_bootpg(NULL)) {
|
||||||
|
gd->relocaddr = determine_mp_bootpg(NULL);
|
||||||
|
debug("Reserving MP boot page to %08lx\n", gd->relocaddr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@
|
||||||
#include <video.h>
|
#include <video.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#if defined(CONFIG_MP) && defined(CONFIG_PPC)
|
|
||||||
#include <asm/mp.h>
|
|
||||||
#endif
|
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
@ -343,6 +340,11 @@ __weak phys_size_t board_get_usable_ram_top(phys_size_t total_size)
|
||||||
return gd->ram_top;
|
return gd->ram_top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__weak int arch_setup_dest_addr(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int setup_dest_addr(void)
|
static int setup_dest_addr(void)
|
||||||
{
|
{
|
||||||
debug("Monitor len: %08lX\n", gd->mon_len);
|
debug("Monitor len: %08lX\n", gd->mon_len);
|
||||||
|
@ -370,17 +372,8 @@ static int setup_dest_addr(void)
|
||||||
gd->ram_top = board_get_usable_ram_top(gd->mon_len);
|
gd->ram_top = board_get_usable_ram_top(gd->mon_len);
|
||||||
gd->relocaddr = gd->ram_top;
|
gd->relocaddr = gd->ram_top;
|
||||||
debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
|
debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
|
||||||
#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
|
|
||||||
/*
|
return arch_setup_dest_addr();
|
||||||
* We need to make sure the location we intend to put secondary core
|
|
||||||
* boot code is reserved and not used by any part of u-boot
|
|
||||||
*/
|
|
||||||
if (gd->relocaddr > determine_mp_bootpg(NULL)) {
|
|
||||||
gd->relocaddr = determine_mp_bootpg(NULL);
|
|
||||||
debug("Reserving MP boot page to %08lx\n", gd->relocaddr);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PRAM
|
#ifdef CONFIG_PRAM
|
||||||
|
|
|
@ -103,6 +103,19 @@ phys_size_t get_effective_memsize(void);
|
||||||
|
|
||||||
int testdram(void);
|
int testdram(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* arch_setup_dest_addr() - Fix up initial reloc address
|
||||||
|
*
|
||||||
|
* This is called in generic board init sequence in common/board_f.c at the end
|
||||||
|
* of the setup_dest_addr() initcall. Each architecture could provide this
|
||||||
|
* function to make adjustments to the initial reloc address.
|
||||||
|
*
|
||||||
|
* If an implementation is not provided, it will just be a nop stub.
|
||||||
|
*
|
||||||
|
* Return: 0 if OK
|
||||||
|
*/
|
||||||
|
int arch_setup_dest_addr(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* arch_reserve_stacks() - Reserve all necessary stacks
|
* arch_reserve_stacks() - Reserve all necessary stacks
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue