brcm63xx: 3.10: backport multi-board support

There have been no reported regressions, so backport it to 3.10.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>

SVN-Revision: 41422
v19.07.3_mercusys_ac12_duma
Jonas Gorski 10 years ago
parent 44ef9f7789
commit dc230d9b0f

@ -31,7 +31,7 @@ CONFIG_BCM63XX_OHCI=y
CONFIG_BCM63XX_PHY=y
CONFIG_BCM63XX_WDT=y
CONFIG_BOARD_BCM963XX=y
# CONFIG_BOARD_LIVEBOX is not set
CONFIG_BOARD_LIVEBOX=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_CEVT_R4K=y
CONFIG_CLONE_BACKWARDS=y

@ -0,0 +1,493 @@
From 5a50cb0d53344a2429831b00925d6183d4d332e1 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sun, 9 Mar 2014 03:54:05 +0100
Subject: [PATCH 40/44] MIPS: BCM63XX: move device registration code into its
own file
Move device registration code into its own file to allow sharing it
between board implementations.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/boards/Makefile | 1 +
arch/mips/bcm63xx/boards/board_bcm963xx.c | 188 +-------------------------
arch/mips/bcm63xx/boards/board_common.c | 215 ++++++++++++++++++++++++++++++
arch/mips/bcm63xx/boards/board_common.h | 8 ++
4 files changed, 223 insertions(+), 183 deletions(-)
create mode 100644 arch/mips/bcm63xx/boards/board_common.c
create mode 100644 arch/mips/bcm63xx/boards/board_common.h
--- a/arch/mips/bcm63xx/boards/Makefile
+++ b/arch/mips/bcm63xx/boards/Makefile
@@ -1 +1,2 @@
+obj-y += board_common.o
obj-$(CONFIG_BOARD_BCM963XX) += board_bcm963xx.o
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -10,35 +10,22 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/string.h>
-#include <linux/platform_device.h>
-#include <linux/ssb/ssb.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
-#include <bcm63xx_dev_uart.h>
#include <bcm63xx_regs.h>
#include <bcm63xx_io.h>
#include <bcm63xx_nvram.h>
-#include <bcm63xx_dev_pci.h>
-#include <bcm63xx_dev_enet.h>
-#include <bcm63xx_dev_dsp.h>
-#include <bcm63xx_dev_flash.h>
-#include <bcm63xx_dev_hsspi.h>
-#include <bcm63xx_dev_pcmcia.h>
-#include <bcm63xx_dev_spi.h>
-#include <bcm63xx_dev_usb_ehci.h>
-#include <bcm63xx_dev_usb_ohci.h>
-#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
+#include "board_common.h"
+
#include <uapi/linux/bcm933xx_hcs.h>
#define PFX "board_bcm963xx: "
#define HCS_OFFSET_128K 0x20000
-static struct board_info board;
-
/*
* known 3368 boards
*/
@@ -711,52 +698,6 @@ static const struct board_info __initcon
};
/*
- * Register a sane SPROMv2 to make the on-board
- * bcm4318 WLAN work
- */
-#ifdef CONFIG_SSB_PCIHOST
-static struct ssb_sprom bcm63xx_sprom = {
- .revision = 0x02,
- .board_rev = 0x17,
- .country_code = 0x0,
- .ant_available_bg = 0x3,
- .pa0b0 = 0x15ae,
- .pa0b1 = 0xfa85,
- .pa0b2 = 0xfe8d,
- .pa1b0 = 0xffff,
- .pa1b1 = 0xffff,
- .pa1b2 = 0xffff,
- .gpio0 = 0xff,
- .gpio1 = 0xff,
- .gpio2 = 0xff,
- .gpio3 = 0xff,
- .maxpwr_bg = 0x004c,
- .itssi_bg = 0x00,
- .boardflags_lo = 0x2848,
- .boardflags_hi = 0x0000,
-};
-
-int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
-{
- if (bus->bustype == SSB_BUSTYPE_PCI) {
- memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
- return 0;
- } else {
- printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n");
- return -EINVAL;
- }
-}
-#endif
-
-/*
- * return board name for /proc/cpuinfo
- */
-const char *board_get_name(void)
-{
- return board.name;
-}
-
-/*
* early init callback, read nvram data from flash and checksum it
*/
void __init board_prom_init(void)
@@ -801,141 +742,16 @@ void __init board_prom_init(void)
if (strncmp(board_name, bcm963xx_boards[i]->name, 16))
continue;
/* copy, board desc array is marked initdata */
- memcpy(&board, bcm963xx_boards[i], sizeof(board));
+ board_early_setup(bcm963xx_boards[i]);
break;
}
- /* bail out if board is not found, will complain later */
- if (!board.name[0]) {
+ /* warn if board is not found, will complain later */
+ if (i == ARRAY_SIZE(bcm963xx_boards)) {
char name[17];
memcpy(name, board_name, 16);
name[16] = 0;
printk(KERN_ERR PFX "unknown bcm963xx board: %s\n",
name);
- return;
- }
-
- /* setup pin multiplexing depending on board enabled device,
- * this has to be done this early since PCI init is done
- * inside arch_initcall */
- val = 0;
-
-#ifdef CONFIG_PCI
- if (board.has_pci) {
- bcm63xx_pci_enabled = 1;
- if (BCMCPU_IS_6348())
- val |= GPIO_MODE_6348_G2_PCI;
- }
-#endif
-
- if (board.has_pccard) {
- if (BCMCPU_IS_6348())
- val |= GPIO_MODE_6348_G1_MII_PCCARD;
- }
-
- if (board.has_enet0 && !board.enet0.use_internal_phy) {
- if (BCMCPU_IS_6348())
- val |= GPIO_MODE_6348_G3_EXT_MII |
- GPIO_MODE_6348_G0_EXT_MII;
- }
-
- if (board.has_enet1 && !board.enet1.use_internal_phy) {
- if (BCMCPU_IS_6348())
- val |= GPIO_MODE_6348_G3_EXT_MII |
- GPIO_MODE_6348_G0_EXT_MII;
- }
-
- bcm_gpio_writel(val, GPIO_MODE_REG);
-}
-
-/*
- * second stage init callback, good time to panic if we couldn't
- * identify on which board we're running since early printk is working
- */
-void __init board_setup(void)
-{
- if (!board.name[0])
- panic("unable to detect bcm963xx board");
- printk(KERN_INFO PFX "board name: %s\n", board.name);
-
- /* make sure we're running on expected cpu */
- if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
- panic("unexpected CPU for bcm963xx board");
-}
-
-static struct gpio_led_platform_data bcm63xx_led_data;
-
-static struct platform_device bcm63xx_gpio_leds = {
- .name = "leds-gpio",
- .id = 0,
- .dev.platform_data = &bcm63xx_led_data,
-};
-
-/*
- * third stage init callback, register all board devices.
- */
-int __init board_register_devices(void)
-{
- if (board.has_uart0)
- bcm63xx_uart_register(0);
-
- if (board.has_uart1)
- bcm63xx_uart_register(1);
-
- if (board.has_pccard)
- bcm63xx_pcmcia_register();
-
- if (board.has_enet0 &&
- !bcm63xx_nvram_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))
- bcm63xx_enet_register(1, &board.enet1);
-
- if (board.has_enetsw &&
- !bcm63xx_nvram_get_mac_address(board.enetsw.mac_addr))
- bcm63xx_enetsw_register(&board.enetsw);
-
- if (board.has_usbd)
- bcm63xx_usbd_register(&board.usbd);
-
- if (board.has_ehci0)
- bcm63xx_ehci_register();
-
- if (board.has_ohci0)
- bcm63xx_ohci_register();
-
- if (board.has_dsp)
- bcm63xx_dsp_register(&board.dsp);
-
- /* Generate MAC address for WLAN and register our SPROM,
- * do this after registering enet devices
- */
-#ifdef CONFIG_SSB_PCIHOST
- if (!bcm63xx_nvram_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(
- &bcm63xx_get_fallback_sprom) < 0)
- pr_err(PFX "failed to register fallback SPROM\n");
}
-#endif
-
- bcm63xx_spi_register();
-
- bcm63xx_hsspi_register();
-
- bcm63xx_flash_register();
-
- bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds);
- bcm63xx_led_data.leds = board.leds;
-
- platform_device_register(&bcm63xx_gpio_leds);
-
- if (board.ephy_reset_gpio && board.ephy_reset_gpio_flags)
- gpio_request_one(board.ephy_reset_gpio,
- board.ephy_reset_gpio_flags, "ephy-reset");
-
- return 0;
}
--- /dev/null
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -0,0 +1,217 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
+ * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/platform_device.h>
+#include <linux/ssb/ssb.h>
+#include <asm/addrspace.h>
+#include <bcm63xx_board.h>
+#include <bcm63xx_cpu.h>
+#include <bcm63xx_dev_uart.h>
+#include <bcm63xx_regs.h>
+#include <bcm63xx_io.h>
+#include <bcm63xx_nvram.h>
+#include <bcm63xx_dev_pci.h>
+#include <bcm63xx_dev_enet.h>
+#include <bcm63xx_dev_dsp.h>
+#include <bcm63xx_dev_flash.h>
+#include <bcm63xx_dev_hsspi.h>
+#include <bcm63xx_dev_pcmcia.h>
+#include <bcm63xx_dev_spi.h>
+#include <bcm63xx_dev_usb_ehci.h>
+#include <bcm63xx_dev_usb_ohci.h>
+#include <bcm63xx_dev_usb_usbd.h>
+#include <board_bcm963xx.h>
+
+#define PFX "board: "
+
+static struct board_info board;
+
+/*
+ * Register a sane SPROMv2 to make the on-board
+ * bcm4318 WLAN work
+ */
+#ifdef CONFIG_SSB_PCIHOST
+static struct ssb_sprom bcm63xx_sprom = {
+ .revision = 0x02,
+ .board_rev = 0x17,
+ .country_code = 0x0,
+ .ant_available_bg = 0x3,
+ .pa0b0 = 0x15ae,
+ .pa0b1 = 0xfa85,
+ .pa0b2 = 0xfe8d,
+ .pa1b0 = 0xffff,
+ .pa1b1 = 0xffff,
+ .pa1b2 = 0xffff,
+ .gpio0 = 0xff,
+ .gpio1 = 0xff,
+ .gpio2 = 0xff,
+ .gpio3 = 0xff,
+ .maxpwr_bg = 0x004c,
+ .itssi_bg = 0x00,
+ .boardflags_lo = 0x2848,
+ .boardflags_hi = 0x0000,
+};
+
+int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
+{
+ if (bus->bustype == SSB_BUSTYPE_PCI) {
+ memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
+ return 0;
+ } else {
+ printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n");
+ return -EINVAL;
+ }
+}
+#endif
+
+/*
+ * return board name for /proc/cpuinfo
+ */
+const char *board_get_name(void)
+{
+ return board.name;
+}
+
+/*
+ * setup board for device registration
+ */
+void __init board_early_setup(const struct board_info *target)
+{
+ u32 val;
+
+ memcpy(&board, target, sizeof(board));
+
+ /* setup pin multiplexing depending on board enabled device,
+ * this has to be done this early since PCI init is done
+ * inside arch_initcall */
+ val = 0;
+
+#ifdef CONFIG_PCI
+ if (board.has_pci) {
+ bcm63xx_pci_enabled = 1;
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G2_PCI;
+ }
+#endif
+
+ if (board.has_pccard) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G1_MII_PCCARD;
+ }
+
+ if (board.has_enet0 && !board.enet0.use_internal_phy) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G3_EXT_MII |
+ GPIO_MODE_6348_G0_EXT_MII;
+ }
+
+ if (board.has_enet1 && !board.enet1.use_internal_phy) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G3_EXT_MII |
+ GPIO_MODE_6348_G0_EXT_MII;
+ }
+
+ bcm_gpio_writel(val, GPIO_MODE_REG);
+}
+
+
+/*
+ * second stage init callback, good time to panic if we couldn't
+ * identify on which board we're running since early printk is working
+ */
+void __init board_setup(void)
+{
+ if (!board.name[0])
+ panic("unable to detect bcm963xx board");
+ printk(KERN_INFO PFX "board name: %s\n", board.name);
+
+ /* make sure we're running on expected cpu */
+ if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
+ panic("unexpected CPU for bcm963xx board");
+}
+
+static struct gpio_led_platform_data bcm63xx_led_data;
+
+static struct platform_device bcm63xx_gpio_leds = {
+ .name = "leds-gpio",
+ .id = 0,
+ .dev.platform_data = &bcm63xx_led_data,
+};
+
+/*
+ * third stage init callback, register all board devices.
+ */
+int __init board_register_devices(void)
+{
+ if (board.has_uart0)
+ bcm63xx_uart_register(0);
+
+ if (board.has_uart1)
+ bcm63xx_uart_register(1);
+
+ if (board.has_pccard)
+ bcm63xx_pcmcia_register();
+
+ if (board.has_enet0 &&
+ !bcm63xx_nvram_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))
+ bcm63xx_enet_register(1, &board.enet1);
+
+ if (board.has_enetsw &&
+ !bcm63xx_nvram_get_mac_address(board.enetsw.mac_addr))
+ bcm63xx_enetsw_register(&board.enetsw);
+
+ if (board.has_usbd)
+ bcm63xx_usbd_register(&board.usbd);
+
+ if (board.has_ehci0)
+ bcm63xx_ehci_register();
+
+ if (board.has_ohci0)
+ bcm63xx_ohci_register();
+
+ if (board.has_dsp)
+ bcm63xx_dsp_register(&board.dsp);
+
+ /* Generate MAC address for WLAN and register our SPROM,
+ * do this after registering enet devices
+ */
+#ifdef CONFIG_SSB_PCIHOST
+ if (!bcm63xx_nvram_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(
+ &bcm63xx_get_fallback_sprom) < 0)
+ pr_err(PFX "failed to register fallback SPROM\n");
+ }
+#endif
+
+ bcm63xx_spi_register();
+
+ bcm63xx_hsspi_register();
+
+ bcm63xx_flash_register();
+
+ bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds);
+ bcm63xx_led_data.leds = board.leds;
+
+ platform_device_register(&bcm63xx_gpio_leds);
+
+ if (board.ephy_reset_gpio && board.ephy_reset_gpio_flags)
+ gpio_request_one(board.ephy_reset_gpio,
+ board.ephy_reset_gpio_flags, "ephy-reset");
+
+ return 0;
+}
--- /dev/null
+++ b/arch/mips/bcm63xx/boards/board_common.h
@@ -0,0 +1,8 @@
+#ifndef __BOARD_COMMON_H
+#define __BOARD_COMMON_H
+
+#include <board_bcm963xx.h>
+
+void board_early_setup(const struct board_info *board);
+
+#endif /* __BOARD_COMMON_H */

@ -0,0 +1,100 @@
From 4e9c34a37bd3442b286ba55441bfe22c1ac5b65f Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
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 <jogo@openwrt.org>
---
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
@@ -742,7 +742,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 <bcm63xx_dev_uart.h>
#include <bcm63xx_regs.h>
#include <bcm63xx_io.h>
-#include <bcm63xx_nvram.h>
#include <bcm63xx_dev_pci.h>
#include <bcm63xx_dev_enet.h>
#include <bcm63xx_dev_dsp.h>
@@ -81,15 +80,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 */
@@ -162,15 +166,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)
@@ -189,7 +193,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 <board_bcm963xx.h>
-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 */

@ -1,25 +1,25 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -12,6 +12,8 @@
@@ -10,6 +10,8 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -37,6 +39,9 @@
@@ -26,6 +28,9 @@
#define HCS_OFFSET_128K 0x20000
+#define BCM963XX_KEYS_POLL_INTERVAL 20
+#define BCM963XX_KEYS_DEBOUNCE_INTERVAL (BCM963XX_KEYS_POLL_INTERVAL * 3)
+
static struct board_info board;
/*
@@ -380,6 +385,16 @@ static struct board_info __initdata boar
* known 3368 boards
*/
@@ -367,6 +372,16 @@ static struct board_info __initdata boar
.active_low = 1,
},
},
@ -36,7 +36,7 @@
};
static struct board_info __initdata board_96348gw = {
@@ -438,6 +453,16 @@ static struct board_info __initdata boar
@@ -425,6 +440,16 @@ static struct board_info __initdata boar
.active_low = 1,
},
},
@ -53,7 +53,26 @@
};
static struct board_info __initdata board_FAST2404 = {
@@ -871,11 +896,23 @@ static struct platform_device bcm63xx_gp
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -12,6 +12,7 @@
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
+#include <linux/gpio_keys.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -32,6 +33,8 @@
#define PFX "board: "
+#define BCM963XX_KEYS_POLL_INTERVAL 20
+
static struct board_info board;
/*
@@ -151,11 +154,23 @@ static struct platform_device bcm63xx_gp
.dev.platform_data = &bcm63xx_led_data,
};
@ -77,7 +96,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -937,5 +974,16 @@ int __init board_register_devices(void)
@@ -217,5 +232,16 @@ int __init board_register_devices(void)
gpio_request_one(board.ephy_reset_gpio,
board.ephy_reset_gpio_flags, "ephy-reset");

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -912,6 +912,7 @@ static struct platform_device bcm63xx_gp
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -170,6 +170,7 @@ static struct platform_device bcm63xx_gp
int __init board_register_devices(void)
{
int button_count = 0;
@ -8,7 +8,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -965,10 +966,16 @@ int __init board_register_devices(void)
@@ -223,10 +224,16 @@ int __init board_register_devices(void)
bcm63xx_flash_register();

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -964,6 +964,9 @@ int __init board_register_devices(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -222,6 +222,9 @@ int __init board_register_devices(void)
bcm63xx_hsspi_register();

@ -1,14 +1,14 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -14,6 +14,7 @@
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -13,6 +13,7 @@
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
+#include <linux/spi/spi.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -967,6 +968,9 @@ int __init board_register_devices(void)
@@ -225,6 +226,9 @@ int __init board_register_devices(void)
if (board.num_devs)
platform_add_devices(board.devs, board.num_devs);

@ -1,26 +1,26 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -35,6 +35,7 @@
#include <board_bcm963xx.h>
@@ -23,6 +23,7 @@
#include "board_common.h"
#include <uapi/linux/bcm933xx_hcs.h>
+#include <uapi/linux/bcm963xx_tag.h>
#define PFX "board_bcm963xx: "
@@ -43,6 +44,9 @@
#define BCM963XX_KEYS_POLL_INTERVAL 20
#define BCM963XX_KEYS_DEBOUNCE_INTERVAL (BCM963XX_KEYS_POLL_INTERVAL * 3)
@@ -339,6 +340,9 @@ static struct board_info __initdata boar
.force_duplex_full = 1,
},
+#define CFE_OFFSET_64K 0x10000
+#define CFE_OFFSET_128K 0x20000
+
static struct board_info board;
/*
@@ -782,6 +786,30 @@ const char *board_get_name(void)
return board.name;
}
.has_ohci0 = 1,
.has_pccard = 1,
@@ -722,6 +726,30 @@ static const struct board_info __initcon
#endif
};
+static void __init boardid_fixup(u8 *boot_addr)
+{
@ -49,7 +49,7 @@
/*
* early init callback, read nvram data from flash and checksum it
*/
@@ -820,6 +848,10 @@ void __init board_prom_init(void)
@@ -760,6 +788,10 @@ void __init board_prom_init(void)
hcs = (struct bcm_hcs *)boot_addr;
board_name = hcs->filename;
} else {

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -148,28 +148,28 @@ static struct board_info __initdata boar
@@ -131,28 +131,28 @@ static struct board_info __initdata boar
.leds = {
{
@ -34,7 +34,7 @@
.gpio = 1,
.active_low = 1,
}
@@ -189,28 +189,28 @@ static struct board_info __initdata boar
@@ -172,28 +172,28 @@ static struct board_info __initdata boar
.leds = {
{
@ -68,7 +68,7 @@
.gpio = 1,
.active_low = 1,
},
@@ -249,29 +249,29 @@ static struct board_info __initdata boar
@@ -232,29 +232,29 @@ static struct board_info __initdata boar
.leds = {
{
@ -103,7 +103,7 @@
.gpio = 1,
.active_low = 1,
},
@@ -310,28 +310,28 @@ static struct board_info __initdata boar
@@ -293,28 +293,28 @@ static struct board_info __initdata boar
.leds = {
{
@ -137,7 +137,7 @@
.gpio = 1,
.active_low = 1,
},
@@ -364,28 +364,28 @@ static struct board_info __initdata boar
@@ -350,28 +350,28 @@ static struct board_info __initdata boar
.leds = {
{
@ -171,7 +171,7 @@
.gpio = 1,
.active_low = 1,
},
@@ -432,28 +432,28 @@ static struct board_info __initdata boar
@@ -418,28 +418,28 @@ static struct board_info __initdata boar
.leds = {
{
@ -205,7 +205,7 @@
.gpio = 1,
.active_low = 1,
},
@@ -585,27 +585,27 @@ static struct board_info __initdata boar
@@ -571,27 +571,27 @@ static struct board_info __initdata boar
.leds = {
{
@ -238,7 +238,7 @@
.gpio = 5,
},
},
@@ -637,22 +637,22 @@ static struct board_info __initdata boar
@@ -623,22 +623,22 @@ static struct board_info __initdata boar
.leds = {
{

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -835,10 +835,20 @@ void __init board_prom_init(void)
@@ -775,10 +775,20 @@ void __init board_prom_init(void)
/* dump cfe version */
cfe = boot_addr + BCM963XX_CFE_VERSION_OFFSET;

@ -35,7 +35,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
source "arch/mips/bcm63xx/boards/Kconfig"
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -825,7 +825,7 @@ void __init board_prom_init(void)
@@ -765,7 +765,7 @@ void __init board_prom_init(void)
/* read base address of boot chip select (0)
* 6328/6362 do not have MPI but boot from a fixed address
*/

@ -35,7 +35,7 @@ Subject: [PATCH 51/53] MIPS: BCM63XX: add support for BCM6318
select SYS_HAS_CPU_BMIPS4350
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -825,7 +825,7 @@ void __init board_prom_init(void)
@@ -765,7 +765,7 @@ void __init board_prom_init(void)
/* read base address of boot chip select (0)
* 6328/6362 do not have MPI but boot from a fixed address
*/

@ -93,9 +93,9 @@
/*************************************************************************
* _REG relative to RSET_USBD
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -914,6 +914,15 @@ void __init board_prom_init(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -129,6 +129,15 @@ void __init board_early_setup(const stru
}
bcm_gpio_writel(val, GPIO_MODE_REG);
@ -110,7 +110,7 @@
+#endif
}
/*
--- a/arch/mips/bcm63xx/Kconfig
+++ b/arch/mips/bcm63xx/Kconfig
@@ -22,6 +22,8 @@ config BCM63XX_CPU_6318

@ -28,9 +28,9 @@
+int bcm63xx_ohci_register(unsigned int num_ports);
#endif /* BCM63XX_DEV_USB_OHCI_H_ */
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -965,6 +965,7 @@ int __init board_register_devices(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -181,6 +181,7 @@ int __init board_register_devices(void)
{
int button_count = 0;
int led_count = 0;
@ -38,8 +38,8 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -987,14 +988,21 @@ int __init board_register_devices(void)
!bcm63xx_nvram_get_mac_address(board.enetsw.mac_addr))
@@ -203,14 +204,21 @@ int __init board_register_devices(void)
!board_get_mac_address(board.enetsw.mac_addr))
bcm63xx_enetsw_register(&board.enetsw);
+ if ((board.has_ohci0 || board.has_ehci0)) {

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -634,6 +634,7 @@ static struct board_info __initdata boar
@@ -620,6 +620,7 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_pccard = 1,
.has_ehci0 = 1,

@ -0,0 +1,95 @@
From 0daf361ea799fba0af5a232036d0f06cea85ad24 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
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 <jogo@openwrt.org>
---
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 @@
-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
help
-endchoice
+endmenu
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -754,7 +754,7 @@ static void __init boardid_fixup(u8 *boo
/*
* 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
@@ -15,6 +15,8 @@
#include <linux/gpio_keys.h>
#include <linux/spi/spi.h>
#include <asm/addrspace.h>
+#include <asm/bootinfo.h>
+#include <asm/fw/cfe/cfe_api.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
#include <bcm63xx_dev_uart.h>
@@ -32,6 +34,8 @@
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
+#include "board_common.h"
+
#define PFX "board: "
#define BCM963XX_KEYS_POLL_INTERVAL 20
@@ -84,6 +88,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 */

@ -0,0 +1,61 @@
From 8a30097a899b975709f728666d5ad20c8b832d21 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sun, 9 Mar 2014 04:28:14 +0100
Subject: [PATCH 43/44] MIPS: BCM63XX: allow board implementations to force
flash address
Allow board implementations to force the physmap address.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/dev-flash.c | 19 ++++++++++++++-----
.../mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h | 2 ++
2 files changed, 16 insertions(+), 5 deletions(-)
--- a/arch/mips/bcm63xx/dev-flash.c
+++ b/arch/mips/bcm63xx/dev-flash.c
@@ -57,6 +57,12 @@ static struct platform_device mtd_dev =
},
};
+void __init bcm63xx_flash_force_phys_base_address(u32 start, u32 end)
+{
+ mtd_resources[0].start = start;
+ mtd_resources[0].end = end;
+}
+
static int __init bcm63xx_detect_flash_type(void)
{
u32 val;
@@ -158,12 +164,15 @@ int __init bcm63xx_flash_register(void)
switch (flash_type) {
case BCM63XX_FLASH_TYPE_PARALLEL:
- /* read base address of boot chip select (0) */
- val = bcm_mpi_readl(MPI_CSBASE_REG(0));
- val &= MPI_CSBASE_BASE_MASK;
- mtd_resources[0].start = val;
- mtd_resources[0].end = 0x1FFFFFFF;
+ if (!mtd_resources[0].start) {
+ /* read base address of boot chip select (0) */
+ val = bcm_mpi_readl(MPI_CSBASE_REG(0));
+ val &= MPI_CSBASE_BASE_MASK;
+
+ mtd_resources[0].start = val;
+ mtd_resources[0].end = 0x1FFFFFFF;
+ }
return platform_device_register(&mtd_dev);
case BCM63XX_FLASH_TYPE_SERIAL:
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
@@ -9,6 +9,8 @@ enum {
void bcm63xx_flash_detect(void);
+void bcm63xx_flash_force_phys_base_address(u32 start, u32 end);
+
int __init bcm63xx_flash_register(void);
#endif /* __BCM63XX_FLASH_H */

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -912,6 +912,8 @@ void __init board_prom_init(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -139,6 +139,8 @@ void __init board_early_setup(const stru
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G3_EXT_MII |
GPIO_MODE_6348_G0_EXT_MII;

@ -24,9 +24,9 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
#include <bcm63xx_regs.h>
#include <bcm63xx_io.h>
@@ -57,6 +60,21 @@ static struct platform_device mtd_dev =
},
};
@@ -63,6 +66,21 @@ void __init bcm63xx_flash_force_phys_bas
mtd_resources[0].end = end;
}
+static struct flash_platform_data bcm63xx_flash_data = {
+ .part_probe_types = bcm63xx_part_types,
@ -46,7 +46,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
static int __init bcm63xx_detect_flash_type(void)
{
u32 val;
@@ -64,9 +82,15 @@ static int __init bcm63xx_detect_flash_t
@@ -70,9 +88,15 @@ static int __init bcm63xx_detect_flash_t
switch (bcm63xx_get_cpu_id()) {
case BCM6318_CPU_ID:
/* only support serial flash */
@ -62,7 +62,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
return BCM63XX_FLASH_TYPE_SERIAL;
else
@@ -85,12 +109,20 @@ static int __init bcm63xx_detect_flash_t
@@ -91,12 +115,20 @@ static int __init bcm63xx_detect_flash_t
return BCM63XX_FLASH_TYPE_SERIAL;
case BCM6362_CPU_ID:
val = bcm_misc_readl(MISC_STRAPBUS_6362_REG);
@ -83,7 +83,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
switch (val & STRAPBUS_6368_BOOT_SEL_MASK) {
case STRAPBUS_6368_BOOT_SEL_NAND:
return BCM63XX_FLASH_TYPE_NAND;
@@ -101,6 +133,11 @@ static int __init bcm63xx_detect_flash_t
@@ -107,6 +139,11 @@ static int __init bcm63xx_detect_flash_t
}
case BCM63268_CPU_ID:
val = bcm_misc_readl(MISC_STRAPBUS_63268_REG);
@ -95,7 +95,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
if (val & STRAPBUS_63268_BOOT_SEL_SERIAL)
return BCM63XX_FLASH_TYPE_SERIAL;
else
@@ -167,8 +204,15 @@ int __init bcm63xx_flash_register(void)
@@ -176,8 +213,15 @@ int __init bcm63xx_flash_register(void)
return platform_device_register(&mtd_dev);
case BCM63XX_FLASH_TYPE_SERIAL:

@ -8,17 +8,17 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h | 10 ++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -33,6 +33,7 @@
#include <bcm63xx_dev_usb_ohci.h>
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
+#include <pci_ath9k_fixup.h>
#include <uapi/linux/bcm933xx_hcs.h>
#include <uapi/linux/bcm963xx_tag.h>
@@ -969,6 +970,7 @@ int __init board_register_devices(void)
#include "board_common.h"
@@ -197,6 +198,7 @@ int __init board_register_devices(void)
int button_count = 0;
int led_count = 0;
int usbh_ports = 0;
@ -26,17 +26,17 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -1014,7 +1016,8 @@ int __init board_register_devices(void)
@@ -242,7 +244,8 @@ 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)) {
+ if (!board.has_caldata &&
+ !bcm63xx_nvram_get_mac_address(bcm63xx_sprom.il0mac)) {
+ !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(
@@ -1061,5 +1064,9 @@ int __init board_register_devices(void)
@@ -289,5 +292,9 @@ int __init board_register_devices(void)
platform_device_register(&bcm63xx_gpio_keys_device);
}

@ -11,7 +11,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
--- a/arch/mips/bcm63xx/dev-flash.c
+++ b/arch/mips/bcm63xx/dev-flash.c
@@ -222,3 +222,8 @@ int __init bcm63xx_flash_register(void)
@@ -231,3 +231,8 @@ int __init bcm63xx_flash_register(void)
return -ENODEV;
}
}
@ -22,7 +22,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+}
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
@@ -11,4 +11,6 @@ void bcm63xx_flash_detect(void);
@@ -13,4 +13,6 @@ void bcm63xx_flash_force_phys_base_addre
int __init bcm63xx_flash_register(void);

@ -4,14 +4,14 @@ Date: Thu, 3 May 2012 14:55:26 +0200
Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
---
arch/mips/bcm63xx/boards/board_bcm963xx.c | 2 +-
arch/mips/bcm63xx/boards/board_common.c | 2 +-
arch/mips/bcm63xx/dev-flash.c | 9 ++++++++-
arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h | 4 +++-
3 files changed, 12 insertions(+), 3 deletions(-)
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1036,7 +1036,7 @@ int __init board_register_devices(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -264,7 +264,7 @@ int __init board_register_devices(void)
if (board.num_spis)
spi_register_board_info(board.spis, board.num_spis);
@ -38,7 +38,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
};
static struct resource mtd_resources[] = {
@@ -62,6 +65,7 @@ static struct platform_device mtd_dev =
@@ -68,6 +71,7 @@ void __init bcm63xx_flash_force_phys_bas
static struct flash_platform_data bcm63xx_flash_data = {
.part_probe_types = bcm63xx_part_types,
@ -46,7 +46,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
};
static struct spi_board_info bcm63xx_spi_flash_info[] = {
@@ -189,9 +193,13 @@ void __init bcm63xx_flash_detect(void)
@@ -195,9 +199,13 @@ void __init bcm63xx_flash_detect(void)
}
}
@ -72,9 +72,9 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
enum {
BCM63XX_FLASH_TYPE_PARALLEL,
BCM63XX_FLASH_TYPE_SERIAL,
@@ -9,7 +11,7 @@ enum {
@@ -11,7 +13,7 @@ void bcm63xx_flash_detect(void);
void bcm63xx_flash_detect(void);
void bcm63xx_flash_force_phys_base_address(u32 start, u32 end);
-int __init bcm63xx_flash_register(void);
+int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata);

@ -37,9 +37,9 @@
if (!bcm63xx_read_eeprom(ath9k_fixups[ath9k_num_fixups].pdata.eeprom_data, offset))
return;
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1066,7 +1066,8 @@ int __init board_register_devices(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -294,7 +294,8 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1067,7 +1067,7 @@ int __init board_register_devices(void)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -295,7 +295,7 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)
pci_enable_ath9k_fixup(board.caldata[i].slot, board.caldata[i].caldata_offset,

@ -26,17 +26,17 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-y += boards/
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -34,6 +34,7 @@
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
#include <pci_ath9k_fixup.h>
+#include <pci_rt2x00_fixup.h>
#include <uapi/linux/bcm933xx_hcs.h>
#include <uapi/linux/bcm963xx_tag.h>
@@ -1065,9 +1066,19 @@ int __init board_register_devices(void)
#include "board_common.h"
@@ -293,9 +294,19 @@ int __init board_register_devices(void)
}
/* register any fixups */
@ -61,7 +61,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
}
--- a/arch/mips/bcm63xx/dev-flash.c
+++ b/arch/mips/bcm63xx/dev-flash.c
@@ -193,7 +193,7 @@ void __init bcm63xx_flash_detect(void)
@@ -199,7 +199,7 @@ void __init bcm63xx_flash_detect(void)
}
}
@ -147,9 +147,9 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
+
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
@@ -11,7 +11,7 @@ enum {
@@ -13,7 +13,7 @@ void bcm63xx_flash_detect(void);
void bcm63xx_flash_detect(void);
void bcm63xx_flash_force_phys_base_address(u32 start, u32 end);
-int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata);
+int __init bcm63xx_flash_register(int num_caldata, struct bcm63xx_caldata *caldata);

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -555,6 +555,56 @@ static struct board_info __initdata boar
@@ -539,6 +539,56 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
@ -57,7 +57,7 @@
#endif
/*
@@ -733,6 +783,7 @@ static const struct board_info __initcon
@@ -717,6 +767,7 @@ static const struct board_info __initcon
&board_DV201AMR,
&board_96348gw_a,
&board_rta1025w_16,

@ -1,15 +1,19 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -15,6 +15,8 @@
@@ -12,6 +12,12 @@
#include <linux/string.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/spi/spi.h>
+#include <linux/platform_device.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/spi_gpio.h>
+#if 0 /* FIXME: 3.14 removed non-DT support */
+#include <linux/spi/74x164.h>
+#endif
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -49,6 +51,12 @@
@@ -343,6 +349,12 @@ static struct board_info __initdata boar
#define CFE_OFFSET_64K 0x10000
#define CFE_OFFSET_128K 0x20000
@ -19,10 +23,10 @@
+#define NB4_SPI_GPIO_CLK 6
+#define NB4_74HC64_GPIO(X) (NB4_74X164_GPIO_BASE + (X))
+
static struct board_info board;
/*
@@ -755,6 +763,601 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_pccard = 1,
@@ -739,6 +751,605 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
@ -47,11 +51,14 @@
+ &nb4_spi_gpio,
+};
+
+#if 0 /* FIXME: 3.14 removed non-DT support */
+const struct gen_74x164_chip_platform_data nb4_74x164_platform_data = {
+ .base = NB4_74X164_GPIO_BASE
+};
+#endif
+
+static struct spi_board_info nb4_spi_devices[] = {
+#if 0 /* FIXME: 3.14 removed non-DT support */
+ {
+ .modalias = "74x164",
+ .max_speed_hz = 781000,
@ -60,6 +67,7 @@
+ .mode = SPI_MODE_0,
+ .platform_data = &nb4_74x164_platform_data
+ }
+#endif
+};
+
+static struct board_info __initdata board_nb4_ser_r0 = {
@ -624,7 +632,7 @@
#endif
/*
@@ -791,6 +1394,11 @@ static const struct board_info __initcon
@@ -775,6 +1386,11 @@ static const struct board_info __initcon
&board_96358vw2,
&board_AGPFS0,
&board_DWVS0,
@ -636,7 +644,7 @@
#endif
};
@@ -845,6 +1453,16 @@ static void __init boardid_fixup(u8 *boo
@@ -783,6 +1399,16 @@ static void __init boardid_fixup(u8 *boo
struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
char *board_name = (char *)bcm63xx_nvram_get_name();

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -226,6 +226,40 @@ static struct board_info __initdata boar
@@ -205,6 +205,40 @@ static struct board_info __initdata boar
},
},
};
@ -41,7 +41,7 @@
#endif
/*
@@ -1373,6 +1407,7 @@ static const struct board_info __initcon
@@ -1365,6 +1399,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6338
&board_96338gw,
&board_96338w,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -754,6 +754,98 @@ static struct board_info __initdata boar
@@ -742,6 +742,98 @@ static struct board_info __initdata boar
},
};
@ -99,7 +99,7 @@
static struct board_info __initdata board_AGPFS0 = {
.name = "AGPF-S0",
.expected_cpu_id = 0x6358,
@@ -1428,6 +1520,7 @@ static const struct board_info __initcon
@@ -1420,6 +1512,7 @@ static const struct board_info __initcon
&board_96358vw,
&board_96358vw2,
&board_AGPFS0,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -890,6 +890,61 @@ static struct board_info __initdata boar
@@ -878,6 +878,61 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
};
@ -62,7 +62,7 @@
struct spi_gpio_platform_data nb4_spi_gpio_data = {
.sck = NB4_SPI_GPIO_CLK,
.mosi = NB4_SPI_GPIO_MOSI,
@@ -1522,6 +1577,7 @@ static const struct board_info __initcon
@@ -1514,6 +1569,7 @@ static const struct board_info __initcon
&board_AGPFS0,
&board_CPVA642,
&board_DWVS0,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -647,6 +647,67 @@ static struct board_info __initdata boar
@@ -635,6 +635,67 @@ static struct board_info __initdata boar
},
},
};
@ -68,7 +68,7 @@
#endif
/*
@@ -1569,6 +1630,7 @@ static const struct board_info __initcon
@@ -1561,6 +1622,7 @@ static const struct board_info __initcon
&board_96348gw_a,
&board_rta1025w_16,
&board_96348_D4PW,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -514,6 +514,112 @@ static struct board_info __initdata boar
@@ -502,6 +502,112 @@ static struct board_info __initdata boar
},
};
@ -113,7 +113,7 @@
static struct board_info __initdata board_FAST2404 = {
.name = "F@ST2404",
.expected_cpu_id = 0x6348,
@@ -1623,6 +1729,8 @@ static const struct board_info __initcon
@@ -1615,6 +1721,8 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6348
&board_96348r,
&board_96348gw,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -814,6 +814,78 @@ static struct board_info __initdata boar
@@ -802,6 +802,78 @@ static struct board_info __initdata boar
},
},
};
@ -79,7 +79,7 @@
#endif
/*
@@ -1739,6 +1811,7 @@ static const struct board_info __initcon
@@ -1731,6 +1803,7 @@ static const struct board_info __initcon
&board_rta1025w_16,
&board_96348_D4PW,
&board_spw500v,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1778,6 +1778,83 @@ static struct board_info __initdata boar
@@ -1770,6 +1770,83 @@ static struct board_info __initdata boar
.spis = nb4_spi_devices,
.num_spis = ARRAY_SIZE(nb4_spi_devices),
};
@ -84,7 +84,7 @@
#endif
/*
@@ -1826,6 +1903,7 @@ static const struct board_info __initcon
@@ -1818,6 +1895,7 @@ static const struct board_info __initcon
&board_nb4_ser_r2,
&board_nb4_fxc_r1,
&board_nb4_fxc_r2,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -260,6 +260,45 @@ static struct board_info __initdata boar
@@ -239,6 +239,45 @@ static struct board_info __initdata boar
},
},
};
@ -46,7 +46,7 @@
#endif
/*
@@ -1871,6 +1910,7 @@ static const struct board_info __initcon
@@ -1863,6 +1902,7 @@ static const struct board_info __initcon
&board_96338gw,
&board_96338w,
&board_96338w2_e7t,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1894,6 +1894,72 @@ static struct board_info __initdata boar
@@ -1886,6 +1886,72 @@ static struct board_info __initdata boar
},
},
};
@ -73,7 +73,7 @@
#endif
/*
@@ -1944,6 +2010,7 @@ static const struct board_info __initcon
@@ -1936,6 +2002,7 @@ static const struct board_info __initcon
&board_nb4_fxc_r1,
&board_nb4_fxc_r2,
&board_HW553,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -925,6 +925,65 @@ static struct board_info __initdata boar
@@ -913,6 +913,65 @@ static struct board_info __initdata boar
},
},
};
@ -66,7 +66,7 @@
#endif
/*
@@ -1995,6 +2054,7 @@ static const struct board_info __initcon
@@ -1987,6 +2046,7 @@ static const struct board_info __initcon
&board_96348_D4PW,
&board_spw500v,
&board_96348sv,
@ -74,7 +74,7 @@
#endif
#ifdef CONFIG_BCM63XX_CPU_6358
@@ -2116,6 +2176,22 @@ void __init board_prom_init(void)
@@ -2062,6 +2122,22 @@ void __init board_bcm963xx_init(void)
val &= MPI_CSBASE_BASE_MASK;
}
boot_addr = (u8 *)KSEG1ADDR(val);
@ -107,17 +107,17 @@
#include <bcm63xx_cpu.h>
#include <bcm63xx_dev_flash.h>
#include <bcm63xx_dev_hsspi.h>
@@ -207,6 +208,13 @@ int __init bcm63xx_flash_register(int nu
val = bcm_mpi_readl(MPI_CSBASE_REG(0));
val &= MPI_CSBASE_BASE_MASK;
@@ -215,6 +216,13 @@ int __init bcm63xx_flash_register(int nu
val = bcm_mpi_readl(MPI_CSBASE_REG(0));
val &= MPI_CSBASE_BASE_MASK;
+ /* BT Voyager 2500V has 8 Meg flash in two 4 Meg banks */
+ /* Loading from CFE always uses Bank 0 */
+ if (!strcmp(board_get_name(), "V2500V_BB")) {
+ pr_info("V2500V: Start in Bank 0\n");
+ val = val + 0x400000; // Select Bank 0 start address
+ }
+ /* BT Voyager 2500V has 8 Meg flash in two 4 Meg banks */
+ /* Loading from CFE always uses Bank 0 */
+ if (!strcmp(board_get_name(), "V2500V_BB")) {
+ pr_info("V2500V: Start in Bank 0\n");
+ val = val + 0x400000; // Select Bank 0 start address
+ }
+
mtd_resources[0].start = val;
mtd_resources[0].end = 0x1FFFFFFF;
mtd_resources[0].start = val;
mtd_resources[0].end = 0x1FFFFFFF;
}

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -485,6 +485,64 @@ static struct board_info __initdata boar
@@ -473,6 +473,64 @@ static struct board_info __initdata boar
},
};
@ -65,7 +65,7 @@
static struct board_info __initdata board_96348gw = {
.name = "96348GW",
.expected_cpu_id = 0x6348,
@@ -2055,6 +2113,7 @@ static const struct board_info __initcon
@@ -2047,6 +2105,7 @@ static const struct board_info __initcon
&board_spw500v,
&board_96348sv,
&board_V2500V_BB,

@ -0,0 +1,257 @@
From 7e6b22225e16fbb22dbf7f2113d8c6d65333818c Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sun, 9 Mar 2014 04:55:52 +0100
Subject: [PATCH 44/44] MIPS: BCM63XX: add inventel Livebox support
---
arch/mips/bcm63xx/boards/Kconfig | 6 +
arch/mips/bcm63xx/boards/Makefile | 1 +
arch/mips/bcm63xx/boards/board_common.c | 2 +-
arch/mips/bcm63xx/boards/board_common.h | 6 +
arch/mips/bcm63xx/boards/board_livebox.c | 193 +++++++++++++++++++++++++++++++
5 files changed, 207 insertions(+), 1 deletion(-)
create mode 100644 arch/mips/bcm63xx/boards/board_livebox.c
--- a/arch/mips/bcm63xx/boards/Kconfig
+++ b/arch/mips/bcm63xx/boards/Kconfig
@@ -7,4 +7,10 @@ config BOARD_BCM963XX
default y
help
+config BOARD_LIVEBOX
+ bool "Inventel Livebox(es) boards"
+ select SSB
+ help
+ Inventel Livebox boards using the RedBoot bootloader.
+
endmenu
--- a/arch/mips/bcm63xx/boards/Makefile
+++ b/arch/mips/bcm63xx/boards/Makefile
@@ -1,2 +1,3 @@
obj-y += board_common.o
obj-$(CONFIG_BOARD_BCM963XX) += board_bcm963xx.o
+obj-$(CONFIG_BOARD_LIVEBOX) += board_livebox.o
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -96,7 +96,7 @@ void __init board_prom_init(void)
if (fw_arg3 == CFE_EPTSEAL)
board_bcm963xx_init();
else
- panic("unsupported bootloader detected");
+ board_livebox_init();
}
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
@@ -12,4 +12,10 @@ void board_bcm963xx_init(void);
static inline void board_bcm963xx_init(void) { }
#endif
+#if defined(CONFIG_BOARD_LIVEBOX)
+void board_livebox_init(void);
+#else
+static inline void board_livebox_init(void) { }
+#endif
+
#endif /* __BOARD_COMMON_H */
--- /dev/null
+++ b/arch/mips/bcm63xx/boards/board_livebox.c
@@ -0,0 +1,197 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/input.h>
+#include <asm/addrspace.h>
+#include <bcm63xx_board.h>
+#include <bcm63xx_cpu.h>
+#include <bcm63xx_regs.h>
+#include <bcm63xx_io.h>
+#include <bcm63xx_dev_flash.h>
+#include <board_bcm963xx.h>
+
+#include "board_common.h"
+
+#define PFX "board_livebox: "
+
+#define LIVEBOX_KEYS_POLL_INTERVAL 20
+#define LIVEBOX_KEYS_DEBOUNCE_INTERVAL (LIVEBOX_KEYS_POLL_INTERVAL * 3)
+
+static unsigned int mac_addr_used = 0;
+
+/*
+ * known 6348 boards
+ */
+#ifdef CONFIG_BCM63XX_CPU_6348
+static struct board_info __initdata board_livebox_blue5g = {
+ .name = "Livebox-blue-5g",
+ .expected_cpu_id = 0x6348,
+
+ .has_uart0 = 1,
+ .has_enet0 = 1,
+ .has_enet1 = 1,
+ .has_pci = 1,
+
+ .enet0 = {
+ .has_phy = 1,
+ .use_internal_phy = 1,
+ },
+
+ .enet1 = {
+ .has_phy = 1,
+ .phy_id = 31,
+ },
+
+ .ephy_reset_gpio = 6,
+ .ephy_reset_gpio_flags = GPIOF_INIT_HIGH,
+
+ .has_ohci0 = 1,
+ .has_pccard = 1,
+
+ .has_dsp = 0, /*TODO some Liveboxes have dsp*/
+ .dsp = {
+ .gpio_rst = 6, /*FIXME eth1 shares gpio6 with dsp?*/
+ .gpio_int = 35,
+ .cs = 2,
+ .ext_irq = 2,
+ },
+
+ .leds = {
+ {
+ .name = "Livebox-blue-5g::adsl-fail",
+ .gpio = 0,
+ .active_low = 0,
+ .default_trigger = "default-on",
+ },
+ {
+ .name = "Livebox-blue-5g::adsl",
+ .gpio = 1,
+ },
+ {
+ .name = "Livebox-blue-5g::traffic",
+ .gpio = 2,
+ },
+ {
+ .name = "Livebox-blue-5g::phone",
+ .gpio = 3,
+ },
+ {
+ .name = "Livebox-blue-5g::wifi",
+ .gpio = 4,
+ },
+ },
+
+ .buttons = {
+ {
+ .desc = "BTN_1",
+ .gpio = 36,
+ .active_low = 1,
+ .type = EV_KEY,
+ .code = BTN_1,
+ .debounce_interval = LIVEBOX_KEYS_DEBOUNCE_INTERVAL,
+ },
+ {
+ .desc = "BTN_2",
+ .gpio = 7,
+ .active_low = 1,
+ .type = EV_KEY,
+ .code = BTN_2,
+ .debounce_interval = LIVEBOX_KEYS_DEBOUNCE_INTERVAL,
+ },
+
+ },
+};
+#endif
+
+/*
+ * all boards
+ */
+static const struct board_info __initdata *bcm963xx_boards[] = {
+#ifdef CONFIG_BCM63XX_CPU_6348
+ &board_livebox_blue5g
+#endif
+};
+
+/*
+ * register & return a new board mac address
+ */
+static int livebox_get_mac_address(u8 *mac)
+{
+ u8 *p;
+ int count;
+
+ memcpy(mac, (u8 *)0xBEBFF377, ETH_ALEN);
+
+ p = mac + ETH_ALEN - 1;
+ count = mac_addr_used;
+
+ while (count--) {
+ do {
+ (*p)++;
+ if (*p != 0)
+ break;
+ p--;
+ } while (p != mac);
+ }
+
+ if (p == mac) {
+ printk(KERN_ERR PFX "unable to fetch mac address\n");
+ return -ENODEV;
+ }
+ mac_addr_used++;
+
+ return 0;
+}
+
+/*
+ * early init callback
+ */
+#define LIVEBOX_GPIO_DETECT_MASK 0x000000ff
+#define LIVEBOX_BOOT_ADDR 0x1e400000
+
+#define LIVEBOX_HW_BLUE5G_9 0x90
+
+void __init board_livebox_init(void)
+{
+ u32 val;
+ u8 hw_version;
+ const struct board_info *board;
+
+ /* Get hardware version */
+ val = bcm_gpio_readl(GPIO_CTL_LO_REG);
+ val &= ~LIVEBOX_GPIO_DETECT_MASK;
+ bcm_gpio_writel(val, GPIO_CTL_LO_REG);
+
+ hw_version = bcm_gpio_readl(GPIO_DATA_LO_REG) & LIVEBOX_GPIO_DETECT_MASK;
+ switch (hw_version) {
+ case LIVEBOX_HW_BLUE5G_9:
+ printk(KERN_INFO PFX "Livebox BLUE5G.9\n");
+ board = bcm963xx_boards[0];
+ break;
+ default:
+ printk(KERN_INFO PFX "Unknown livebox version: %02x\n", hw_version);
+ /* use default livebox configuration */
+ board = bcm963xx_boards[0];
+ break;
+ }
+
+ /* use default livebox configuration */
+ board_early_setup(board, livebox_get_mac_address);
+
+ /* read base address of boot chip select (0) */
+ val = bcm_mpi_readl(MPI_CSBASE_REG(0));
+ val &= MPI_CSBASE_BASE_MASK;
+ if (val != LIVEBOX_BOOT_ADDR) {
+ printk(KERN_NOTICE PFX "flash address is: 0x%08x, forcing to: 0x%08x\n",
+ val, LIVEBOX_BOOT_ADDR);
+ bcm63xx_flash_force_phys_base_address(LIVEBOX_BOOT_ADDR, 0x1ebfffff);
+ }
+}

@ -1,390 +0,0 @@
--- a/arch/mips/bcm63xx/boards/Kconfig
+++ b/arch/mips/bcm63xx/boards/Kconfig
@@ -8,4 +8,10 @@ config BOARD_BCM963XX
select SSB
help
+config BOARD_LIVEBOX
+ bool "Inventel Livebox(es) boards"
+ select SSB
+ help
+ Inventel Livebox boards using the RedBoot bootloader.
+
endchoice
--- a/arch/mips/bcm63xx/boards/Makefile
+++ b/arch/mips/bcm63xx/boards/Makefile
@@ -1 +1,2 @@
obj-$(CONFIG_BOARD_BCM963XX) += board_bcm963xx.o
+obj-$(CONFIG_BOARD_LIVEBOX) += board_livebox.o
--- /dev/null
+++ b/arch/mips/bcm63xx/boards/board_livebox.c
@@ -0,0 +1,369 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/platform_device.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/physmap.h>
+#include <linux/ssb/ssb.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/spi/spi.h>
+#include <asm/addrspace.h>
+#include <bcm63xx_board.h>
+#include <bcm63xx_cpu.h>
+#include <bcm63xx_dev_uart.h>
+#include <bcm63xx_regs.h>
+#include <bcm63xx_io.h>
+#include <bcm63xx_dev_pci.h>
+#include <bcm63xx_dev_enet.h>
+#include <bcm63xx_dev_dsp.h>
+#include <bcm63xx_dev_pcmcia.h>
+#include <bcm63xx_dev_usb_ohci.h>
+#include <bcm63xx_dev_usb_ehci.h>
+#include <bcm63xx_dev_spi.h>
+#include <board_bcm963xx.h>
+
+#define PFX "board_livebox: "
+
+#define LIVEBOX_KEYS_POLL_INTERVAL 20
+#define LIVEBOX_KEYS_DEBOUNCE_INTERVAL (LIVEBOX_KEYS_POLL_INTERVAL * 3)
+
+static unsigned int mac_addr_used = 0;
+static struct board_info board;
+
+/*
+ * known 6348 boards
+ */
+#ifdef CONFIG_BCM63XX_CPU_6348
+static struct board_info __initdata board_livebox_blue5g = {
+ .name = "Livebox-blue-5g",
+ .expected_cpu_id = 0x6348,
+
+ .has_uart0 = 1,
+ .has_enet0 = 1,
+ .has_enet1 = 1,
+ .has_pci = 1,
+
+ .enet0 = {
+ .has_phy = 1,
+ .use_internal_phy = 1,
+ },
+
+ .enet1 = {
+ .has_phy = 1,
+ .phy_id = 31,
+ },
+
+ .has_ohci0 = 1,
+ .has_pccard = 1,
+
+ .has_dsp = 0, /*TODO some Liveboxes have dsp*/
+ .dsp = {
+ .gpio_rst = 6, /*FIXME eth1 shares gpio6 with dsp?*/
+ .gpio_int = 35,
+ .cs = 2,
+ .ext_irq = 2,
+ },
+
+ .leds = {
+ {
+ .name = "Livebox-blue-5g::adsl-fail",
+ .gpio = 0,
+ .active_low = 0,
+ .default_trigger = "default-on",
+ },
+ {
+ .name = "Livebox-blue-5g::adsl",
+ .gpio = 1,
+ },
+ {
+ .name = "Livebox-blue-5g::traffic",
+ .gpio = 2,
+ },
+ {
+ .name = "Livebox-blue-5g::phone",
+ .gpio = 3,
+ },
+ {
+ .name = "Livebox-blue-5g::wifi",
+ .gpio = 4,
+ },
+ },
+
+ .buttons = {
+ {
+ .desc = "BTN_1",
+ .gpio = 36,
+ .active_low = 1,
+ .type = EV_KEY,
+ .code = BTN_1,
+ .debounce_interval = LIVEBOX_KEYS_DEBOUNCE_INTERVAL,
+ },
+ {
+ .desc = "BTN_2",
+ .gpio = 7,
+ .active_low = 1,
+ .type = EV_KEY,
+ .code = BTN_2,
+ .debounce_interval = LIVEBOX_KEYS_DEBOUNCE_INTERVAL,
+ },
+
+ },
+};
+#endif
+
+/*
+ * all boards
+ */
+static const struct board_info __initdata *bcm963xx_boards[] = {
+#ifdef CONFIG_BCM63XX_CPU_6348
+ &board_livebox_blue5g
+#endif
+};
+/*
+ * return board name for /proc/cpuinfo
+ */
+const char *board_get_name(void)
+{
+ return board.name;
+}
+
+/*
+ * register & return a new board mac address
+ */
+static int board_get_mac_address(u8 *mac)
+{
+ u8 *p;
+ int count;
+
+ memcpy(mac, (u8 *)0xBEBFF377, ETH_ALEN);
+
+ p = mac + ETH_ALEN - 1;
+ count = mac_addr_used;
+
+ while (count--) {
+ do {
+ (*p)++;
+ if (*p != 0)
+ break;
+ p--;
+ } while (p != mac);
+ }
+
+ if (p == mac) {
+ printk(KERN_ERR PFX "unable to fetch mac address\n");
+ return -ENODEV;
+ }
+ mac_addr_used++;
+
+ return 0;
+}
+
+/*
+ * early init callback
+ */
+#define LIVEBOX_GPIO_DETECT_MASK 0x000000ff
+#define LIVEBOX_BOOT_ADDR 0x1e400000
+
+#define LIVEBOX_HW_BLUE5G_9 0x90
+
+void __init board_prom_init(void)
+{
+ u32 val;
+ u8 hw_version;
+
+ /* Get hardware version */
+ val = bcm_gpio_readl(GPIO_CTL_LO_REG);
+ val &= ~LIVEBOX_GPIO_DETECT_MASK;
+ bcm_gpio_writel(val, GPIO_CTL_LO_REG);
+
+ hw_version = bcm_gpio_readl(GPIO_DATA_LO_REG) & LIVEBOX_GPIO_DETECT_MASK;
+ switch (hw_version) {
+ case LIVEBOX_HW_BLUE5G_9:
+ printk(KERN_INFO PFX "Livebox BLUE5G.9\n");
+ memcpy(&board, bcm963xx_boards[0], sizeof(board));
+ break;
+ default:
+ printk(KERN_INFO PFX "Unknown livebox version: %02x\n", hw_version);
+ break;
+ }
+
+ /* use default livebox configuration */
+ memcpy(&board, bcm963xx_boards[0], sizeof(board));
+
+ /* setup pin multiplexing depending on board enabled device,
+ * this has to be done this early since PCI init is done
+ * inside arch_initcall */
+ val = 0;
+
+#ifdef CONFIG_PCI
+ if (board.has_pci) {
+ bcm63xx_pci_enabled = 1;
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G2_PCI;
+ }
+#endif
+ if (board.has_pccard) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G1_MII_PCCARD;
+ }
+
+ if (board.has_enet0 && !board.enet0.use_internal_phy) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G3_EXT_MII |
+ GPIO_MODE_6348_G0_EXT_MII;
+ }
+
+ if (board.has_enet1 && !board.enet1.use_internal_phy) {
+ if (BCMCPU_IS_6348())
+ val |= GPIO_MODE_6348_G3_EXT_MII |
+ GPIO_MODE_6348_G0_EXT_MII;
+ printk(KERN_INFO PFX "resetting gpio6 for eth1...\n");
+ gpio_request(6, "dsp_eth_rst");
+ gpio_direction_output(6, 0);
+ gpio_set_value(6, 1);
+ }
+
+ bcm_gpio_writel(val, GPIO_MODE_REG);
+}
+
+/*
+ * second stage init callback, good time to panic if we couldn't
+ * identify on which board we're running since early printk is working
+ */
+void __init board_setup(void)
+{
+ if (!board.name[0])
+ panic("unable to detect bcm963xx board");
+ printk(KERN_INFO PFX "board name: %s\n", board.name);
+
+ /* make sure we're running on expected cpu */
+ if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
+ panic("unexpected CPU for bcm963xx board");
+}
+
+static struct physmap_flash_data flash_data = {
+ .width = 2,
+};
+
+static struct resource mtd_resources[] = {
+ {
+ .start = 0, /* filled at runtime */
+ .end = 0, /* filled at runtime */
+ .flags = IORESOURCE_MEM,
+ }
+};
+
+static struct platform_device mtd_dev = {
+ .name = "physmap-flash",
+ .resource = mtd_resources,
+ .num_resources = ARRAY_SIZE(mtd_resources),
+ .dev = {
+ .platform_data = &flash_data,
+ },
+};
+
+static struct gpio_led_platform_data bcm63xx_led_data;
+
+static struct platform_device bcm63xx_gpio_leds = {
+ .name = "leds-gpio",
+ .id = 0,
+ .dev.platform_data = &bcm63xx_led_data,
+};
+
+static struct gpio_keys_platform_data bcm63xx_gpio_keys_data = {
+ .poll_interval = LIVEBOX_KEYS_POLL_INTERVAL,
+};
+
+static struct platform_device bcm63xx_gpio_keys_device = {
+ .name = "gpio-keys-polled",
+ .id = 0,
+ .dev.platform_data = &bcm63xx_gpio_keys_data,
+};
+
+/*
+ * third stage init callback, register all board devices.
+ */
+int __init board_register_devices(void)
+{
+ u32 val;
+ int led_count = 0;
+ int button_count = 0;
+
+ if (board.has_uart0)
+ bcm63xx_uart_register(0);
+
+ if (board.has_uart1)
+ bcm63xx_uart_register(1);
+
+ if (board.has_pccard)
+ bcm63xx_pcmcia_register();
+
+ if (board.has_enet0 &&
+ !board_get_mac_address(board.enet0.mac_addr))
+ bcm63xx_enet_register(0, &board.enet0);
+
+ if (board.has_enet1 &&
+ !board_get_mac_address(board.enet1.mac_addr))
+ bcm63xx_enet_register(1, &board.enet1);
+
+ if (board.has_ehci0)
+ bcm63xx_ehci_register();
+
+ if (board.has_ohci0)
+ bcm63xx_ohci_register();
+
+ if (board.has_dsp)
+ bcm63xx_dsp_register(&board.dsp);
+
+ bcm63xx_spi_register();
+
+ if (board.num_devs)
+ platform_add_devices(board.devs, board.num_devs);
+
+ if (board.num_spis)
+ spi_register_board_info(board.spis, board.num_spis);
+
+
+ /* read base address of boot chip select (0) */
+ val = bcm_mpi_readl(MPI_CSBASE_REG(0));
+ val &= MPI_CSBASE_BASE_MASK;
+ if (val != LIVEBOX_BOOT_ADDR)
+ printk(KERN_NOTICE PFX "flash address is: 0x%08x, forcing to: 0x%08x\n",
+ val, LIVEBOX_BOOT_ADDR);
+ mtd_resources[0].start = LIVEBOX_BOOT_ADDR;
+ mtd_resources[0].end = 0x1ebfffff;
+
+ platform_device_register(&mtd_dev);
+
+ /* count number of LEDs defined by this device */
+ while (led_count < ARRAY_SIZE(board.leds) && board.leds[led_count].name)
+ led_count++;
+
+ bcm63xx_led_data.num_leds = led_count;
+ bcm63xx_led_data.leds = board.leds;
+
+ platform_device_register(&bcm63xx_gpio_leds);
+
+ /* count number of BUTTONs defined by this device */
+ while (button_count < ARRAY_SIZE(board.buttons) && board.buttons[button_count].desc)
+ button_count++;
+
+ if (button_count) {
+ bcm63xx_gpio_keys_data.nbuttons = button_count;
+ bcm63xx_gpio_keys_data.buttons = board.buttons;
+
+ platform_device_register(&bcm63xx_gpio_keys_device);
+ }
+
+ return 0;
+}

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -543,6 +543,51 @@ static struct board_info __initdata boar
@@ -531,6 +531,51 @@ static struct board_info __initdata boar
};
@ -52,7 +52,7 @@
static struct board_info __initdata board_96348gw = {
.name = "96348GW",
.expected_cpu_id = 0x6348,
@@ -2114,6 +2159,7 @@ static const struct board_info __initcon
@@ -2106,6 +2151,7 @@ static const struct board_info __initcon
&board_96348sv,
&board_V2500V_BB,
&board_V2110,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1313,6 +1313,8 @@ static struct board_info __initdata boar
@@ -1301,6 +1301,8 @@ static struct board_info __initdata boar
.name = "DWV-S0",
.expected_cpu_id = 0x6358,
@ -9,7 +9,7 @@
.has_enet0 = 1,
.has_enet1 = 1,
.has_pci = 1,
@@ -1328,6 +1330,7 @@ static struct board_info __initdata boar
@@ -1316,6 +1318,7 @@ static struct board_info __initdata boar
},
.has_ohci0 = 1,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -588,6 +588,69 @@ static struct board_info __initdata boar
@@ -576,6 +576,69 @@ static struct board_info __initdata boar
},
};
@ -70,7 +70,7 @@
static struct board_info __initdata board_96348gw = {
.name = "96348GW",
.expected_cpu_id = 0x6348,
@@ -2163,6 +2226,7 @@ static const struct board_info __initcon
@@ -2155,6 +2218,7 @@ static const struct board_info __initcon
&board_V2500V_BB,
&board_V2110,
&board_ct536_ct5621,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -853,6 +853,7 @@ static struct board_info __initdata boar
@@ -841,6 +841,7 @@ static struct board_info __initdata boar
.name = "RTA1025W_16",
.expected_cpu_id = 0x6348,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1151,6 +1151,42 @@ static struct board_info __initdata boar
@@ -1139,6 +1139,42 @@ static struct board_info __initdata boar
},
},
};
@ -43,7 +43,7 @@
#endif
/*
@@ -2228,6 +2264,7 @@ static const struct board_info __initcon
@@ -2220,6 +2256,7 @@ static const struct board_info __initcon
&board_V2110,
&board_ct536_ct5621,
&board_96348A_122,

@ -10,7 +10,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2228,6 +2228,85 @@ static struct board_info __initdata boar
@@ -2220,6 +2220,85 @@ static struct board_info __initdata boar
#endif
/*
@ -96,7 +96,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
* all boards
*/
static const struct board_info __initconst *bcm963xx_boards[] = {
@@ -2282,6 +2361,10 @@ static const struct board_info __initcon
@@ -2274,6 +2353,10 @@ static const struct board_info __initcon
&board_HW553,
&board_spw303v,
#endif
@ -106,8 +106,10 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
+#endif
};
/*
@@ -2463,12 +2546,25 @@ void __init board_prom_init(void)
static void __init boardid_fixup(u8 *boot_addr)
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -123,12 +123,25 @@ void __init board_early_setup(const stru
bcm63xx_pci_enabled = 1;
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G2_PCI;

@ -9,7 +9,7 @@ Subject: [PATCH 33/63] bcm63xx: add support for 96368MVNgr board.
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2304,6 +2304,72 @@ static struct board_info __initdata boar
@@ -2296,6 +2296,72 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_ehci0 = 1,
};
@ -82,7 +82,7 @@ Subject: [PATCH 33/63] bcm63xx: add support for 96368MVNgr board.
#endif
/*
@@ -2364,6 +2430,7 @@ static const struct board_info __initcon
@@ -2356,6 +2422,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6368
&board_96368mvwg,

@ -9,7 +9,7 @@ Subject: [PATCH] MIPS: BCM63XX: add 96328avng reference board
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -108,13 +108,45 @@ static struct board_info __initdata boar
@@ -87,13 +87,45 @@ static struct board_info __initdata boar
.port_no = 0,
},
@ -56,7 +56,7 @@ Subject: [PATCH] MIPS: BCM63XX: add 96328avng reference board
.name = "96328avng::power",
.gpio = 4,
.active_low = 1,
@@ -131,7 +163,7 @@ static struct board_info __initdata boar
@@ -110,7 +142,7 @@ static struct board_info __initdata boar
.active_low = 1,
},
{

@ -9,7 +9,7 @@ Subject: [PATCH] MIPS: BCM63XX: add 963281TAN reference board
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -169,6 +169,76 @@ static struct board_info __initdata boar
@@ -148,6 +148,76 @@ static struct board_info __initdata boar
},
},
};
@ -86,7 +86,7 @@ Subject: [PATCH] MIPS: BCM63XX: add 963281TAN reference board
#endif
/*
@@ -2413,6 +2483,7 @@ static const struct board_info __initcon
@@ -2405,6 +2475,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,

@ -10,7 +10,7 @@ Subject: [PATCH 70/79] MIPS: BCM63XX: Add board definition for D-Link
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -239,6 +239,111 @@ static struct board_info __initdata boar
@@ -218,6 +218,111 @@ static struct board_info __initdata boar
},
};
@ -122,7 +122,7 @@ Subject: [PATCH 70/79] MIPS: BCM63XX: Add board definition for D-Link
#endif
/*
@@ -2484,6 +2589,7 @@ static const struct board_info __initcon
@@ -2476,6 +2581,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,
&board_963281TAN,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1394,6 +1394,59 @@ static struct board_info __initdata boar
@@ -1382,6 +1382,59 @@ static struct board_info __initdata boar
.ephy_reset_gpio_flags = GPIOF_INIT_HIGH,
};
@ -60,7 +60,7 @@
#endif
/*
@@ -2619,6 +2672,7 @@ static const struct board_info __initcon
@@ -2611,6 +2664,7 @@ static const struct board_info __initcon
&board_ct536_ct5621,
&board_96348A_122,
&board_CPVA502plus,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -57,6 +57,13 @@
@@ -635,6 +635,13 @@ static struct board_info __initdata boar
#define NB4_SPI_GPIO_CLK 6
#define NB4_74HC64_GPIO(X) (NB4_74X164_GPIO_BASE + (X))
@ -11,10 +11,10 @@
+#define CT6373_74HC64_GPIO(X) (CT6373_74X164_GPIO_BASE + (X))
+
+
static struct board_info board;
/*
@@ -2343,6 +2350,113 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_pccard = 1,
@@ -2335,6 +2342,117 @@ static struct board_info __initdata boar
.num_spis = ARRAY_SIZE(nb4_spi_devices),
};
@ -38,11 +38,14 @@
+ &ct6373_spi_gpio,
+};
+
+#if 0 /* FIXME: 3.14 dropped non-DT support */
+const struct gen_74x164_chip_platform_data ct6373_74x164_platform_data = {
+ .base = CT6373_74X164_GPIO_BASE
+};
+#endif
+
+static struct spi_board_info ct6373_spi_devices[] = {
+#if 0 /* FIXME: 3.14 dropped non-DT support */
+ {
+ .modalias = "74x164",
+ .max_speed_hz = 781000,
@ -51,6 +54,7 @@
+ .mode = SPI_MODE_0,
+ .platform_data = &ct6373_74x164_platform_data
+ }
+#endif
+};
+
+static struct board_info __initdata board_ct6373_1 = {
@ -128,7 +132,7 @@
static struct board_info __initdata board_HW553 = {
.name = "HW553",
.expected_cpu_id = 0x6358,
@@ -2687,6 +2801,7 @@ static const struct board_info __initcon
@@ -2679,6 +2797,7 @@ static const struct board_info __initcon
&board_nb4_ser_r2,
&board_nb4_fxc_r1,
&board_nb4_fxc_r2,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2599,6 +2599,73 @@ static struct board_info __initdata boar
@@ -2595,6 +2595,73 @@ static struct board_info __initdata boar
},
}
};
@ -74,7 +74,7 @@
#endif
/*
@@ -2804,6 +2871,7 @@ static const struct board_info __initcon
@@ -2800,6 +2867,7 @@ static const struct board_info __initcon
&board_ct6373_1,
&board_HW553,
&board_spw303v,

@ -1,14 +1,14 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -17,6 +17,7 @@
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
@@ -18,6 +18,7 @@
#if 0 /* FIXME: 3.14 removed non-DT support */
#include <linux/spi/74x164.h>
#endif
+#include <linux/rtl8367.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -56,6 +57,8 @@
@@ -634,6 +635,8 @@ static struct board_info __initdata boar
#define NB4_SPI_GPIO_MOSI 7
#define NB4_SPI_GPIO_CLK 6
#define NB4_74HC64_GPIO(X) (NB4_74X164_GPIO_BASE + (X))
@ -17,7 +17,7 @@
#define CT6373_PID_OFFSET 0xff80
#define CT6373_74X164_GPIO_BASE 64
@@ -2668,6 +2671,104 @@ static struct board_info __initdata boar
@@ -2664,6 +2667,104 @@ static struct board_info __initdata boar
};
#endif
@ -122,7 +122,7 @@
/*
* known 6368 boards
*/
@@ -2874,6 +2975,10 @@ static const struct board_info __initcon
@@ -2870,6 +2971,10 @@ static const struct board_info __initcon
&board_DVAG3810BN,
#endif
@ -133,7 +133,7 @@
#ifdef CONFIG_BCM63XX_CPU_6368
&board_96368mvwg,
&board_96368mvngr,
@@ -2941,6 +3046,11 @@ static void __init boardid_fixup(u8 *boo
@@ -2891,6 +2996,11 @@ static void __init boardid_fixup(u8 *boo
}
}

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1066,6 +1066,57 @@ static struct board_info __initdata boar
@@ -1054,6 +1054,57 @@ static struct board_info __initdata boar
.has_ehci0 = 1,
};
@ -58,7 +58,7 @@
static struct board_info __initdata board_rta1025w_16 = {
.name = "RTA1025W_16",
.expected_cpu_id = 0x6348,
@@ -2943,6 +2994,7 @@ static const struct board_info __initcon
@@ -2939,6 +2990,7 @@ static const struct board_info __initcon
&board_96348gw_10,
&board_96348gw_11,
&board_FAST2404,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -250,6 +250,126 @@ static struct board_info __initdata boar
@@ -220,6 +220,126 @@ static struct board_info __initdata boar
},
};
@ -127,7 +127,7 @@
static struct board_info __initdata board_dsl_274xb_f1 = {
.name = "AW4339U",
.expected_cpu_id = 0x6328,
@@ -2975,6 +3095,7 @@ static const struct board_info __initcon
@@ -2971,6 +3091,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,
&board_963281TAN,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -180,6 +180,79 @@ static struct board_info __initdata boar
@@ -150,6 +150,79 @@ static struct board_info __initdata boar
},
};
@ -80,7 +80,7 @@
static struct board_info __initdata board_963281TAN = {
.name = "963281TAN",
.expected_cpu_id = 0x6328,
@@ -3094,6 +3167,7 @@ static const struct board_info __initcon
@@ -3090,6 +3163,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -180,6 +180,73 @@ static struct board_info __initdata boar
@@ -150,6 +150,73 @@ static struct board_info __initdata boar
},
};
@ -74,7 +74,7 @@
static struct board_info __initdata board_96328A_1441N1 = {
.name = "96328A-1441N1",
.expected_cpu_id = 0x6328,
@@ -3167,6 +3234,7 @@ static const struct board_info __initcon
@@ -3163,6 +3230,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -788,6 +788,55 @@ static struct board_info __initdata boar
@@ -758,6 +758,55 @@ static struct board_info __initdata boar
.has_uart0 = 1,
};
@ -56,7 +56,7 @@
#endif
/*
@@ -3248,6 +3297,7 @@ static const struct board_info __initcon
@@ -3244,6 +3293,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_6345
&board_96345gw2,

@ -1,6 +1,14 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2897,6 +2897,492 @@ static struct board_info __initdata boar
@@ -12,6 +12,7 @@
#include <linux/string.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
+#include <linux/pci_ids.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
@@ -2893,6 +2894,492 @@ static struct board_info __initdata boar
},
};
@ -493,7 +501,7 @@
/* T-Home Speedport W 303V Typ B */
static struct board_info __initdata board_spw303v = {
.name = "96358-502V",
@@ -3336,6 +3822,10 @@ static const struct board_info __initcon
@@ -3332,6 +3819,10 @@ static const struct board_info __initcon
&board_nb4_fxc_r2,
&board_ct6373_1,
&board_HW553,
@ -504,7 +512,7 @@
&board_spw303v,
&board_DVAG3810BN,
#endif
@@ -3401,13 +3891,37 @@ static void __init boardid_fixup(u8 *boo
@@ -3351,13 +3842,37 @@ static void __init boardid_fixup(u8 *boo
struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
char *board_name = (char *)bcm63xx_nvram_get_name();

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -776,6 +776,60 @@ static struct board_info __initdata boar
@@ -747,6 +747,60 @@ static struct board_info __initdata boar
},
},
};
@ -61,7 +61,7 @@
#endif
/*
@@ -3784,6 +3838,7 @@ static const struct board_info __initcon
@@ -3781,6 +3835,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6345
&board_96345gw2,
&board_rta770bw,

@ -12,7 +12,7 @@ Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
---
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1480,6 +1480,122 @@ static struct board_info __initdata boar
@@ -1469,6 +1469,122 @@ static struct board_info __initdata boar
},
};
@ -135,7 +135,7 @@ Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
static struct board_info __initdata board_rta1025w_16 = {
.name = "RTA1025W_16",
.expected_cpu_id = 0x6348,
@@ -3828,6 +3944,7 @@ static const struct board_info __initcon
@@ -3825,6 +3941,7 @@ static const struct board_info __initcon
&board_963281TAN,
&board_963281T_TEF,
&board_dsl_274xb_f1,

@ -6,7 +6,7 @@ Signed-off-by: Max Staudt <openwrt.max@enpas.org>
---
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -3783,6 +3783,96 @@ static struct board_info __initdata boar
@@ -3780,6 +3780,96 @@ static struct board_info __initdata boar
.devs = nb6_devices,
.num_devs = ARRAY_SIZE(nb6_devices),
};
@ -103,7 +103,7 @@ Signed-off-by: Max Staudt <openwrt.max@enpas.org>
#endif
/*
@@ -4004,6 +4094,7 @@ static const struct board_info __initcon
@@ -4001,6 +4091,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6362
&board_nb6,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2207,6 +2207,99 @@ static struct board_info __initdata boar
@@ -2196,6 +2196,99 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_ehci0 = 1,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -1655,6 +1655,19 @@ static struct board_info __initdata boar
@@ -1644,6 +1644,19 @@ static struct board_info __initdata boar
},
.has_ohci0 = 1,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -999,6 +999,17 @@ static struct board_info __initdata boar
@@ -970,6 +970,17 @@ static struct board_info __initdata boar
.active_low = 1,
},
},

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -627,6 +627,8 @@ static struct board_info __initdata boar
@@ -598,6 +598,8 @@ static struct board_info __initdata boar
.has_uart0 = 1,
.has_enet0 = 1,
.enet0 = {
@ -9,7 +9,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -670,6 +672,8 @@ static struct board_info __initdata boar
@@ -641,6 +643,8 @@ static struct board_info __initdata boar
.has_uart0 = 1,
.has_enet0 = 1,
.enet0 = {
@ -18,7 +18,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -955,6 +959,8 @@ static struct board_info __initdata boar
@@ -926,6 +930,8 @@ static struct board_info __initdata boar
.use_internal_phy = 1,
},
.enet1 = {
@ -27,7 +27,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1027,6 +1033,8 @@ static struct board_info __initdata boar
@@ -998,6 +1004,8 @@ static struct board_info __initdata boar
},
.enet1 = {
@ -36,7 +36,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1256,6 +1264,8 @@ static struct board_info __initdata boar
@@ -1245,6 +1253,8 @@ static struct board_info __initdata boar
.use_internal_phy = 1,
},
.enet1 = {
@ -45,7 +45,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1431,6 +1441,8 @@ static struct board_info __initdata boar
@@ -1420,6 +1430,8 @@ static struct board_info __initdata boar
},
.enet1 = {
@ -54,7 +54,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1621,6 +1633,8 @@ static struct board_info __initdata boar
@@ -1610,6 +1622,8 @@ static struct board_info __initdata boar
.use_internal_phy = 1,
},
.enet1 = {
@ -63,7 +63,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1642,6 +1656,8 @@ static struct board_info __initdata boar
@@ -1631,6 +1645,8 @@ static struct board_info __initdata boar
.use_internal_phy = 1,
},
.enet1 = {
@ -72,7 +72,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -1661,6 +1677,8 @@ static struct board_info __initdata boar
@@ -1650,6 +1666,8 @@ static struct board_info __initdata boar
.use_internal_phy = 1,
},
.enet1 = {
@ -81,7 +81,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -2032,6 +2050,8 @@ static struct board_info __initdata boar
@@ -2021,6 +2039,8 @@ static struct board_info __initdata boar
},
.enet1 = {
@ -90,7 +90,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -2084,6 +2104,8 @@ static struct board_info __initdata boar
@@ -2073,6 +2093,8 @@ static struct board_info __initdata boar
},
.enet1 = {
@ -99,7 +99,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -2225,6 +2247,8 @@ static struct board_info __initdata boar
@@ -2214,6 +2236,8 @@ static struct board_info __initdata boar
},
.enet1 = {
@ -108,7 +108,7 @@
.force_speed_100 = 1,
.force_duplex_full = 1,
},
@@ -2342,6 +2366,8 @@ static struct board_info __initdata boar
@@ -2331,6 +2355,8 @@ static struct board_info __initdata boar
},
.enet1 = {

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2374,6 +2374,94 @@ static struct board_info __initdata boar
@@ -2363,6 +2363,94 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_ehci0 = 1,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -102,6 +102,93 @@ static struct board_info __initdata boar
@@ -73,6 +73,93 @@ static struct board_info __initdata boar
#endif
/*
@ -94,7 +94,7 @@
* known 6328 boards
*/
#ifdef CONFIG_BCM63XX_CPU_6328
@@ -4258,6 +4345,9 @@ static const struct board_info __initcon
@@ -4255,6 +4342,9 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_3368
&board_cvg834g,
#endif

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -186,6 +186,94 @@ static struct board_info __initdata boar
@@ -157,6 +157,94 @@ static struct board_info __initdata boar
},
},
};
@ -95,7 +95,7 @@
#endif
/*
@@ -4347,6 +4435,7 @@ static const struct board_info __initcon
@@ -4344,6 +4432,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_6318
&board_96318ref,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -4427,6 +4427,75 @@ static struct board_info __initdata boar
@@ -4424,6 +4424,75 @@ static struct board_info __initdata boar
#endif
/*
@ -76,7 +76,7 @@
* all boards
*/
static const struct board_info __initconst *bcm963xx_boards[] = {
@@ -4511,6 +4580,9 @@ static const struct board_info __initcon
@@ -4508,6 +4577,9 @@ static const struct board_info __initcon
&board_96368mvwg,
&board_96368mvngr,
#endif
@ -85,4 +85,4 @@
+#endif
};
/*
static void __init boardid_fixup(u8 *boot_addr)

@ -8,7 +8,7 @@ Signed-off-by: Adrian Feliks <mexit@o2.pl>
---
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2204,6 +2204,51 @@ static struct board_info __initdata boar
@@ -2193,6 +2193,51 @@ static struct board_info __initdata boar
},
};
@ -60,7 +60,7 @@ Signed-off-by: Adrian Feliks <mexit@o2.pl>
#endif
/*
@@ -4547,6 +4592,7 @@ static const struct board_info __initcon
@@ -4544,6 +4589,7 @@ static const struct board_info __initcon
&board_96348A_122,
&board_CPVA502plus,
&board_96348W3,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -4538,6 +4538,108 @@ static struct board_info __initdata boar
@@ -4535,6 +4535,108 @@ static struct board_info __initdata boar
},
},
};
@ -109,7 +109,7 @@
#endif
/*
@@ -4628,6 +4730,7 @@ static const struct board_info __initcon
@@ -4625,6 +4727,7 @@ static const struct board_info __initcon
#endif
#ifdef CONFIG_BCM63XX_CPU_63268
&board_963269bhr,

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -4475,6 +4475,131 @@ static struct board_info __initdata boar
@@ -4472,6 +4472,131 @@ static struct board_info __initdata boar
* known 63268/63269 boards
*/
#ifdef CONFIG_BCM63XX_CPU_63268
@ -132,7 +132,7 @@
static struct board_info __initdata board_963269bhr = {
.name = "963269BHR",
.expected_cpu_id = 0x63268,
@@ -4729,6 +4854,7 @@ static const struct board_info __initcon
@@ -4726,6 +4851,7 @@ static const struct board_info __initcon
&board_96368mvngr,
#endif
#ifdef CONFIG_BCM63XX_CPU_63268

@ -1,14 +1,14 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -14,6 +14,7 @@
#include <linux/ssb/ssb.h>
@@ -13,6 +13,7 @@
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/pci_ids.h>
+#include <linux/platform_data/b53.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
#include <linux/spi/74x164.h>
@@ -4469,6 +4470,99 @@ static struct board_info __initdata boar
@@ -4466,6 +4467,99 @@ static struct board_info __initdata boar
.has_ohci0 = 1,
.has_ehci0 = 1,
};
@ -108,7 +108,7 @@
#endif
/*
@@ -4852,6 +4946,7 @@ static const struct board_info __initcon
@@ -4849,6 +4943,7 @@ static const struct board_info __initcon
#ifdef CONFIG_BCM63XX_CPU_6368
&board_96368mvwg,
&board_96368mvngr,

@ -1,14 +1,14 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -14,6 +14,7 @@
--- a/arch/mips/bcm63xx/boards/board_common.c
+++ b/arch/mips/bcm63xx/boards/board_common.c
@@ -13,6 +13,7 @@
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
+#include <linux/export.h>
#include <linux/platform_data/b53.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
@@ -4960,7 +4961,7 @@ static const struct board_info __initcon
#include <asm/addrspace.h>
#include <asm/bootinfo.h>
@@ -49,7 +50,7 @@ static struct board_info board;
* bcm4318 WLAN work
*/
#ifdef CONFIG_SSB_PCIHOST
@ -17,7 +17,7 @@
.revision = 0x02,
.board_rev = 0x17,
.country_code = 0x0,
@@ -4980,6 +4981,7 @@ static struct ssb_sprom bcm63xx_sprom =
@@ -69,6 +70,7 @@ static struct ssb_sprom bcm63xx_sprom =
.boardflags_lo = 0x2848,
.boardflags_hi = 0x0000,
};

Loading…
Cancel
Save