diff options
Diffstat (limited to 'drivers/net/wwan/t7xx/t7xx_mhccif.c')
-rw-r--r-- | drivers/net/wwan/t7xx/t7xx_mhccif.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/wwan/t7xx/t7xx_mhccif.c b/drivers/net/wwan/t7xx/t7xx_mhccif.c index 5826e2d0b5a8..4bb452f5ccff 100644 --- a/drivers/net/wwan/t7xx/t7xx_mhccif.c +++ b/drivers/net/wwan/t7xx/t7xx_mhccif.c @@ -24,6 +24,11 @@ #include "t7xx_pcie_mac.h" #include "t7xx_reg.h" +#define D2H_INT_SR_ACK (D2H_INT_SUSPEND_ACK | \ + D2H_INT_RESUME_ACK | \ + D2H_INT_SUSPEND_ACK_AP | \ + D2H_INT_RESUME_ACK_AP) + static void t7xx_mhccif_clear_interrupts(struct t7xx_pci_dev *t7xx_dev, u32 mask) { void __iomem *mhccif_pbase = t7xx_dev->base_addr.mhccif_rc_base; @@ -53,6 +58,18 @@ static irqreturn_t t7xx_mhccif_isr_thread(int irq, void *data) } t7xx_mhccif_clear_interrupts(t7xx_dev, int_status); + + if (int_status & D2H_INT_SR_ACK) + complete(&t7xx_dev->pm_sr_ack); + + iowrite32(T7XX_L1_BIT(1), IREG_BASE(t7xx_dev) + ENABLE_ASPM_LOWPWR); + + int_status = t7xx_mhccif_read_sw_int_sts(t7xx_dev); + if (!int_status) { + val = T7XX_L1_1_BIT(1) | T7XX_L1_2_BIT(1); + iowrite32(val, IREG_BASE(t7xx_dev) + ENABLE_ASPM_LOWPWR); + } + t7xx_pcie_mac_set_int(t7xx_dev, MHCCIF_INT); return IRQ_HANDLED; } |