mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
kernel: update bcma and ssb to master-2012-10-18 from wireless-testing
* update the flash driver for bcm47xx to use the stubs already in bcma * do some misc enhancements to the flash drivers for bcm47xx git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33920 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@@ -100,7 +100,48 @@
|
||||
+}
|
||||
--- a/drivers/ssb/driver_mipscore.c
|
||||
+++ b/drivers/ssb/driver_mipscore.c
|
||||
@@ -208,6 +208,9 @@ u32 ssb_cpu_clock(struct ssb_mipscore *m
|
||||
@@ -190,16 +190,32 @@ static void ssb_mips_flash_detect(struct
|
||||
{
|
||||
struct ssb_bus *bus = mcore->dev->bus;
|
||||
|
||||
- mcore->flash_buswidth = 2;
|
||||
- if (bus->chipco.dev) {
|
||||
- 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) {
|
||||
+ mcore->pflash.present = true;
|
||||
+ mcore->pflash.buswidth = 2;
|
||||
+ mcore->pflash.window = SSB_FLASH1;
|
||||
+ mcore->pflash.window_size = SSB_FLASH1_SZ;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* There is ChipCommon, so use it to read info about flash */
|
||||
+ switch (bus->chipco.capabilities & SSB_CHIPCO_CAP_FLASHT) {
|
||||
+ case SSB_CHIPCO_FLASHT_STSER:
|
||||
+ case SSB_CHIPCO_FLASHT_ATSER:
|
||||
+ pr_err("Serial flash not supported\n");
|
||||
+ break;
|
||||
+ case SSB_CHIPCO_FLASHT_PARA:
|
||||
+ pr_debug("Found parallel flash\n");
|
||||
+ mcore->pflash.present = true;
|
||||
+ mcore->pflash.window = SSB_FLASH2;
|
||||
+ mcore->pflash.window_size = SSB_FLASH2_SZ;
|
||||
if ((ssb_read32(bus->chipco.dev, SSB_CHIPCO_FLASH_CFG)
|
||||
& SSB_CHIPCO_CFG_DS16) == 0)
|
||||
- mcore->flash_buswidth = 1;
|
||||
- } else {
|
||||
- mcore->flash_window = 0x1fc00000;
|
||||
- mcore->flash_window_size = 0x00400000;
|
||||
+ mcore->pflash.buswidth = 1;
|
||||
+ else
|
||||
+ mcore->pflash.buswidth = 2;
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,6 +224,9 @@ u32 ssb_cpu_clock(struct ssb_mipscore *m
|
||||
struct ssb_bus *bus = mcore->dev->bus;
|
||||
u32 pll_type, n, m, rate = 0;
|
||||
|
||||
@@ -673,6 +714,19 @@
|
||||
|
||||
/* Vendor-ID values */
|
||||
#define SSB_VENDOR_BROADCOM 0x4243
|
||||
--- a/include/linux/ssb/ssb_driver_chipcommon.h
|
||||
+++ b/include/linux/ssb/ssb_driver_chipcommon.h
|
||||
@@ -504,7 +504,9 @@
|
||||
#define SSB_CHIPCO_FLASHCTL_ST_SE 0x02D8 /* Sector Erase */
|
||||
#define SSB_CHIPCO_FLASHCTL_ST_BE 0x00C7 /* Bulk Erase */
|
||||
#define SSB_CHIPCO_FLASHCTL_ST_DP 0x00B9 /* Deep Power-down */
|
||||
-#define SSB_CHIPCO_FLASHCTL_ST_RSIG 0x03AB /* Read Electronic Signature */
|
||||
+#define SSB_CHIPCO_FLASHCTL_ST_RES 0x03AB /* Read Electronic Signature */
|
||||
+#define SSB_CHIPCO_FLASHCTL_ST_CSA 0x1000 /* Keep chip select asserted */
|
||||
+#define SSB_CHIPCO_FLASHCTL_ST_SSE 0x0220 /* Sub-sector Erase */
|
||||
|
||||
/* Status register bits for ST flashes */
|
||||
#define SSB_CHIPCO_FLASHSTA_ST_WIP 0x01 /* Write In Progress */
|
||||
--- a/include/linux/ssb/ssb_driver_gige.h
|
||||
+++ b/include/linux/ssb/ssb_driver_gige.h
|
||||
@@ -2,6 +2,7 @@
|
||||
@@ -683,6 +737,32 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
--- a/include/linux/ssb/ssb_driver_mips.h
|
||||
+++ b/include/linux/ssb/ssb_driver_mips.h
|
||||
@@ -13,6 +13,12 @@ struct ssb_serial_port {
|
||||
unsigned int reg_shift;
|
||||
};
|
||||
|
||||
+struct ssb_pflash {
|
||||
+ bool present;
|
||||
+ u8 buswidth;
|
||||
+ u32 window;
|
||||
+ u32 window_size;
|
||||
+};
|
||||
|
||||
struct ssb_mipscore {
|
||||
struct ssb_device *dev;
|
||||
@@ -20,9 +26,7 @@ struct ssb_mipscore {
|
||||
int nr_serial_ports;
|
||||
struct ssb_serial_port serial_ports[4];
|
||||
|
||||
- u8 flash_buswidth;
|
||||
- u32 flash_window;
|
||||
- u32 flash_window_size;
|
||||
+ struct ssb_pflash pflash;
|
||||
};
|
||||
|
||||
extern void ssb_mipscore_init(struct ssb_mipscore *mcore);
|
||||
--- a/include/linux/ssb/ssb_regs.h
|
||||
+++ b/include/linux/ssb/ssb_regs.h
|
||||
@@ -228,6 +228,7 @@
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
||||
--- a/drivers/bcma/driver_chipcommon_pmu.c
|
||||
+++ b/drivers/bcma/driver_chipcommon_pmu.c
|
||||
@@ -110,7 +110,7 @@ void bcma_pmu_workarounds(struct bcma_dr
|
||||
/* enable 12 mA drive strenth for 4313 and set chipControl
|
||||
register bit 1 */
|
||||
bcma_chipco_chipctl_maskset(cc, 0,
|
||||
- BCMA_CCTRL_4313_12MA_LED_DRIVE,
|
||||
+ ~BCMA_CCTRL_4313_12MA_LED_DRIVE,
|
||||
BCMA_CCTRL_4313_12MA_LED_DRIVE);
|
||||
break;
|
||||
case BCMA_CHIP_ID_BCM4331:
|
||||
@@ -124,14 +124,14 @@ void bcma_pmu_workarounds(struct bcma_dr
|
||||
register bit 15 */
|
||||
if (bus->chipinfo.rev == 0) {
|
||||
bcma_cc_maskset32(cc, BCMA_CC_CHIPCTL,
|
||||
- BCMA_CCTRL_43224_GPIO_TOGGLE,
|
||||
+ ~BCMA_CCTRL_43224_GPIO_TOGGLE,
|
||||
BCMA_CCTRL_43224_GPIO_TOGGLE);
|
||||
bcma_chipco_chipctl_maskset(cc, 0,
|
||||
- BCMA_CCTRL_43224A0_12MA_LED_DRIVE,
|
||||
+ ~BCMA_CCTRL_43224A0_12MA_LED_DRIVE,
|
||||
BCMA_CCTRL_43224A0_12MA_LED_DRIVE);
|
||||
} else {
|
||||
bcma_chipco_chipctl_maskset(cc, 0,
|
||||
- BCMA_CCTRL_43224B0_12MA_LED_DRIVE,
|
||||
+ ~BCMA_CCTRL_43224B0_12MA_LED_DRIVE,
|
||||
BCMA_CCTRL_43224B0_12MA_LED_DRIVE);
|
||||
}
|
||||
break;
|
||||
@@ -1,55 +0,0 @@
|
||||
--- a/drivers/bcma/scan.c
|
||||
+++ b/drivers/bcma/scan.c
|
||||
@@ -462,8 +462,10 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
while (eromptr < eromend) {
|
||||
struct bcma_device *other_core;
|
||||
struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
|
||||
- if (!core)
|
||||
- return -ENOMEM;
|
||||
+ if (!core) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto out;
|
||||
+ }
|
||||
INIT_LIST_HEAD(&core->list);
|
||||
core->bus = bus;
|
||||
|
||||
@@ -478,7 +480,7 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
} else if (err == -ESPIPE) {
|
||||
break;
|
||||
}
|
||||
- return err;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
core->core_index = core_num++;
|
||||
@@ -494,10 +496,12 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
list_add_tail(&core->list, &bus->cores);
|
||||
}
|
||||
|
||||
+ err = 0;
|
||||
+out:
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
iounmap(eromptr);
|
||||
|
||||
- return 0;
|
||||
+ return err;
|
||||
}
|
||||
|
||||
int __init bcma_bus_scan_early(struct bcma_bus *bus,
|
||||
@@ -537,7 +541,7 @@ int __init bcma_bus_scan_early(struct bc
|
||||
else if (err == -ESPIPE)
|
||||
break;
|
||||
else if (err < 0)
|
||||
- return err;
|
||||
+ goto out;
|
||||
|
||||
core->core_index = core_num++;
|
||||
bus->nr_cores++;
|
||||
@@ -551,6 +555,7 @@ int __init bcma_bus_scan_early(struct bc
|
||||
break;
|
||||
}
|
||||
|
||||
+out:
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
iounmap(eromptr);
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
--- a/drivers/bcma/driver_mips.c
|
||||
+++ b/drivers/bcma/driver_mips.c
|
||||
@@ -131,7 +131,7 @@ static void bcma_core_mips_set_irq(struc
|
||||
/* backplane irq line is in use, find out who uses
|
||||
* it and set user to irq 0
|
||||
*/
|
||||
- list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
+ list_for_each_entry(core, &bus->cores, list) {
|
||||
if ((1 << bcma_core_mips_irqflag(core)) ==
|
||||
oldirqflag) {
|
||||
bcma_core_mips_set_irq(core, 0);
|
||||
@@ -161,7 +161,7 @@ static void bcma_core_mips_dump_irq(stru
|
||||
{
|
||||
struct bcma_device *core;
|
||||
|
||||
- list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
+ list_for_each_entry(core, &bus->cores, list) {
|
||||
bcma_core_mips_print_irq(core, bcma_core_mips_irq(core));
|
||||
}
|
||||
}
|
||||
@@ -215,7 +215,7 @@ void bcma_core_mips_init(struct bcma_drv
|
||||
mcore->assigned_irqs = 1;
|
||||
|
||||
/* Assign IRQs to all cores on the bus */
|
||||
- list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
+ list_for_each_entry(core, &bus->cores, list) {
|
||||
int mips_irq;
|
||||
if (core->irq)
|
||||
continue;
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user