brcm63xx: rework fallback sprom support
authorJonas Gorski <jogo@openwrt.org>
Fri, 1 Aug 2014 21:56:38 +0000 (21:56 +0000)
committerJonas Gorski <jogo@openwrt.org>
Fri, 1 Aug 2014 21:56:38 +0000 (21:56 +0000)
Rework fallback sprom support by providing different sproms for
different chips. Also make it optional to use.

This likely causes sprom fallback support to break on a few boards.

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

73 files changed:
target/linux/brcm63xx/config-3.14
target/linux/brcm63xx/patches-3.14/356-MIPS-BCM63XX-move-fallback-sprom-support-into-its-ow.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/357-MIPS-BCM63XX-use-platform-data-for-the-sprom.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/358-MIPS-BCM63XX-make-fallback-sprom-optional.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/359-MIPS-BCM63XX-allow-different-types-of-sprom.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/360-MIPS-BCM63XX-add-support-for-raw-sproms.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/361-MIPS-BCM63XX-add-raw-fallback-sproms-for-most-common.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/362-MIPS-BCM63XX-also-register-a-fallback-sprom-for-bcma.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/363-MIPS-BCM63XX-add-BCMA-based-sprom-templates.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/364-MIPS-BCM63XX-allow-board-files-to-provide-sprom-fixu.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/365-MIPS-BCM63XX-allow-setting-a-pci-bus-device-for-fall.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.14/403-6358-enet1-external-mii-clk.patch
target/linux/brcm63xx/patches-3.14/413-BCM63XX-allow-providing-fixup-data-in-board-data.patch
target/linux/brcm63xx/patches-3.14/416-BCM63XX-add-a-fixup-for-ath9k-devices.patch
target/linux/brcm63xx/patches-3.14/418-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
target/linux/brcm63xx/patches-3.14/420-BCM63XX-add-endian-check-for-ath9k.patch
target/linux/brcm63xx/patches-3.14/421-BCM63XX-add-led-pin-for-ath9k.patch
target/linux/brcm63xx/patches-3.14/422-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
target/linux/brcm63xx/patches-3.14/500-board-D4PW.patch
target/linux/brcm63xx/patches-3.14/501-board-NB4.patch
target/linux/brcm63xx/patches-3.14/502-board-96338W2_E7T.patch
target/linux/brcm63xx/patches-3.14/503-board-CPVA642.patch
target/linux/brcm63xx/patches-3.14/504-board_dsl_274xb_rev_c.patch
target/linux/brcm63xx/patches-3.14/505-board_spw500v.patch
target/linux/brcm63xx/patches-3.14/506-board_gw6200_gw6000.patch
target/linux/brcm63xx/patches-3.14/507-board-MAGIC.patch
target/linux/brcm63xx/patches-3.14/508-board_hw553.patch
target/linux/brcm63xx/patches-3.14/509-board_rta1320_16m.patch
target/linux/brcm63xx/patches-3.14/510-board_spw303v.patch
target/linux/brcm63xx/patches-3.14/511-board_V2500V.patch
target/linux/brcm63xx/patches-3.14/512-board_BTV2110.patch
target/linux/brcm63xx/patches-3.14/513-MIPS-BCM63XX-add-inventel-Livebox-support.patch
target/linux/brcm63xx/patches-3.14/514-board_ct536_ct5621.patch
target/linux/brcm63xx/patches-3.14/515-board_DWV-S0_fixes.patch
target/linux/brcm63xx/patches-3.14/516-board_96348A-122.patch
target/linux/brcm63xx/patches-3.14/517-RTA1205W_16_uart_fixes.patch
target/linux/brcm63xx/patches-3.14/519_board_CPVA502plus.patch
target/linux/brcm63xx/patches-3.14/520-bcm63xx-add-support-for-96368MVWG-board.patch
target/linux/brcm63xx/patches-3.14/521-bcm63xx-add-support-for-96368MVNgr-board.patch
target/linux/brcm63xx/patches-3.14/522-MIPS-BCM63XX-add-96328avng-reference-board.patch
target/linux/brcm63xx/patches-3.14/523-MIPS-BCM63XX-add-963281TAN-reference-board.patch
target/linux/brcm63xx/patches-3.14/524-board_dsl_274xb_rev_f.patch
target/linux/brcm63xx/patches-3.14/525-board_96348w3.patch
target/linux/brcm63xx/patches-3.14/526-board_CT6373-1.patch
target/linux/brcm63xx/patches-3.14/527-board_dva-g3810bn-tl-1.patch
target/linux/brcm63xx/patches-3.14/528-board_nb6.patch
target/linux/brcm63xx/patches-3.14/529-board_fast2604.patch
target/linux/brcm63xx/patches-3.14/530-board_A4001N1.patch
target/linux/brcm63xx/patches-3.14/531-board_AR-5387un.patch
target/linux/brcm63xx/patches-3.14/532-board_AR-5381u.patch
target/linux/brcm63xx/patches-3.14/533-board_rta770bw.patch
target/linux/brcm63xx/patches-3.14/534-board_hw556.patch
target/linux/brcm63xx/patches-3.14/535-board_rta770w.patch
target/linux/brcm63xx/patches-3.14/536-board_fast2704.patch
target/linux/brcm63xx/patches-3.14/537-board_fast2504n.patch
target/linux/brcm63xx/patches-3.14/550-alice_gate2_leds.patch
target/linux/brcm63xx/patches-3.14/551-96348gw_a_leds.patch
target/linux/brcm63xx/patches-3.14/552-board_96348gw-10_reset_button.patch
target/linux/brcm63xx/patches-3.14/553-boards_probe_switch.patch
target/linux/brcm63xx/patches-3.14/554-board_DWVS0_leds_buttons.patch
target/linux/brcm63xx/patches-3.14/555-board_96318ref.patch
target/linux/brcm63xx/patches-3.14/556-board_96318ref_p300.patch
target/linux/brcm63xx/patches-3.14/557-board_bcm963269bhr.patch
target/linux/brcm63xx/patches-3.14/558-board_AR1004G.patch
target/linux/brcm63xx/patches-3.14/559-board_vw6339gu.patch
target/linux/brcm63xx/patches-3.14/560-board_963268gu_p300.patch
target/linux/brcm63xx/patches-3.14/561-board_WAP-5813n.patch
target/linux/brcm63xx/patches-3.14/562-board_VR-3025u.patch
target/linux/brcm63xx/patches-3.14/563-board_VR-3025un.patch
target/linux/brcm63xx/patches-3.14/564-board_P870HW-51a_v2.patch
target/linux/brcm63xx/patches-3.14/565-board_hw520.patch
target/linux/brcm63xx/patches-3.14/566-board_A4001N.patch
target/linux/brcm63xx/patches-3.14/801-ssb_export_fallback_sprom.patch

index 871df1befc48e32183267c9a4334c61e104f546a..6846671a700e7cd85ce9d845c793c99e90acfcba 100644 (file)
@@ -30,6 +30,15 @@ CONFIG_BCM63XX_ENET=y
 CONFIG_BCM63XX_OHCI=y
 CONFIG_BCM63XX_PHY=y
 CONFIG_BCM63XX_WDT=y
+CONFIG_BCMA=y
+CONFIG_BCMA_BLOCKIO=y
+# CONFIG_BCMA_DEBUG is not set
+# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
+# CONFIG_BCMA_DRIVER_MIPS is not set
+# CONFIG_BCMA_DRIVER_PCI_HOSTMODE is not set
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+# CONFIG_BCMA_HOST_SOC is not set
 CONFIG_BOARD_BCM963XX=y
 CONFIG_BOARD_LIVEBOX=y
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
diff --git a/target/linux/brcm63xx/patches-3.14/356-MIPS-BCM63XX-move-fallback-sprom-support-into-its-ow.patch b/target/linux/brcm63xx/patches-3.14/356-MIPS-BCM63XX-move-fallback-sprom-support-into-its-ow.patch
new file mode 100644 (file)
index 0000000..8caf34f
--- /dev/null
@@ -0,0 +1,188 @@
+From cc025e749a1fece61a6cc0d64bbe7b12472259cc Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 21:31:12 +0200
+Subject: [PATCH 01/10] MIPS: BCM63XX: move fallback sprom support into its own
+ unit
+
+In preparation for enhancing it, move it into its own file. Require a
+mac address to be passed as the argument to always "reserve" the mac
+regardless of the inclusion state of SSB.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/Makefile                         |  2 +-
+ arch/mips/bcm63xx/boards/board_common.c            | 53 ++--------------
+ arch/mips/bcm63xx/sprom.c                          | 70 ++++++++++++++++++++++
+ .../asm/mach-bcm63xx/bcm63xx_fallback_sprom.h      |  6 ++
+ 4 files changed, 83 insertions(+), 48 deletions(-)
+ create mode 100644 arch/mips/bcm63xx/sprom.c
+ create mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+
+--- a/arch/mips/bcm63xx/Makefile
++++ b/arch/mips/bcm63xx/Makefile
+@@ -2,7 +2,7 @@ obj-y          += clk.o cpu.o cs.o gpio.o irq.o
+                  setup.o timer.o dev-dsp.o dev-enet.o dev-flash.o \
+                  dev-pcmcia.o dev-rng.o dev-spi.o dev-hsspi.o dev-uart.o \
+                  dev-wdt.o dev-usb-ehci.o dev-usb-ohci.o dev-usb-usbd.o \
+-                 usb-common.o
++                 usb-common.o sprom.o
+ obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
+ obj-y         += boards/
+--- a/arch/mips/bcm63xx/boards/board_common.c
++++ b/arch/mips/bcm63xx/boards/board_common.c
+@@ -43,44 +43,6 @@
+ 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)
+@@ -195,6 +157,7 @@ int __init board_register_devices(void)
+       int button_count = 0;
+       int led_count = 0;
+       int usbh_ports = 0;
++      u8 mac[ETH_ALEN];
+       if (board.has_uart0)
+               bcm63xx_uart_register(0);
+@@ -239,15 +202,10 @@ int __init board_register_devices(void)
+       /* Generate MAC address for WLAN and register our SPROM,
+        * do this after registering enet devices
+        */
+-#ifdef CONFIG_SSB_PCIHOST
+-      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(
+-                              &bcm63xx_get_fallback_sprom) < 0)
+-                      pr_err(PFX "failed to register fallback SPROM\n");
+-      }
+-#endif
++
++      if (board_get_mac_address(mac) ||
++          bcm63xx_register_fallback_sprom(mac))
++              pr_err(PFX "failed to register fallback SPROM\n");
+       bcm63xx_spi_register();
+--- /dev/null
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -0,0 +1,70 @@
++/*
++ * 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 <bcm63xx_fallback_sprom.h>
++#include <board_bcm963xx.h>
++
++#define PFX   "sprom: "
++
++/*
++ * 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
++
++int __init bcm63xx_register_fallback_sprom(u8 *mac)
++{
++      int ret = 0;
++
++#ifdef CONFIG_SSB_PCIHOST
++      memcpy(bcm63xx_sprom.et0mac, mac, ETH_ALEN);
++      memcpy(bcm63xx_sprom.et0mac, mac, ETH_ALEN);
++      memcpy(bcm63xx_sprom.et1mac, mac, ETH_ALEN);
++
++      ret = ssb_arch_register_fallback_sprom(&bcm63xx_get_fallback_sprom);
++#endif
++      return ret;
++}
+--- /dev/null
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -0,0 +1,6 @@
++#ifndef __BCM63XX_FALLBACK_SPROM
++#define __BCM63XX_FALLBACK_SPROM
++
++int bcm63xx_register_fallback_sprom(u8 *mac);
++
++#endif
diff --git a/target/linux/brcm63xx/patches-3.14/357-MIPS-BCM63XX-use-platform-data-for-the-sprom.patch b/target/linux/brcm63xx/patches-3.14/357-MIPS-BCM63XX-use-platform-data-for-the-sprom.patch
new file mode 100644 (file)
index 0000000..e2a9367
--- /dev/null
@@ -0,0 +1,95 @@
+From 9912a8b3c240a9b0af01ff496b7e8ed9e4cc5b82 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 21:43:49 +0200
+Subject: [PATCH 02/10] MIPS: BCM63XX: use platform data for the sprom
+
+Similar to ethernet setup, use a platform data struct for passing
+the mac. This eliminates the requirement to allocate an array on
+stack for the mac passed.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/boards/board_common.c                     | 6 ++----
+ arch/mips/bcm63xx/sprom.c                                   | 8 ++++----
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h | 8 +++++++-
+ arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h         | 4 ++++
+ 4 files changed, 17 insertions(+), 9 deletions(-)
+
+--- a/arch/mips/bcm63xx/boards/board_common.c
++++ b/arch/mips/bcm63xx/boards/board_common.c
+@@ -157,7 +157,6 @@ int __init board_register_devices(void)
+       int button_count = 0;
+       int led_count = 0;
+       int usbh_ports = 0;
+-      u8 mac[ETH_ALEN];
+       if (board.has_uart0)
+               bcm63xx_uart_register(0);
+@@ -203,8 +202,8 @@ int __init board_register_devices(void)
+        * do this after registering enet devices
+        */
+-      if (board_get_mac_address(mac) ||
+-          bcm63xx_register_fallback_sprom(mac))
++      if (board_get_mac_address(board.fallback_sprom.mac_addr) ||
++          bcm63xx_register_fallback_sprom(&board.fallback_sprom))
+               pr_err(PFX "failed to register fallback SPROM\n");
+       bcm63xx_spi_register();
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -55,14 +55,14 @@ int bcm63xx_get_fallback_sprom(struct ss
+ }
+ #endif
+-int __init bcm63xx_register_fallback_sprom(u8 *mac)
++int __init bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data)
+ {
+       int ret = 0;
+ #ifdef CONFIG_SSB_PCIHOST
+-      memcpy(bcm63xx_sprom.et0mac, mac, ETH_ALEN);
+-      memcpy(bcm63xx_sprom.et0mac, mac, ETH_ALEN);
+-      memcpy(bcm63xx_sprom.et1mac, mac, ETH_ALEN);
++      memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
++      memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
++      memcpy(bcm63xx_sprom.et1mac, data->mac_addr, ETH_ALEN);
+       ret = ssb_arch_register_fallback_sprom(&bcm63xx_get_fallback_sprom);
+ #endif
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -1,6 +1,12 @@
+ #ifndef __BCM63XX_FALLBACK_SPROM
+ #define __BCM63XX_FALLBACK_SPROM
+-int bcm63xx_register_fallback_sprom(u8 *mac);
++#include <linux/if_ether.h>
++
++struct fallback_sprom_data {
++      u8 mac_addr[ETH_ALEN];
++};
++
++int bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data);
+ #endif
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -8,6 +8,7 @@
+ #include <bcm63xx_dev_enet.h>
+ #include <bcm63xx_dev_usb_usbd.h>
+ #include <bcm63xx_dev_dsp.h>
++#include <bcm63xx_fallback_sprom.h>
+ /*
+  * flash mapping
+@@ -59,6 +60,9 @@ struct board_info {
+       /* External PHY reset GPIO flags from gpio.h */
+       unsigned long ephy_reset_gpio_flags;
++      /* fallback sprom config */
++      struct fallback_sprom_data fallback_sprom;
++
+       /* Additional platform devices */
+       struct platform_device **devs;
+       unsigned int    num_devs;
diff --git a/target/linux/brcm63xx/patches-3.14/358-MIPS-BCM63XX-make-fallback-sprom-optional.patch b/target/linux/brcm63xx/patches-3.14/358-MIPS-BCM63XX-make-fallback-sprom-optional.patch
new file mode 100644 (file)
index 0000000..9d633c2
--- /dev/null
@@ -0,0 +1,140 @@
+From 83131acbfb59760a19f3711c09526e191c8aad54 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 21:52:56 +0200
+Subject: [PATCH 03/10] MIPS: BCM63XX: make fallback sprom optional
+
+Some devices do not provide enough mac addresses to populate wifi in
+addition to ethernet.
+
+Use having pci enabled as a rough heuristic which boards should have it
+enabled.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/boards/board_bcm963xx.c           | 12 ++++++++++++
+ arch/mips/bcm63xx/boards/board_common.c             |  5 +++--
+ arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h |  1 +
+ 3 files changed, 16 insertions(+), 2 deletions(-)
+
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -78,6 +78,7 @@ static struct board_info __initdata boar
+       .has_uart0                      = 1,
+       .has_pci                        = 1,
+       .has_usbd                       = 0,
++      .use_fallback_sprom             = 1,
+       .usbd = {
+               .use_fullspeed          = 0,
+@@ -227,6 +228,7 @@ static struct board_info __initdata boar
+       .has_uart0                      = 1,
+       .has_enet0                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -272,6 +274,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -332,6 +335,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -396,6 +400,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -464,6 +469,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -487,6 +493,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -505,6 +512,7 @@ static struct board_info __initdata boar
+       .has_uart0                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .has_ohci0                      = 1,
+       .has_enet0                      = 1,
+@@ -527,6 +535,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -553,6 +562,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -605,6 +615,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+@@ -676,6 +687,7 @@ static struct board_info __initdata boar
+       .has_enet0                      = 1,
+       .has_enet1                      = 1,
+       .has_pci                        = 1,
++      .use_fallback_sprom             = 1,
+       .enet0 = {
+               .has_phy                = 1,
+--- a/arch/mips/bcm63xx/boards/board_common.c
++++ b/arch/mips/bcm63xx/boards/board_common.c
+@@ -202,8 +202,9 @@ int __init board_register_devices(void)
+        * do this after registering enet devices
+        */
+-      if (board_get_mac_address(board.fallback_sprom.mac_addr) ||
+-          bcm63xx_register_fallback_sprom(&board.fallback_sprom))
++      if (board.use_fallback_sprom &&
++          (board_get_mac_address(board.fallback_sprom.mac_addr) ||
++           bcm63xx_register_fallback_sprom(&board.fallback_sprom)))
+               pr_err(PFX "failed to register fallback SPROM\n");
+       bcm63xx_spi_register();
+--- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
++++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
+@@ -35,6 +35,7 @@ struct board_info {
+       unsigned int    has_dsp:1;
+       unsigned int    has_uart0:1;
+       unsigned int    has_uart1:1;
++      unsigned int    use_fallback_sprom:1;
+       /* ethernet config */
+       struct bcm63xx_enet_platform_data enet0;
diff --git a/target/linux/brcm63xx/patches-3.14/359-MIPS-BCM63XX-allow-different-types-of-sprom.patch b/target/linux/brcm63xx/patches-3.14/359-MIPS-BCM63XX-allow-different-types-of-sprom.patch
new file mode 100644 (file)
index 0000000..3362002
--- /dev/null
@@ -0,0 +1,66 @@
+From 1cece9f7aca1f0c193edce201f77a87008c5a405 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 21:58:38 +0200
+Subject: [PATCH 04/10] MIPS: BCM63XX: allow different types of sprom
+
+Different chips require different sprom contents, so prepare for
+supplying the appropriate sprom type.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c                                   | 13 ++++++++++++-
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h |  5 +++++
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -22,7 +22,7 @@
+  * bcm4318 WLAN work
+  */
+ #ifdef CONFIG_SSB_PCIHOST
+-static struct ssb_sprom bcm63xx_sprom = {
++static __initconst struct ssb_sprom bcm63xx_default_sprom = {
+       .revision               = 0x02,
+       .board_rev              = 0x17,
+       .country_code           = 0x0,
+@@ -43,6 +43,8 @@ static struct ssb_sprom bcm63xx_sprom =
+       .boardflags_hi          = 0x0000,
+ };
++static struct ssb_sprom bcm63xx_sprom;
++
+ int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
+ {
+       if (bus->bustype == SSB_BUSTYPE_PCI) {
+@@ -60,6 +62,15 @@ int __init bcm63xx_register_fallback_spr
+       int ret = 0;
+ #ifdef CONFIG_SSB_PCIHOST
++      switch (data->type) {
++      case SPROM_DEFAULT:
++              memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
++                     sizeof(bcm63xx_sprom));
++              break;
++      default:
++              return -EINVAL;
++      }
++
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et1mac, data->mac_addr, ETH_ALEN);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -3,8 +3,13 @@
+ #include <linux/if_ether.h>
++enum sprom_type {
++      SPROM_DEFAULT, /* default fallback sprom */
++};
++
+ struct fallback_sprom_data {
+       u8 mac_addr[ETH_ALEN];
++      enum sprom_type type;
+ };
+ int bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data);
diff --git a/target/linux/brcm63xx/patches-3.14/360-MIPS-BCM63XX-add-support-for-raw-sproms.patch b/target/linux/brcm63xx/patches-3.14/360-MIPS-BCM63XX-add-support-for-raw-sproms.patch
new file mode 100644 (file)
index 0000000..5844361
--- /dev/null
@@ -0,0 +1,517 @@
+From cedee63bc73f8b7d45b8c0cba1236986812c1f83 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 22:16:36 +0200
+Subject: [PATCH 05/10] MIPS: BCM63XX: add support for "raw" sproms
+
+Allow using raw sprom content as templates.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c | 482 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 482 insertions(+)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -55,13 +55,492 @@ int bcm63xx_get_fallback_sprom(struct ss
+               return -EINVAL;
+       }
+ }
++
++/* FIXME: use lib_sprom after submission upstream */
++
++/* Get the word-offset for a SSB_SPROM_XXX define. */
++#define SPOFF(offset) ((offset) / sizeof(u16))
++/* Helper to extract some _offset, which is one of the SSB_SPROM_XXX defines. */
++#define SPEX16(_outvar, _offset, _mask, _shift)       \
++      out->_outvar = ((in[SPOFF(_offset)] & (_mask)) >> (_shift))
++#define SPEX32(_outvar, _offset, _mask, _shift)       \
++      out->_outvar = ((((u32)in[SPOFF((_offset)+2)] << 16 | \
++                         in[SPOFF(_offset)]) & (_mask)) >> (_shift))
++#define SPEX(_outvar, _offset, _mask, _shift) \
++      SPEX16(_outvar, _offset, _mask, _shift)
++
++#define SPEX_ARRAY8(_field, _offset, _mask, _shift)   \
++      do {    \
++              SPEX(_field[0], _offset +  0, _mask, _shift);   \
++              SPEX(_field[1], _offset +  2, _mask, _shift);   \
++              SPEX(_field[2], _offset +  4, _mask, _shift);   \
++              SPEX(_field[3], _offset +  6, _mask, _shift);   \
++              SPEX(_field[4], _offset +  8, _mask, _shift);   \
++              SPEX(_field[5], _offset + 10, _mask, _shift);   \
++              SPEX(_field[6], _offset + 12, _mask, _shift);   \
++              SPEX(_field[7], _offset + 14, _mask, _shift);   \
++      } while (0)
++
++
++static s8 r123_extract_antgain(u8 sprom_revision, const u16 *in,
++                             u16 mask, u16 shift)
++{
++      u16 v;
++      u8 gain;
++
++      v = in[SPOFF(SSB_SPROM1_AGAIN)];
++      gain = (v & mask) >> shift;
++      if (gain == 0xFF)
++              gain = 2; /* If unset use 2dBm */
++      if (sprom_revision == 1) {
++              /* Convert to Q5.2 */
++              gain <<= 2;
++      } else {
++              /* Q5.2 Fractional part is stored in 0xC0 */
++              gain = ((gain & 0xC0) >> 6) | ((gain & 0x3F) << 2);
++      }
++
++      return (s8)gain;
++}
++
++static void sprom_extract_r23(struct ssb_sprom *out, const u16 *in)
++{
++      SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0);
++      SPEX(opo, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0);
++      SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0);
++      SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0);
++      SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0);
++      SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0);
++      SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0);
++      SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0);
++      SPEX(maxpwr_ah, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0);
++      SPEX(maxpwr_al, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO,
++           SSB_SPROM2_MAXP_A_LO_SHIFT);
++}
++
++static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in)
++{
++      u16 loc[3];
++
++      if (out->revision == 3)                 /* rev 3 moved MAC */
++              loc[0] = SSB_SPROM3_IL0MAC;
++      else {
++              loc[0] = SSB_SPROM1_IL0MAC;
++              loc[1] = SSB_SPROM1_ET0MAC;
++              loc[2] = SSB_SPROM1_ET1MAC;
++      }
++
++      SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0);
++      SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A,
++           SSB_SPROM1_ETHPHY_ET1A_SHIFT);
++      SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
++      SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
++      SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
++      SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0);
++      if (out->revision == 1)
++              SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
++                   SSB_SPROM1_BINF_CCODE_SHIFT);
++      SPEX(ant_available_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
++           SSB_SPROM1_BINF_ANTA_SHIFT);
++      SPEX(ant_available_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
++           SSB_SPROM1_BINF_ANTBG_SHIFT);
++      SPEX(pa0b0, SSB_SPROM1_PA0B0, 0xFFFF, 0);
++      SPEX(pa0b1, SSB_SPROM1_PA0B1, 0xFFFF, 0);
++      SPEX(pa0b2, SSB_SPROM1_PA0B2, 0xFFFF, 0);
++      SPEX(pa1b0, SSB_SPROM1_PA1B0, 0xFFFF, 0);
++      SPEX(pa1b1, SSB_SPROM1_PA1B1, 0xFFFF, 0);
++      SPEX(pa1b2, SSB_SPROM1_PA1B2, 0xFFFF, 0);
++      SPEX(gpio0, SSB_SPROM1_GPIOA, SSB_SPROM1_GPIOA_P0, 0);
++      SPEX(gpio1, SSB_SPROM1_GPIOA, SSB_SPROM1_GPIOA_P1,
++           SSB_SPROM1_GPIOA_P1_SHIFT);
++      SPEX(gpio2, SSB_SPROM1_GPIOB, SSB_SPROM1_GPIOB_P2, 0);
++      SPEX(gpio3, SSB_SPROM1_GPIOB, SSB_SPROM1_GPIOB_P3,
++           SSB_SPROM1_GPIOB_P3_SHIFT);
++      SPEX(maxpwr_a, SSB_SPROM1_MAXPWR, SSB_SPROM1_MAXPWR_A,
++           SSB_SPROM1_MAXPWR_A_SHIFT);
++      SPEX(maxpwr_bg, SSB_SPROM1_MAXPWR, SSB_SPROM1_MAXPWR_BG, 0);
++      SPEX(itssi_a, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_A,
++           SSB_SPROM1_ITSSI_A_SHIFT);
++      SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0);
++      SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0);
++
++      SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8);
++      SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0);
++
++      /* Extract the antenna gain values. */
++      out->antenna_gain.a0 = r123_extract_antgain(out->revision, in,
++                                                  SSB_SPROM1_AGAIN_BG,
++                                                  SSB_SPROM1_AGAIN_BG_SHIFT);
++      out->antenna_gain.a1 = r123_extract_antgain(out->revision, in,
++                                                  SSB_SPROM1_AGAIN_A,
++                                                  SSB_SPROM1_AGAIN_A_SHIFT);
++      if (out->revision >= 2)
++              sprom_extract_r23(out, in);
++}
++
++/* Revs 4 5 and 8 have partially shared layout */
++static void sprom_extract_r458(struct ssb_sprom *out, const u16 *in)
++{
++      SPEX(txpid2g[0], SSB_SPROM4_TXPID2G01,
++           SSB_SPROM4_TXPID2G0, SSB_SPROM4_TXPID2G0_SHIFT);
++      SPEX(txpid2g[1], SSB_SPROM4_TXPID2G01,
++           SSB_SPROM4_TXPID2G1, SSB_SPROM4_TXPID2G1_SHIFT);
++      SPEX(txpid2g[2], SSB_SPROM4_TXPID2G23,
++           SSB_SPROM4_TXPID2G2, SSB_SPROM4_TXPID2G2_SHIFT);
++      SPEX(txpid2g[3], SSB_SPROM4_TXPID2G23,
++           SSB_SPROM4_TXPID2G3, SSB_SPROM4_TXPID2G3_SHIFT);
++
++      SPEX(txpid5gl[0], SSB_SPROM4_TXPID5GL01,
++           SSB_SPROM4_TXPID5GL0, SSB_SPROM4_TXPID5GL0_SHIFT);
++      SPEX(txpid5gl[1], SSB_SPROM4_TXPID5GL01,
++           SSB_SPROM4_TXPID5GL1, SSB_SPROM4_TXPID5GL1_SHIFT);
++      SPEX(txpid5gl[2], SSB_SPROM4_TXPID5GL23,
++           SSB_SPROM4_TXPID5GL2, SSB_SPROM4_TXPID5GL2_SHIFT);
++      SPEX(txpid5gl[3], SSB_SPROM4_TXPID5GL23,
++           SSB_SPROM4_TXPID5GL3, SSB_SPROM4_TXPID5GL3_SHIFT);
++
++      SPEX(txpid5g[0], SSB_SPROM4_TXPID5G01,
++           SSB_SPROM4_TXPID5G0, SSB_SPROM4_TXPID5G0_SHIFT);
++      SPEX(txpid5g[1], SSB_SPROM4_TXPID5G01,
++           SSB_SPROM4_TXPID5G1, SSB_SPROM4_TXPID5G1_SHIFT);
++      SPEX(txpid5g[2], SSB_SPROM4_TXPID5G23,
++           SSB_SPROM4_TXPID5G2, SSB_SPROM4_TXPID5G2_SHIFT);
++      SPEX(txpid5g[3], SSB_SPROM4_TXPID5G23,
++           SSB_SPROM4_TXPID5G3, SSB_SPROM4_TXPID5G3_SHIFT);
++
++      SPEX(txpid5gh[0], SSB_SPROM4_TXPID5GH01,
++           SSB_SPROM4_TXPID5GH0, SSB_SPROM4_TXPID5GH0_SHIFT);
++      SPEX(txpid5gh[1], SSB_SPROM4_TXPID5GH01,
++           SSB_SPROM4_TXPID5GH1, SSB_SPROM4_TXPID5GH1_SHIFT);
++      SPEX(txpid5gh[2], SSB_SPROM4_TXPID5GH23,
++           SSB_SPROM4_TXPID5GH2, SSB_SPROM4_TXPID5GH2_SHIFT);
++      SPEX(txpid5gh[3], SSB_SPROM4_TXPID5GH23,
++           SSB_SPROM4_TXPID5GH3, SSB_SPROM4_TXPID5GH3_SHIFT);
++}
++
++static void sprom_extract_r45(struct ssb_sprom *out, const u16 *in)
++{
++      u16 il0mac_offset;
++
++      if (out->revision == 4)
++              il0mac_offset = SSB_SPROM4_IL0MAC;
++      else
++              il0mac_offset = SSB_SPROM5_IL0MAC;
++
++      SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0);
++      SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A,
++           SSB_SPROM4_ETHPHY_ET1A_SHIFT);
++      SPEX(board_rev, SSB_SPROM4_BOARDREV, 0xFFFF, 0);
++      SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0);
++      if (out->revision == 4) {
++              SPEX(alpha2[0], SSB_SPROM4_CCODE, 0xff00, 8);
++              SPEX(alpha2[1], SSB_SPROM4_CCODE, 0x00ff, 0);
++              SPEX(boardflags_lo, SSB_SPROM4_BFLLO, 0xFFFF, 0);
++              SPEX(boardflags_hi, SSB_SPROM4_BFLHI, 0xFFFF, 0);
++              SPEX(boardflags2_lo, SSB_SPROM4_BFL2LO, 0xFFFF, 0);
++              SPEX(boardflags2_hi, SSB_SPROM4_BFL2HI, 0xFFFF, 0);
++      } else {
++              SPEX(alpha2[0], SSB_SPROM5_CCODE, 0xff00, 8);
++              SPEX(alpha2[1], SSB_SPROM5_CCODE, 0x00ff, 0);
++              SPEX(boardflags_lo, SSB_SPROM5_BFLLO, 0xFFFF, 0);
++              SPEX(boardflags_hi, SSB_SPROM5_BFLHI, 0xFFFF, 0);
++              SPEX(boardflags2_lo, SSB_SPROM5_BFL2LO, 0xFFFF, 0);
++              SPEX(boardflags2_hi, SSB_SPROM5_BFL2HI, 0xFFFF, 0);
++      }
++      SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A,
++           SSB_SPROM4_ANTAVAIL_A_SHIFT);
++      SPEX(ant_available_bg, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_BG,
++           SSB_SPROM4_ANTAVAIL_BG_SHIFT);
++      SPEX(maxpwr_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_MAXP_BG_MASK, 0);
++      SPEX(itssi_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_ITSSI_BG,
++           SSB_SPROM4_ITSSI_BG_SHIFT);
++      SPEX(maxpwr_a, SSB_SPROM4_MAXP_A, SSB_SPROM4_MAXP_A_MASK, 0);
++      SPEX(itssi_a, SSB_SPROM4_MAXP_A, SSB_SPROM4_ITSSI_A,
++           SSB_SPROM4_ITSSI_A_SHIFT);
++      if (out->revision == 4) {
++              SPEX(gpio0, SSB_SPROM4_GPIOA, SSB_SPROM4_GPIOA_P0, 0);
++              SPEX(gpio1, SSB_SPROM4_GPIOA, SSB_SPROM4_GPIOA_P1,
++                   SSB_SPROM4_GPIOA_P1_SHIFT);
++              SPEX(gpio2, SSB_SPROM4_GPIOB, SSB_SPROM4_GPIOB_P2, 0);
++              SPEX(gpio3, SSB_SPROM4_GPIOB, SSB_SPROM4_GPIOB_P3,
++                   SSB_SPROM4_GPIOB_P3_SHIFT);
++      } else {
++              SPEX(gpio0, SSB_SPROM5_GPIOA, SSB_SPROM5_GPIOA_P0, 0);
++              SPEX(gpio1, SSB_SPROM5_GPIOA, SSB_SPROM5_GPIOA_P1,
++                   SSB_SPROM5_GPIOA_P1_SHIFT);
++              SPEX(gpio2, SSB_SPROM5_GPIOB, SSB_SPROM5_GPIOB_P2, 0);
++              SPEX(gpio3, SSB_SPROM5_GPIOB, SSB_SPROM5_GPIOB_P3,
++                   SSB_SPROM5_GPIOB_P3_SHIFT);
++      }
++
++      /* Extract the antenna gain values. */
++      SPEX(antenna_gain.a0, SSB_SPROM4_AGAIN01,
++           SSB_SPROM4_AGAIN0, SSB_SPROM4_AGAIN0_SHIFT);
++      SPEX(antenna_gain.a1, SSB_SPROM4_AGAIN01,
++           SSB_SPROM4_AGAIN1, SSB_SPROM4_AGAIN1_SHIFT);
++      SPEX(antenna_gain.a2, SSB_SPROM4_AGAIN23,
++           SSB_SPROM4_AGAIN2, SSB_SPROM4_AGAIN2_SHIFT);
++      SPEX(antenna_gain.a3, SSB_SPROM4_AGAIN23,
++           SSB_SPROM4_AGAIN3, SSB_SPROM4_AGAIN3_SHIFT);
++
++      sprom_extract_r458(out, in);
++
++      /* TODO - get remaining rev 4 stuff needed */
++}
++
++static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in)
++{
++      int i;
++      u16 o;
++      u16 pwr_info_offset[] = {
++              SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1,
++              SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3
++      };
++      BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) !=
++                      ARRAY_SIZE(out->core_pwr_info));
++
++      SPEX(board_rev, SSB_SPROM8_BOARDREV, 0xFFFF, 0);
++      SPEX(board_type, SSB_SPROM1_SPID, 0xFFFF, 0);
++      SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8);
++      SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0);
++      SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0);
++      SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0);
++      SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0);
++      SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, 0xFFFF, 0);
++      SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A,
++           SSB_SPROM8_ANTAVAIL_A_SHIFT);
++      SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG,
++           SSB_SPROM8_ANTAVAIL_BG_SHIFT);
++      SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0);
++      SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG,
++           SSB_SPROM8_ITSSI_BG_SHIFT);
++      SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0);
++      SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A,
++           SSB_SPROM8_ITSSI_A_SHIFT);
++      SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0);
++      SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK,
++           SSB_SPROM8_MAXP_AL_SHIFT);
++      SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0);
++      SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1,
++           SSB_SPROM8_GPIOA_P1_SHIFT);
++      SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0);
++      SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3,
++           SSB_SPROM8_GPIOB_P3_SHIFT);
++      SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0);
++      SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G,
++           SSB_SPROM8_TRI5G_SHIFT);
++      SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0);
++      SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH,
++           SSB_SPROM8_TRI5GH_SHIFT);
++      SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, 0);
++      SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G,
++           SSB_SPROM8_RXPO5G_SHIFT);
++      SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0);
++      SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G,
++           SSB_SPROM8_RSSISMC2G_SHIFT);
++      SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G,
++           SSB_SPROM8_RSSISAV2G_SHIFT);
++      SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G,
++           SSB_SPROM8_BXA2G_SHIFT);
++      SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0);
++      SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G,
++           SSB_SPROM8_RSSISMC5G_SHIFT);
++      SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G,
++           SSB_SPROM8_RSSISAV5G_SHIFT);
++      SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G,
++           SSB_SPROM8_BXA5G_SHIFT);
++      SPEX(pa0b0, SSB_SPROM8_PA0B0, 0xFFFF, 0);
++      SPEX(pa0b1, SSB_SPROM8_PA0B1, 0xFFFF, 0);
++      SPEX(pa0b2, SSB_SPROM8_PA0B2, 0xFFFF, 0);
++      SPEX(pa1b0, SSB_SPROM8_PA1B0, 0xFFFF, 0);
++      SPEX(pa1b1, SSB_SPROM8_PA1B1, 0xFFFF, 0);
++      SPEX(pa1b2, SSB_SPROM8_PA1B2, 0xFFFF, 0);
++      SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, 0xFFFF, 0);
++      SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, 0xFFFF, 0);
++      SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, 0xFFFF, 0);
++      SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, 0xFFFF, 0);
++      SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, 0xFFFF, 0);
++      SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, 0xFFFF, 0);
++      SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, 0xFFFF, 0);
++      SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, 0xFFFFFFFF, 0);
++      SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, 0xFFFFFFFF, 0);
++      SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, 0xFFFFFFFF, 0);
++      SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0);
++
++      /* Extract the antenna gain values. */
++      SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01,
++           SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT);
++      SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01,
++           SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT);
++      SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23,
++           SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT);
++      SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23,
++           SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT);
++
++      /* Extract cores power info info */
++      for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) {
++              o = pwr_info_offset[i];
++              SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
++                      SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT);
++              SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
++                      SSB_SPROM8_2G_MAXP, 0);
++
++              SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0);
++              SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0);
++              SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0);
++
++              SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
++                      SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT);
++              SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
++                      SSB_SPROM8_5G_MAXP, 0);
++              SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP,
++                      SSB_SPROM8_5GH_MAXP, 0);
++              SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP,
++                      SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT);
++
++              SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0);
++              SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0);
++      }
++
++      /* Extract FEM info */
++      SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G,
++              SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
++      SPEX(fem.ghz2.extpa_gain, SSB_SPROM8_FEM2G,
++              SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
++      SPEX(fem.ghz2.pdet_range, SSB_SPROM8_FEM2G,
++              SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
++      SPEX(fem.ghz2.tr_iso, SSB_SPROM8_FEM2G,
++              SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
++      SPEX(fem.ghz2.antswlut, SSB_SPROM8_FEM2G,
++              SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
++
++      SPEX(fem.ghz5.tssipos, SSB_SPROM8_FEM5G,
++              SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
++      SPEX(fem.ghz5.extpa_gain, SSB_SPROM8_FEM5G,
++              SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
++      SPEX(fem.ghz5.pdet_range, SSB_SPROM8_FEM5G,
++              SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
++      SPEX(fem.ghz5.tr_iso, SSB_SPROM8_FEM5G,
++              SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
++      SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G,
++              SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
++
++      SPEX(leddc_on_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_ON,
++           SSB_SPROM8_LEDDC_ON_SHIFT);
++      SPEX(leddc_off_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_OFF,
++           SSB_SPROM8_LEDDC_OFF_SHIFT);
++
++      SPEX(txchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_TXCHAIN,
++           SSB_SPROM8_TXRXC_TXCHAIN_SHIFT);
++      SPEX(rxchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_RXCHAIN,
++           SSB_SPROM8_TXRXC_RXCHAIN_SHIFT);
++      SPEX(antswitch, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_SWITCH,
++           SSB_SPROM8_TXRXC_SWITCH_SHIFT);
++
++      SPEX(opo, SSB_SPROM8_OFDM2GPO, 0x00ff, 0);
++
++      SPEX_ARRAY8(mcs2gpo, SSB_SPROM8_2G_MCSPO, ~0, 0);
++      SPEX_ARRAY8(mcs5gpo, SSB_SPROM8_5G_MCSPO, ~0, 0);
++      SPEX_ARRAY8(mcs5glpo, SSB_SPROM8_5GL_MCSPO, ~0, 0);
++      SPEX_ARRAY8(mcs5ghpo, SSB_SPROM8_5GH_MCSPO, ~0, 0);
++
++      SPEX(rawtempsense, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_RAWTEMP,
++           SSB_SPROM8_RAWTS_RAWTEMP_SHIFT);
++      SPEX(measpower, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_MEASPOWER,
++           SSB_SPROM8_RAWTS_MEASPOWER_SHIFT);
++      SPEX(tempsense_slope, SSB_SPROM8_OPT_CORRX,
++           SSB_SPROM8_OPT_CORRX_TEMP_SLOPE,
++           SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT);
++      SPEX(tempcorrx, SSB_SPROM8_OPT_CORRX, SSB_SPROM8_OPT_CORRX_TEMPCORRX,
++           SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT);
++      SPEX(tempsense_option, SSB_SPROM8_OPT_CORRX,
++           SSB_SPROM8_OPT_CORRX_TEMP_OPTION,
++           SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT);
++      SPEX(freqoffset_corr, SSB_SPROM8_HWIQ_IQSWP,
++           SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR,
++           SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT);
++      SPEX(iqcal_swp_dis, SSB_SPROM8_HWIQ_IQSWP,
++           SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP,
++           SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT);
++      SPEX(hw_iqcal_en, SSB_SPROM8_HWIQ_IQSWP, SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL,
++           SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT);
++
++      SPEX(bw40po, SSB_SPROM8_BW40PO, ~0, 0);
++      SPEX(cddpo, SSB_SPROM8_CDDPO, ~0, 0);
++      SPEX(stbcpo, SSB_SPROM8_STBCPO, ~0, 0);
++      SPEX(bwduppo, SSB_SPROM8_BWDUPPO, ~0, 0);
++
++      SPEX(tempthresh, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_TRESH,
++           SSB_SPROM8_THERMAL_TRESH_SHIFT);
++      SPEX(tempoffset, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_OFFSET,
++           SSB_SPROM8_THERMAL_OFFSET_SHIFT);
++      SPEX(phycal_tempdelta, SSB_SPROM8_TEMPDELTA,
++           SSB_SPROM8_TEMPDELTA_PHYCAL,
++           SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT);
++      SPEX(temps_period, SSB_SPROM8_TEMPDELTA, SSB_SPROM8_TEMPDELTA_PERIOD,
++           SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT);
++      SPEX(temps_hysteresis, SSB_SPROM8_TEMPDELTA,
++           SSB_SPROM8_TEMPDELTA_HYSTERESIS,
++           SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT);
++      sprom_extract_r458(out, in);
++
++      /* TODO - get remaining rev 8 stuff needed */
++}
++
++static int sprom_extract(struct ssb_sprom *out, const u16 *in, u16 size)
++{
++      memset(out, 0, sizeof(*out));
++
++      out->revision = in[size - 1] & 0x00FF;
++      memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */
++      memset(out->et1mac, 0xFF, 6);
++
++      switch (out->revision) {
++      case 1:
++      case 2:
++      case 3:
++              sprom_extract_r123(out, in);
++              break;
++      case 4:
++      case 5:
++              sprom_extract_r45(out, in);
++              break;
++      case 8:
++              sprom_extract_r8(out, in);
++              break;
++      default:
++              pr_warn("Unsupported SPROM revision %d detected. Will extract v1\n",
++                       out->revision);
++              out->revision = 1;
++              sprom_extract_r123(out, in);
++      }
++
++      if (out->boardflags_lo == 0xFFFF)
++              out->boardflags_lo = 0;  /* per specs */
++      if (out->boardflags_hi == 0xFFFF)
++              out->boardflags_hi = 0;  /* per specs */
++
++      return 0;
++}
++
++static __initdata u16 template_sprom[220];
+ #endif
++
+ int __init bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data)
+ {
+       int ret = 0;
+ #ifdef CONFIG_SSB_PCIHOST
++      u16 size = 0;
++
+       switch (data->type) {
+       case SPROM_DEFAULT:
+               memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
+@@ -71,6 +550,9 @@ int __init bcm63xx_register_fallback_spr
+               return -EINVAL;
+       }
++      if (size > 0)
++              sprom_extract(&bcm63xx_sprom, template_sprom, size);
++
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et1mac, data->mac_addr, ETH_ALEN);
diff --git a/target/linux/brcm63xx/patches-3.14/361-MIPS-BCM63XX-add-raw-fallback-sproms-for-most-common.patch b/target/linux/brcm63xx/patches-3.14/361-MIPS-BCM63XX-add-raw-fallback-sproms-for-most-common.patch
new file mode 100644 (file)
index 0000000..47b00d7
--- /dev/null
@@ -0,0 +1,181 @@
+From 7be5bb46003295c9e04fd4e795593b2deaacd783 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 22:33:38 +0200
+Subject: [PATCH 06/10] MIPS: BCM63XX: add raw fallback sproms for most common
+ ssb cards
+
+Add template sproms for BCM4306, BCM4318, BCM4321, BCM4322, and BCM43222.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c                          | 136 +++++++++++++++++++++
+ .../asm/mach-bcm63xx/bcm63xx_fallback_sprom.h      |   6 +
+ 2 files changed, 142 insertions(+)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -43,6 +43,122 @@ static __initconst struct ssb_sprom bcm6
+       .boardflags_hi          = 0x0000,
+ };
++
++static __initconst u16 bcm4306_sprom[] = {
++      0x4001, 0x0000, 0x0453, 0x14e4, 0x4320, 0x8000, 0x0002, 0x0002,
++      0x1000, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3034, 0x14d4,
++      0xfa91, 0xfe60, 0xffff, 0xffff, 0x004c, 0xffff, 0xffff, 0xffff,
++      0x003e, 0x0a49, 0xff02, 0x0000, 0xff10, 0xffff, 0xffff, 0x0002,
++};
++
++static __initconst u16 bcm4318_sprom[] = {
++      0x2001, 0x0000, 0x0449, 0x14e4, 0x4318, 0x8000, 0x0002, 0x0000,
++      0x1000, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3046, 0x15a7,
++      0xfab0, 0xfe97, 0xffff, 0xffff, 0x0048, 0xffff, 0xffff, 0xffff,
++      0x003e, 0xea49, 0xff02, 0x0000, 0xff08, 0xffff, 0xffff, 0x0002,
++};
++
++static __initconst u16 bcm4321_sprom[] = {
++      0x3001, 0x0000, 0x046c, 0x14e4, 0x4328, 0x8000, 0x0002, 0x0000,
++      0x1000, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x5372, 0x0032, 0x4a01, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0303, 0x0202,
++      0xffff, 0x2728, 0x5b5b, 0x222b, 0x5b5b, 0x1927, 0x5b5b, 0x1e36,
++      0x5b5b, 0x303c, 0x3030, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x3e4c, 0x0000, 0x0000, 0x0000, 0x0000, 0x7838, 0x3a34, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x3e4c,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x7838, 0x3a34, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0x0008, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0004,
++};
++
++static __initconst u16 bcm4322_sprom[] = {
++      0x3001, 0x0000, 0x04bc, 0x14e4, 0x432c, 0x8000, 0x0002, 0x0000,
++      0x1730, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x5372, 0x1209, 0x0200, 0x0000, 0x0400, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0303, 0x0202,
++      0xffff, 0x0033, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0301,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x2048, 0xfe9a, 0x1571, 0xfabd, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x2048, 0xfeb9, 0x159f, 0xfadd, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x3333, 0x5555, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0008,
++};
++
++static __initconst u16 bcm43222_sprom[] = {
++      0x2001, 0x0000, 0x04d4, 0x14e4, 0x4351, 0x8000, 0x0002, 0x0000,
++      0x1730, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x5372, 0x2305, 0x0200, 0x0000, 0x2400, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0303, 0x0202,
++      0xffff, 0x0033, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0325,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x204c, 0xfea6, 0x1717, 0xfa6d, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x204c, 0xfeb8, 0x167c, 0xfa9e, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x3333, 0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x3333, 0x3333, 0x3333, 0x3333, 0x3333, 0x3333, 0x3333,
++      0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0008,
++};
++
+ static struct ssb_sprom bcm63xx_sprom;
+ int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
+@@ -542,6 +658,26 @@ int __init bcm63xx_register_fallback_spr
+       u16 size = 0;
+       switch (data->type) {
++      case SPROM_BCM4306:
++              memcpy(&template_sprom, &bcm4306_sprom, sizeof(bcm4306_sprom));
++              size = ARRAY_SIZE(bcm4306_sprom);
++              break;
++      case SPROM_BCM4318:
++              memcpy(&template_sprom, &bcm4318_sprom, sizeof(bcm4318_sprom));
++              size = ARRAY_SIZE(bcm4306_sprom);
++              break;
++      case SPROM_BCM4321:
++              memcpy(&template_sprom, &bcm4321_sprom, sizeof(bcm4321_sprom));
++              size = ARRAY_SIZE(bcm4321_sprom);
++              break;
++      case SPROM_BCM4322:
++              memcpy(&template_sprom, &bcm4322_sprom, sizeof(bcm4322_sprom));
++              size = ARRAY_SIZE(bcm4322_sprom);
++              break;
++      case SPROM_BCM43222:
++              memcpy(&template_sprom, &bcm43222_sprom, sizeof(bcm43222_sprom));
++              size = ARRAY_SIZE(bcm43222_sprom);
++              break;
+       case SPROM_DEFAULT:
+               memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
+                      sizeof(bcm63xx_sprom));
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -5,6 +5,12 @@
+ enum sprom_type {
+       SPROM_DEFAULT, /* default fallback sprom */
++      /* SSB based */
++      SPROM_BCM4306,
++      SPROM_BCM4318,
++      SPROM_BCM4321,
++      SPROM_BCM4322,
++      SPROM_BCM43222,
+ };
+ struct fallback_sprom_data {
diff --git a/target/linux/brcm63xx/patches-3.14/362-MIPS-BCM63XX-also-register-a-fallback-sprom-for-bcma.patch b/target/linux/brcm63xx/patches-3.14/362-MIPS-BCM63XX-also-register-a-fallback-sprom-for-bcma.patch
new file mode 100644 (file)
index 0000000..3bcaee6
--- /dev/null
@@ -0,0 +1,128 @@
+From 03feb9db77fba3eef3d83e17a87a56979659b248 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Tue, 29 Jul 2014 22:48:26 +0200
+Subject: [PATCH 07/10] MIPS: BCM63XX: also register a fallback sprom for bcma
+
+Similar to SSB, register a fallback sprom handler for BCMA.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/boards/Kconfig |  1 +
+ arch/mips/bcm63xx/sprom.c        | 40 +++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 36 insertions(+), 5 deletions(-)
+
+--- a/arch/mips/bcm63xx/boards/Kconfig
++++ b/arch/mips/bcm63xx/boards/Kconfig
+@@ -4,6 +4,7 @@ menu "Board support"
+ config BOARD_BCM963XX
+        bool "Generic Broadcom 963xx boards"
+       select SSB
++      select BCMA
+       default y
+        help
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -12,6 +12,7 @@
+ #include <linux/string.h>
+ #include <linux/platform_device.h>
+ #include <linux/ssb/ssb.h>
++#include <linux/bcma/bcma.h>
+ #include <bcm63xx_fallback_sprom.h>
+ #include <board_bcm963xx.h>
+@@ -21,7 +22,7 @@
+  * Register a sane SPROMv2 to make the on-board
+  * bcm4318 WLAN work
+  */
+-#ifdef CONFIG_SSB_PCIHOST
++#if defined(CONFIG_SSB_PCIHOST) || defined(CONFIG_BCMA_HOST_PCI)
+ static __initconst struct ssb_sprom bcm63xx_default_sprom = {
+       .revision               = 0x02,
+       .board_rev              = 0x17,
+@@ -43,7 +44,7 @@ static __initconst struct ssb_sprom bcm6
+       .boardflags_hi          = 0x0000,
+ };
+-
++#if defined (CONFIG_SSB_PCIHOST)
+ static __initconst u16 bcm4306_sprom[] = {
+       0x4001, 0x0000, 0x0453, 0x14e4, 0x4320, 0x8000, 0x0002, 0x0002,
+       0x1000, 0x1800, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
+@@ -158,10 +159,12 @@ static __initconst u16 bcm43222_sprom[]
+       0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+       0xffff, 0xffff, 0xffff, 0x0008,
+ };
++#endif /* CONFIG_SSB_PCIHOST */
+ static struct ssb_sprom bcm63xx_sprom;
+-int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
++#if defined(CONFIG_SSB_PCIHOST)
++int bcm63xx_get_fallback_ssb_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
+ {
+       if (bus->bustype == SSB_BUSTYPE_PCI) {
+               memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
+@@ -171,6 +174,20 @@ int bcm63xx_get_fallback_sprom(struct ss
+               return -EINVAL;
+       }
+ }
++#endif
++
++#if defined(CONFIG_BCMA_HOST_PCI)
++int bcm63xx_get_fallback_bcma_sprom(struct bcma_bus *bus, struct ssb_sprom *out)
++{
++      if (bus->hosttype == BCMA_HOSTTYPE_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
+ /* FIXME: use lib_sprom after submission upstream */
+@@ -654,10 +671,11 @@ int __init bcm63xx_register_fallback_spr
+ {
+       int ret = 0;
+-#ifdef CONFIG_SSB_PCIHOST
++#if defined(CONFIG_SSB_PCIHOST) || defined(CONFIG_BCMA_HOST_PCI)
+       u16 size = 0;
+       switch (data->type) {
++#if defined(CONFIG_SSB_PCIHOST)
+       case SPROM_BCM4306:
+               memcpy(&template_sprom, &bcm4306_sprom, sizeof(bcm4306_sprom));
+               size = ARRAY_SIZE(bcm4306_sprom);
+@@ -678,6 +696,7 @@ int __init bcm63xx_register_fallback_spr
+               memcpy(&template_sprom, &bcm43222_sprom, sizeof(bcm43222_sprom));
+               size = ARRAY_SIZE(bcm43222_sprom);
+               break;
++#endif
+       case SPROM_DEFAULT:
+               memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
+                      sizeof(bcm63xx_sprom));
+@@ -692,8 +711,19 @@ int __init bcm63xx_register_fallback_spr
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et1mac, data->mac_addr, ETH_ALEN);
++#endif /* defined(CONFIG_SSB_PCIHOST) || defined(CONFIG_BCMA_HOST_PCI) */
++
++#if defined(CONFIG_SSB_PCIHOST)
++      ret = ssb_arch_register_fallback_sprom(&bcm63xx_get_fallback_ssb_sprom);
++      if (ret)
++              return ret;
++
++#endif
+-      ret = ssb_arch_register_fallback_sprom(&bcm63xx_get_fallback_sprom);
++#if defined(CONFIG_BCMA_HOST_PCI)
++      ret = bcma_arch_register_fallback_sprom(bcm63xx_get_fallback_bcma_sprom);
++      if (ret)
++              return ret;
+ #endif
+       return ret;
+ }
diff --git a/target/linux/brcm63xx/patches-3.14/363-MIPS-BCM63XX-add-BCMA-based-sprom-templates.patch b/target/linux/brcm63xx/patches-3.14/363-MIPS-BCM63XX-add-BCMA-based-sprom-templates.patch
new file mode 100644 (file)
index 0000000..5c0abb9
--- /dev/null
@@ -0,0 +1,303 @@
+From 27bf70e3fe797691b17df07ecbfaf9f5a4419f49 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Wed, 30 Jul 2014 23:14:27 +0200
+Subject: [PATCH 08/10] MIPS: BCM63XX: add BCMA based sprom templates
+
+Add fallback sproms for BCM4313, BCM43131, BCM43217, BCM43225, BCM43227,
+BCM43228, and BCM4331.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c                          | 256 +++++++++++++++++++++
+ .../asm/mach-bcm63xx/bcm63xx_fallback_sprom.h      |   8 +
+ 2 files changed, 264 insertions(+)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -161,6 +161,226 @@ static __initconst u16 bcm43222_sprom[]
+ };
+ #endif /* CONFIG_SSB_PCIHOST */
++#if defined(CONFIG_BCMA_HOST_PCI)
++static __initconst u16 bcm4313_sprom[] = {
++      0x2801, 0x0000, 0x0510, 0x14e4, 0x0078, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x1008, 0x0305, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x4727, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x5372, 0x1215, 0x2a00, 0x0800, 0x0800, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0003, 0xffff, 0x88ff, 0xffff, 0x0003, 0x0202,
++      0xffff, 0x0011, 0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0201,
++      0x0000, 0x7800, 0x7c0a, 0x0398, 0x0008, 0x0000, 0x0000, 0x0000,
++      0x0044, 0x1684, 0xfd0d, 0xff35, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0048, 0xfed2, 0x15d9, 0xfac6, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0008,
++};
++
++static __initconst u16 bcm43131_sprom[] = {
++      0x2801, 0x0000, 0x05f7, 0x14e4, 0x0070, 0xedbe, 0x1c00, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x1008, 0x0305, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x43aa, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x5372, 0x1280, 0x0200, 0x0000, 0x8800, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0003, 0xffff, 0x88ff, 0xffff, 0x0002, 0x0202,
++      0xffff, 0x0022, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0415,
++      0x0000, 0x7800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xfe96, 0x192c, 0xfa15, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xfe91, 0x1950, 0xfa0a, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x4444, 0x4444, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x4444, 0x4444, 0x4444, 0x4444, 0x6666, 0x6666, 0x6666,
++      0x6666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0008,
++};
++
++static __initconst u16 bcm43217_sprom[] = {
++      0x2801, 0x0000, 0x05e9, 0x14e4, 0x0070, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x1008, 0x0305, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x43a9, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x5372, 0x1252, 0x0200, 0x0000, 0x9800, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0003, 0xffff, 0x88ff, 0xffff, 0x0003, 0x0202,
++      0xffff, 0x0033, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0415,
++      0x0000, 0x7800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xfe96, 0x192c, 0xfa15, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xfe91, 0x1950, 0xfa0a, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x4444, 0x4444, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x4444, 0x4444, 0x4444, 0x4444, 0x6666, 0x6666, 0x6666,
++      0x6666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x7a08,
++};
++
++static __initconst u16 bcm43225_sprom[] = {
++      0x2801, 0x0000, 0x04da, 0x14e4, 0x0078, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0x1008, 0x0005, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x4357, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x5372, 0x1200, 0x0200, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x88ff, 0xffff, 0xffff, 0x0303, 0x0202,
++      0xffff, 0x0033, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0325,
++      0xffff, 0x7800, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x204e, 0xfead, 0x1611, 0xfa9a, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x204e, 0xfec1, 0x1674, 0xfab2, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x5555, 0x5555, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x5555, 0x7555, 0x5555, 0x7555, 0x5555, 0x7555, 0x5555,
++      0x7555, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0008,
++};
++
++static __initconst u16 bcm43227_sprom[] = {
++      0x2801, 0x0000, 0x0543, 0x14e4, 0x0070, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x1008, 0x0305, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x4358, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x5372, 0x1402, 0x0200, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0003, 0xffff, 0x88ff, 0xffff, 0x0003, 0x0202,
++      0xffff, 0x0033, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0415,
++      0x0000, 0x7800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xff36, 0x16d2, 0xfaae, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xfeca, 0x159b, 0xfa80, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x4444, 0x4444, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x4444, 0x4444, 0x4444, 0x4444, 0x6666, 0x6666, 0x6666,
++      0x6666, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0008,
++};
++
++static __initconst u16 bcm43228_sprom[] = {
++      0x2801, 0x0000, 0x0011, 0x1028, 0x0070, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x1008, 0x0305, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x4359, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x5372, 0x1203, 0x0200, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0003, 0xffff, 0x88ff, 0xffff, 0x0303, 0x0202,
++      0xffff, 0x0033, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0215,
++      0x0215, 0x7800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x204c, 0xff73, 0x1762, 0xfaa4, 0x3e34, 0x3434, 0xfea1, 0x154c,
++      0xfad0, 0xfea1, 0x144c, 0xfafb, 0xfe7b, 0x13fe, 0xfafc, 0x0000,
++      0x204c, 0xff41, 0x16a3, 0xfa8f, 0x3e34, 0x3434, 0xfe97, 0x1446,
++      0xfb05, 0xfe97, 0x1346, 0xfb32, 0xfeb9, 0x1516, 0xfaee, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x4444, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x4444, 0x4444, 0x4444, 0x4444, 0x8888, 0x8888, 0x8888,
++      0x8888, 0x0000, 0x0000, 0x0000, 0x0000, 0x3333, 0x3333, 0x3333,
++      0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0x3333, 0x3333, 0x3333,
++      0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0x3333, 0x3333, 0x3333,
++      0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xf008,
++};
++
++static __initconst u16 bcm4331_sprom[] = {
++      0x2801, 0x0000, 0x0525, 0x14e4, 0x0078, 0xedbe, 0x0000, 0x2bc4,
++      0x2a64, 0x2964, 0x2c64, 0x3ce7, 0x46ff, 0x47ff, 0x0c00, 0x0820,
++      0x0030, 0x1002, 0x9f28, 0x5d44, 0x8080, 0x1d8f, 0x0032, 0x0100,
++      0xdf00, 0x71f5, 0x8400, 0x0083, 0x8500, 0x2010, 0x0001, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0x1010, 0x0005, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x4331, 0x8000, 0x0002, 0x0000, 0x1f30, 0x1800, 0x0000, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x5372, 0x1104, 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0xffff, 0x88ff, 0xffff, 0x0707, 0x0202,
++      0xff02, 0x0077, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0325,
++      0x0325, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x2048, 0xfe56, 0x16f2, 0xfa44, 0x3e3c, 0x3c3c, 0xfe77, 0x1657,
++      0xfa75, 0xffff, 0xffff, 0xffff, 0xfe76, 0x15da, 0xfa85, 0x0000,
++      0x2048, 0xfe5c, 0x16b5, 0xfa56, 0x3e3c, 0x3c3c, 0xfe7c, 0x169d,
++      0xfa6b, 0xffff, 0xffff, 0xffff, 0xfe7a, 0x1597, 0xfa97, 0x0000,
++      0x2048, 0xfe68, 0x1734, 0xfa46, 0x3e3c, 0x3c3c, 0xfe7f, 0x15e4,
++      0xfa94, 0xffff, 0xffff, 0xffff, 0xfe7d, 0x1582, 0xfa9f, 0x0000,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
++      0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++      0xffff, 0xffff, 0xffff, 0x0009,
++};
++
++#endif  /* CONFIG_BCMA_HOST_PCI */
++
+ static struct ssb_sprom bcm63xx_sprom;
+ #if defined(CONFIG_SSB_PCIHOST)
+@@ -697,6 +917,42 @@ int __init bcm63xx_register_fallback_spr
+               size = ARRAY_SIZE(bcm43222_sprom);
+               break;
+ #endif
++#if defined(CONFIG_BCMA_HOST_PCI)
++      case SPROM_BCM4313:
++              memcpy(&template_sprom, &bcm4313_sprom,
++                       sizeof(bcm4313_sprom));
++              size = ARRAY_SIZE(bcm4313_sprom);
++              break;
++      case SPROM_BCM43131:
++              memcpy(&template_sprom, &bcm43131_sprom,
++                     sizeof(bcm43131_sprom));
++              size = ARRAY_SIZE(bcm43131_sprom);
++              break;
++      case SPROM_BCM43217:
++              memcpy(&template_sprom, &bcm43217_sprom,
++                     sizeof(bcm43217_sprom));
++              size = ARRAY_SIZE(bcm43217_sprom);
++              break;
++      case SPROM_BCM43225:
++              memcpy(&template_sprom, &bcm43225_sprom,
++                     sizeof(bcm43225_sprom));
++              size = ARRAY_SIZE(bcm43225_sprom);
++              break;
++      case SPROM_BCM43227:
++              memcpy(&template_sprom, &bcm43227_sprom,
++                     sizeof(bcm43227_sprom));
++              size = ARRAY_SIZE(bcm43227_sprom);
++              break;
++      case SPROM_BCM43228:
++              memcpy(&template_sprom, &bcm43228_sprom,
++                     sizeof(bcm43228_sprom));
++              size = ARRAY_SIZE(bcm43228_sprom);
++              break;
++      case SPROM_BCM4331:
++              memcpy(&template_sprom, &bcm4331_sprom, sizeof(&bcm4331_sprom));
++              size = ARRAY_SIZE(bcm4331_sprom);
++              break;
++#endif
+       case SPROM_DEFAULT:
+               memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
+                      sizeof(bcm63xx_sprom));
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -11,6 +11,14 @@ enum sprom_type {
+       SPROM_BCM4321,
+       SPROM_BCM4322,
+       SPROM_BCM43222,
++      /* BCMA based */
++      SPROM_BCM4313,
++      SPROM_BCM43131,
++      SPROM_BCM43217,
++      SPROM_BCM43225,
++      SPROM_BCM43227,
++      SPROM_BCM43228,
++      SPROM_BCM4331,
+ };
+ struct fallback_sprom_data {
diff --git a/target/linux/brcm63xx/patches-3.14/364-MIPS-BCM63XX-allow-board-files-to-provide-sprom-fixu.patch b/target/linux/brcm63xx/patches-3.14/364-MIPS-BCM63XX-allow-board-files-to-provide-sprom-fixu.patch
new file mode 100644 (file)
index 0000000..e74a62a
--- /dev/null
@@ -0,0 +1,67 @@
+From 8575548b08e33c9ff4fd540abec09dd177e33682 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Thu, 31 Jul 2014 19:12:33 +0200
+Subject: [PATCH 09/10] MIPS: BCM63XX: allow board files to provide sprom
+ fixups
+
+Allow board_info files to supply fixups for the base sproms to adapt
+them to the actual used sprom contents in case they do not use the
+default ones.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c                                  | 14 +++++++++++++-
+ .../mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h |  8 ++++++++
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -883,6 +883,14 @@ static int sprom_extract(struct ssb_spro
+       return 0;
+ }
++void sprom_apply_fixups(u16 *sprom, struct sprom_fixup *fixups, int n)
++{
++      unsigned int i;
++
++      for (i = 0; i < n; i++)
++              sprom[fixups[i].offset] = fixups[i].value;
++}
++
+ static __initdata u16 template_sprom[220];
+ #endif
+@@ -961,8 +969,12 @@ int __init bcm63xx_register_fallback_spr
+               return -EINVAL;
+       }
+-      if (size > 0)
++      if (size > 0) {
++              sprom_apply_fixups(template_sprom, data->board_fixups,
++                                 data->num_board_fixups);
++
+               sprom_extract(&bcm63xx_sprom, template_sprom, size);
++      }
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+       memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -21,9 +21,17 @@ enum sprom_type {
+       SPROM_BCM4331,
+ };
++struct sprom_fixup {
++      u16 offset;
++      u16 value;
++};
++
+ struct fallback_sprom_data {
+       u8 mac_addr[ETH_ALEN];
+       enum sprom_type type;
++
++      struct sprom_fixup *board_fixups;
++      unsigned int num_board_fixups;
+ };
+ int bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data);
diff --git a/target/linux/brcm63xx/patches-3.14/365-MIPS-BCM63XX-allow-setting-a-pci-bus-device-for-fall.patch b/target/linux/brcm63xx/patches-3.14/365-MIPS-BCM63XX-allow-setting-a-pci-bus-device-for-fall.patch
new file mode 100644 (file)
index 0000000..15c760a
--- /dev/null
@@ -0,0 +1,102 @@
+From f393eaacf178e7e8a61eb11a96edd7dfb35cb49d Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Thu, 31 Jul 2014 20:39:44 +0200
+Subject: [PATCH 10/10] MIPS: BCM63XX: allow setting a pci bus/device for
+ fallback sprom
+
+Warn if the set pci bus/slot does not match the actual request.
+
+Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+---
+ arch/mips/bcm63xx/sprom.c                          | 31 ++++++++++++++++++----
+ .../asm/mach-bcm63xx/bcm63xx_fallback_sprom.h      |  3 +++
+ 2 files changed, 29 insertions(+), 5 deletions(-)
+
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -381,13 +381,25 @@ static __initconst u16 bcm4331_sprom[] =
+ #endif  /* CONFIG_BCMA_HOST_PCI */
+-static struct ssb_sprom bcm63xx_sprom;
++struct fallback_sprom_match {
++      u8 pci_bus;
++      u8 pci_dev;
++      struct ssb_sprom sprom;
++};
++
++static struct fallback_sprom_match fallback_sprom;
+ #if defined(CONFIG_SSB_PCIHOST)
+ int bcm63xx_get_fallback_ssb_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
+ {
+       if (bus->bustype == SSB_BUSTYPE_PCI) {
+-              memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
++              if (bus->host_pci->bus->number != fallback_sprom.pci_bus ||
++                  PCI_SLOT(bus->host_pci->devfn) != fallback_sprom.pci_dev)
++                      pr_warn("ssb_fallback_sprom: pci bus/device num mismatch: expected %i/%i, but got %i/%i\n",
++                              fallback_sprom.pci_bus, fallback_sprom.pci_dev,
++                              bus->host_pci->bus->number,
++                              PCI_SLOT(bus->host_pci->devfn));
++              memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
+               return 0;
+       } else {
+               printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n");
+@@ -400,7 +412,13 @@ int bcm63xx_get_fallback_ssb_sprom(struc
+ int bcm63xx_get_fallback_bcma_sprom(struct bcma_bus *bus, struct ssb_sprom *out)
+ {
+       if (bus->hosttype == BCMA_HOSTTYPE_PCI) {
+-              memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
++              if (bus->host_pci->bus->number != fallback_sprom.pci_bus ||
++                  PCI_SLOT(bus->host_pci->devfn) != fallback_sprom.pci_dev)
++                      pr_warn("bcma_fallback_sprom: pci bus/device num mismatch: expected %i/%i, but got %i/%i\n",
++                              fallback_sprom.pci_bus, fallback_sprom.pci_dev,
++                              bus->host_pci->bus->number,
++                              PCI_SLOT(bus->host_pci->devfn));
++              memcpy(out, &fallback_sprom.sprom, sizeof(struct ssb_sprom));
+               return 0;
+       } else {
+               printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n");
+@@ -962,8 +980,8 @@ int __init bcm63xx_register_fallback_spr
+               break;
+ #endif
+       case SPROM_DEFAULT:
+-              memcpy(&bcm63xx_sprom, &bcm63xx_default_sprom,
+-                     sizeof(bcm63xx_sprom));
++              memcpy(&fallback_sprom.sprom, &bcm63xx_default_sprom,
++                     sizeof(bcm63xx_default_sprom));
+               break;
+       default:
+               return -EINVAL;
+@@ -973,12 +991,15 @@ int __init bcm63xx_register_fallback_spr
+               sprom_apply_fixups(template_sprom, data->board_fixups,
+                                  data->num_board_fixups);
+-              sprom_extract(&bcm63xx_sprom, template_sprom, size);
++              sprom_extract(&fallback_sprom.sprom, template_sprom, size);
+       }
+-      memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+-      memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
+-      memcpy(bcm63xx_sprom.et1mac, data->mac_addr, ETH_ALEN);
++      memcpy(fallback_sprom.sprom.et0mac, data->mac_addr, ETH_ALEN);
++      memcpy(fallback_sprom.sprom.et0mac, data->mac_addr, ETH_ALEN);
++      memcpy(fallback_sprom.sprom.et1mac, data->mac_addr, ETH_ALEN);
++
++      fallback_sprom.pci_bus = data->pci_bus;
++      fallback_sprom.pci_dev = data->pci_dev;
+ #endif /* defined(CONFIG_SSB_PCIHOST) || defined(CONFIG_BCMA_HOST_PCI) */
+ #if defined(CONFIG_SSB_PCIHOST)
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
+@@ -30,6 +30,9 @@ struct fallback_sprom_data {
+       u8 mac_addr[ETH_ALEN];
+       enum sprom_type type;
++      u8 pci_bus;
++      u8 pci_dev;
++
+       struct sprom_fixup *board_fixups;
+       unsigned int num_board_fixups;
+ };
index b5937e98e9162011443a021407038609d1590329..9f6d04b75d04a1c40c44c64f6e4f739a9d1bce05 100644 (file)
@@ -1,6 +1,6 @@
 --- 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
+@@ -101,6 +101,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;
index 4a3a4e9f43ef86663a48ce373b5e4b7a5521591e..b4ccc267a778f9a0be15e3efefe4f8c9fccea48b 100644 (file)
@@ -18,7 +18,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
  
  #include "board_common.h"
  
-@@ -197,6 +198,7 @@ int __init board_register_devices(void)
+@@ -159,6 +160,7 @@ int __init board_register_devices(void)
        int button_count = 0;
        int led_count = 0;
        int usbh_ports = 0;
@@ -26,17 +26,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
  
        if (board.has_uart0)
                bcm63xx_uart_register(0);
-@@ -242,7 +244,8 @@ int __init board_register_devices(void)
-        * do this after registering enet devices
-        */
- #ifdef CONFIG_SSB_PCIHOST
--      if (!board_get_mac_address(bcm63xx_sprom.il0mac)) {
-+      if (!board.has_caldata &&
-+          !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(
-@@ -289,5 +292,9 @@ int __init board_register_devices(void)
+@@ -247,5 +249,9 @@ int __init board_register_devices(void)
                platform_device_register(&bcm63xx_gpio_keys_device);
        }
  
@@ -48,15 +38,15 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
  }
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -8,6 +8,7 @@
- #include <bcm63xx_dev_enet.h>
+@@ -9,6 +9,7 @@
  #include <bcm63xx_dev_usb_usbd.h>
  #include <bcm63xx_dev_dsp.h>
+ #include <bcm63xx_fallback_sprom.h>
 +#include <pci_ath9k_fixup.h>
  
  /*
   * flash mapping
-@@ -15,6 +16,11 @@
+@@ -16,6 +17,11 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -68,10 +58,10 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
  /*
   * board definition
   */
-@@ -34,6 +40,10 @@ struct board_info {
-       unsigned int    has_dsp:1;
+@@ -36,6 +42,10 @@ struct board_info {
        unsigned int    has_uart0:1;
        unsigned int    has_uart1:1;
+       unsigned int    use_fallback_sprom:1;
 +      unsigned int    has_caldata:2;
 +
 +      /* wifi calibration data config */
index 23f16ad8e8cfc822521fbdee6f6bd025e8d2d851..7a7c8258d75eb02533d51dc7e1f35c36fcd4bad6 100644 (file)
@@ -17,8 +17,8 @@ Subject: [PATCH 61/72] BCM63XX: add a fixup for ath9k devices
                   setup.o timer.o dev-dsp.o dev-enet.o dev-flash.o \
                   dev-pcmcia.o dev-rng.o dev-spi.o dev-hsspi.o dev-uart.o \
                   dev-wdt.o dev-usb-ehci.o dev-usb-ohci.o dev-usb-usbd.o \
--                 usb-common.o
-+                 pci-ath9k-fixup.o usb-common.o
+-                 usb-common.o sprom.o
++                 pci-ath9k-fixup.o usb-common.o sprom.o
  obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
  
  obj-y         += boards/
index 9d0626b6baecced610dbba1fd203e3b97625256f..78a2cf58443d6bd7fef3061fde395ea826fd50fd 100644 (file)
@@ -11,7 +11,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
 
 --- 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)
+@@ -221,7 +221,7 @@ int __init board_register_devices(void)
        if (board.num_spis)
                spi_register_board_info(board.spis, board.num_spis);
  
index 24b91bbb5626be15ceb4a043a83a4a6d474b7659..2c85d34165585d630861996037e0c37b0f128779 100644 (file)
@@ -11,7 +11,7 @@
  #endif /* _PCI_ATH9K_FIXUP */
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -19,6 +19,7 @@
+@@ -20,6 +20,7 @@
  struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
@@ -21,7 +21,7 @@
  /*
 --- a/arch/mips/bcm63xx/pci-ath9k-fixup.c
 +++ b/arch/mips/bcm63xx/pci-ath9k-fixup.c
-@@ -181,12 +181,14 @@ static void ath9k_pci_fixup(struct pci_d
+@@ -184,12 +184,14 @@ static void ath9k_pci_fixup(struct pci_d
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup);
  
@@ -39,7 +39,7 @@
                return;
 --- 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)
+@@ -251,7 +251,8 @@ int __init board_register_devices(void)
  
        /* register any fixups */
        for (i = 0; i < board.has_caldata; i++)
index f10e10a8d1462b3899078b0c7041bc8561ee996c..d720b5f3afdd4c818b77d97646c958f79dbde14e 100644 (file)
@@ -1,6 +1,6 @@
 --- 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)
+@@ -252,7 +252,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,
@@ -11,7 +11,7 @@
  }
 --- a/arch/mips/bcm63xx/pci-ath9k-fixup.c
 +++ b/arch/mips/bcm63xx/pci-ath9k-fixup.c
-@@ -182,13 +182,14 @@ static void ath9k_pci_fixup(struct pci_d
+@@ -185,13 +185,14 @@ static void ath9k_pci_fixup(struct pci_d
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup);
  
  void __init pci_enable_ath9k_fixup(unsigned slot, u32 offset,
@@ -29,7 +29,7 @@
                return;
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -20,6 +20,7 @@ struct ath9k_caldata {
+@@ -21,6 +21,7 @@ struct ath9k_caldata {
        unsigned int    slot;
        u32             caldata_offset;
        unsigned int    endian_check:1;
index a511af03afacea2816c9ea8ee06482d2ae093af7..7a3d8cfed2b5e85cd57abdb2196f90ce9d197adb 100644 (file)
@@ -21,8 +21,8 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
                   setup.o timer.o dev-dsp.o dev-enet.o dev-flash.o \
                   dev-pcmcia.o dev-rng.o dev-spi.o dev-hsspi.o dev-uart.o \
                   dev-wdt.o dev-usb-ehci.o dev-usb-ohci.o dev-usb-usbd.o \
--                 pci-ath9k-fixup.o usb-common.o
-+                 pci-ath9k-fixup.o pci-rt2x00-fixup.o usb-common.o
+-                 pci-ath9k-fixup.o usb-common.o sprom.o
++                 pci-ath9k-fixup.o pci-rt2x00-fixup.o usb-common.o sprom.o
  obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
  
  obj-y         += boards/
@@ -36,7 +36,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
  #include "board_common.h"
  
-@@ -293,9 +294,19 @@ int __init board_register_devices(void)
+@@ -250,9 +251,19 @@ int __init board_register_devices(void)
        }
  
        /* register any fixups */
@@ -158,15 +158,15 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
  
 --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -9,6 +9,7 @@
- #include <bcm63xx_dev_usb_usbd.h>
+@@ -10,6 +10,7 @@
  #include <bcm63xx_dev_dsp.h>
+ #include <bcm63xx_fallback_sprom.h>
  #include <pci_ath9k_fixup.h>
 +#include <pci_rt2x00_fixup.h>
  
  /*
   * flash mapping
-@@ -16,11 +17,15 @@
+@@ -17,11 +18,15 @@
  #define BCM963XX_CFE_VERSION_OFFSET   0x570
  #define BCM963XX_NVRAM_OFFSET         0x580
  
@@ -183,7 +183,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
  };
  
  /*
-@@ -45,7 +50,7 @@ struct board_info {
+@@ -47,7 +52,7 @@ struct board_info {
        unsigned int    has_caldata:2;
  
        /* wifi calibration data config */
index 49163f199c0d77a6577fc29a3845c75a6a4e9ee5..04fa4ca7dcbf206f6541a9ba9be8dfb261f96e66 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -539,6 +539,56 @@ static struct board_info __initdata boar
+@@ -548,6 +548,56 @@ static struct board_info __initdata boar
  
        .has_ohci0 = 1,
  };
@@ -57,7 +57,7 @@
  #endif
  
  /*
-@@ -717,6 +767,7 @@ static const struct board_info __initcon
+@@ -729,6 +779,7 @@ static const struct board_info __initcon
        &board_DV201AMR,
        &board_96348gw_a,
        &board_rta1025w_16,
index 10baa3fb3a0d1b18d52ed8d459e4e14e2f7cb1df..75291f5859b9fe18929865ab4d4abca3b8cb124e 100644 (file)
@@ -26,7 +26,7 @@
  /*
   * known 3368 boards
   */
-@@ -739,6 +751,605 @@ static struct board_info __initdata boar
+@@ -751,6 +763,605 @@ static struct board_info __initdata boar
  
        .has_ohci0                      = 1,
  };
  #endif
  
  /*
-@@ -775,6 +1386,11 @@ static const struct board_info __initcon
+@@ -787,6 +1398,11 @@ static const struct board_info __initcon
        &board_96358vw2,
        &board_AGPFS0,
        &board_DWVS0,
  #endif
  };
  
-@@ -783,6 +1399,16 @@ static void __init boardid_fixup(u8 *boo
+@@ -795,6 +1411,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();
  
index fd47881a617c84fa088fd5161a768056cf288fcf..25b28aa685a4c28a9b073ed4c7902eec31217d2e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -214,6 +214,40 @@ static struct board_info __initdata boar
+@@ -215,6 +215,40 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -41,7 +41,7 @@
  #endif
  
  /*
-@@ -1365,6 +1399,7 @@ static const struct board_info __initcon
+@@ -1377,6 +1411,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6338
        &board_96338gw,
        &board_96338w,
index 9485ad9af876a21ecb9f2bd0dd08412158b72b00..6a2977a713120e6b68b3f94e16b121ad9bb53be0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -742,6 +742,98 @@ static struct board_info __initdata boar
+@@ -753,6 +753,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,
-@@ -1420,6 +1512,7 @@ static const struct board_info __initcon
+@@ -1432,6 +1524,7 @@ static const struct board_info __initcon
        &board_96358vw,
        &board_96358vw2,
        &board_AGPFS0,
index 20b838bd8db552f5a09abcc36175f58434bd7a18..62a20bbea90dd992bff55d90307de499989fc5f0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -878,6 +878,61 @@ static struct board_info __initdata boar
+@@ -890,6 +890,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,
-@@ -1514,6 +1569,7 @@ static const struct board_info __initcon
+@@ -1526,6 +1581,7 @@ static const struct board_info __initcon
        &board_AGPFS0,
        &board_CPVA642,
        &board_DWVS0,
index e9fc8419e243ac3f6361b87cca863b06ed895a45..a1a0c8c649e4cb802f88e5b5a61ce1a893021c7a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -635,6 +635,67 @@ static struct board_info __initdata boar
+@@ -644,6 +644,67 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -68,7 +68,7 @@
  #endif
  
  /*
-@@ -1561,6 +1622,7 @@ static const struct board_info __initcon
+@@ -1573,6 +1634,7 @@ static const struct board_info __initcon
        &board_96348gw_a,
        &board_rta1025w_16,
        &board_96348_D4PW,
index a3b305e99a766fe997cb9a2e44d76bd2794859ae..a55519792b108403fc2eb41a5eb2db4ce986d09a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -502,6 +502,112 @@ static struct board_info __initdata boar
+@@ -507,6 +507,112 @@ static struct board_info __initdata boar
        },
  };
  
  static struct board_info __initdata board_FAST2404 = {
        .name                           = "F@ST2404",
        .expected_cpu_id                = 0x6348,
-@@ -1615,6 +1721,8 @@ static const struct board_info __initcon
+@@ -1627,6 +1733,8 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6348
        &board_96348r,
        &board_96348gw,
index 4e9d12a0f7ccc3cdfaa8c4c1c7f1173a35c29899..0ebe03c521ba98b10092d0981202b71ba57fcd91 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -802,6 +802,78 @@ static struct board_info __initdata boar
+@@ -811,6 +811,78 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -79,7 +79,7 @@
  #endif
  
  /*
-@@ -1731,6 +1803,7 @@ static const struct board_info __initcon
+@@ -1743,6 +1815,7 @@ static const struct board_info __initcon
        &board_rta1025w_16,
        &board_96348_D4PW,
        &board_spw500v,
index 3ea981e6c0e40bfb77154a5f0646a2a152521854..3a3ca4daac8198eeb17a5faf923ef7e18e8eedb5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1770,6 +1770,76 @@ static struct board_info __initdata boar
+@@ -1782,6 +1782,76 @@ static struct board_info __initdata boar
        .spis = nb4_spi_devices,
        .num_spis = ARRAY_SIZE(nb4_spi_devices),
  };
@@ -77,7 +77,7 @@
  #endif
  
  /*
-@@ -1818,6 +1888,7 @@ static const struct board_info __initcon
+@@ -1830,6 +1900,7 @@ static const struct board_info __initcon
        &board_nb4_ser_r2,
        &board_nb4_fxc_r1,
        &board_nb4_fxc_r2,
index 34bb77dc0b2bf17339f49a21025cbdf03b087dbd..f7153ec3ba06ed44ea2c5af3e0ec2379bd586af5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -248,6 +248,45 @@ static struct board_info __initdata boar
+@@ -249,6 +249,45 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -46,7 +46,7 @@
  #endif
  
  /*
-@@ -1856,6 +1895,7 @@ static const struct board_info __initcon
+@@ -1868,6 +1907,7 @@ static const struct board_info __initcon
        &board_96338gw,
        &board_96338w,
        &board_96338w2_e7t,
index 3a8391efae752fc31d98ac1e76daabbe3db1315a..0cc770d24a1fb1d7ed90b73589245f702c054520 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1879,6 +1879,72 @@ static struct board_info __initdata boar
+@@ -1891,6 +1891,72 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -73,7 +73,7 @@
  #endif
  
  /*
-@@ -1929,6 +1995,7 @@ static const struct board_info __initcon
+@@ -1941,6 +2007,7 @@ static const struct board_info __initcon
        &board_nb4_fxc_r1,
        &board_nb4_fxc_r2,
        &board_HW553,
index e2beacd5d62c185046577b85de5aa03be1868bcf..b61eba90e7f9377d4c7bd5f4f58d28687c2056a2 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -913,6 +913,65 @@ static struct board_info __initdata boar
+@@ -922,6 +922,65 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -66,7 +66,7 @@
  #endif
  
  /*
-@@ -1980,6 +2039,7 @@ static const struct board_info __initcon
+@@ -1992,6 +2051,7 @@ static const struct board_info __initcon
        &board_96348_D4PW,
        &board_spw500v,
        &board_96348sv,
@@ -74,7 +74,7 @@
  #endif
  
  #ifdef CONFIG_BCM63XX_CPU_6358
-@@ -2055,6 +2115,22 @@ void __init board_bcm963xx_init(void)
+@@ -2067,6 +2127,22 @@ void __init board_bcm963xx_init(void)
                val &= MPI_CSBASE_BASE_MASK;
        }
        boot_addr = (u8 *)KSEG1ADDR(val);
index 09263214032d34e50b14db3b4c42927b95daff16..e289cb9cadd0638d9772884b5a970abbdbf82180 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -473,6 +473,64 @@ static struct board_info __initdata boar
+@@ -477,6 +477,64 @@ static struct board_info __initdata boar
        },
  };
  
@@ -65,7 +65,7 @@
  static struct board_info __initdata board_96348gw = {
        .name                           = "96348GW",
        .expected_cpu_id                = 0x6348,
-@@ -2040,6 +2098,7 @@ static const struct board_info __initcon
+@@ -2052,6 +2110,7 @@ static const struct board_info __initcon
        &board_spw500v,
        &board_96348sv,
        &board_V2500V_BB,
index 72a67abcabc4890bba0ff25205a5d350dbd400bf..e1629a30c2a82b0d3ff1f5027c392ca256ae46e7 100644 (file)
@@ -14,7 +14,7 @@ Subject: [PATCH 44/44] MIPS: BCM63XX: add inventel Livebox support
 
 --- a/arch/mips/bcm63xx/boards/Kconfig
 +++ b/arch/mips/bcm63xx/boards/Kconfig
-@@ -7,4 +7,10 @@ config BOARD_BCM963XX
+@@ -8,4 +8,10 @@ config BOARD_BCM963XX
        default y
         help
  
@@ -33,7 +33,7 @@ Subject: [PATCH 44/44] MIPS: BCM63XX: add inventel Livebox support
 +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)
+@@ -58,7 +58,7 @@ void __init board_prom_init(void)
        if (fw_arg3 == CFE_EPTSEAL)
                board_bcm963xx_init();
        else
index aa0cd8b7a9b1bd20b199ff57554af9b8010625ae..4a2c49313a2d76fa8a8f4a999fc04c05d2590c7d 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -531,6 +531,51 @@ static struct board_info __initdata boar
+@@ -535,6 +535,51 @@ static struct board_info __initdata boar
  };
  
  
@@ -52,7 +52,7 @@
  static struct board_info __initdata board_96348gw = {
        .name                           = "96348GW",
        .expected_cpu_id                = 0x6348,
-@@ -2099,6 +2144,7 @@ static const struct board_info __initcon
+@@ -2111,6 +2156,7 @@ static const struct board_info __initcon
        &board_96348sv,
        &board_V2500V_BB,
        &board_V2110,
index 3dac59a6c9fd66777d9a84feb425a5aaa1883233..8323141840419328a755ebbfcd3ff42d5de64a64 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1301,6 +1301,8 @@ static struct board_info __initdata boar
+@@ -1312,6 +1312,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,
-@@ -1316,6 +1318,7 @@ static struct board_info __initdata boar
+@@ -1328,6 +1330,7 @@ static struct board_info __initdata boar
        },
  
        .has_ohci0                      = 1,
index af31ee346b6f25f11197e82f14553a23ee6b86c7..83152de489dc1731bb152b04f728bb1064f685b0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -576,6 +576,69 @@ static struct board_info __initdata boar
+@@ -580,6 +580,69 @@ static struct board_info __initdata boar
        },
  };
  
@@ -70,7 +70,7 @@
  static struct board_info __initdata board_96348gw = {
        .name                           = "96348GW",
        .expected_cpu_id                = 0x6348,
-@@ -2148,6 +2211,7 @@ static const struct board_info __initcon
+@@ -2160,6 +2223,7 @@ static const struct board_info __initcon
        &board_V2500V_BB,
        &board_V2110,
        &board_ct536_ct5621,
index df532dd43bcc995b4b3007e08fc1416065663873..39a1b39a1dc045d286a3931a2d1d88edbf257478 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -841,6 +841,7 @@ static struct board_info __initdata boar
+@@ -847,6 +847,7 @@ static struct board_info __initdata boar
        .name                           = "RTA1025W_16",
        .expected_cpu_id                = 0x6348,
  
index 9949c75beb68af22087b9e9a6fd8b372357bde1d..cfa82dda0ac95ec04a667e41bedd909b3f00f0de 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1139,6 +1139,42 @@ static struct board_info __initdata boar
+@@ -1148,6 +1148,42 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -43,7 +43,7 @@
  #endif
  
  /*
-@@ -2213,6 +2249,7 @@ static const struct board_info __initcon
+@@ -2225,6 +2261,7 @@ static const struct board_info __initcon
        &board_V2110,
        &board_ct536_ct5621,
        &board_96348A_122,
index 217c429049c3d301b823836f9dad6187c5de610f..a05e09b72da26774a6ee053176b7ab0864b7cc95 100644 (file)
@@ -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
-@@ -2213,6 +2213,85 @@ static struct board_info __initdata boar
+@@ -2225,6 +2225,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[] = {
-@@ -2267,6 +2346,10 @@ static const struct board_info __initcon
+@@ -2279,6 +2358,10 @@ static const struct board_info __initcon
        &board_HW553,
        &board_spw303v,
  #endif
@@ -109,7 +109,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
  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
+@@ -85,12 +85,25 @@ void __init board_early_setup(const stru
                bcm63xx_pci_enabled = 1;
                if (BCMCPU_IS_6348())
                        val |= GPIO_MODE_6348_G2_PCI;
index 61de2b8e76556c93dd8c7d1ef7b41c575463bed4..f42f2c9a31577034a6bca551f489a26573de4a99 100644 (file)
@@ -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
-@@ -2289,6 +2289,72 @@ static struct board_info __initdata boar
+@@ -2301,6 +2301,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
  
  /*
-@@ -2349,6 +2415,7 @@ static const struct board_info __initcon
+@@ -2361,6 +2427,7 @@ static const struct board_info __initcon
  
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
index 721e872eeb78d517675ea717c2b839e62879f220..63f7bd2578ee6b3034462004f002d0055292418f 100644 (file)
@@ -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
-@@ -96,13 +96,45 @@ static struct board_info __initdata boar
+@@ -97,13 +97,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,
-@@ -119,7 +151,7 @@ static struct board_info __initdata boar
+@@ -120,7 +152,7 @@ static struct board_info __initdata boar
                        .active_low     = 1,
                },
                {
index dbe68485cd0e6dcb13be7f2e766cc0e95134c941..912915658aa7005cdad218d096e786e5dac624f3 100644 (file)
@@ -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
-@@ -157,6 +157,76 @@ static struct board_info __initdata boar
+@@ -158,6 +158,76 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -86,7 +86,7 @@ Subject: [PATCH] MIPS: BCM63XX: add 963281TAN reference board
  #endif
  
  /*
-@@ -2398,6 +2468,7 @@ static const struct board_info __initcon
+@@ -2410,6 +2480,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
index b3759020a3072877af3d21e886c2bd8a3dba641b..1717827ff4e1224b80036de5748ee49d134b6da0 100644 (file)
@@ -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
-@@ -227,6 +227,111 @@ static struct board_info __initdata boar
+@@ -228,6 +228,111 @@ static struct board_info __initdata boar
  
        },
  };
@@ -122,7 +122,7 @@ Subject: [PATCH 70/79] MIPS: BCM63XX: Add board definition for D-Link
  #endif
  
  /*
-@@ -2469,6 +2574,7 @@ static const struct board_info __initcon
+@@ -2481,6 +2586,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
        &board_963281TAN,
index 1d2a51e2aa7c8ae28d052ad6bc42a851f17cd410..ff20c1f241c24679ac417293ffcebd69d76a5439 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1382,6 +1382,59 @@ static struct board_info __initdata boar
+@@ -1391,6 +1391,59 @@ static struct board_info __initdata boar
        .ephy_reset_gpio_flags          = GPIOF_INIT_HIGH,
  };
  
@@ -60,7 +60,7 @@
  #endif
  
  /*
-@@ -2604,6 +2657,7 @@ static const struct board_info __initcon
+@@ -2616,6 +2669,7 @@ static const struct board_info __initcon
        &board_ct536_ct5621,
        &board_96348A_122,
        &board_CPVA502plus,
index 3a906300e74646910cede9698ebdc82a440140fa..23283da545deb0978f45073b80552a89ad36fe9c 100644 (file)
@@ -13,7 +13,7 @@
  /*
   * known 3368 boards
   */
-@@ -2335,6 +2341,117 @@ static struct board_info __initdata boar
+@@ -2347,6 +2353,117 @@ static struct board_info __initdata boar
        .num_spis = ARRAY_SIZE(nb4_spi_devices),
  };
  
  static struct board_info __initdata board_HW553 = {
        .name                           = "HW553",
        .expected_cpu_id                = 0x6358,
-@@ -2672,6 +2789,7 @@ static const struct board_info __initcon
+@@ -2684,6 +2801,7 @@ static const struct board_info __initcon
        &board_nb4_ser_r2,
        &board_nb4_fxc_r1,
        &board_nb4_fxc_r2,
index b1d84817438a93b99307acd9ebd63a1c52cc0aa9..202cf3183d3a0d1b3a7c230f5daee21b5bbff645 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -2587,6 +2587,73 @@ static struct board_info __initdata boar
+@@ -2599,6 +2599,73 @@ static struct board_info __initdata boar
                },
        }
  };
@@ -74,7 +74,7 @@
  #endif
  
  /*
-@@ -2792,6 +2859,7 @@ static const struct board_info __initcon
+@@ -2804,6 +2871,7 @@ static const struct board_info __initcon
        &board_ct6373_1,
        &board_HW553,
        &board_spw303v,
index f107b9b9e8ee44ef051185e13d394fc5c398df7e..7876af2bd1ecec6bbc57326e318c24ab26584aff 100644 (file)
@@ -17,7 +17,7 @@
  
  #define CT6373_PID_OFFSET             0xff80
  #define CT6373_74X164_GPIO_BASE       64
-@@ -2656,6 +2659,104 @@ static struct board_info __initdata boar
+@@ -2668,6 +2671,104 @@ static struct board_info __initdata boar
  };
  #endif
  
  /*
   * known 6368 boards
   */
-@@ -2862,6 +2963,10 @@ static const struct board_info __initcon
+@@ -2874,6 +2975,10 @@ static const struct board_info __initcon
        &board_DVAG3810BN,
  #endif
  
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
-@@ -2883,6 +2988,11 @@ static void __init boardid_fixup(u8 *boo
+@@ -2895,6 +3000,11 @@ static void __init boardid_fixup(u8 *boo
                }
        }
  
index 2fc3a86860795506ad017bdb06372ac298d88bbe..2ff535fe578af066878e08c5fa0465fcd94d64bd 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1053,6 +1053,57 @@ static struct board_info __initdata boar
+@@ -1059,6 +1059,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,
-@@ -2931,6 +2982,7 @@ static const struct board_info __initcon
+@@ -2943,6 +2994,7 @@ static const struct board_info __initcon
        &board_96348gw_10,
        &board_96348gw_11,
        &board_FAST2404,
index f73629ea55a16a9cf22847f07fb24527bc1c6c85..d649291902f8df4cf9ef4a372794730905f3110c 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -237,6 +237,126 @@ static struct board_info __initdata boar
+@@ -238,6 +238,126 @@ static struct board_info __initdata boar
        },
  };
  
  static struct board_info __initdata board_dsl_274xb_f1 = {
        .name                           = "AW4339U",
        .expected_cpu_id                = 0x6328,
-@@ -2963,6 +3083,7 @@ static const struct board_info __initcon
+@@ -2975,6 +3095,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
        &board_963281TAN,
index fe8e577843be0a5615254536edd8fe2fb3f60b2d..cdaf62a986a682f15190cbcacd0b899b25eb2143 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -167,6 +167,79 @@ static struct board_info __initdata boar
+@@ -168,6 +168,79 @@ static struct board_info __initdata boar
        },
  };
  
@@ -80,7 +80,7 @@
  static struct board_info __initdata board_963281TAN = {
        .name                           = "963281TAN",
        .expected_cpu_id                = 0x6328,
-@@ -3082,6 +3155,7 @@ static const struct board_info __initcon
+@@ -3094,6 +3167,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
index 89ad361130378c2efe409b4e2dd9584eb1bfd0c2..4a843206be472009327b3c8b9a49ba74ed78d235 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -167,6 +167,73 @@ static struct board_info __initdata boar
+@@ -168,6 +168,73 @@ static struct board_info __initdata boar
        },
  };
  
@@ -74,7 +74,7 @@
  static struct board_info __initdata board_AR5387un = {
        .name                                   = "96328A-1441N1",
        .expected_cpu_id                        = 0x6328,
-@@ -3155,6 +3222,7 @@ static const struct board_info __initcon
+@@ -3167,6 +3234,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
index dd67e1da03c345e3b89b665bb1b2a9eb8fbf8874..a40263a82b943cdd57c5e4e6ecc7d8d8c14f3740 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -775,6 +775,55 @@ static struct board_info __initdata boar
+@@ -776,6 +776,55 @@ static struct board_info __initdata boar
  
        .has_uart0                      = 1,
  };
@@ -56,7 +56,7 @@
  #endif
  
  /*
-@@ -3236,6 +3285,7 @@ static const struct board_info __initcon
+@@ -3248,6 +3297,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6345
        &board_96345gw2,
index b3b81ede13036884f583c307dda37e564e5a5845..04c6b2b93d46d57e39b5aa190af844ed3208c533 100644 (file)
@@ -8,7 +8,7 @@
  #include <linux/platform_device.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/spi_gpio.h>
-@@ -2885,6 +2886,492 @@ static struct board_info __initdata boar
+@@ -2897,6 +2898,492 @@ static struct board_info __initdata boar
        },
  };
  
   /* T-Home Speedport W 303V Typ B */
  static struct board_info __initdata board_spw303v = {
        .name                   = "96358-502V",
-@@ -3324,6 +3811,10 @@ static const struct board_info __initcon
+@@ -3336,6 +3823,10 @@ static const struct board_info __initcon
        &board_nb4_fxc_r2,
        &board_ct6373_1,
        &board_HW553,
        &board_spw303v,
        &board_DVAG3810BN,
  #endif
-@@ -3343,13 +3834,37 @@ static void __init boardid_fixup(u8 *boo
+@@ -3355,13 +3846,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();
  
index d07f2958fd5240f609776ea8365711d0874878ca..bfdb63fc0da49e7fa057ff33fc31e28ad6d76095 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -825,6 +825,60 @@ static struct board_info __initdata boar
+@@ -826,6 +826,60 @@ static struct board_info __initdata boar
                },
        },
  };
@@ -61,7 +61,7 @@
  #endif
  
  /*
-@@ -3773,6 +3827,7 @@ static const struct board_info __initcon
+@@ -3785,6 +3839,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6345
        &board_96345gw2,
        &board_rta770bw,
index 9b857f24c8e559792c59ecfbf567f1635f78fc06..c9496ce091d3a248c7480757d36cff04a9fd2bc0 100644 (file)
@@ -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
-@@ -1468,6 +1468,122 @@ static struct board_info __initdata boar
+@@ -1474,6 +1474,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,
-@@ -3817,6 +3933,7 @@ static const struct board_info __initcon
+@@ -3829,6 +3945,7 @@ static const struct board_info __initcon
        &board_963281TAN,
        &board_A4001N1,
        &board_dsl_274xb_f1,
index 2de0022dd00ddf54fec700fcf7be99438e919af9..821a18579302dee09d124c30d52691e680f89790 100644 (file)
@@ -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
-@@ -3772,6 +3772,96 @@ static struct board_info __initdata boar
+@@ -3784,6 +3784,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
  
  /*
-@@ -3993,6 +4083,7 @@ static const struct board_info __initcon
+@@ -4005,6 +4095,7 @@ static const struct board_info __initcon
  
  #ifdef CONFIG_BCM63XX_CPU_6362
        &board_nb6,
index a21c6caee07663d39e8fe169d7c8e9fab69ea9bd..7e34c75f00d2975233b3ad1af5494a5452c305ba 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -2195,6 +2195,99 @@ static struct board_info __initdata boar
+@@ -2206,6 +2206,99 @@ static struct board_info __initdata boar
  
        .has_ohci0 = 1,
        .has_ehci0 = 1,
index 83050cc258920b9dffcd372fab7041d4ed5075b1..a85ff06c3ce02058a7a54edee625478228fbf15d 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1643,6 +1643,19 @@ static struct board_info __initdata boar
+@@ -1652,6 +1652,19 @@ static struct board_info __initdata boar
        },
  
        .has_ohci0 = 1,
index 11c76bf7e94c3dfa2592c523d8e1d61c6a79c827..2572d34d1909938d141a90545ff8b14f10c9aaec 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -987,6 +987,17 @@ static struct board_info __initdata boar
+@@ -990,6 +990,17 @@ static struct board_info __initdata boar
                        .active_low     = 1,
                },
        },
index dcba2d0d76e67c3e1f18945b68f158a7080908b5..2f6285c3f34f47f03c91e4525906809fe7061b9c 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -615,6 +615,8 @@ static struct board_info __initdata boar
+@@ -616,6 +616,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,
        },
-@@ -658,6 +660,8 @@ static struct board_info __initdata boar
+@@ -659,6 +661,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,
        },
-@@ -943,6 +947,8 @@ static struct board_info __initdata boar
+@@ -946,6 +950,8 @@ static struct board_info __initdata boar
                .use_internal_phy       = 1,
        },
        .enet1 = {
@@ -27,7 +27,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1015,6 +1021,8 @@ static struct board_info __initdata boar
+@@ -1019,6 +1025,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
@@ -36,7 +36,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1244,6 +1252,8 @@ static struct board_info __initdata boar
+@@ -1249,6 +1257,8 @@ static struct board_info __initdata boar
                .use_internal_phy       = 1,
        },
        .enet1 = {
@@ -45,7 +45,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1419,6 +1429,8 @@ static struct board_info __initdata boar
+@@ -1425,6 +1435,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
@@ -54,7 +54,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1609,6 +1621,8 @@ static struct board_info __initdata boar
+@@ -1616,6 +1628,8 @@ static struct board_info __initdata boar
                .use_internal_phy       = 1,
        },
        .enet1 = {
@@ -63,7 +63,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1630,6 +1644,8 @@ static struct board_info __initdata boar
+@@ -1638,6 +1652,8 @@ static struct board_info __initdata boar
                .use_internal_phy       = 1,
        },
        .enet1 = {
@@ -72,7 +72,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -1649,6 +1665,8 @@ static struct board_info __initdata boar
+@@ -1658,6 +1674,8 @@ static struct board_info __initdata boar
                .use_internal_phy       = 1,
        },
        .enet1 = {
@@ -81,7 +81,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -2020,6 +2038,8 @@ static struct board_info __initdata boar
+@@ -2030,6 +2048,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
@@ -90,7 +90,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -2072,6 +2092,8 @@ static struct board_info __initdata boar
+@@ -2083,6 +2103,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
@@ -99,7 +99,7 @@
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -2213,6 +2235,8 @@ static struct board_info __initdata boar
+@@ -2224,6 +2246,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
                .force_speed_100        = 1,
                .force_duplex_full      = 1,
        },
-@@ -2330,6 +2354,8 @@ static struct board_info __initdata boar
+@@ -2342,6 +2366,8 @@ static struct board_info __initdata boar
        },
  
        .enet1 = {
index fe4f545a0c91477f2064724fbd1e3e1419213772..aa160ca77273bda8e87d256dfcf5082a79ae37b8 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -2362,6 +2362,94 @@ static struct board_info __initdata boar
+@@ -2374,6 +2374,94 @@ static struct board_info __initdata boar
  
        .has_ohci0                      = 1,
        .has_ehci0                      = 1,
index bb37d560b826aace200edc321f516261e9564d5e..d5dd2f46281a2b2efa95751edad17707b277ecff 100644 (file)
@@ -94,7 +94,7 @@
   * known 6328 boards
   */
  #ifdef CONFIG_BCM63XX_CPU_6328
-@@ -4247,6 +4334,9 @@ static const struct board_info __initcon
+@@ -4259,6 +4346,9 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_3368
        &board_cvg834g,
  #endif
index 26e27b20e21a364df45be4c87130856ab738d098..e633e55db9541a274cacbf37ceb6127a079fb9d4 100644 (file)
@@ -95,7 +95,7 @@
  #endif
  
  /*
-@@ -4336,6 +4424,7 @@ static const struct board_info __initcon
+@@ -4348,6 +4436,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6318
        &board_96318ref,
index 5c40a9f14bab3f33397562f3a7a10286f802a910..b9977e2fbf77928be472746d2dcd7f743dbee444 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4416,6 +4416,75 @@ static struct board_info __initdata boar
+@@ -4428,6 +4428,75 @@ static struct board_info __initdata boar
  #endif
  
  /*
@@ -76,7 +76,7 @@
   * all boards
   */
  static const struct board_info __initconst *bcm963xx_boards[] = {
-@@ -4500,6 +4569,9 @@ static const struct board_info __initcon
+@@ -4512,6 +4581,9 @@ static const struct board_info __initcon
        &board_96368mvwg,
        &board_96368mvngr,
  #endif
index a3990383e80dc90b3a1a0ae22771e1cb5b291f74..9e3de0d50d821ce0f900adcd164acb764f58c8be 100644 (file)
@@ -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
-@@ -2192,6 +2192,51 @@ static struct board_info __initdata boar
+@@ -2201,6 +2201,51 @@ static struct board_info __initdata boar
        },
  };
  
@@ -60,7 +60,7 @@ Signed-off-by: Adrian Feliks <mexit@o2.pl>
  #endif
  
  /*
-@@ -4536,6 +4581,7 @@ static const struct board_info __initcon
+@@ -4548,6 +4593,7 @@ static const struct board_info __initcon
        &board_96348A_122,
        &board_CPVA502plus,
        &board_96348W3,
index 3645db61f0f9cf96b0e7e59445e87ad700cc7757..5b8da2bbd810e55021805c59dd8802a17eb59d08 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4527,6 +4527,108 @@ static struct board_info __initdata boar
+@@ -4539,6 +4539,108 @@ static struct board_info __initdata boar
                },
        },
  };
  #endif
  
  /*
-@@ -4617,6 +4719,7 @@ static const struct board_info __initcon
+@@ -4629,6 +4731,7 @@ static const struct board_info __initcon
  #endif
  #ifdef CONFIG_BCM63XX_CPU_63268
        &board_963269bhr,
index 2b83137b2aa836bd5761e30bf26bd1362871cfa3..e15c0933f79847e60b5181f745b7f46b6f411c34 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4464,6 +4464,131 @@ static struct board_info __initdata boar
+@@ -4476,6 +4476,131 @@ static struct board_info __initdata boar
   * known 63268/63269 boards
   */
  #ifdef CONFIG_BCM63XX_CPU_63268
  static struct board_info __initdata board_963269bhr = {
        .name                           = "963269BHR",
        .expected_cpu_id                = 0x63268,
-@@ -4718,6 +4843,7 @@ static const struct board_info __initcon
+@@ -4730,6 +4855,7 @@ static const struct board_info __initcon
        &board_96368mvngr,
  #endif
  #ifdef CONFIG_BCM63XX_CPU_63268
index eb0a2e6dfb77e79b5e51058274ce8ca29f77c766..8b81aef8e09048f5ec13814ee7e8a0ac848c7d9e 100644 (file)
@@ -8,7 +8,7 @@
  #include <linux/platform_device.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/spi_gpio.h>
-@@ -4458,6 +4459,99 @@ static struct board_info __initdata boar
+@@ -4470,6 +4471,99 @@ static struct board_info __initdata boar
        .has_ohci0 = 1,
        .has_ehci0 = 1,
  };
  #endif
  
  /*
-@@ -4841,6 +4935,7 @@ static const struct board_info __initcon
+@@ -4853,6 +4947,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
index 07565d98a021e966bd6c749ac391975bd51ce467..c1000f10b8aad63d3507e8236ff9817a1ddc9534 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4460,6 +4460,98 @@ static struct board_info __initdata boar
+@@ -4472,6 +4472,98 @@ static struct board_info __initdata boar
        .has_ehci0 = 1,
  };
  
@@ -99,7 +99,7 @@
  static struct b53_platform_data WAP5813n_b53_pdata = {
        .alias = "eth0",
  };
-@@ -4935,6 +5027,7 @@ static const struct board_info __initcon
+@@ -4947,6 +5039,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
index 16350a387597ab032321c74e36d40adb68a8eada..1822ee84196cf0c435814a37bd210322cb2f63d9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4552,6 +4552,98 @@ static struct board_info __initdata boar
+@@ -4564,6 +4564,98 @@ static struct board_info __initdata boar
        },
  };
  
@@ -99,7 +99,7 @@
  static struct b53_platform_data WAP5813n_b53_pdata = {
        .alias = "eth0",
  };
-@@ -5028,6 +5120,7 @@ static const struct board_info __initcon
+@@ -5040,6 +5132,7 @@ static const struct board_info __initcon
        &board_96368mvwg,
        &board_96368mvngr,
        &board_VR3025u,
index bb910ad17f23439c7ca57546a4d07d84a226cbd9..6c432addf868757a72b043a63d194862bd0f1cca 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -4460,6 +4460,89 @@ static struct board_info __initdata boar
+@@ -4472,6 +4472,89 @@ static struct board_info __initdata boar
        .has_ehci0 = 1,
  };
  
@@ -90,7 +90,7 @@
  static struct board_info __initdata board_VR3025u = {
        .name                                   = "96368M-1541N",
        .expected_cpu_id                = 0x6368,
-@@ -5119,6 +5202,7 @@ static const struct board_info __initcon
+@@ -5131,6 +5214,7 @@ static const struct board_info __initcon
  #ifdef CONFIG_BCM63XX_CPU_6368
        &board_96368mvwg,
        &board_96368mvngr,
index aae5845d273c538f9dd7a11a09910b30d21d3aa7..f107ef33e2a9c8d79ce0a7e19a92e46aa3c60d43 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -3438,6 +3438,49 @@ static struct board_info __initdata boar
+@@ -3450,6 +3450,49 @@ static struct board_info __initdata boar
        .num_spis = ARRAY_SIZE(ct6373_spi_devices),
  };
  
@@ -50,7 +50,7 @@
  static struct board_info __initdata board_HW553 = {
        .name                           = "HW553",
        .expected_cpu_id                = 0x6358,
-@@ -5185,6 +5228,7 @@ static const struct board_info __initcon
+@@ -5197,6 +5240,7 @@ static const struct board_info __initcon
        &board_nb4_fxc_r1,
        &board_nb4_fxc_r2,
        &board_ct6373_1,
index 14c26b8ce8c72eef7d6eaaa85b346f9991e92067..3cbe8160cc471339d461130b4a3a953fb921b5b5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -554,6 +554,88 @@ static struct board_info __initdata boar
+@@ -555,6 +555,88 @@ static struct board_info __initdata boar
        },
  };
  
@@ -89,7 +89,7 @@
  static struct board_info __initdata board_A4001N1 = {
        .name                                   = "963281T_TEF",
        .expected_cpu_id                        = 0x6328,
-@@ -5176,6 +5258,7 @@ static const struct board_info __initcon
+@@ -5188,6 +5270,7 @@ static const struct board_info __initcon
        &board_AR5381u,
        &board_AR5387un,
        &board_963281TAN,
index 1e75cfe0d60fc38b44173ff58cfc81ef57cba559..4acf40d627f511b50884b5d2c2191a39ec503c71 100644 (file)
@@ -1,27 +1,20 @@
---- 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/export.h>
- #include <linux/spi/spi.h>
- #include <asm/addrspace.h>
- #include <asm/bootinfo.h>
-@@ -49,7 +50,7 @@ static struct board_info board;
-  * bcm4318 WLAN work
+--- a/arch/mips/bcm63xx/sprom.c
++++ b/arch/mips/bcm63xx/sprom.c
+@@ -8,6 +8,7 @@
   */
- #ifdef CONFIG_SSB_PCIHOST
--static struct ssb_sprom bcm63xx_sprom = {
-+struct ssb_sprom bcm63xx_sprom = {
-       .revision               = 0x02,
-       .board_rev              = 0x17,
-       .country_code           = 0x0,
-@@ -69,6 +70,7 @@ static struct ssb_sprom bcm63xx_sprom =
-       .boardflags_lo          = 0x2848,
-       .boardflags_hi          = 0x0000,
+ #include <linux/init.h>
++#include <linux/export.h>
+ #include <linux/kernel.h>
+ #include <linux/string.h>
+ #include <linux/platform_device.h>
+@@ -387,7 +388,8 @@ struct fallback_sprom_match {
+       struct ssb_sprom sprom;
  };
-+EXPORT_SYMBOL(bcm63xx_sprom);
  
- int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
- {
+-static struct fallback_sprom_match fallback_sprom;
++struct fallback_sprom_match fallback_sprom;
++EXPORT_SYMBOL(fallback_sprom);
+ #if defined(CONFIG_SSB_PCIHOST)
+ int bcm63xx_get_fallback_ssb_sprom(struct ssb_bus *bus, struct ssb_sprom *out)