qtnfmac: introduce counter for Rx underflow events
authorSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Tue, 15 Aug 2017 13:06:37 +0000 (16:06 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 17 Aug 2017 07:05:05 +0000 (10:05 +0300)
Introduce counter for Rx underflow events. Export this counter via debugfs.

Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_bus_priv.h
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_ipc.h
drivers/net/wireless/quantenna/qtnfmac/pearl/pcie_regs_pearl.h

index f8207ab25576021a2aab3c1cc7a1d4562a0fb0f3..72730aff2a4168c9ad6620e5f87e597ff9e0eb91 100644 (file)
@@ -686,14 +686,21 @@ static irqreturn_t qtnf_interrupt(int irq, void *data)
        if (!(status & priv->pcie_irq_mask))
                goto irq_done;
 
-       if (status & PCIE_HDP_INT_RX_BITS) {
+       if (status & PCIE_HDP_INT_RX_BITS)
                priv->pcie_irq_rx_count++;
+
+       if (status & PCIE_HDP_INT_TX_BITS)
+               priv->pcie_irq_tx_count++;
+
+       if (status & PCIE_HDP_INT_HHBM_UF)
+               priv->pcie_irq_uf_count++;
+
+       if (status & PCIE_HDP_INT_RX_BITS) {
                qtnf_dis_rxdone_irq(priv);
                napi_schedule(&bus->mux_napi);
        }
 
        if (status & PCIE_HDP_INT_TX_BITS) {
-               priv->pcie_irq_tx_count++;
                qtnf_dis_txdone_irq(priv);
                tasklet_hi_schedule(&priv->reclaim_tq);
        }
@@ -1104,6 +1111,10 @@ static int qtnf_dbg_irq_stats(struct seq_file *s, void *data)
        status = reg &  PCIE_HDP_INT_RX_BITS;
        seq_printf(s, "pcie_irq_rx_status(%s)\n",
                   (status == PCIE_HDP_INT_RX_BITS) ? "EN" : "DIS");
+       seq_printf(s, "pcie_irq_uf_count(%u)\n", priv->pcie_irq_uf_count);
+       status = reg &  PCIE_HDP_INT_HHBM_UF;
+       seq_printf(s, "pcie_irq_hhbm_uf_status(%s)\n",
+                  (status == PCIE_HDP_INT_HHBM_UF) ? "EN" : "DIS");
 
        return 0;
 }
@@ -1189,6 +1200,7 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        pcie_priv->pcie_irq_count = 0;
        pcie_priv->pcie_irq_rx_count = 0;
        pcie_priv->pcie_irq_tx_count = 0;
+       pcie_priv->pcie_irq_uf_count = 0;
        pcie_priv->tx_reclaim_done = 0;
        pcie_priv->tx_reclaim_req = 0;
 
index 1b37914299e98f678093934e1098c45498ccbddf..698e42132ed44e162de39027e521c0075dc05c16 100644 (file)
@@ -78,6 +78,7 @@ struct qtnf_pcie_bus_priv {
        u32 pcie_irq_count;
        u32 pcie_irq_rx_count;
        u32 pcie_irq_tx_count;
+       u32 pcie_irq_uf_count;
        u32 tx_full_count;
        u32 tx_done_count;
        u32 tx_reclaim_done;
index e00d508fbcf0f6c3163377c5088aaf1ea41ba78a..667f5ec457e314ed3145720b3569f12fc03af4c6 100644 (file)
@@ -50,6 +50,7 @@
 #define PCIE_HDP_INT_RX_BITS (0                \
        | PCIE_HDP_INT_EP_TXDMA         \
        | PCIE_HDP_INT_EP_TXEMPTY       \
+       | PCIE_HDP_INT_HHBM_UF          \
        )
 
 #define PCIE_HDP_INT_TX_BITS (0                \
index 78715b8a8ef98f9ede82e55d265b9438b37638b3..69696f118769362360de469ff9daedd64adb6751 100644 (file)
 #define PCIE_HDP_INT_RX_LEN_ERR                (BIT(2))
 #define PCIE_HDP_INT_RX_HDR_LEN_ERR    (BIT(3))
 #define PCIE_HDP_INT_EP_TXDMA          (BIT(12))
+#define PCIE_HDP_INT_HHBM_UF           (BIT(13))
 #define PCIE_HDP_INT_EP_TXEMPTY                (BIT(15))
 #define PCIE_HDP_INT_IPC               (BIT(29))