mirror of https://github.com/hak5/openwrt-owl.git
kernel: bcma: update to wireless-testing master-2013-10-01
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 38290owl
parent
125fc703bb
commit
fa839274b0
|
@ -678,14 +678,20 @@
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* Workarounds.
|
* Workarounds.
|
||||||
**************************************************/
|
**************************************************/
|
||||||
@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s
|
@@ -229,6 +236,32 @@ void bcma_core_pci_init(struct bcma_drv_
|
||||||
}
|
bcma_core_pci_clientmode_init(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
|
+void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||||
+{
|
+{
|
||||||
|
+ struct bcma_drv_pci *pc;
|
||||||
+ u16 data;
|
+ u16 data;
|
||||||
+
|
+
|
||||||
|
+ if (bus->hosttype != BCMA_HOSTTYPE_PCI)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ pc = &bus->drv_pci[0];
|
||||||
|
+
|
||||||
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
||||||
+ data = up ? 0x74 : 0x7C;
|
+ data = up ? 0x74 : 0x7C;
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
@ -700,11 +706,12 @@
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
|
||||||
+
|
+
|
||||||
/**************************************************
|
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||||
* Init.
|
bool enable)
|
||||||
**************************************************/
|
{
|
||||||
@@ -262,7 +288,7 @@ out:
|
@@ -262,7 +295,7 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
||||||
|
|
||||||
|
@ -713,7 +720,7 @@
|
||||||
{
|
{
|
||||||
u32 w;
|
u32 w;
|
||||||
|
|
||||||
@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct
|
@@ -274,4 +307,29 @@ void bcma_core_pci_extend_L1timer(struct
|
||||||
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
||||||
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
||||||
}
|
}
|
||||||
|
@ -728,8 +735,6 @@
|
||||||
+
|
+
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_power_save(pc, true);
|
|
||||||
+
|
|
||||||
+ bcma_core_pci_extend_L1timer(pc, true);
|
+ bcma_core_pci_extend_L1timer(pc, true);
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
||||||
|
@ -744,8 +749,6 @@
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_extend_L1timer(pc, false);
|
+ bcma_core_pci_extend_L1timer(pc, false);
|
||||||
+
|
|
||||||
+ bcma_core_pci_power_save(pc, false);
|
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
||||||
--- a/drivers/bcma/driver_pci_host.c
|
--- a/drivers/bcma/driver_pci_host.c
|
||||||
|
@ -899,13 +902,14 @@
|
||||||
|
|
||||||
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
||||||
struct bcma_drv_pci_host {
|
struct bcma_drv_pci_host {
|
||||||
@@ -219,7 +240,8 @@ struct bcma_drv_pci {
|
@@ -219,7 +240,9 @@ struct bcma_drv_pci {
|
||||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||||
struct bcma_device *core, bool enable);
|
struct bcma_device *core, bool enable);
|
||||||
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
||||||
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||||
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||||
|
+extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||||
|
|
||||||
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||||
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||||
|
|
|
@ -2248,7 +2248,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
@@ -138,88 +150,127 @@ static void bcma_pcie_mdio_write(struct
|
@@ -138,88 +150,134 @@ static void bcma_pcie_mdio_write(struct
|
||||||
|
|
||||||
static u8 bcma_pcicore_polarity_workaround(struct bcma_drv_pci *pc)
|
static u8 bcma_pcicore_polarity_workaround(struct bcma_drv_pci *pc)
|
||||||
{
|
{
|
||||||
|
@ -2301,18 +2301,12 @@
|
||||||
+ (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK);
|
+ (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK);
|
||||||
+ pcicore_write16(pc, regoff, val16);
|
+ pcicore_write16(pc, regoff, val16);
|
||||||
+ }
|
+ }
|
||||||
}
|
+}
|
||||||
|
+
|
||||||
-/**************************************************
|
|
||||||
- * Init.
|
|
||||||
- **************************************************/
|
|
||||||
-
|
|
||||||
-static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
|
|
||||||
+/* Fix MISC config to allow coming out of L2/L3-Ready state w/o PRST */
|
+/* Fix MISC config to allow coming out of L2/L3-Ready state w/o PRST */
|
||||||
+/* Needs to happen when coming out of 'standby'/'hibernate' */
|
+/* Needs to happen when coming out of 'standby'/'hibernate' */
|
||||||
+static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc)
|
+static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc)
|
||||||
{
|
+{
|
||||||
- bcma_pcicore_serdes_workaround(pc);
|
|
||||||
+ u16 val16;
|
+ u16 val16;
|
||||||
+ uint regoff;
|
+ uint regoff;
|
||||||
+
|
+
|
||||||
|
@ -2326,13 +2320,23 @@
|
||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
|
|
||||||
-static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
|
/**************************************************
|
||||||
+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
|
* Init.
|
||||||
|
**************************************************/
|
||||||
|
|
||||||
|
-static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
|
||||||
|
+static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
|
||||||
{
|
{
|
||||||
|
+ bcma_core_pci_fixcfg(pc);
|
||||||
|
bcma_pcicore_serdes_workaround(pc);
|
||||||
|
+ bcma_core_pci_config_fixup(pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
|
||||||
|
-{
|
||||||
- struct bcma_bus *bus = pc->core->bus;
|
- struct bcma_bus *bus = pc->core->bus;
|
||||||
- u16 chipid_top;
|
- u16 chipid_top;
|
||||||
+ u16 data;
|
-
|
||||||
|
|
||||||
- chipid_top = (bus->chipinfo.id & 0xFF00);
|
- chipid_top = (bus->chipinfo.id & 0xFF00);
|
||||||
- if (chipid_top != 0x4700 &&
|
- if (chipid_top != 0x4700 &&
|
||||||
- chipid_top != 0x5300)
|
- chipid_top != 0x5300)
|
||||||
|
@ -2342,39 +2346,17 @@
|
||||||
- if (bus->sprom.boardflags_lo & SSB_BFL_NOPCI)
|
- if (bus->sprom.boardflags_lo & SSB_BFL_NOPCI)
|
||||||
- return false;
|
- return false;
|
||||||
-#endif /* CONFIG_SSB_DRIVER_PCICORE */
|
-#endif /* CONFIG_SSB_DRIVER_PCICORE */
|
||||||
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
-
|
||||||
+ data = up ? 0x74 : 0x7C;
|
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64);
|
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
|
||||||
+ } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) {
|
|
||||||
+ data = up ? 0x75 : 0x7D;
|
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65);
|
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
|
|
||||||
-#if 0
|
-#if 0
|
||||||
- /* TODO: on BCMA we use address from EROM instead of magic formula */
|
- /* TODO: on BCMA we use address from EROM instead of magic formula */
|
||||||
- u32 tmp;
|
- u32 tmp;
|
||||||
- return !mips_busprobe32(tmp, (bus->mmio +
|
- return !mips_busprobe32(tmp, (bus->mmio +
|
||||||
- (pc->core->core_index * BCMA_CORE_SIZE)));
|
- (pc->core->core_index * BCMA_CORE_SIZE)));
|
||||||
-#endif
|
-#endif
|
||||||
+/**************************************************
|
-
|
||||||
+ * Init.
|
|
||||||
+ **************************************************/
|
|
||||||
|
|
||||||
- return true;
|
- return true;
|
||||||
+static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
|
-}
|
||||||
+{
|
-
|
||||||
+ bcma_core_pci_fixcfg(pc);
|
|
||||||
+ bcma_pcicore_serdes_workaround(pc);
|
|
||||||
+ bcma_core_pci_config_fixup(pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void bcma_core_pci_init(struct bcma_drv_pci *pc)
|
-void bcma_core_pci_init(struct bcma_drv_pci *pc)
|
||||||
+void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc)
|
+void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc)
|
||||||
{
|
{
|
||||||
|
@ -2390,13 +2372,38 @@
|
||||||
- pr_err("Driver compiled without support for hostmode PCI\n");
|
- pr_err("Driver compiled without support for hostmode PCI\n");
|
||||||
#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
|
#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
|
||||||
- } else {
|
- } else {
|
||||||
- bcma_core_pci_clientmode_init(pc);
|
+
|
||||||
|
+ if (!pc->hostmode)
|
||||||
|
bcma_core_pci_clientmode_init(pc);
|
||||||
- }
|
- }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||||
|
+{
|
||||||
|
+ struct bcma_drv_pci *pc;
|
||||||
|
+ u16 data;
|
||||||
|
|
||||||
- pc->setup_done = true;
|
- pc->setup_done = true;
|
||||||
+ if (!pc->hostmode)
|
+ if (bus->hosttype != BCMA_HOSTTYPE_PCI)
|
||||||
+ bcma_core_pci_clientmode_init(pc);
|
+ return;
|
||||||
|
+
|
||||||
|
+ pc = &bus->drv_pci[0];
|
||||||
|
+
|
||||||
|
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
||||||
|
+ data = up ? 0x74 : 0x7C;
|
||||||
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64);
|
||||||
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
|
+ } else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) {
|
||||||
|
+ data = up ? 0x75 : 0x7D;
|
||||||
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65);
|
||||||
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
|
+ }
|
||||||
}
|
}
|
||||||
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
|
||||||
|
|
||||||
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||||
bool enable)
|
bool enable)
|
||||||
|
@ -2419,7 +2426,7 @@
|
||||||
err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp);
|
err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp);
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -236,3 +287,46 @@ out:
|
@@ -236,3 +294,42 @@ out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
||||||
|
@ -2446,8 +2453,6 @@
|
||||||
+
|
+
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_power_save(pc, true);
|
|
||||||
+
|
|
||||||
+ bcma_core_pci_extend_L1timer(pc, true);
|
+ bcma_core_pci_extend_L1timer(pc, true);
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
||||||
|
@ -2462,8 +2467,6 @@
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_extend_L1timer(pc, false);
|
+ bcma_core_pci_extend_L1timer(pc, false);
|
||||||
+
|
|
||||||
+ bcma_core_pci_power_save(pc, false);
|
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
||||||
--- a/drivers/bcma/driver_pci_host.c
|
--- a/drivers/bcma/driver_pci_host.c
|
||||||
|
@ -5558,7 +5561,7 @@
|
||||||
|
|
||||||
/* SBtoPCIx */
|
/* SBtoPCIx */
|
||||||
#define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000
|
#define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000
|
||||||
@@ -72,20 +108,142 @@ struct pci_dev;
|
@@ -72,20 +108,143 @@ struct pci_dev;
|
||||||
#define BCMA_CORE_PCI_SBTOPCI_RC_READL 0x00000010 /* Memory read line */
|
#define BCMA_CORE_PCI_SBTOPCI_RC_READL 0x00000010 /* Memory read line */
|
||||||
#define BCMA_CORE_PCI_SBTOPCI_RC_READM 0x00000020 /* Memory read multiple */
|
#define BCMA_CORE_PCI_SBTOPCI_RC_READM 0x00000020 /* Memory read multiple */
|
||||||
|
|
||||||
|
@ -5697,6 +5700,7 @@
|
||||||
struct bcma_device *core, bool enable);
|
struct bcma_device *core, bool enable);
|
||||||
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||||
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||||
|
+extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||||
+
|
+
|
||||||
+extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
+extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||||
+extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
+extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||||
|
|
|
@ -1684,14 +1684,20 @@
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* Workarounds.
|
* Workarounds.
|
||||||
**************************************************/
|
**************************************************/
|
||||||
@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s
|
@@ -229,6 +236,32 @@ void __devinit bcma_core_pci_init(struct
|
||||||
}
|
bcma_core_pci_clientmode_init(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
|
+void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||||
+{
|
+{
|
||||||
|
+ struct bcma_drv_pci *pc;
|
||||||
+ u16 data;
|
+ u16 data;
|
||||||
+
|
+
|
||||||
|
+ if (bus->hosttype != BCMA_HOSTTYPE_PCI)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ pc = &bus->drv_pci[0];
|
||||||
|
+
|
||||||
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
||||||
+ data = up ? 0x74 : 0x7C;
|
+ data = up ? 0x74 : 0x7C;
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
@ -1706,11 +1712,12 @@
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
|
||||||
+
|
+
|
||||||
/**************************************************
|
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||||
* Init.
|
bool enable)
|
||||||
**************************************************/
|
{
|
||||||
@@ -262,7 +288,7 @@ out:
|
@@ -262,7 +295,7 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
||||||
|
|
||||||
|
@ -1719,7 +1726,7 @@
|
||||||
{
|
{
|
||||||
u32 w;
|
u32 w;
|
||||||
|
|
||||||
@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct
|
@@ -274,4 +307,29 @@ void bcma_core_pci_extend_L1timer(struct
|
||||||
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
||||||
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
||||||
}
|
}
|
||||||
|
@ -1734,8 +1741,6 @@
|
||||||
+
|
+
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_power_save(pc, true);
|
|
||||||
+
|
|
||||||
+ bcma_core_pci_extend_L1timer(pc, true);
|
+ bcma_core_pci_extend_L1timer(pc, true);
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
||||||
|
@ -1750,8 +1755,6 @@
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_extend_L1timer(pc, false);
|
+ bcma_core_pci_extend_L1timer(pc, false);
|
||||||
+
|
|
||||||
+ bcma_core_pci_power_save(pc, false);
|
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
||||||
--- a/drivers/bcma/driver_pci_host.c
|
--- a/drivers/bcma/driver_pci_host.c
|
||||||
|
@ -3210,13 +3213,14 @@
|
||||||
|
|
||||||
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
||||||
struct bcma_drv_pci_host {
|
struct bcma_drv_pci_host {
|
||||||
@@ -217,7 +240,8 @@ struct bcma_drv_pci {
|
@@ -217,7 +240,9 @@ struct bcma_drv_pci {
|
||||||
extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc);
|
extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||||
struct bcma_device *core, bool enable);
|
struct bcma_device *core, bool enable);
|
||||||
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
||||||
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||||
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||||
|
+extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||||
|
|
||||||
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||||
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||||
|
|
|
@ -1769,13 +1769,14 @@
|
||||||
|
|
||||||
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
||||||
struct bcma_drv_pci_host {
|
struct bcma_drv_pci_host {
|
||||||
@@ -217,7 +240,8 @@ struct bcma_drv_pci {
|
@@ -217,7 +240,9 @@ struct bcma_drv_pci {
|
||||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||||
struct bcma_device *core, bool enable);
|
struct bcma_device *core, bool enable);
|
||||||
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
||||||
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||||
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||||
|
+extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||||
|
|
||||||
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||||
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||||
|
@ -1832,14 +1833,20 @@
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* Workarounds.
|
* Workarounds.
|
||||||
**************************************************/
|
**************************************************/
|
||||||
@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s
|
@@ -229,6 +236,32 @@ void bcma_core_pci_init(struct bcma_drv_
|
||||||
}
|
bcma_core_pci_clientmode_init(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
|
+void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||||
+{
|
+{
|
||||||
|
+ struct bcma_drv_pci *pc;
|
||||||
+ u16 data;
|
+ u16 data;
|
||||||
+
|
+
|
||||||
|
+ if (bus->hosttype != BCMA_HOSTTYPE_PCI)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ pc = &bus->drv_pci[0];
|
||||||
|
+
|
||||||
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
||||||
+ data = up ? 0x74 : 0x7C;
|
+ data = up ? 0x74 : 0x7C;
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
@ -1854,11 +1861,12 @@
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
|
||||||
+
|
+
|
||||||
/**************************************************
|
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||||
* Init.
|
bool enable)
|
||||||
**************************************************/
|
{
|
||||||
@@ -262,7 +288,7 @@ out:
|
@@ -262,7 +295,7 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
||||||
|
|
||||||
|
@ -1867,7 +1875,7 @@
|
||||||
{
|
{
|
||||||
u32 w;
|
u32 w;
|
||||||
|
|
||||||
@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct
|
@@ -274,4 +307,29 @@ void bcma_core_pci_extend_L1timer(struct
|
||||||
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
||||||
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
||||||
}
|
}
|
||||||
|
@ -1882,8 +1890,6 @@
|
||||||
+
|
+
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_power_save(pc, true);
|
|
||||||
+
|
|
||||||
+ bcma_core_pci_extend_L1timer(pc, true);
|
+ bcma_core_pci_extend_L1timer(pc, true);
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
||||||
|
@ -1898,8 +1904,6 @@
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_extend_L1timer(pc, false);
|
+ bcma_core_pci_extend_L1timer(pc, false);
|
||||||
+
|
|
||||||
+ bcma_core_pci_power_save(pc, false);
|
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
||||||
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c
|
||||||
|
|
|
@ -1092,14 +1092,20 @@
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* Workarounds.
|
* Workarounds.
|
||||||
**************************************************/
|
**************************************************/
|
||||||
@@ -203,6 +210,25 @@ static void bcma_core_pci_config_fixup(s
|
@@ -229,6 +236,32 @@ void bcma_core_pci_init(struct bcma_drv_
|
||||||
}
|
bcma_core_pci_clientmode_init(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
+static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
|
+void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||||
+{
|
+{
|
||||||
|
+ struct bcma_drv_pci *pc;
|
||||||
+ u16 data;
|
+ u16 data;
|
||||||
+
|
+
|
||||||
|
+ if (bus->hosttype != BCMA_HOSTTYPE_PCI)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ pc = &bus->drv_pci[0];
|
||||||
|
+
|
||||||
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
+ if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
|
||||||
+ data = up ? 0x74 : 0x7C;
|
+ data = up ? 0x74 : 0x7C;
|
||||||
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
+ bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
|
||||||
|
@ -1114,11 +1120,12 @@
|
||||||
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
+ BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
|
||||||
+
|
+
|
||||||
/**************************************************
|
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||||
* Init.
|
bool enable)
|
||||||
**************************************************/
|
{
|
||||||
@@ -262,7 +288,7 @@ out:
|
@@ -262,7 +295,7 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
|
||||||
|
|
||||||
|
@ -1127,7 +1134,7 @@
|
||||||
{
|
{
|
||||||
u32 w;
|
u32 w;
|
||||||
|
|
||||||
@@ -274,4 +300,33 @@ void bcma_core_pci_extend_L1timer(struct
|
@@ -274,4 +307,29 @@ void bcma_core_pci_extend_L1timer(struct
|
||||||
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
|
||||||
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
|
||||||
}
|
}
|
||||||
|
@ -1142,8 +1149,6 @@
|
||||||
+
|
+
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_power_save(pc, true);
|
|
||||||
+
|
|
||||||
+ bcma_core_pci_extend_L1timer(pc, true);
|
+ bcma_core_pci_extend_L1timer(pc, true);
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_up);
|
||||||
|
@ -1158,8 +1163,6 @@
|
||||||
+ pc = &bus->drv_pci[0];
|
+ pc = &bus->drv_pci[0];
|
||||||
+
|
+
|
||||||
+ bcma_core_pci_extend_L1timer(pc, false);
|
+ bcma_core_pci_extend_L1timer(pc, false);
|
||||||
+
|
|
||||||
+ bcma_core_pci_power_save(pc, false);
|
|
||||||
+}
|
+}
|
||||||
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
+EXPORT_SYMBOL_GPL(bcma_core_pci_down);
|
||||||
--- a/drivers/bcma/driver_pci_host.c
|
--- a/drivers/bcma/driver_pci_host.c
|
||||||
|
@ -1218,13 +1221,14 @@
|
||||||
|
|
||||||
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
||||||
struct bcma_drv_pci_host {
|
struct bcma_drv_pci_host {
|
||||||
@@ -219,7 +240,8 @@ struct bcma_drv_pci {
|
@@ -219,7 +240,9 @@ struct bcma_drv_pci {
|
||||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||||
struct bcma_device *core, bool enable);
|
struct bcma_device *core, bool enable);
|
||||||
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
-extern void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend);
|
||||||
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
+extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||||
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
+extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||||
|
+extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||||
|
|
||||||
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||||
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||||
|
|
Loading…
Reference in New Issue