729-05-v6.1-net-ethernet-mtk_wed-add-rx-mib-counters.patch 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Sat, 5 Nov 2022 23:36:22 +0100
  3. Subject: [PATCH] net: ethernet: mtk_wed: add rx mib counters
  4. Introduce WED RX MIB counters support available on MT7986a SoC.
  5. Tested-by: Daniel Golle <[email protected]>
  6. Co-developed-by: Sujuan Chen <[email protected]>
  7. Signed-off-by: Sujuan Chen <[email protected]>
  8. Signed-off-by: Lorenzo Bianconi <[email protected]>
  9. Signed-off-by: David S. Miller <[email protected]>
  10. ---
  11. --- a/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
  12. +++ b/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
  13. @@ -2,6 +2,7 @@
  14. /* Copyright (C) 2021 Felix Fietkau <[email protected]> */
  15. #include <linux/seq_file.h>
  16. +#include <linux/soc/mediatek/mtk_wed.h>
  17. #include "mtk_wed.h"
  18. #include "mtk_wed_regs.h"
  19. @@ -18,6 +19,8 @@ enum {
  20. DUMP_TYPE_WDMA,
  21. DUMP_TYPE_WPDMA_TX,
  22. DUMP_TYPE_WPDMA_TXFREE,
  23. + DUMP_TYPE_WPDMA_RX,
  24. + DUMP_TYPE_WED_RRO,
  25. };
  26. #define DUMP_STR(_str) { _str, 0, DUMP_TYPE_STRING }
  27. @@ -36,6 +39,9 @@ enum {
  28. #define DUMP_WPDMA_TX_RING(_n) DUMP_RING("WPDMA_TX" #_n, 0, DUMP_TYPE_WPDMA_TX, _n)
  29. #define DUMP_WPDMA_TXFREE_RING DUMP_RING("WPDMA_RX1", 0, DUMP_TYPE_WPDMA_TXFREE)
  30. +#define DUMP_WPDMA_RX_RING(_n) DUMP_RING("WPDMA_RX" #_n, 0, DUMP_TYPE_WPDMA_RX, _n)
  31. +#define DUMP_WED_RRO_RING(_base)DUMP_RING("WED_RRO_MIOD", MTK_##_base, DUMP_TYPE_WED_RRO)
  32. +#define DUMP_WED_RRO_FDBK(_base)DUMP_RING("WED_RRO_FDBK", MTK_##_base, DUMP_TYPE_WED_RRO)
  33. static void
  34. print_reg_val(struct seq_file *s, const char *name, u32 val)
  35. @@ -57,6 +63,7 @@ dump_wed_regs(struct seq_file *s, struct
  36. cur > regs ? "\n" : "",
  37. cur->name);
  38. continue;
  39. + case DUMP_TYPE_WED_RRO:
  40. case DUMP_TYPE_WED:
  41. val = wed_r32(dev, cur->offset);
  42. break;
  43. @@ -69,6 +76,9 @@ dump_wed_regs(struct seq_file *s, struct
  44. case DUMP_TYPE_WPDMA_TXFREE:
  45. val = wpdma_txfree_r32(dev, cur->offset);
  46. break;
  47. + case DUMP_TYPE_WPDMA_RX:
  48. + val = wpdma_rx_r32(dev, cur->base, cur->offset);
  49. + break;
  50. }
  51. print_reg_val(s, cur->name, val);
  52. }
  53. @@ -132,6 +142,80 @@ wed_txinfo_show(struct seq_file *s, void
  54. }
  55. DEFINE_SHOW_ATTRIBUTE(wed_txinfo);
  56. +static int
  57. +wed_rxinfo_show(struct seq_file *s, void *data)
  58. +{
  59. + static const struct reg_dump regs[] = {
  60. + DUMP_STR("WPDMA RX"),
  61. + DUMP_WPDMA_RX_RING(0),
  62. + DUMP_WPDMA_RX_RING(1),
  63. +
  64. + DUMP_STR("WPDMA RX"),
  65. + DUMP_WED(WED_WPDMA_RX_D_MIB(0)),
  66. + DUMP_WED_RING(WED_WPDMA_RING_RX_DATA(0)),
  67. + DUMP_WED(WED_WPDMA_RX_D_PROCESSED_MIB(0)),
  68. + DUMP_WED(WED_WPDMA_RX_D_MIB(1)),
  69. + DUMP_WED_RING(WED_WPDMA_RING_RX_DATA(1)),
  70. + DUMP_WED(WED_WPDMA_RX_D_PROCESSED_MIB(1)),
  71. + DUMP_WED(WED_WPDMA_RX_D_COHERENT_MIB),
  72. +
  73. + DUMP_STR("WED RX"),
  74. + DUMP_WED_RING(WED_RING_RX_DATA(0)),
  75. + DUMP_WED_RING(WED_RING_RX_DATA(1)),
  76. +
  77. + DUMP_STR("WED RRO"),
  78. + DUMP_WED_RRO_RING(WED_RROQM_MIOD_CTRL0),
  79. + DUMP_WED(WED_RROQM_MID_MIB),
  80. + DUMP_WED(WED_RROQM_MOD_MIB),
  81. + DUMP_WED(WED_RROQM_MOD_COHERENT_MIB),
  82. + DUMP_WED_RRO_FDBK(WED_RROQM_FDBK_CTRL0),
  83. + DUMP_WED(WED_RROQM_FDBK_IND_MIB),
  84. + DUMP_WED(WED_RROQM_FDBK_ENQ_MIB),
  85. + DUMP_WED(WED_RROQM_FDBK_ANC_MIB),
  86. + DUMP_WED(WED_RROQM_FDBK_ANC2H_MIB),
  87. +
  88. + DUMP_STR("WED Route QM"),
  89. + DUMP_WED(WED_RTQM_R2H_MIB(0)),
  90. + DUMP_WED(WED_RTQM_R2Q_MIB(0)),
  91. + DUMP_WED(WED_RTQM_Q2H_MIB(0)),
  92. + DUMP_WED(WED_RTQM_R2H_MIB(1)),
  93. + DUMP_WED(WED_RTQM_R2Q_MIB(1)),
  94. + DUMP_WED(WED_RTQM_Q2H_MIB(1)),
  95. + DUMP_WED(WED_RTQM_Q2N_MIB),
  96. + DUMP_WED(WED_RTQM_Q2B_MIB),
  97. + DUMP_WED(WED_RTQM_PFDBK_MIB),
  98. +
  99. + DUMP_STR("WED WDMA TX"),
  100. + DUMP_WED(WED_WDMA_TX_MIB),
  101. + DUMP_WED_RING(WED_WDMA_RING_TX),
  102. +
  103. + DUMP_STR("WDMA TX"),
  104. + DUMP_WDMA(WDMA_GLO_CFG),
  105. + DUMP_WDMA_RING(WDMA_RING_TX(0)),
  106. + DUMP_WDMA_RING(WDMA_RING_TX(1)),
  107. +
  108. + DUMP_STR("WED RX BM"),
  109. + DUMP_WED(WED_RX_BM_BASE),
  110. + DUMP_WED(WED_RX_BM_RX_DMAD),
  111. + DUMP_WED(WED_RX_BM_PTR),
  112. + DUMP_WED(WED_RX_BM_TKID_MIB),
  113. + DUMP_WED(WED_RX_BM_BLEN),
  114. + DUMP_WED(WED_RX_BM_STS),
  115. + DUMP_WED(WED_RX_BM_INTF2),
  116. + DUMP_WED(WED_RX_BM_INTF),
  117. + DUMP_WED(WED_RX_BM_ERR_STS),
  118. + };
  119. + struct mtk_wed_hw *hw = s->private;
  120. + struct mtk_wed_device *dev = hw->wed_dev;
  121. +
  122. + if (!dev)
  123. + return 0;
  124. +
  125. + dump_wed_regs(s, dev, regs, ARRAY_SIZE(regs));
  126. +
  127. + return 0;
  128. +}
  129. +DEFINE_SHOW_ATTRIBUTE(wed_rxinfo);
  130. static int
  131. mtk_wed_reg_set(void *data, u64 val)
  132. @@ -175,4 +259,7 @@ void mtk_wed_hw_add_debugfs(struct mtk_w
  133. debugfs_create_u32("regidx", 0600, dir, &hw->debugfs_reg);
  134. debugfs_create_file_unsafe("regval", 0600, dir, hw, &fops_regval);
  135. debugfs_create_file_unsafe("txinfo", 0400, dir, hw, &wed_txinfo_fops);
  136. + if (hw->version != 1)
  137. + debugfs_create_file_unsafe("rxinfo", 0400, dir, hw,
  138. + &wed_rxinfo_fops);
  139. }