From 4e9c34a37bd3442b286ba55441bfe22c1ac5b65f Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sun, 9 Mar 2014 04:08:06 +0100 Subject: [PATCH 41/44] MIPS: BCM63XX: pass a mac addresss allocator to board setup Pass a mac address allocator to board setup code to allow board implementations to work with third party bootloaders not using nvram for configuration storage. Signed-off-by: Jonas Gorski --- arch/mips/bcm63xx/boards/board_bcm963xx.c | 3 ++- arch/mips/bcm63xx/boards/board_common.c | 16 ++++++++++------ arch/mips/bcm63xx/boards/board_common.h | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c @@ -743,7 +743,8 @@ void __init board_prom_init(void) if (strncmp(board_name, bcm963xx_boards[i]->name, 16)) continue; /* copy, board desc array is marked initdata */ - board_early_setup(bcm963xx_boards[i]); + board_early_setup(bcm963xx_boards[i], + bcm63xx_nvram_get_mac_address); break; } --- a/arch/mips/bcm63xx/boards/board_common.c +++ b/arch/mips/bcm63xx/boards/board_common.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -82,15 +81,20 @@ const char *board_get_name(void) return board.name; } +static int (*board_get_mac_address)(u8 mac[ETH_ALEN]); + /* * setup board for device registration */ -void __init board_early_setup(const struct board_info *target) +void __init board_early_setup(const struct board_info *target, + int (*get_mac_address)(u8 mac[ETH_ALEN])) { u32 val; memcpy(&board, target, sizeof(board)); + board_get_mac_address = get_mac_address; + /* setup pin multiplexing depending on board enabled device, * this has to be done this early since PCI init is done * inside arch_initcall */ @@ -163,15 +167,15 @@ int __init board_register_devices(void) bcm63xx_pcmcia_register(); if (board.has_enet0 && - !bcm63xx_nvram_get_mac_address(board.enet0.mac_addr)) + !board_get_mac_address(board.enet0.mac_addr)) bcm63xx_enet_register(0, &board.enet0); if (board.has_enet1 && - !bcm63xx_nvram_get_mac_address(board.enet1.mac_addr)) + !board_get_mac_address(board.enet1.mac_addr)) bcm63xx_enet_register(1, &board.enet1); if (board.has_enetsw && - !bcm63xx_nvram_get_mac_address(board.enetsw.mac_addr)) + !board_get_mac_address(board.enetsw.mac_addr)) bcm63xx_enetsw_register(&board.enetsw); if (board.has_usbd) @@ -190,7 +194,7 @@ int __init board_register_devices(void) * do this after registering enet devices */ #ifdef CONFIG_SSB_PCIHOST - if (!bcm63xx_nvram_get_mac_address(bcm63xx_sprom.il0mac)) { + if (!board_get_mac_address(bcm63xx_sprom.il0mac)) { memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN); memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN); if (ssb_arch_register_fallback_sprom( --- a/arch/mips/bcm63xx/boards/board_common.h +++ b/arch/mips/bcm63xx/boards/board_common.h @@ -3,6 +3,7 @@ #include -void board_early_setup(const struct board_info *board); +void board_early_setup(const struct board_info *board, + int (*get_mac_address)(u8 mac[ETH_ALEN])); #endif /* __BOARD_COMMON_H */