[PATCH net-next 11/11] net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support
From: Luo Jie
Date: Thu Oct 08 2026 - 11:05:17 EST
IPQ5424 has more BM ports than IPQ9574, so the BM used, reacted and
overflow-drop counter tables have more entries on IPQ5424, and the used
and reacted counter tables are located at different addresses. The BM
silent-drop counter table on the other hand has only 4 entries on IPQ5424,
versus 8 on IPQ9574.
Signed-off-by: Luo Jie <jie.luo@xxxxxxxxxxxxxxxx>
---
drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c | 14 +++++-----
drivers/net/ethernet/qualcomm/ppe/ppe_regs.h | 36 ++++++++++++++++++++-----
2 files changed, 37 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c b/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c
index fd959a76ff43..8d5a6fad8337 100644
--- a/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c
+++ b/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c
@@ -201,7 +201,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq)
seq_printf(seq, "%-24s", "BM SILENT_DROP:");
tag = 0;
- for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES; i++) {
+ for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES(ppe_dev); i++) {
reg = PPE_DROP_CNT_TBL_ADDR + i * PPE_DROP_CNT_TBL_INC;
ret = ppe_pkt_cnt_get(ppe_dev, reg, PPE_PKT_CNT_SIZE_1WORD,
&pkt_cnt, NULL);
@@ -225,7 +225,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq)
*/
seq_printf(seq, "%-24s", "BM OVERFLOW_DROP:");
tag = 0;
- for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES; i++) {
+ for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES(ppe_dev); i++) {
reg = PPE_DROP_STAT_TBL_ADDR + PPE_DROP_STAT_TBL_INC * i;
ret = ppe_pkt_cnt_get(ppe_dev, reg, PPE_PKT_CNT_SIZE_3WORD,
@@ -248,8 +248,8 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq)
/* The number of currently occupied buffers, that can't be flushed. */
seq_printf(seq, "%-24s", "BM USED/REACT:");
tag = 0;
- for (i = 0; i < PPE_BM_USED_CNT_TBL_ENTRIES; i++) {
- reg = PPE_BM_USED_CNT_TBL_ADDR + i * PPE_BM_USED_CNT_TBL_INC;
+ for (i = 0; i < PPE_BM_USED_CNT_TBL_ENTRIES(ppe_dev); i++) {
+ reg = PPE_BM_USED_CNT_TBL_ADDR(ppe_dev) + i * PPE_BM_USED_CNT_TBL_INC;
ret = regmap_read(ppe_dev->regmap, reg, &val);
if (ret) {
dev_err(ppe_dev->dev, "CNT ERROR %d\n", ret);
@@ -261,7 +261,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq)
*/
pkt_cnt = FIELD_GET(PPE_BM_USED_CNT_VAL, val);
- reg = PPE_BM_REACT_CNT_TBL_ADDR + i * PPE_BM_REACT_CNT_TBL_INC;
+ reg = PPE_BM_REACT_CNT_TBL_ADDR(ppe_dev) + i * PPE_BM_REACT_CNT_TBL_INC;
ret = regmap_read(ppe_dev->regmap, reg, &val);
if (ret) {
dev_err(ppe_dev->dev, "CNT ERROR %d\n", ret);
@@ -723,12 +723,12 @@ static ssize_t ppe_packet_counter_write(struct file *file,
switch (entry->counter_type) {
case PPE_CNT_BM:
- for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES; i++) {
+ for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES(ppe_dev); i++) {
reg = PPE_DROP_CNT_TBL_ADDR + i * PPE_DROP_CNT_TBL_INC;
ppe_tbl_pkt_cnt_clear(ppe_dev, reg, PPE_PKT_CNT_SIZE_1WORD);
}
- for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES; i++) {
+ for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES(ppe_dev); i++) {
reg = PPE_DROP_STAT_TBL_ADDR + PPE_DROP_STAT_TBL_INC * i;
ppe_tbl_pkt_cnt_clear(ppe_dev, reg, PPE_PKT_CNT_SIZE_3WORD);
}
diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h
index 089aa34b7732..d08ab02bdf79 100644
--- a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h
+++ b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h
@@ -18,12 +18,20 @@
/* PPE drop counters. */
#define PPE_DROP_CNT_TBL_ADDR 0xb024
-#define PPE_DROP_CNT_TBL_ENTRIES 8
+#define PPE_DROP_CNT_TBL_IPQ9574_ENTRIES 8
+#define PPE_DROP_CNT_TBL_IPQ5424_ENTRIES 4
+#define PPE_DROP_CNT_TBL_ENTRIES(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_DROP_CNT_TBL_IPQ5424_ENTRIES : \
+ PPE_DROP_CNT_TBL_IPQ9574_ENTRIES)
#define PPE_DROP_CNT_TBL_INC 4
/* BM port drop counters. */
#define PPE_DROP_STAT_TBL_ADDR 0xe000
-#define PPE_DROP_STAT_TBL_ENTRIES 30
+#define PPE_DROP_STAT_TBL_IPQ9574_ENTRIES 30
+#define PPE_DROP_STAT_TBL_IPQ5424_ENTRIES 38
+#define PPE_DROP_STAT_TBL_ENTRIES(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_DROP_STAT_TBL_IPQ5424_ENTRIES : \
+ PPE_DROP_STAT_TBL_IPQ9574_ENTRIES)
#define PPE_DROP_STAT_TBL_INC 0x10
/* Egress VLAN counters. */
@@ -426,14 +434,30 @@
#define PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID GENMASK(1, 0)
/* Counters for PPE buffers used for packets cached. */
-#define PPE_BM_USED_CNT_TBL_ADDR 0x6001c0
-#define PPE_BM_USED_CNT_TBL_ENTRIES 15
+#define PPE_BM_USED_CNT_TBL_IPQ9574_ADDR 0x6001c0
+#define PPE_BM_USED_CNT_TBL_IPQ5424_ADDR 0x600220
+#define PPE_BM_USED_CNT_TBL_ADDR(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_USED_CNT_TBL_IPQ5424_ADDR : \
+ PPE_BM_USED_CNT_TBL_IPQ9574_ADDR)
+#define PPE_BM_USED_CNT_TBL_IPQ9574_ENTRIES 15
+#define PPE_BM_USED_CNT_TBL_IPQ5424_ENTRIES 19
+#define PPE_BM_USED_CNT_TBL_ENTRIES(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_USED_CNT_TBL_IPQ5424_ENTRIES : \
+ PPE_BM_USED_CNT_TBL_IPQ9574_ENTRIES)
#define PPE_BM_USED_CNT_TBL_INC 0x4
#define PPE_BM_USED_CNT_VAL GENMASK(10, 0)
/* Counters for PPE buffers used for packets received after pause frame sent. */
-#define PPE_BM_REACT_CNT_TBL_ADDR 0x600240
-#define PPE_BM_REACT_CNT_TBL_ENTRIES 15
+#define PPE_BM_REACT_CNT_TBL_IPQ9574_ADDR 0x600240
+#define PPE_BM_REACT_CNT_TBL_IPQ5424_ADDR 0x600280
+#define PPE_BM_REACT_CNT_TBL_ADDR(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_REACT_CNT_TBL_IPQ5424_ADDR : \
+ PPE_BM_REACT_CNT_TBL_IPQ9574_ADDR)
+#define PPE_BM_REACT_CNT_TBL_IPQ9574_ENTRIES 15
+#define PPE_BM_REACT_CNT_TBL_IPQ5424_ENTRIES 19
+#define PPE_BM_REACT_CNT_TBL_ENTRIES(ppe_dev) \
+ ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_REACT_CNT_TBL_IPQ5424_ENTRIES : \
+ PPE_BM_REACT_CNT_TBL_IPQ9574_ENTRIES)
#define PPE_BM_REACT_CNT_TBL_INC 0x4
#define PPE_BM_REACT_CNT_VAL GENMASK(8, 0)
--
2.43.0