the driver requested three interrupts: "tx", "rx", "err".
The err interrupt is a summary interrupt. We distinguish
different errors based on the status register and mask.
With "cat /proc/interrupts | grep hibmcge",
we can't distinguish the detailed cause of the error,
so we added this file to debugfs.
the following effects are achieved:
[root@localhost sjj]# cat /sys/kernel/debug/hibmcge/0000\:83\:00.1/irq_info
RX : enabled: true , logged: false, count: 0
TX : enabled: true , logged: false, count: 0
MAC_MII_FIFO_ERR : enabled: false, logged: true , count: 0
MAC_PCS_RX_FIFO_ERR : enabled: false, logged: true , count: 0
MAC_PCS_TX_FIFO_ERR : enabled: false, logged: true , count: 0
MAC_APP_RX_FIFO_ERR : enabled: false, logged: true , count: 0
MAC_APP_TX_FIFO_ERR : enabled: false, logged: true , count: 0
SRAM_PARITY_ERR : enabled: true , logged: true , count: 0
TX_AHB_ERR : enabled: true , logged: true , count: 0
RX_BUF_AVL : enabled: true , logged: false, count: 0
REL_BUF_ERR : enabled: true , logged: true , count: 0
TXCFG_AVL : enabled: true , logged: false, count: 0
TX_DROP : enabled: true , logged: false, count: 0
RX_DROP : enabled: true , logged: false, count: 0
RX_AHB_ERR : enabled: true , logged: true , count: 0
MAC_FIFO_ERR : enabled: true , logged: false, count: 0
RBREQ_ERR : enabled: true , logged: false, count: 0
WE_ERR : enabled: true , logged: false, count: 0
The irq framework of hibmcge driver also includes tx/rx interrupts.
Therefore, TX and RX are not moved separately form this file.
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
---
.../ethernet/hisilicon/hibmcge/hbg_debugfs.c | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/net/ethernet/hisilicon/hibmcge/hbg_debugfs.c b/drivers/net/ethernet/hisilicon/hibmcge/hbg_debugfs.c
index 9c0b2c7231fe..99d4e22a1d6f 100644
--- a/drivers/net/ethernet/hisilicon/hibmcge/hbg_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hibmcge/hbg_debugfs.c
@@ -56,9 +56,31 @@ static int hbg_dbg_rx_ring(struct seq_file *s, void *unused)
return 0;
}
+static int hbg_dbg_irq_info(struct seq_file *s, void *unused)
+{
+ struct net_device *netdev = dev_get_drvdata(s->private);
+ struct hbg_priv *priv = netdev_priv(netdev);
+ struct hbg_irq_info *info;
+ u32 i;
+
+ for (i = 0; i < priv->vectors.info_array_len; i++) {
+ info = &priv->vectors.info_array[i];
+ seq_printf(s,
+ "%-20s: enabled: %-5s, logged: %-5s, count: %llu\n",
+ info->name,
+ hbg_get_bool_str(hbg_hw_irq_is_enabled(priv,
+ info->mask)),
+ hbg_get_bool_str(info->need_print),
+ info->count);
+ }
+
+ return 0;
+}
+
static const struct hbg_dbg_info hbg_dbg_infos[] = {
{ "tx_ring", hbg_dbg_tx_ring },
{ "rx_ring", hbg_dbg_rx_ring },
+ { "irq_info", hbg_dbg_irq_info },
};
static void hbg_debugfs_uninit(void *data)
--
2.33.0