From 0daf361ea799fba0af5a232036d0f06cea85ad24 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sat, 21 Jun 2014 12:47:49 +0200 Subject: [PATCH 42/44] MIPS: BCM63XX: allow building support for more than one board type Use the arguments passed to the kernel to detect being booted with CFE as the indicator for bcm963xx board support, allowing the non presence of CFE_EPTSEAL to assume a different board type. Signed-off-by: Jonas Gorski --- arch/mips/bcm63xx/boards/Kconfig | 7 +++---- arch/mips/bcm63xx/boards/board_bcm963xx.c | 2 +- arch/mips/bcm63xx/boards/board_common.c | 13 +++++++++++++ arch/mips/bcm63xx/boards/board_common.h | 6 ++++++ 4 files changed, 23 insertions(+), 5 deletions(-) --- a/arch/mips/bcm63xx/boards/Kconfig +++ b/arch/mips/bcm63xx/boards/Kconfig @@ -1,11 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 -choice - prompt "Board support" +menu "Board support" depends on BCM63XX - default BOARD_BCM963XX config BOARD_BCM963XX bool "Generic Broadcom 963xx boards" select SSB + default y -endchoice +endmenu --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c @@ -683,7 +683,7 @@ static const struct board_info __initcon /* * early init callback, read nvram data from flash and checksum it */ -void __init board_prom_init(void) +void __init board_bcm963xx_init(void) { unsigned int i; u8 *boot_addr, *cfe; --- a/arch/mips/bcm63xx/boards/board_common.c +++ b/arch/mips/bcm63xx/boards/board_common.c @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include #include @@ -30,6 +32,8 @@ #include #include +#include "board_common.h" + #define PFX "board: " static struct board_info board; @@ -80,6 +84,15 @@ const char *board_get_name(void) return board.name; } +void __init board_prom_init(void) +{ + /* detect bootloader */ + if (fw_arg3 == CFE_EPTSEAL) + board_bcm963xx_init(); + else + panic("unsupported bootloader detected"); +} + static int (*board_get_mac_address)(u8 mac[ETH_ALEN]); /* --- a/arch/mips/bcm63xx/boards/board_common.h +++ b/arch/mips/bcm63xx/boards/board_common.h @@ -6,4 +6,10 @@ void board_early_setup(const struct board_info *board, int (*get_mac_address)(u8 mac[ETH_ALEN])); +#if defined(CONFIG_BOARD_BCM963XX) +void board_bcm963xx_init(void); +#else +static inline void board_bcm963xx_init(void) { } +#endif + #endif /* __BOARD_COMMON_H */