common: board_r: Drop arch-specific ifdefs around initr_trap
authorOvidiu Panait <ovidiu.panait@windriver.com>
Sat, 28 Nov 2020 08:43:18 +0000 (10:43 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 15 Jan 2021 19:36:12 +0000 (14:36 -0500)
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.panait@windriver.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
arch/m68k/lib/traps.c
arch/mips/lib/traps.c
arch/powerpc/lib/Makefile
arch/powerpc/lib/traps.c [new file with mode: 0644]
common/board_r.c
include/init.h

index c49141f376d3b46ce155e77fef5deabdc1b117da..0c2c1a99655277d94da18eb2abe64a37ae22a7d9 100644 (file)
@@ -40,7 +40,7 @@ void exc_handler(struct pt_regs *fp) {
        for(;;);
 }
 
-void trap_init(ulong value) {
+static void trap_init(ulong value) {
        unsigned long *vec = (ulong *)value;
        int i;
 
@@ -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;
+}
index df8b63f383b8feb80cfc8ebf6a2bf02cdd0ecc03..540ea48e32f7b07bbee096bda2638fc82626cad9 100644 (file)
@@ -99,7 +99,7 @@ static void set_handler(unsigned long offset, void *addr, unsigned long size)
        flush_cache(ebase + offset, size);
 }
 
-void trap_init(ulong reloc_addr)
+static void trap_init(ulong reloc_addr)
 {
        unsigned long ebase = gd->irq_sp;
 
@@ -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;
+}
index f61809ab057e7b820472df0c311ca617919c269a..2782740bf5b33608d9be77e49dd2e7e5bb92a54b 100644 (file)
@@ -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 (file)
index 0000000..288e377
--- /dev/null
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ */
+
+#include <common.h>
+#include <init.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void trap_init(unsigned long reloc_addr);
+
+int arch_initr_trap(void)
+{
+       trap_init(gd->relocaddr);
+
+       return 0;
+}
index c083eb0a0318f1d8490fd92e4bcecfd4af143a8a..9fa4d4b42e5ea0c3307ab26aa06fc056823d561a 100644 (file)
@@ -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
index dded1cb871caa7e7610308df79ab9e71fa49c5bd..980be2799369cf23381176d1d5947199ea5c5bf3 100644 (file)
@@ -300,7 +300,15 @@ int board_early_init_r(void);
 /* TODO(sjg@chromium.org): Drop this when DM_PCI migration is completed */
 void pci_init_board(void);
 
-void trap_init(unsigned long reloc_addr);
+/**
+ * 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);
 
 /**
  * main_loop() - Enter the main loop of U-Boot