qtnfmac: introduce counter for Rx underflow events

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>
This commit is contained in:
Sergey Matyukevich 2017-08-15 16:06:37 +03:00 committed by Kalle Valo
parent 3cbc3a0f19
commit cc75f9e5bc
4 changed files with 17 additions and 2 deletions

View File

@ -686,14 +686,21 @@ static irqreturn_t qtnf_interrupt(int irq, void *data)
if (!(status & priv->pcie_irq_mask)) if (!(status & priv->pcie_irq_mask))
goto irq_done; goto irq_done;
if (status & PCIE_HDP_INT_RX_BITS) { if (status & PCIE_HDP_INT_RX_BITS)
priv->pcie_irq_rx_count++; 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); qtnf_dis_rxdone_irq(priv);
napi_schedule(&bus->mux_napi); napi_schedule(&bus->mux_napi);
} }
if (status & PCIE_HDP_INT_TX_BITS) { if (status & PCIE_HDP_INT_TX_BITS) {
priv->pcie_irq_tx_count++;
qtnf_dis_txdone_irq(priv); qtnf_dis_txdone_irq(priv);
tasklet_hi_schedule(&priv->reclaim_tq); 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; status = reg & PCIE_HDP_INT_RX_BITS;
seq_printf(s, "pcie_irq_rx_status(%s)\n", seq_printf(s, "pcie_irq_rx_status(%s)\n",
(status == PCIE_HDP_INT_RX_BITS) ? "EN" : "DIS"); (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; 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_count = 0;
pcie_priv->pcie_irq_rx_count = 0; pcie_priv->pcie_irq_rx_count = 0;
pcie_priv->pcie_irq_tx_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_done = 0;
pcie_priv->tx_reclaim_req = 0; pcie_priv->tx_reclaim_req = 0;

View File

@ -78,6 +78,7 @@ struct qtnf_pcie_bus_priv {
u32 pcie_irq_count; u32 pcie_irq_count;
u32 pcie_irq_rx_count; u32 pcie_irq_rx_count;
u32 pcie_irq_tx_count; u32 pcie_irq_tx_count;
u32 pcie_irq_uf_count;
u32 tx_full_count; u32 tx_full_count;
u32 tx_done_count; u32 tx_done_count;
u32 tx_reclaim_done; u32 tx_reclaim_done;

View File

@ -50,6 +50,7 @@
#define PCIE_HDP_INT_RX_BITS (0 \ #define PCIE_HDP_INT_RX_BITS (0 \
| PCIE_HDP_INT_EP_TXDMA \ | PCIE_HDP_INT_EP_TXDMA \
| PCIE_HDP_INT_EP_TXEMPTY \ | PCIE_HDP_INT_EP_TXEMPTY \
| PCIE_HDP_INT_HHBM_UF \
) )
#define PCIE_HDP_INT_TX_BITS (0 \ #define PCIE_HDP_INT_TX_BITS (0 \

View File

@ -333,6 +333,7 @@
#define PCIE_HDP_INT_RX_LEN_ERR (BIT(2)) #define PCIE_HDP_INT_RX_LEN_ERR (BIT(2))
#define PCIE_HDP_INT_RX_HDR_LEN_ERR (BIT(3)) #define PCIE_HDP_INT_RX_HDR_LEN_ERR (BIT(3))
#define PCIE_HDP_INT_EP_TXDMA (BIT(12)) #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_EP_TXEMPTY (BIT(15))
#define PCIE_HDP_INT_IPC (BIT(29)) #define PCIE_HDP_INT_IPC (BIT(29))