diff options
-rw-r--r-- | drivers/dahdi/voicebus/voicebus.h | 9 | ||||
-rw-r--r-- | drivers/dahdi/wctdm24xxp/base.c | 12 | ||||
-rw-r--r-- | drivers/dahdi/wcte12xp/base.c | 12 |
3 files changed, 33 insertions, 0 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.h b/drivers/dahdi/voicebus/voicebus.h index dd0809f..9518028 100644 --- a/drivers/dahdi/voicebus/voicebus.h +++ b/drivers/dahdi/voicebus/voicebus.h @@ -57,6 +57,15 @@ * (and not tasklet). */ #define CONFIG_VOICEBUS_INTERRUPT +/* + * Enable the following definition in order to disable Active-State Power + * Management on the PCIe bridge for PCIe cards. This has been known to work + * around issues where the BIOS enables it on the cards even though the + * platform does not support it. + * + */ +#undef CONFIG_VOICEBUS_DISABLE_ASPM + /* Define this to use a FIFO for the software echocan reference. * (experimental) */ #undef CONFIG_VOICEBUS_ECREFERENCE diff --git a/drivers/dahdi/wctdm24xxp/base.c b/drivers/dahdi/wctdm24xxp/base.c index 039c379..c6ebb38 100644 --- a/drivers/dahdi/wctdm24xxp/base.c +++ b/drivers/dahdi/wctdm24xxp/base.c @@ -191,6 +191,11 @@ static const struct wctdm_desc wcaex410 = { "Wildcard AEX410", FLAG_EXPRESS, 4 } static const struct wctdm_desc wcha80000 = { "HA8-0000", 0, 8 }; static const struct wctdm_desc wchb80000 = { "HB8-0000", FLAG_EXPRESS, 8 }; +static inline bool is_pcie(const struct wctdm *wc) +{ + return (wc->desc->flags & FLAG_EXPRESS) > 0; +} + /** * Returns true if the card is one of the Hybrid Digital Analog Cards. */ @@ -5679,6 +5684,13 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) wc->vb.pdev = pdev; wc->vb.debug = &debug; +#ifdef CONFIG_VOICEBUS_DISABLE_ASPM + if (is_pcie(wc)) { + pci_disable_link_state(pdev->bus->self, PCIE_LINK_STATE_L0S | + PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); + }; +#endif + if (is_hx8(wc)) { wc->vb.ops = &hx8_voicebus_operations; ret = voicebus_boot_init(&wc->vb, wc->board_name); diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index e7f3dca..d61c62e 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -99,6 +99,11 @@ static const struct t1_desc te120p = {"Wildcard TE120P"}; static const struct t1_desc te122 = {"Wildcard TE122"}; static const struct t1_desc te121 = {"Wildcard TE121"}; +static inline bool is_pcie(const struct t1 *t1) +{ + return (0 == strcmp(t1->variety, te121.name)); +} + /* names of HWEC modules */ static const char *vpmadt032_name = "VPMADT032"; static const char *vpmoct_name = "VPMOCT032"; @@ -2749,6 +2754,13 @@ static int __devinit te12xp_init_one(struct pci_dev *pdev, const struct pci_devi } #endif /* CONFIG_VOICEBUS_ECREFERENCE */ +#ifdef CONFIG_VOICEBUS_DISABLE_ASPM + if (is_pcie(wc)) { + pci_disable_link_state(pdev->bus->self, PCIE_LINK_STATE_L0S | + PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); + }; +#endif + snprintf(wc->name, sizeof(wc->name)-1, "wcte12xp%d", index); pci_set_drvdata(pdev, wc); wc->vb.ops = &voicebus_operations; |