kernel: backport SSB/BCMA changes in preparation for a compat-wireless update
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 36367
This commit is contained in:
@@ -126,12 +126,12 @@
|
||||
#include <linux/bcma/bcma.h>
|
||||
|
||||
static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,
|
||||
@@ -22,20 +25,119 @@ static inline u32 bcma_cc_write32_masked
|
||||
@@ -22,20 +25,120 @@ static inline u32 bcma_cc_write32_masked
|
||||
return value;
|
||||
}
|
||||
|
||||
-void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
|
||||
+static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc)
|
||||
+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc)
|
||||
{
|
||||
- u32 leddc_on = 10;
|
||||
- u32 leddc_off = 90;
|
||||
@@ -141,6 +141,7 @@
|
||||
- if (cc->setup_done)
|
||||
+ return 20000000;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock);
|
||||
+
|
||||
+static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc)
|
||||
+{
|
||||
@@ -250,7 +251,7 @@
|
||||
if (cc->core->id.rev >= 20) {
|
||||
bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0);
|
||||
bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0);
|
||||
@@ -56,15 +158,33 @@ void bcma_core_chipcommon_init(struct bc
|
||||
@@ -56,15 +159,33 @@ void bcma_core_chipcommon_init(struct bc
|
||||
((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) |
|
||||
(leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT)));
|
||||
}
|
||||
@@ -287,7 +288,7 @@
|
||||
}
|
||||
|
||||
void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value)
|
||||
@@ -84,28 +204,97 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_
|
||||
@@ -84,28 +205,99 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_
|
||||
|
||||
u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value)
|
||||
{
|
||||
@@ -301,6 +302,7 @@
|
||||
+
|
||||
+ return res;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out);
|
||||
|
||||
u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value)
|
||||
{
|
||||
@@ -314,6 +316,7 @@
|
||||
+
|
||||
+ return res;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen);
|
||||
|
||||
+/*
|
||||
+ * If the bit is set to 0, chipcommon controlls this GPIO,
|
||||
@@ -390,7 +393,7 @@
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
@@ -118,8 +307,7 @@ void bcma_chipco_serial_init(struct bcma
|
||||
@@ -118,8 +310,7 @@ void bcma_chipco_serial_init(struct bcma
|
||||
struct bcma_serial_port *ports = cc->serial_ports;
|
||||
|
||||
if (ccrev >= 11 && ccrev != 15) {
|
||||
@@ -504,7 +507,7 @@
|
||||
if (cc->pmu.rev == 1)
|
||||
bcma_cc_mask32(cc, BCMA_CC_PMU_CTL,
|
||||
~BCMA_CC_PMU_CTL_NOILPONW);
|
||||
@@ -162,7 +169,7 @@ void bcma_pmu_init(struct bcma_drv_cc *c
|
||||
@@ -162,24 +169,40 @@ void bcma_pmu_init(struct bcma_drv_cc *c
|
||||
bcma_pmu_workarounds(cc);
|
||||
}
|
||||
|
||||
@@ -513,7 +516,44 @@
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
@@ -190,7 +197,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c
|
||||
switch (bus->chipinfo.id) {
|
||||
+ case BCMA_CHIP_ID_BCM4313:
|
||||
+ case BCMA_CHIP_ID_BCM43224:
|
||||
+ case BCMA_CHIP_ID_BCM43225:
|
||||
+ case BCMA_CHIP_ID_BCM43227:
|
||||
+ case BCMA_CHIP_ID_BCM43228:
|
||||
+ case BCMA_CHIP_ID_BCM4331:
|
||||
+ case BCMA_CHIP_ID_BCM43421:
|
||||
+ case BCMA_CHIP_ID_BCM43428:
|
||||
+ case BCMA_CHIP_ID_BCM43431:
|
||||
case BCMA_CHIP_ID_BCM4716:
|
||||
- case BCMA_CHIP_ID_BCM4748:
|
||||
case BCMA_CHIP_ID_BCM47162:
|
||||
- case BCMA_CHIP_ID_BCM4313:
|
||||
- case BCMA_CHIP_ID_BCM5357:
|
||||
+ case BCMA_CHIP_ID_BCM4748:
|
||||
case BCMA_CHIP_ID_BCM4749:
|
||||
+ case BCMA_CHIP_ID_BCM5357:
|
||||
case BCMA_CHIP_ID_BCM53572:
|
||||
+ case BCMA_CHIP_ID_BCM6362:
|
||||
/* always 20Mhz */
|
||||
return 20000 * 1000;
|
||||
- case BCMA_CHIP_ID_BCM5356:
|
||||
case BCMA_CHIP_ID_BCM4706:
|
||||
+ case BCMA_CHIP_ID_BCM5356:
|
||||
/* always 25Mhz */
|
||||
return 25000 * 1000;
|
||||
+ case BCMA_CHIP_ID_BCM43460:
|
||||
+ case BCMA_CHIP_ID_BCM4352:
|
||||
+ case BCMA_CHIP_ID_BCM4360:
|
||||
+ if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ)
|
||||
+ return 40000 * 1000;
|
||||
+ else
|
||||
+ return 20000 * 1000;
|
||||
default:
|
||||
bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n",
|
||||
bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK);
|
||||
@@ -190,7 +213,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c
|
||||
/* Find the output of the "m" pll divider given pll controls that start with
|
||||
* pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc.
|
||||
*/
|
||||
@@ -522,7 +562,7 @@
|
||||
{
|
||||
u32 tmp, div, ndiv, p1, p2, fc;
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
@@ -219,14 +226,14 @@ static u32 bcma_pmu_clock(struct bcma_dr
|
||||
@@ -219,14 +242,14 @@ static u32 bcma_pmu_clock(struct bcma_dr
|
||||
ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT;
|
||||
|
||||
/* Do calculation in Mhz */
|
||||
@@ -539,7 +579,7 @@
|
||||
{
|
||||
u32 tmp, ndiv, p1div, p2div;
|
||||
u32 clock;
|
||||
@@ -257,7 +264,7 @@ static u32 bcma_pmu_clock_bcm4706(struct
|
||||
@@ -257,7 +280,7 @@ static u32 bcma_pmu_clock_bcm4706(struct
|
||||
}
|
||||
|
||||
/* query bus clock frequency for PMU-enabled chipcommon */
|
||||
@@ -548,7 +588,7 @@
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
@@ -265,40 +272,42 @@ u32 bcma_pmu_get_clockcontrol(struct bcm
|
||||
@@ -265,40 +288,42 @@ u32 bcma_pmu_get_clockcontrol(struct bcm
|
||||
case BCMA_CHIP_ID_BCM4716:
|
||||
case BCMA_CHIP_ID_BCM4748:
|
||||
case BCMA_CHIP_ID_BCM47162:
|
||||
@@ -602,7 +642,7 @@
|
||||
BCMA_CC_PMU4706_MAINPLL_PLL0,
|
||||
BCMA_CC_PMU5_MAINPLL_CPU);
|
||||
case BCMA_CHIP_ID_BCM5356:
|
||||
@@ -313,10 +322,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr
|
||||
@@ -313,10 +338,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -616,6 +656,51 @@
|
||||
}
|
||||
|
||||
static void bcma_pmu_spuravoid_pll_write(struct bcma_drv_cc *cc, u32 offset,
|
||||
@@ -362,7 +388,7 @@ void bcma_pmu_spuravoid_pllupdate(struct
|
||||
tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT;
|
||||
bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp);
|
||||
|
||||
- tmp = 1 << 10;
|
||||
+ tmp = BCMA_CC_PMU_CTL_PLL_UPD;
|
||||
break;
|
||||
|
||||
case BCMA_CHIP_ID_BCM4331:
|
||||
@@ -383,7 +409,7 @@ void bcma_pmu_spuravoid_pllupdate(struct
|
||||
bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2,
|
||||
0x03000a08);
|
||||
}
|
||||
- tmp = 1 << 10;
|
||||
+ tmp = BCMA_CC_PMU_CTL_PLL_UPD;
|
||||
break;
|
||||
|
||||
case BCMA_CHIP_ID_BCM43224:
|
||||
@@ -416,7 +442,7 @@ void bcma_pmu_spuravoid_pllupdate(struct
|
||||
bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5,
|
||||
0x88888815);
|
||||
}
|
||||
- tmp = 1 << 10;
|
||||
+ tmp = BCMA_CC_PMU_CTL_PLL_UPD;
|
||||
break;
|
||||
|
||||
case BCMA_CHIP_ID_BCM4716:
|
||||
@@ -450,7 +476,7 @@ void bcma_pmu_spuravoid_pllupdate(struct
|
||||
0x88888815);
|
||||
}
|
||||
|
||||
- tmp = 3 << 9;
|
||||
+ tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW;
|
||||
break;
|
||||
|
||||
case BCMA_CHIP_ID_BCM43227:
|
||||
@@ -486,7 +512,7 @@ void bcma_pmu_spuravoid_pllupdate(struct
|
||||
bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5,
|
||||
0x88888815);
|
||||
}
|
||||
- tmp = 1 << 10;
|
||||
+ tmp = BCMA_CC_PMU_CTL_PLL_UPD;
|
||||
break;
|
||||
default:
|
||||
bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n",
|
||||
--- a/drivers/bcma/driver_chipcommon_sflash.c
|
||||
+++ b/drivers/bcma/driver_chipcommon_sflash.c
|
||||
@@ -5,15 +5,161 @@
|
||||
@@ -990,7 +1075,7 @@
|
||||
for (i = 0; i <= 6; i++)
|
||||
printk(" %s%s", irq_name[i], i == irq ? "*" : " ");
|
||||
printk("\n");
|
||||
@@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips
|
||||
@@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips
|
||||
struct bcma_bus *bus = mcore->core->bus;
|
||||
|
||||
if (bus->drv_cc.capabilities & BCMA_CC_CAP_PMU)
|
||||
@@ -1176,7 +1261,7 @@
|
||||
}
|
||||
pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0);
|
||||
return ret;
|
||||
@@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct
|
||||
@@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct
|
||||
v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
|
||||
if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE)
|
||||
break;
|
||||
@@ -1613,15 +1698,16 @@
|
||||
/** ChipCommon core registers. **/
|
||||
#define BCMA_CC_ID 0x0000
|
||||
#define BCMA_CC_ID_ID 0x0000FFFF
|
||||
@@ -100,6 +103,7 @@
|
||||
@@ -100,6 +103,8 @@
|
||||
#define BCMA_CC_CHIPST_4706_SFLASH_TYPE BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */
|
||||
#define BCMA_CC_CHIPST_4706_MIPS_BENDIAN BIT(3) /* 0: little, 1: big endian */
|
||||
#define BCMA_CC_CHIPST_4706_PCIE1_DISABLE BIT(5) /* PCIE1 enable strap pin */
|
||||
+#define BCMA_CC_CHIPST_5357_NAND_BOOT BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */
|
||||
+#define BCMA_CC_CHIPST_4360_XTAL_40MZ 0x00000001
|
||||
#define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */
|
||||
#define BCMA_CC_JCMD_START 0x80000000
|
||||
#define BCMA_CC_JCMD_BUSY 0x80000000
|
||||
@@ -266,6 +270,29 @@
|
||||
@@ -266,6 +271,29 @@
|
||||
#define BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004
|
||||
#define BCMA_CC_SROM_CONTROL_SIZE_SHIFT 1
|
||||
#define BCMA_CC_SROM_CONTROL_PRESENT 0x00000001
|
||||
@@ -1651,7 +1737,7 @@
|
||||
/* 0x1E0 is defined as shared BCMA_CLKCTLST */
|
||||
#define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */
|
||||
#define BCMA_CC_UART0_DATA 0x0300
|
||||
@@ -325,6 +352,60 @@
|
||||
@@ -325,6 +353,60 @@
|
||||
#define BCMA_CC_PLLCTL_ADDR 0x0660
|
||||
#define BCMA_CC_PLLCTL_DATA 0x0664
|
||||
#define BCMA_CC_SPROM 0x0800 /* SPROM beginning */
|
||||
@@ -1712,7 +1798,7 @@
|
||||
|
||||
/* Divider allocation in 4716/47162/5356 */
|
||||
#define BCMA_CC_PMU5_MAINPLL_CPU 1
|
||||
@@ -415,6 +496,13 @@
|
||||
@@ -415,6 +497,13 @@
|
||||
/* 4313 Chip specific ChipControl register bits */
|
||||
#define BCMA_CCTRL_4313_12MA_LED_DRIVE 0x00000007 /* 12 mA drive strengh for later 4313 */
|
||||
|
||||
@@ -1726,7 +1812,7 @@
|
||||
/* Data for the PMU, if available.
|
||||
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
|
||||
*/
|
||||
@@ -425,11 +513,35 @@ struct bcma_chipcommon_pmu {
|
||||
@@ -425,11 +514,35 @@ struct bcma_chipcommon_pmu {
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
struct bcma_pflash {
|
||||
@@ -1762,7 +1848,7 @@
|
||||
struct bcma_serial_port {
|
||||
void *regs;
|
||||
unsigned long clockspeed;
|
||||
@@ -445,15 +557,30 @@ struct bcma_drv_cc {
|
||||
@@ -445,15 +558,30 @@ struct bcma_drv_cc {
|
||||
u32 capabilities;
|
||||
u32 capabilities_ext;
|
||||
u8 setup_done:1;
|
||||
@@ -1793,7 +1879,7 @@
|
||||
};
|
||||
|
||||
/* Register access */
|
||||
@@ -470,14 +597,14 @@ struct bcma_drv_cc {
|
||||
@@ -470,14 +598,16 @@ 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);
|
||||
@@ -1807,10 +1893,12 @@
|
||||
-extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc,
|
||||
- u32 ticks);
|
||||
+extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks);
|
||||
+
|
||||
+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc);
|
||||
|
||||
void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
|
||||
@@ -490,9 +617,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d
|
||||
@@ -490,9 +620,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user