|
@@ -240,78 +240,6 @@ void pcicore_deinit(struct pcicore_info *pch)
|
|
|
kfree(pch);
|
|
|
}
|
|
|
|
|
|
-/* ***** Register Access API */
|
|
|
-static uint
|
|
|
-pcie_readreg(struct bcma_device *core, uint addrtype, uint offset)
|
|
|
-{
|
|
|
- uint retval = 0xFFFFFFFF;
|
|
|
-
|
|
|
- switch (addrtype) {
|
|
|
- case PCIE_CONFIGREGS:
|
|
|
- bcma_write32(core, PCIEREGOFFS(configaddr), offset);
|
|
|
- (void)bcma_read32(core, PCIEREGOFFS(configaddr));
|
|
|
- retval = bcma_read32(core, PCIEREGOFFS(configdata));
|
|
|
- break;
|
|
|
- case PCIE_PCIEREGS:
|
|
|
- bcma_write32(core, PCIEREGOFFS(pcieindaddr), offset);
|
|
|
- (void)bcma_read32(core, PCIEREGOFFS(pcieindaddr));
|
|
|
- retval = bcma_read32(core, PCIEREGOFFS(pcieinddata));
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return retval;
|
|
|
-}
|
|
|
-
|
|
|
-static uint pcie_writereg(struct bcma_device *core, uint addrtype,
|
|
|
- uint offset, uint val)
|
|
|
-{
|
|
|
- switch (addrtype) {
|
|
|
- case PCIE_CONFIGREGS:
|
|
|
- bcma_write32(core, PCIEREGOFFS(configaddr), offset);
|
|
|
- bcma_write32(core, PCIEREGOFFS(configdata), val);
|
|
|
- break;
|
|
|
- case PCIE_PCIEREGS:
|
|
|
- bcma_write32(core, PCIEREGOFFS(pcieindaddr), offset);
|
|
|
- bcma_write32(core, PCIEREGOFFS(pcieinddata), val);
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/* ***** Support functions ***** */
|
|
|
-static void pcie_extendL1timer(struct pcicore_info *pi, bool extend)
|
|
|
-{
|
|
|
- u32 w;
|
|
|
-
|
|
|
- w = pcie_readreg(pi->core, PCIE_PCIEREGS, PCIE_DLLP_PMTHRESHREG);
|
|
|
- if (extend)
|
|
|
- w |= PCIE_ASPMTIMER_EXTEND;
|
|
|
- else
|
|
|
- w &= ~PCIE_ASPMTIMER_EXTEND;
|
|
|
- pcie_writereg(pi->core, PCIE_PCIEREGS, PCIE_DLLP_PMTHRESHREG, w);
|
|
|
- w = pcie_readreg(pi->core, PCIE_PCIEREGS, PCIE_DLLP_PMTHRESHREG);
|
|
|
-}
|
|
|
-
|
|
|
-void pcicore_up(struct pcicore_info *pi, int state)
|
|
|
-{
|
|
|
- if (!pi || ai_get_buscoretype(pi->sih) != PCIE_CORE_ID)
|
|
|
- return;
|
|
|
-
|
|
|
- /* Restore L1 timer for better performance */
|
|
|
- pcie_extendL1timer(pi, true);
|
|
|
-}
|
|
|
-
|
|
|
-void pcicore_down(struct pcicore_info *pi, int state)
|
|
|
-{
|
|
|
- if (!pi || ai_get_buscoretype(pi->sih) != PCIE_CORE_ID)
|
|
|
- return;
|
|
|
-
|
|
|
- /* Reduce L1 timer for better power savings */
|
|
|
- pcie_extendL1timer(pi, false);
|
|
|
-}
|
|
|
-
|
|
|
void pcicore_fixcfg(struct pcicore_info *pi)
|
|
|
{
|
|
|
struct bcma_device *core = pi->core;
|