In order to remove the arch-specific ifdefs around initr_trap, introduce arch_initr_trap weak initcall. Implementations for ppc/m68k/mips have been moved to arch/<arch>/lib/traps.c
Default implementation is a nop stub. Signed-off-by: Ovidiu Panait <ovidiu.pan...@windriver.com> Reviewed-by: Simon Glass <s...@chromium.org> --- v3 updates: - none v2 updates: - add reviewed-by tag arch/m68k/lib/traps.c | 7 +++++++ arch/mips/lib/traps.c | 7 +++++++ arch/powerpc/lib/Makefile | 1 + arch/powerpc/lib/traps.c | 17 +++++++++++++++++ common/board_r.c | 16 ++-------------- include/init.h | 9 +++++++++ 6 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 arch/powerpc/lib/traps.c diff --git a/arch/m68k/lib/traps.c b/arch/m68k/lib/traps.c index c49141f376..a9b055cedf 100644 --- a/arch/m68k/lib/traps.c +++ b/arch/m68k/lib/traps.c @@ -59,3 +59,10 @@ void trap_init(ulong value) { setvbr(value); /* set vector base register to new table */ } + +int arch_initr_trap(void) +{ + trap_init(CONFIG_SYS_SDRAM_BASE); + + return 0; +} diff --git a/arch/mips/lib/traps.c b/arch/mips/lib/traps.c index df8b63f383..4f2efd6115 100644 --- a/arch/mips/lib/traps.c +++ b/arch/mips/lib/traps.c @@ -131,3 +131,10 @@ void trap_restore(void) clear_c0_status(ST0_BEV); execution_hazard_barrier(); } + +int arch_initr_trap(void) +{ + trap_init(CONFIG_SYS_SDRAM_BASE); + + return 0; +} diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index f61809ab05..2782740bf5 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -40,6 +40,7 @@ obj-y += interrupts.o obj-$(CONFIG_CMD_KGDB) += kgdb.o obj-y += stack.o obj-y += time.o +obj-y += traps.o endif # not minimal ifdef CONFIG_SPL_BUILD diff --git a/arch/powerpc/lib/traps.c b/arch/powerpc/lib/traps.c new file mode 100644 index 0000000000..80822a006a --- /dev/null +++ b/arch/powerpc/lib/traps.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, w...@denx.de. + */ + +#include <common.h> +#include <init.h> + +DECLARE_GLOBAL_DATA_PTR; + +int arch_initr_trap(void) +{ + trap_init(gd->relocaddr); + + return 0; +} diff --git a/common/board_r.c b/common/board_r.c index c083eb0a03..9fa4d4b42e 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -182,20 +182,10 @@ static int initr_reloc_global_data(void) return 0; } -#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) -static int initr_trap(void) +__weak int arch_initr_trap(void) { - /* - * Setup trap handlers - */ -#if defined(CONFIG_PPC) - trap_init(gd->relocaddr); -#else - trap_init(CONFIG_SYS_SDRAM_BASE); -#endif return 0; } -#endif #ifdef CONFIG_ADDR_MAP static int initr_addr_map(void) @@ -669,9 +659,7 @@ static init_fnc_t init_sequence_r[] = { #ifdef CONFIG_NEEDS_MANUAL_RELOC initr_manual_reloc_cmdtable, #endif -#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) - initr_trap, -#endif + arch_initr_trap, #ifdef CONFIG_ADDR_MAP initr_addr_map, #endif diff --git a/include/init.h b/include/init.h index dded1cb871..bc1854f0e5 100644 --- a/include/init.h +++ b/include/init.h @@ -300,6 +300,15 @@ int board_early_init_r(void); /* TODO(s...@chromium.org): Drop this when DM_PCI migration is completed */ void pci_init_board(void); +/** + * arch_initr_trap() - Init traps + * + * Arch specific routine for initializing traps. It is called during the + * generic board init sequence, after relocation. + * + * Return: 0 if OK + */ +int arch_initr_trap(void); void trap_init(unsigned long reloc_addr); /** -- 2.17.1