aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.3
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2013-07-11 22:20:26 +0000
committerHauke Mehrtens <hauke@openwrt.org>2013-07-11 22:20:26 +0000
commitc09cf1db9473ea3ca88ed633801b2042126c08b2 (patch)
tree8b95f2ea5ea87e7c27370bd70256b457048aeac1 /target/linux/brcm47xx/patches-3.3
parent0a2e45ea30966e3587a9d937361bc1c05c6588d6 (diff)
downloadupstream-c09cf1db9473ea3ca88ed633801b2042126c08b2.tar.gz
upstream-c09cf1db9473ea3ca88ed633801b2042126c08b2.tar.bz2
upstream-c09cf1db9473ea3ca88ed633801b2042126c08b2.zip
kernel: update bcma and ssb to wireless-testing/master master-2013-07-03
This updates 025-bcma_backport.patch and 020-ssb_update.patch to a version of ssb and bcma used in recent wireless-testing. I removed all patches adding serial and nand flash support before doing so to not conflict with the existing flash support in the brcm47xx target. This update was done to easily update the wireless drivers afterwards. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@37261 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.3')
-rw-r--r--target/linux/brcm47xx/patches-3.3/020-bcma-move-parallel-flash-into-a-union.patch81
-rw-r--r--target/linux/brcm47xx/patches-3.3/021-bcma-add-serial-flash-support-to-bcma.patch22
-rw-r--r--target/linux/brcm47xx/patches-3.3/022-ssb-move-flash-to-chipcommon.patch12
-rw-r--r--target/linux/brcm47xx/patches-3.3/023-ssb-add-serial-flash-support.patch12
-rw-r--r--target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch14
-rw-r--r--target/linux/brcm47xx/patches-3.3/201-bcma-just-do-the-necessary-things-in-early-register.patch181
-rw-r--r--target/linux/brcm47xx/patches-3.3/202-bcma-init-sprom-struct-earlier.patch37
-rw-r--r--target/linux/brcm47xx/patches-3.3/203-bcma-use-fallback-sprom-if-sprom-on-card-was-not-val.patch15
-rw-r--r--target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch26
-rw-r--r--target/linux/brcm47xx/patches-3.3/240-bcma-pcie-config-access.patch104
-rw-r--r--target/linux/brcm47xx/patches-3.3/280-activate_ssb_support_in_usb.patch2
-rw-r--r--target/linux/brcm47xx/patches-3.3/500-ssb-add-function-to-return-number-of-gpio-lines.patch2
-rw-r--r--target/linux/brcm47xx/patches-3.3/501-bcma-add-gpio-driver.patch132
-rw-r--r--target/linux/brcm47xx/patches-3.3/700-ssb-gigabit-ethernet-driver.patch37
-rw-r--r--target/linux/brcm47xx/patches-3.3/976-ssb_increase_pci_delay.patch2
15 files changed, 46 insertions, 633 deletions
diff --git a/target/linux/brcm47xx/patches-3.3/020-bcma-move-parallel-flash-into-a-union.patch b/target/linux/brcm47xx/patches-3.3/020-bcma-move-parallel-flash-into-a-union.patch
index 98c855fbd8..a82577c2c8 100644
--- a/target/linux/brcm47xx/patches-3.3/020-bcma-move-parallel-flash-into-a-union.patch
+++ b/target/linux/brcm47xx/patches-3.3/020-bcma-move-parallel-flash-into-a-union.patch
@@ -12,7 +12,7 @@
break;
--- a/drivers/bcma/driver_mips.c
+++ b/drivers/bcma/driver_mips.c
-@@ -189,6 +189,7 @@ static void bcma_core_mips_flash_detect(
+@@ -218,6 +218,7 @@ static void bcma_core_mips_flash_detect(
break;
case BCMA_CC_FLASHT_PARA:
bcma_info(bus, "found parallel flash.\n");
@@ -22,78 +22,9 @@
--- a/include/linux/bcma/bcma_driver_chipcommon.h
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -122,10 +122,68 @@
- #define BCMA_CC_JCTL_EXT_EN 2 /* Enable external targets */
- #define BCMA_CC_JCTL_EN 1 /* Enable Jtag master */
- #define BCMA_CC_FLASHCTL 0x0040
-+
-+/* Start/busy bit in flashcontrol */
-+#define BCMA_CC_FLASHCTL_OPCODE 0x000000ff
-+#define BCMA_CC_FLASHCTL_ACTION 0x00000700
-+#define BCMA_CC_FLASHCTL_CS_ACTIVE 0x00001000 /* Chip Select Active, rev >= 20 */
- #define BCMA_CC_FLASHCTL_START 0x80000000
- #define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START
-+
-+/* flashcontrol action+opcodes for ST flashes */
-+#define BCMA_CC_FLASHCTL_ST_WREN 0x0006 /* Write Enable */
-+#define BCMA_CC_FLASHCTL_ST_WRDIS 0x0004 /* Write Disable */
-+#define BCMA_CC_FLASHCTL_ST_RDSR 0x0105 /* Read Status Register */
-+#define BCMA_CC_FLASHCTL_ST_WRSR 0x0101 /* Write Status Register */
-+#define BCMA_CC_FLASHCTL_ST_READ 0x0303 /* Read Data Bytes */
-+#define BCMA_CC_FLASHCTL_ST_PP 0x0302 /* Page Program */
-+#define BCMA_CC_FLASHCTL_ST_SE 0x02d8 /* Sector Erase */
-+#define BCMA_CC_FLASHCTL_ST_BE 0x00c7 /* Bulk Erase */
-+#define BCMA_CC_FLASHCTL_ST_DP 0x00b9 /* Deep Power-down */
-+#define BCMA_CC_FLASHCTL_ST_RES 0x03ab /* Read Electronic Signature */
-+#define BCMA_CC_FLASHCTL_ST_CSA 0x1000 /* Keep chip select asserted */
-+#define BCMA_CC_FLASHCTL_ST_SSE 0x0220 /* Sub-sector Erase */
-+
-+
-+/* flashcontrol action+opcodes for Atmel flashes */
-+#define BCMA_CC_FLASHCTL_AT_READ 0x07e8
-+#define BCMA_CC_FLASHCTL_AT_PAGE_READ 0x07d2
-+#define BCMA_CC_FLASHCTL_AT_BUF1_READ
-+#define BCMA_CC_FLASHCTL_AT_BUF2_READ
-+#define BCMA_CC_FLASHCTL_AT_STATUS 0x01d7
-+#define BCMA_CC_FLASHCTL_AT_BUF1_WRITE 0x0384
-+#define BCMA_CC_FLASHCTL_AT_BUF2_WRITE 0x0387
-+#define BCMA_CC_FLASHCTL_AT_BUF1_ERASE_PROGRAM 0x0283
-+#define BCMA_CC_FLASHCTL_AT_BUF2_ERASE_PROGRAM 0x0286
-+#define BCMA_CC_FLASHCTL_AT_BUF1_PROGRAM 0x0288
-+#define BCMA_CC_FLASHCTL_AT_BUF2_PROGRAM 0x0289
-+#define BCMA_CC_FLASHCTL_AT_PAGE_ERASE 0x0281
-+#define BCMA_CC_FLASHCTL_AT_BLOCK_ERASE 0x0250
-+#define BCMA_CC_FLASHCTL_AT_BUF1_WRITE_ERASE_PROGRAM 0x0382
-+#define BCMA_CC_FLASHCTL_AT_BUF2_WRITE_ERASE_PROGRAM 0x0385
-+#define BCMA_CC_FLASHCTL_AT_BUF1_LOAD 0x0253
-+#define BCMA_CC_FLASHCTL_AT_BUF2_LOAD 0x0255
-+#define BCMA_CC_FLASHCTL_AT_BUF1_COMPARE 0x0260
-+#define BCMA_CC_FLASHCTL_AT_BUF2_COMPARE 0x0261
-+#define BCMA_CC_FLASHCTL_AT_BUF1_REPROGRAM 0x0258
-+#define BCMA_CC_FLASHCTL_AT_BUF2_REPROGRAM 0x0259
-+
- #define BCMA_CC_FLASHADDR 0x0044
- #define BCMA_CC_FLASHDATA 0x0048
-+
-+/* Status register bits for ST flashes */
-+#define BCMA_CC_FLASHDATA_ST_WIP 0x01 /* Write In Progress */
-+#define BCMA_CC_FLASHDATA_ST_WEL 0x02 /* Write Enable Latch */
-+#define BCMA_CC_FLASHDATA_ST_BP_MASK 0x1c /* Block Protect */
-+#define BCMA_CC_FLASHDATA_ST_BP_SHIFT 2
-+#define BCMA_CC_FLASHDATA_ST_SRWD 0x80 /* Status Register Write Disable */
-+
-+/* Status register bits for Atmel flashes */
-+#define BCMA_CC_FLASHDATA_AT_READY 0x80
-+#define BCMA_CC_FLASHDATA_AT_MISMATCH 0x40
-+#define BCMA_CC_FLASHDATA_AT_ID_MASK 0x38
-+#define BCMA_CC_FLASHDATA_AT_ID_SHIFT 3
-+
- #define BCMA_CC_BCAST_ADDR 0x0050
- #define BCMA_CC_BCAST_DATA 0x0054
- #define BCMA_CC_GPIOPULLUP 0x0058 /* Rev >= 20 only */
-@@ -360,6 +418,12 @@
- /* 4313 Chip specific ChipControl register bits */
- #define BCMA_CCTRL_4313_12MA_LED_DRIVE 0x00000007 /* 12 mA drive strengh for later 4313 */
+@@ -562,6 +562,12 @@
+ #define BCMA_RES_4314_HT_AVAIL BIT(28)
+ #define BCMA_RES_4314_MACPHY_CLK_AVAIL BIT(29)
+#define BCMA_FLASH2 0x1c000000 /* Flash Region 2 (region 1 shadowed here) */
+#define BCMA_FLASH2_SZ 0x02000000 /* Size of Flash Region 2 */
@@ -104,7 +35,7 @@
/* Data for the PMU, if available.
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
*/
-@@ -369,6 +433,10 @@ struct bcma_chipcommon_pmu {
+@@ -571,6 +577,10 @@ struct bcma_chipcommon_pmu {
};
#ifdef CONFIG_BCMA_DRIVER_MIPS
@@ -115,7 +46,7 @@
struct bcma_pflash {
u8 buswidth;
u32 window;
-@@ -394,7 +462,10 @@ struct bcma_drv_cc {
+@@ -597,7 +607,10 @@ struct bcma_drv_cc {
u16 fast_pwrup_delay;
struct bcma_chipcommon_pmu pmu;
#ifdef CONFIG_BCMA_DRIVER_MIPS
diff --git a/target/linux/brcm47xx/patches-3.3/021-bcma-add-serial-flash-support-to-bcma.patch b/target/linux/brcm47xx/patches-3.3/021-bcma-add-serial-flash-support-to-bcma.patch
index 7382636b3d..9c0ce687a6 100644
--- a/target/linux/brcm47xx/patches-3.3/021-bcma-add-serial-flash-support-to-bcma.patch
+++ b/target/linux/brcm47xx/patches-3.3/021-bcma-add-serial-flash-support-to-bcma.patch
@@ -1,6 +1,6 @@
--- a/drivers/bcma/Kconfig
+++ b/drivers/bcma/Kconfig
-@@ -38,6 +38,11 @@ config BCMA_HOST_SOC
+@@ -39,6 +39,11 @@ config BCMA_HOST_SOC
bool
depends on BCMA_DRIVER_MIPS
@@ -23,9 +23,9 @@
bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o
--- a/drivers/bcma/bcma_private.h
+++ b/drivers/bcma/bcma_private.h
-@@ -51,6 +51,11 @@ void bcma_chipco_serial_init(struct bcma
- u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc);
- u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc);
+@@ -55,6 +55,11 @@ void bcma_chipco_serial_init(struct bcma
+ u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc);
+ u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc);
+#ifdef CONFIG_BCMA_SFLASH
+/* driver_chipcommon_sflash.c */
@@ -438,7 +438,7 @@
+}
--- a/drivers/bcma/driver_mips.c
+++ b/drivers/bcma/driver_mips.c
-@@ -185,7 +185,13 @@ static void bcma_core_mips_flash_detect(
+@@ -214,7 +214,13 @@ static void bcma_core_mips_flash_detect(
switch (bus->drv_cc.capabilities & BCMA_CC_CAP_FLASHT) {
case BCMA_CC_FLASHT_STSER:
case BCMA_CC_FLASHT_ATSER:
@@ -455,7 +455,7 @@
bcma_info(bus, "found parallel flash.\n");
--- a/include/linux/bcma/bcma_driver_chipcommon.h
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -435,6 +435,7 @@ struct bcma_chipcommon_pmu {
+@@ -579,6 +579,7 @@ struct bcma_chipcommon_pmu {
#ifdef CONFIG_BCMA_DRIVER_MIPS
enum bcma_flash_type {
BCMA_PFLASH,
@@ -463,7 +463,7 @@
};
struct bcma_pflash {
-@@ -443,6 +444,14 @@ struct bcma_pflash {
+@@ -587,6 +588,14 @@ struct bcma_pflash {
u32 window_size;
};
@@ -478,7 +478,7 @@
struct bcma_serial_port {
void *regs;
unsigned long clockspeed;
-@@ -465,6 +474,9 @@ struct bcma_drv_cc {
+@@ -610,6 +619,9 @@ struct bcma_drv_cc {
enum bcma_flash_type flash_type;
union {
struct bcma_pflash pflash;
@@ -488,9 +488,9 @@
};
int nr_serial_ports;
-@@ -520,4 +532,14 @@ extern void bcma_chipco_regctl_maskset(s
- u32 offset, u32 mask, u32 set);
- extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid);
+@@ -680,4 +692,14 @@ extern void bcma_pmu_spuravoid_pllupdate
+
+ extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc);
+#ifdef CONFIG_BCMA_SFLASH
+/* Chipcommon sflash support. */
diff --git a/target/linux/brcm47xx/patches-3.3/022-ssb-move-flash-to-chipcommon.patch b/target/linux/brcm47xx/patches-3.3/022-ssb-move-flash-to-chipcommon.patch
index 12055bff03..4fa76e159e 100644
--- a/target/linux/brcm47xx/patches-3.3/022-ssb-move-flash-to-chipcommon.patch
+++ b/target/linux/brcm47xx/patches-3.3/022-ssb-move-flash-to-chipcommon.patch
@@ -63,11 +63,11 @@
struct ssb_bus *bus = mcore->dev->bus;
- mcore->flash_buswidth = 2;
-- if (bus->chipco.dev) {
+- if (ssb_chipco_available(&bus->chipco)) {
- mcore->flash_window = 0x1c000000;
- mcore->flash_window_size = 0x02000000;
+ /* When there is no chipcommon on the bus there is 4MB flash */
-+ if (!bus->chipco.dev) {
++ if (!ssb_chipco_available(&bus->chipco)) {
+ pr_info("found parallel flash.\n");
+ bus->chipco.flash_type = SSB_PFLASH;
+ bus->chipco.pflash.window = SSB_FLASH1;
@@ -104,7 +104,7 @@
--- a/include/linux/ssb/ssb_driver_chipcommon.h
+++ b/include/linux/ssb/ssb_driver_chipcommon.h
-@@ -582,6 +582,18 @@ struct ssb_chipcommon_pmu {
+@@ -583,6 +583,18 @@ struct ssb_chipcommon_pmu {
u32 crystalfreq; /* The active crystal frequency (in kHz) */
};
@@ -123,10 +123,10 @@
struct ssb_chipcommon {
struct ssb_device *dev;
u32 capabilities;
-@@ -589,6 +601,12 @@ struct ssb_chipcommon {
- /* Fast Powerup Delay constant */
- u16 fast_pwrup_delay;
+@@ -593,6 +605,12 @@ struct ssb_chipcommon {
struct ssb_chipcommon_pmu pmu;
+ u32 ticks_per_ms;
+ u32 max_timer_ms;
+#ifdef CONFIG_SSB_DRIVER_MIPS
+ enum ssb_flash_type flash_type;
+ union {
diff --git a/target/linux/brcm47xx/patches-3.3/023-ssb-add-serial-flash-support.patch b/target/linux/brcm47xx/patches-3.3/023-ssb-add-serial-flash-support.patch
index ba5a5c2d1b..7be794d7ba 100644
--- a/target/linux/brcm47xx/patches-3.3/023-ssb-add-serial-flash-support.patch
+++ b/target/linux/brcm47xx/patches-3.3/023-ssb-add-serial-flash-support.patch
@@ -495,7 +495,7 @@
pr_info("found parallel flash.\n");
--- a/drivers/ssb/ssb_private.h
+++ b/drivers/ssb/ssb_private.h
-@@ -192,6 +192,10 @@ extern int ssb_devices_freeze(struct ssb
+@@ -204,6 +204,10 @@ extern int ssb_devices_freeze(struct ssb
extern int ssb_devices_thaw(struct ssb_freeze_context *ctx);
@@ -508,7 +508,7 @@
#ifdef CONFIG_SSB_B43_PCI_BRIDGE
--- a/include/linux/ssb/ssb_driver_chipcommon.h
+++ b/include/linux/ssb/ssb_driver_chipcommon.h
-@@ -503,8 +503,10 @@
+@@ -504,8 +504,10 @@
#define SSB_CHIPCO_FLASHCTL_ST_PP 0x0302 /* Page Program */
#define SSB_CHIPCO_FLASHCTL_ST_SE 0x02D8 /* Sector Erase */
#define SSB_CHIPCO_FLASHCTL_ST_BE 0x00C7 /* Bulk Erase */
@@ -521,7 +521,7 @@
/* Status register bits for ST flashes */
#define SSB_CHIPCO_FLASHSTA_ST_WIP 0x01 /* Write In Progress */
-@@ -585,6 +587,7 @@ struct ssb_chipcommon_pmu {
+@@ -586,6 +588,7 @@ struct ssb_chipcommon_pmu {
#ifdef CONFIG_SSB_DRIVER_MIPS
enum ssb_flash_type {
SSB_PFLASH,
@@ -529,7 +529,7 @@
};
struct ssb_pflash {
-@@ -592,6 +595,14 @@ struct ssb_pflash {
+@@ -593,6 +596,14 @@ struct ssb_pflash {
u32 window;
u32 window_size;
};
@@ -544,7 +544,7 @@
#endif /* CONFIG_SSB_DRIVER_MIPS */
struct ssb_chipcommon {
-@@ -605,6 +616,9 @@ struct ssb_chipcommon {
+@@ -609,6 +620,9 @@ struct ssb_chipcommon {
enum ssb_flash_type flash_type;
union {
struct ssb_pflash pflash;
@@ -554,7 +554,7 @@
};
#endif /* CONFIG_SSB_DRIVER_MIPS */
};
-@@ -666,6 +680,16 @@ extern int ssb_chipco_serial_init(struct
+@@ -671,6 +685,16 @@ extern int ssb_chipco_serial_init(struct
struct ssb_serial_port *ports);
#endif /* CONFIG_SSB_SERIAL */
diff --git a/target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch b/target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch
index 53f6e98d15..88f1fe021b 100644
--- a/target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch
+++ b/target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch
@@ -204,7 +204,7 @@
+extern struct bcm47xx_nflash bcm47xx_nflash;
--- a/drivers/bcma/Kconfig
+++ b/drivers/bcma/Kconfig
-@@ -43,6 +43,11 @@ config BCMA_SFLASH
+@@ -44,6 +44,11 @@ config BCMA_SFLASH
depends on BCMA_DRIVER_MIPS
default y
@@ -228,7 +228,7 @@
bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o
--- a/drivers/bcma/bcma_private.h
+++ b/drivers/bcma/bcma_private.h
-@@ -56,6 +56,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr
+@@ -60,6 +60,11 @@ u32 bcma_pmu_get_cpu_clock(struct bcma_d
int bcma_sflash_init(struct bcma_drv_cc *cc);
#endif /* CONFIG_BCMA_SFLASH */
@@ -407,7 +407,7 @@
*
* Licensed under the GNU/GPL. See COPYING for details.
*/
-@@ -182,6 +183,17 @@ static void bcma_core_mips_flash_detect(
+@@ -211,6 +212,17 @@ static void bcma_core_mips_flash_detect(
{
struct bcma_bus *bus = mcore->core->bus;
@@ -960,7 +960,7 @@
+MODULE_DESCRIPTION("BCM47XX NAND flash driver");
--- a/include/linux/bcma/bcma_driver_chipcommon.h
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -436,6 +436,7 @@ struct bcma_chipcommon_pmu {
+@@ -580,6 +580,7 @@ struct bcma_chipcommon_pmu {
enum bcma_flash_type {
BCMA_PFLASH,
BCMA_SFLASH,
@@ -968,7 +968,7 @@
};
struct bcma_pflash {
-@@ -452,6 +453,14 @@ struct bcma_sflash {
+@@ -596,6 +597,14 @@ struct bcma_sflash {
};
#endif /* CONFIG_BCMA_SFLASH */
@@ -983,7 +983,7 @@
struct bcma_serial_port {
void *regs;
unsigned long clockspeed;
-@@ -477,6 +486,9 @@ struct bcma_drv_cc {
+@@ -622,6 +631,9 @@ struct bcma_drv_cc {
#ifdef CONFIG_BCMA_SFLASH
struct bcma_sflash sflash;
#endif /* CONFIG_BCMA_SFLASH */
@@ -993,7 +993,7 @@
};
int nr_serial_ports;
-@@ -542,4 +554,13 @@ int bcma_sflash_write(struct bcma_drv_cc
+@@ -702,4 +714,13 @@ int bcma_sflash_write(struct bcma_drv_cc
int bcma_sflash_erase(struct bcma_drv_cc *cc, u32 offset);
#endif /* CONFIG_BCMA_SFLASH */
diff --git a/target/linux/brcm47xx/patches-3.3/201-bcma-just-do-the-necessary-things-in-early-register.patch b/target/linux/brcm47xx/patches-3.3/201-bcma-just-do-the-necessary-things-in-early-register.patch
deleted file mode 100644
index 6ef5ecd51d..0000000000
--- a/target/linux/brcm47xx/patches-3.3/201-bcma-just-do-the-necessary-things-in-early-register.patch
+++ /dev/null
@@ -1,181 +0,0 @@
---- a/drivers/bcma/driver_chipcommon.c
-+++ b/drivers/bcma/driver_chipcommon.c
-@@ -22,12 +22,9 @@ static inline u32 bcma_cc_write32_masked
- return value;
- }
-
--void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
-+void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc)
- {
-- u32 leddc_on = 10;
-- u32 leddc_off = 90;
--
-- if (cc->setup_done)
-+ if (cc->early_setup_done)
- return;
-
- if (cc->core->id.rev >= 11)
-@@ -36,6 +33,22 @@ void bcma_core_chipcommon_init(struct bc
- if (cc->core->id.rev >= 35)
- cc->capabilities_ext = bcma_cc_read32(cc, BCMA_CC_CAP_EXT);
-
-+ if (cc->capabilities & BCMA_CC_CAP_PMU)
-+ bcma_pmu_early_init(cc);
-+
-+ cc->early_setup_done = true;
-+}
-+
-+void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
-+{
-+ u32 leddc_on = 10;
-+ u32 leddc_off = 90;
-+
-+ if (cc->setup_done)
-+ return;
-+
-+ bcma_core_chipcommon_early_init(cc);
-+
- if (cc->core->id.rev >= 20) {
- bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0);
- bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0);
---- a/drivers/bcma/driver_chipcommon_pmu.c
-+++ b/drivers/bcma/driver_chipcommon_pmu.c
-@@ -141,7 +141,7 @@ void bcma_pmu_workarounds(struct bcma_dr
- }
- }
-
--void bcma_pmu_init(struct bcma_drv_cc *cc)
-+void bcma_pmu_early_init(struct bcma_drv_cc *cc)
- {
- u32 pmucap;
-
-@@ -150,7 +150,10 @@ void bcma_pmu_init(struct bcma_drv_cc *c
-
- bcma_debug(cc->core->bus, "Found rev %u PMU (capabilities 0x%08X)\n",
- cc->pmu.rev, pmucap);
-+}
-
-+void bcma_pmu_init(struct bcma_drv_cc *cc)
-+{
- if (cc->pmu.rev == 1)
- bcma_cc_mask32(cc, BCMA_CC_PMU_CTL,
- ~BCMA_CC_PMU_CTL_NOILPONW);
---- a/drivers/bcma/driver_mips.c
-+++ b/drivers/bcma/driver_mips.c
-@@ -222,16 +222,33 @@ static void bcma_core_mips_flash_detect(
- }
- }
-
-+void bcma_core_mips_early_init(struct bcma_drv_mips *mcore)
-+{
-+ struct bcma_bus *bus = mcore->core->bus;
-+
-+ if (mcore->early_setup_done)
-+ return;
-+
-+ bcma_chipco_serial_init(&bus->drv_cc);
-+ bcma_core_mips_flash_detect(mcore);
-+
-+ mcore->early_setup_done = true;
-+}
-+
- void bcma_core_mips_init(struct bcma_drv_mips *mcore)
- {
- struct bcma_bus *bus;
- struct bcma_device *core;
- bus = mcore->core->bus;
-
-+ if (mcore->setup_done)
-+ return;
-+
- bcma_info(bus, "Initializing MIPS core...\n");
-
-- if (!mcore->setup_done)
-- mcore->assigned_irqs = 1;
-+ bcma_core_mips_early_init(mcore);
-+
-+ mcore->assigned_irqs = 1;
-
- /* Assign IRQs to all cores on the bus */
- list_for_each_entry(core, &bus->cores, list) {
-@@ -266,10 +283,5 @@ void bcma_core_mips_init(struct bcma_drv
- bcma_info(bus, "IRQ reconfiguration done\n");
- bcma_core_mips_dump_irq(bus);
-
-- if (mcore->setup_done)
-- return;
--
-- bcma_chipco_serial_init(&bus->drv_cc);
-- bcma_core_mips_flash_detect(mcore);
- mcore->setup_done = true;
- }
---- a/drivers/bcma/main.c
-+++ b/drivers/bcma/main.c
-@@ -247,18 +247,18 @@ int __init bcma_bus_early_register(struc
- return -1;
- }
-
-- /* Init CC core */
-+ /* Early init CC core */
- core = bcma_find_core(bus, bcma_cc_core_id(bus));
- if (core) {
- bus->drv_cc.core = core;
-- bcma_core_chipcommon_init(&bus->drv_cc);
-+ bcma_core_chipcommon_early_init(&bus->drv_cc);
- }
-
-- /* Init MIPS core */
-+ /* Early init MIPS core */
- core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
- if (core) {
- bus->drv_mips.core = core;
-- bcma_core_mips_init(&bus->drv_mips);
-+ bcma_core_mips_early_init(&bus->drv_mips);
- }
-
- bcma_info(bus, "Early bus registered\n");
---- a/include/linux/bcma/bcma_driver_chipcommon.h
-+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -476,6 +476,7 @@ struct bcma_drv_cc {
- u32 capabilities;
- u32 capabilities_ext;
- u8 setup_done:1;
-+ u8 early_setup_done:1;
- /* Fast Powerup Delay constant */
- u16 fast_pwrup_delay;
- struct bcma_chipcommon_pmu pmu;
-@@ -510,6 +511,7 @@ struct bcma_drv_cc {
- bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set))
-
- extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
-+extern void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
-
- extern void bcma_chipco_suspend(struct bcma_drv_cc *cc);
- extern void bcma_chipco_resume(struct bcma_drv_cc *cc);
-@@ -533,6 +535,7 @@ u32 bcma_chipco_gpio_polarity(struct bcm
-
- /* PMU support */
- extern void bcma_pmu_init(struct bcma_drv_cc *cc);
-+extern void bcma_pmu_early_init(struct bcma_drv_cc *cc);
-
- extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset,
- u32 value);
---- a/include/linux/bcma/bcma_driver_mips.h
-+++ b/include/linux/bcma/bcma_driver_mips.h
-@@ -35,13 +35,16 @@ struct bcma_device;
- struct bcma_drv_mips {
- struct bcma_device *core;
- u8 setup_done:1;
-+ u8 early_setup_done:1;
- unsigned int assigned_irqs;
- };
-
- #ifdef CONFIG_BCMA_DRIVER_MIPS
- extern void bcma_core_mips_init(struct bcma_drv_mips *mcore);
-+extern void bcma_core_mips_early_init(struct bcma_drv_mips *mcore);
- #else
- static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { }
-+static inline void bcma_core_mips_early_init(struct bcma_drv_mips *mcore) { }
- #endif
-
- extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore);
diff --git a/target/linux/brcm47xx/patches-3.3/202-bcma-init-sprom-struct-earlier.patch b/target/linux/brcm47xx/patches-3.3/202-bcma-init-sprom-struct-earlier.patch
deleted file mode 100644
index 03540f04cc..0000000000
--- a/target/linux/brcm47xx/patches-3.3/202-bcma-init-sprom-struct-earlier.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/drivers/bcma/main.c
-+++ b/drivers/bcma/main.c
-@@ -165,6 +165,20 @@ int __devinit bcma_bus_register(struct b
- return -1;
- }
-
-+ /* Early init CC core */
-+ core = bcma_find_core(bus, bcma_cc_core_id(bus));
-+ if (core) {
-+ bus->drv_cc.core = core;
-+ bcma_core_chipcommon_early_init(&bus->drv_cc);
-+ }
-+
-+ /* Try to get SPROM */
-+ err = bcma_sprom_get(bus);
-+ if (err == -ENOENT) {
-+ bcma_err(bus, "No SPROM available\n");
-+ } else if (err)
-+ bcma_err(bus, "Failed to get SPROM: %d\n", err);
-+
- /* Init CC core */
- core = bcma_find_core(bus, bcma_cc_core_id(bus));
- if (core) {
-@@ -193,13 +207,6 @@ int __devinit bcma_bus_register(struct b
- bcma_core_gmac_cmn_init(&bus->drv_gmac_cmn);
- }
-
-- /* Try to get SPROM */
-- err = bcma_sprom_get(bus);
-- if (err == -ENOENT) {
-- bcma_err(bus, "No SPROM available\n");
-- } else if (err)
-- bcma_err(bus, "Failed to get SPROM: %d\n", err);
--
- /* Register found cores */
- bcma_register_cores(bus);
-
diff --git a/target/linux/brcm47xx/patches-3.3/203-bcma-use-fallback-sprom-if-sprom-on-card-was-not-val.patch b/target/linux/brcm47xx/patches-3.3/203-bcma-use-fallback-sprom-if-sprom-on-card-was-not-val.patch
deleted file mode 100644
index b6e6480567..0000000000
--- a/target/linux/brcm47xx/patches-3.3/203-bcma-use-fallback-sprom-if-sprom-on-card-was-not-val.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/drivers/bcma/sprom.c
-+++ b/drivers/bcma/sprom.c
-@@ -591,8 +591,11 @@ int bcma_sprom_get(struct bcma_bus *bus)
- bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);
-
- err = bcma_sprom_valid(sprom);
-- if (err)
-+ if (err) {
-+ bcma_warn(bus, "invalid sprom read from the PCIe card, try to use fallback sprom\n");
-+ err = bcma_fill_sprom_with_fallback(bus, &bus->sprom);
- goto out;
-+ }
-
- bcma_sprom_extract_r8(bus, sprom);
-
diff --git a/target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch b/target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch
deleted file mode 100644
index 302ac8d954..0000000000
--- a/target/linux/brcm47xx/patches-3.3/204-bcma-do-not-initialize-deactivated-PCIe-cores.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/bcma/driver_pci_host.c
-+++ b/drivers/bcma/driver_pci_host.c
-@@ -35,11 +35,6 @@ bool __devinit bcma_core_pci_is_in_hostm
- chipid_top != 0x5300)
- return false;
-
-- if (bus->sprom.boardflags_lo & BCMA_CORE_PCI_BFL_NOPCI) {
-- bcma_info(bus, "This PCI core is disabled and not working\n");
-- return false;
-- }
--
- bcma_core_enable(pc->core, 0);
-
- return !mips_busprobe32(tmp, pc->core->io_addr);
-@@ -396,6 +391,11 @@ void __devinit bcma_core_pci_hostmode_in
-
- bcma_info(bus, "PCIEcore in host mode found\n");
-
-+ if (bus->sprom.boardflags_lo & BCMA_CORE_PCI_BFL_NOPCI) {
-+ bcma_info(bus, "This PCIE core is disabled and not working\n");
-+ return;
-+ }
-+
- pc_host = kzalloc(sizeof(*pc_host), GFP_KERNEL);
- if (!pc_host) {
- bcma_err(bus, "can not allocate memory");
diff --git a/target/linux/brcm47xx/patches-3.3/240-bcma-pcie-config-access.patch b/target/linux/brcm47xx/patches-3.3/240-bcma-pcie-config-access.patch
deleted file mode 100644
index 91b8a4191c..0000000000
--- a/target/linux/brcm47xx/patches-3.3/240-bcma-pcie-config-access.patch
+++ /dev/null
@@ -1,104 +0,0 @@
---- a/drivers/bcma/driver_pci_host.c
-+++ b/drivers/bcma/driver_pci_host.c
-@@ -94,19 +94,19 @@ static int bcma_extpci_read_config(struc
- if (dev == 0) {
- /* we support only two functions on device 0 */
- if (func > 1)
-- return -EINVAL;
-+ goto out;
-
- /* accesses to config registers with offsets >= 256
- * requires indirect access.
- */
- if (off >= PCI_CONFIG_SPACE_SIZE) {
- addr = (func << 12);
-- addr |= (off & 0x0FFF);
-+ addr |= (off & 0x0FFC);
- val = bcma_pcie_read_config(pc, addr);
- } else {
- addr = BCMA_CORE_PCI_PCICFG0;
- addr |= (func << 8);
-- addr |= (off & 0xfc);
-+ addr |= (off & 0xFC);
- val = pcicore_read32(pc, addr);
- }
- } else {
-@@ -122,8 +122,6 @@ static int bcma_extpci_read_config(struc
- val = 0xffffffff;
- goto unmap;
- }
--
-- val = readl(mmio);
- }
- val >>= (8 * (off & 3));
-
-@@ -151,7 +149,7 @@ static int bcma_extpci_write_config(stru
- const void *buf, int len)
- {
- int err = -EINVAL;
-- u32 addr = 0, val = 0;
-+ u32 addr, val;
- void __iomem *mmio = 0;
- u16 chipid = pc->core->bus->chipinfo.id;
-
-@@ -159,16 +157,22 @@ static int bcma_extpci_write_config(stru
- if (unlikely(len != 1 && len != 2 && len != 4))
- goto out;
- if (dev == 0) {
-+ /* we support only two functions on device 0 */
-+ if (func > 1)
-+ goto out;
-+
- /* accesses to config registers with offsets >= 256
- * requires indirect access.
- */
-- if (off < PCI_CONFIG_SPACE_SIZE) {
-- addr = pc->core->addr + BCMA_CORE_PCI_PCICFG0;
-+ if (off >= PCI_CONFIG_SPACE_SIZE) {
-+ addr = (func << 12);
-+ addr |= (off & 0x0FFC);
-+ val = bcma_pcie_read_config(pc, addr);
-+ } else {
-+ addr = BCMA_CORE_PCI_PCICFG0;
- addr |= (func << 8);
-- addr |= (off & 0xfc);
-- mmio = ioremap_nocache(addr, sizeof(val));
-- if (!mmio)
-- goto out;
-+ addr |= (off & 0xFC);
-+ val = pcicore_read32(pc, addr);
- }
- } else {
- addr = bcma_get_cfgspace_addr(pc, dev, func, off);
-@@ -187,12 +191,10 @@ static int bcma_extpci_write_config(stru
-
- switch (len) {
- case 1:
-- val = readl(mmio);
- val &= ~(0xFF << (8 * (off & 3)));
- val |= *((const u8 *)buf) << (8 * (off & 3));
- break;
- case 2:
-- val = readl(mmio);
- val &= ~(0xFFFF << (8 * (off & 3)));
- val |= *((const u16 *)buf) << (8 * (off & 3));
- break;
-@@ -200,13 +202,14 @@ static int bcma_extpci_write_config(stru
- val = *((const u32 *)buf);
- break;
- }
-- if (dev == 0 && !addr) {
-+ if (dev == 0) {
- /* accesses to config registers with offsets >= 256
- * requires indirect access.
- */
-- addr = (func << 12);
-- addr |= (off & 0x0FFF);
-- bcma_pcie_write_config(pc, addr, val);
-+ if (off >= PCI_CONFIG_SPACE_SIZE)
-+ bcma_pcie_write_config(pc, addr, val);
-+ else
-+ pcicore_write32(pc, addr, val);
- } else {
- writel(val, mmio);
-
diff --git a/target/linux/brcm47xx/patches-3.3/280-activate_ssb_support_in_usb.patch b/target/linux/brcm47xx/patches-3.3/280-activate_ssb_support_in_usb.patch
index c535c05db5..8741109cd2 100644
--- a/target/linux/brcm47xx/patches-3.3/280-activate_ssb_support_in_usb.patch
+++ b/target/linux/brcm47xx/patches-3.3/280-activate_ssb_support_in_usb.patch
@@ -5,7 +5,7 @@ This prevents the options from being delete with make kernel_oldconfig.
--- a/drivers/bcma/Kconfig
+++ b/drivers/bcma/Kconfig
-@@ -37,6 +37,7 @@ config BCMA_DRIVER_PCI_HOSTMODE
+@@ -38,6 +38,7 @@ config BCMA_DRIVER_PCI_HOSTMODE
config BCMA_HOST_SOC
bool
depends on BCMA_DRIVER_MIPS
diff --git a/target/linux/brcm47xx/patches-3.3/500-ssb-add-function-to-return-number-of-gpio-lines.patch b/target/linux/brcm47xx/patches-3.3/500-ssb-add-function-to-return-number-of-gpio-lines.patch
index f1b483e4a4..5013351e16 100644
--- a/target/linux/brcm47xx/patches-3.3/500-ssb-add-function-to-return-number-of-gpio-lines.patch
+++ b/target/linux/brcm47xx/patches-3.3/500-ssb-add-function-to-return-number-of-gpio-lines.patch
@@ -1,6 +1,6 @@
--- a/drivers/ssb/embedded.c
+++ b/drivers/ssb/embedded.c
-@@ -136,6 +136,18 @@ u32 ssb_gpio_polarity(struct ssb_bus *bu
+@@ -170,6 +170,18 @@ u32 ssb_gpio_polarity(struct ssb_bus *bu
}
EXPORT_SYMBOL(ssb_gpio_polarity);
diff --git a/target/linux/brcm47xx/patches-3.3/501-bcma-add-gpio-driver.patch b/target/linux/brcm47xx/patches-3.3/501-bcma-add-gpio-driver.patch
index 951c6d40e9..7c4323e452 100644
--- a/target/linux/brcm47xx/patches-3.3/501-bcma-add-gpio-driver.patch
+++ b/target/linux/brcm47xx/patches-3.3/501-bcma-add-gpio-driver.patch
@@ -1,136 +1,18 @@
---- a/drivers/bcma/driver_chipcommon.c
-+++ b/drivers/bcma/driver_chipcommon.c
-@@ -70,6 +70,8 @@ void bcma_core_chipcommon_init(struct bc
- (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT)));
- }
-
-+ spin_lock_init(&cc->gpio_lock);
-+
- cc->setup_done = true;
- }
-
-@@ -92,34 +94,81 @@ u32 bcma_chipco_irq_status(struct bcma_d
-
- u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask)
- {
-- return bcma_cc_read32(cc, BCMA_CC_GPIOIN) & mask;
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_read32(cc, BCMA_CC_GPIOIN) & mask;
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_in);
-
- u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value)
- {
-- return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUT, mask, value);
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUT, mask, value);
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out);
-
- u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value)
- {
-- return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUTEN, mask, value);
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUTEN, mask, value);
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen);
-
- u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value)
- {
-- return bcma_cc_write32_masked(cc, BCMA_CC_GPIOCTL, mask, value);
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOCTL, mask, value);
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
- EXPORT_SYMBOL_GPL(bcma_chipco_gpio_control);
-
- u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value)
- {
-- return bcma_cc_write32_masked(cc, BCMA_CC_GPIOIRQ, mask, value);
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOIRQ, mask, value);
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_intmask);
-
- u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value)
- {
-- return bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value);
-+ unsigned long flags;
-+ u32 res;
-+
-+ spin_lock_irqsave(&cc->gpio_lock, flags);
-+ res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value);
-+ spin_unlock_irqrestore(&cc->gpio_lock, flags);
-+
-+ return res;
- }
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_polarity);
-
- #ifdef CONFIG_BCMA_DRIVER_MIPS
- void bcma_chipco_serial_init(struct bcma_drv_cc *cc)
--- a/include/linux/bcma/bcma_driver_chipcommon.h
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -495,6 +495,9 @@ struct bcma_drv_cc {
- int nr_serial_ports;
- struct bcma_serial_port serial_ports[4];
- #endif /* CONFIG_BCMA_DRIVER_MIPS */
-+
-+ /* Lock for GPIO register access. */
-+ spinlock_t gpio_lock;
- };
-
- /* Register access */
-@@ -525,13 +528,22 @@ void bcma_chipco_irq_mask(struct bcma_dr
+@@ -678,6 +678,8 @@ void bcma_chipco_irq_mask(struct bcma_dr
u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask);
+#define BCMA_CC_GPIO_LINES 16
+
/* Chipcommon GPIO pin access. */
--u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
--u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
--u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value);
--u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value);
--u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value);
--u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value);
-+extern u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
-+extern u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
-+extern u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value);
-+extern u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask,
-+ u32 value);
-+extern u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask,
-+ u32 value);
-+extern u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask,
-+ u32 value);
+ u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
+ u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
+@@ -687,6 +689,10 @@ u32 bcma_chipco_gpio_intmask(struct bcma
+ u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value);
+ u32 bcma_chipco_gpio_pullup(struct bcma_drv_cc *cc, u32 mask, u32 value);
+ u32 bcma_chipco_gpio_pulldown(struct bcma_drv_cc *cc, u32 mask, u32 value);
+static inline int bcma_chipco_gpio_count(void)
+{
+ return BCMA_CC_GPIO_LINES;
diff --git a/target/linux/brcm47xx/patches-3.3/700-ssb-gigabit-ethernet-driver.patch b/target/linux/brcm47xx/patches-3.3/700-ssb-gigabit-ethernet-driver.patch
index e40a621c0d..d9968d29eb 100644
--- a/target/linux/brcm47xx/patches-3.3/700-ssb-gigabit-ethernet-driver.patch
+++ b/target/linux/brcm47xx/patches-3.3/700-ssb-gigabit-ethernet-driver.patch
@@ -400,40 +400,3 @@
#define PCI_DEVICE_ID_TIGON3_5751 0x1677
#define PCI_DEVICE_ID_TIGON3_5715 0x1678
#define PCI_DEVICE_ID_TIGON3_5715S 0x1679
---- a/include/linux/ssb/ssb_driver_gige.h
-+++ b/include/linux/ssb/ssb_driver_gige.h
-@@ -97,21 +97,12 @@ static inline bool ssb_gige_must_flush_p
- return 0;
- }
-
--#ifdef CONFIG_BCM47XX
--#include <asm/mach-bcm47xx/nvram.h>
--/* Get the device MAC address */
--static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
--{
-- char buf[20];
-- if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
-- return;
-- nvram_parse_macaddr(buf, macaddr);
--}
--#else
- static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
- {
-+ struct ssb_gige *dev = pdev_to_ssb_gige(pdev);
-+
-+ memcpy(macaddr, dev->dev->bus->sprom.et0mac, 6);
- }
--#endif
-
- extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev,
- struct pci_dev *pdev);
-@@ -175,6 +166,9 @@ static inline bool ssb_gige_must_flush_p
- {
- return 0;
- }
-+static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
-+{
-+}
-
- #endif /* CONFIG_SSB_DRIVER_GIGE */
- #endif /* LINUX_SSB_DRIVER_GIGE_H_ */
diff --git a/target/linux/brcm47xx/patches-3.3/976-ssb_increase_pci_delay.patch b/target/linux/brcm47xx/patches-3.3/976-ssb_increase_pci_delay.patch
index eb70c81e65..0650c25683 100644
--- a/target/linux/brcm47xx/patches-3.3/976-ssb_increase_pci_delay.patch
+++ b/target/linux/brcm47xx/patches-3.3/976-ssb_increase_pci_delay.patch
@@ -1,6 +1,6 @@
--- a/drivers/ssb/driver_pcicore.c
+++ b/drivers/ssb/driver_pcicore.c
-@@ -376,7 +376,7 @@ static void __devinit ssb_pcicore_init_h
+@@ -375,7 +375,7 @@ static void __devinit ssb_pcicore_init_h
set_io_port_base(ssb_pcicore_controller.io_map_base);
/* Give some time to the PCI controller to configure itself with the new
* values. Not waiting at this point causes crashes of the machine. */