summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-03-14 21:48:23 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-03-14 21:48:23 +0000
commit40687c51624402412a0b6734bfb57609113f7f1d (patch)
treeea0f71e80c2d63dbcc574a5c6d2eff2e123eafb5 /target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch
parenta86ab8d8fff7d900e9c7d9fdc943dc2e736feb1d (diff)
brcm47xx: move and rename the patches
The patches are now grouped by the part what they are doing and are using three digest numbers. This does not remove or adds anything git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30942 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch b/target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch
new file mode 100644
index 000000000..3ae571153
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.2/046-bcma-add-extra-sprom-check.patch
@@ -0,0 +1,62 @@
+From 1cd3d0de72e42161fe0df355c5429459265aeef0 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sat, 14 Jan 2012 16:11:17 +0100
+Subject: [PATCH 30/32] bcma: add extra sprom check
+
+This check is needed on the BCM43224 device as it says in the
+capabilities it has an sprom but is extra check says it has not.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/bcma/sprom.c | 8 ++++++++
+ include/linux/bcma/bcma_driver_chipcommon.h | 16 ++++++++++++++++
+ 2 files changed, 24 insertions(+), 0 deletions(-)
+
+--- a/drivers/bcma/sprom.c
++++ b/drivers/bcma/sprom.c
+@@ -209,6 +209,7 @@ int bcma_sprom_get(struct bcma_bus *bus)
+ {
+ u16 offset;
+ u16 *sprom;
++ u32 sromctrl;
+ int err = 0;
+
+ if (!bus->drv_cc.core)
+@@ -217,6 +218,12 @@ int bcma_sprom_get(struct bcma_bus *bus)
+ if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM))
+ return -ENOENT;
+
++ if (bus->drv_cc.core->id.rev >= 32) {
++ sromctrl = bcma_read32(bus->drv_cc.core, BCMA_CC_SROM_CONTROL);
++ if (!(sromctrl & BCMA_CC_SROM_CONTROL_PRESENT))
++ return -ENOENT;
++ }
++
+ sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
+ GFP_KERNEL);
+ if (!sprom)
+--- a/include/linux/bcma/bcma_driver_chipcommon.h
++++ b/include/linux/bcma/bcma_driver_chipcommon.h
+@@ -239,6 +239,22 @@
+ #define BCMA_CC_FLASH_CFG 0x0128
+ #define BCMA_CC_FLASH_CFG_DS 0x0010 /* Data size, 0=8bit, 1=16bit */
+ #define BCMA_CC_FLASH_WAITCNT 0x012C
++#define BCMA_CC_SROM_CONTROL 0x0190
++#define BCMA_CC_SROM_CONTROL_START 0x80000000
++#define BCMA_CC_SROM_CONTROL_BUSY 0x80000000
++#define BCMA_CC_SROM_CONTROL_OPCODE 0x60000000
++#define BCMA_CC_SROM_CONTROL_OP_READ 0x00000000
++#define BCMA_CC_SROM_CONTROL_OP_WRITE 0x20000000
++#define BCMA_CC_SROM_CONTROL_OP_WRDIS 0x40000000
++#define BCMA_CC_SROM_CONTROL_OP_WREN 0x60000000
++#define BCMA_CC_SROM_CONTROL_OTPSEL 0x00000010
++#define BCMA_CC_SROM_CONTROL_LOCK 0x00000008
++#define BCMA_CC_SROM_CONTROL_SIZE_MASK 0x00000006
++#define BCMA_CC_SROM_CONTROL_SIZE_1K 0x00000000
++#define BCMA_CC_SROM_CONTROL_SIZE_4K 0x00000002
++#define BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004
++#define BCMA_CC_SROM_CONTROL_SIZE_SHIFT 1
++#define BCMA_CC_SROM_CONTROL_PRESENT 0x00000001
+ /* 0x1E0 is defined as shared BCMA_CLKCTLST */
+ #define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */
+ #define BCMA_CC_UART0_DATA 0x0300