generic: 5.15: qca8k: refresh backport patches
[openwrt/staging/ldir.git] / target / linux / generic / backport-5.15 / 758-net-next-net-dsa-qca8k-add-additional-MIB-counter-and-.patch
1 From c126f118b330ccf0db0dda4a4bd6c729865a205f Mon Sep 17 00:00:00 2001
2 From: Ansuel Smith <ansuelsmth@gmail.com>
3 Date: Mon, 22 Nov 2021 16:23:45 +0100
4 Subject: net: dsa: qca8k: add additional MIB counter and make it dynamic
5
6 We are currently missing 2 additionals MIB counter present in QCA833x
7 switch.
8 QC832x switch have 39 MIB counter and QCA833X have 41 MIB counter.
9 Add the additional MIB counter and rework the MIB function to print the
10 correct supported counter from the match_data struct.
11
12 Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
13 Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
14 Signed-off-by: David S. Miller <davem@davemloft.net>
15 ---
16 drivers/net/dsa/qca8k.c | 23 ++++++++++++++++++++---
17 drivers/net/dsa/qca8k.h | 4 ++++
18 2 files changed, 24 insertions(+), 3 deletions(-)
19
20 diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c
21 index d64a9af186beb..bedaaa6b9a1df 100644
22 --- a/drivers/net/dsa/qca8k.c
23 +++ b/drivers/net/dsa/qca8k.c
24 @@ -70,6 +70,8 @@ static const struct qca8k_mib_desc ar8327_mib[] = {
25 MIB_DESC(1, 0x9c, "TxExcDefer"),
26 MIB_DESC(1, 0xa0, "TxDefer"),
27 MIB_DESC(1, 0xa4, "TxLateCol"),
28 + MIB_DESC(1, 0xa8, "RXUnicast"),
29 + MIB_DESC(1, 0xac, "TXUnicast"),
30 };
31
32 /* The 32bit switch registers are accessed indirectly. To achieve this we need
33 @@ -1601,12 +1603,16 @@ qca8k_phylink_mac_link_up(struct dsa_switch *ds, int port, unsigned int mode,
34 static void
35 qca8k_get_strings(struct dsa_switch *ds, int port, u32 stringset, uint8_t *data)
36 {
37 + const struct qca8k_match_data *match_data;
38 + struct qca8k_priv *priv = ds->priv;
39 int i;
40
41 if (stringset != ETH_SS_STATS)
42 return;
43
44 - for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++)
45 + match_data = of_device_get_match_data(priv->dev);
46 +
47 + for (i = 0; i < match_data->mib_count; i++)
48 strncpy(data + i * ETH_GSTRING_LEN, ar8327_mib[i].name,
49 ETH_GSTRING_LEN);
50 }
51 @@ -1616,12 +1622,15 @@ qca8k_get_ethtool_stats(struct dsa_switch *ds, int port,
52 uint64_t *data)
53 {
54 struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
55 + const struct qca8k_match_data *match_data;
56 const struct qca8k_mib_desc *mib;
57 u32 reg, i, val;
58 u32 hi = 0;
59 int ret;
60
61 - for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++) {
62 + match_data = of_device_get_match_data(priv->dev);
63 +
64 + for (i = 0; i < match_data->mib_count; i++) {
65 mib = &ar8327_mib[i];
66 reg = QCA8K_PORT_MIB_COUNTER(port) + mib->offset;
67
68 @@ -1644,10 +1653,15 @@ qca8k_get_ethtool_stats(struct dsa_switch *ds, int port,
69 static int
70 qca8k_get_sset_count(struct dsa_switch *ds, int port, int sset)
71 {
72 + const struct qca8k_match_data *match_data;
73 + struct qca8k_priv *priv = ds->priv;
74 +
75 if (sset != ETH_SS_STATS)
76 return 0;
77
78 - return ARRAY_SIZE(ar8327_mib);
79 + match_data = of_device_get_match_data(priv->dev);
80 +
81 + return match_data->mib_count;
82 }
83
84 static int
85 @@ -2150,14 +2164,17 @@ static SIMPLE_DEV_PM_OPS(qca8k_pm_ops,
86 static const struct qca8k_match_data qca8327 = {
87 .id = QCA8K_ID_QCA8327,
88 .reduced_package = true,
89 + .mib_count = QCA8K_QCA832X_MIB_COUNT,
90 };
91
92 static const struct qca8k_match_data qca8328 = {
93 .id = QCA8K_ID_QCA8327,
94 + .mib_count = QCA8K_QCA832X_MIB_COUNT,
95 };
96
97 static const struct qca8k_match_data qca833x = {
98 .id = QCA8K_ID_QCA8337,
99 + .mib_count = QCA8K_QCA833X_MIB_COUNT,
100 };
101
102 static const struct of_device_id qca8k_of_match[] = {
103 diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h
104 index 085885275398b..91c94dfc9789d 100644
105 --- a/drivers/net/dsa/qca8k.h
106 +++ b/drivers/net/dsa/qca8k.h
107 @@ -21,6 +21,9 @@
108 #define PHY_ID_QCA8337 0x004dd036
109 #define QCA8K_ID_QCA8337 0x13
110
111 +#define QCA8K_QCA832X_MIB_COUNT 39
112 +#define QCA8K_QCA833X_MIB_COUNT 41
113 +
114 #define QCA8K_BUSY_WAIT_TIMEOUT 2000
115
116 #define QCA8K_NUM_FDB_RECORDS 2048
117 @@ -279,6 +282,7 @@ struct ar8xxx_port_status {
118 struct qca8k_match_data {
119 u8 id;
120 bool reduced_package;
121 + u8 mib_count;
122 };
123
124 enum {
125 --
126 cgit 1.2.3-1.el7
127