kernel: 5.10: backport additional qca8k fixes
Backport 3 additional fixes for qca8k. - Fix MTU calculation - Fix a bug with config set to the wrong PAD when secondary cpu port is defined. - Fix redundant check in parse_port_config Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
This commit is contained in:
parent
2bb02ccae3
commit
5cf198f764
3 changed files with 123 additions and 0 deletions
|
@ -0,0 +1,48 @@
|
||||||
|
From 3b00a07c2443745d62babfe08dbb2ad8e649526e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 19 Nov 2021 03:03:49 +0100
|
||||||
|
Subject: [PATCH] net: dsa: qca8k: fix internal delay applied to the wrong PAD
|
||||||
|
config
|
||||||
|
|
||||||
|
With SGMII phy the internal delay is always applied to the PAD0 config.
|
||||||
|
This is caused by the falling edge configuration that hardcode the reg
|
||||||
|
to PAD0 (as the falling edge bits are present only in PAD0 reg)
|
||||||
|
Move the delay configuration before the reg overwrite to correctly apply
|
||||||
|
the delay.
|
||||||
|
|
||||||
|
Fixes: cef08115846e ("net: dsa: qca8k: set internal delay also for sgmii")
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/qca8k.c | 12 ++++++------
|
||||||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/qca8k.c
|
||||||
|
+++ b/drivers/net/dsa/qca8k.c
|
||||||
|
@@ -1433,6 +1433,12 @@ qca8k_phylink_mac_config(struct dsa_swit
|
||||||
|
|
||||||
|
qca8k_write(priv, QCA8K_REG_SGMII_CTRL, val);
|
||||||
|
|
||||||
|
+ /* From original code is reported port instability as SGMII also
|
||||||
|
+ * require delay set. Apply advised values here or take them from DT.
|
||||||
|
+ */
|
||||||
|
+ if (state->interface == PHY_INTERFACE_MODE_SGMII)
|
||||||
|
+ qca8k_mac_config_setup_internal_delay(priv, cpu_port_index, reg);
|
||||||
|
+
|
||||||
|
/* For qca8327/qca8328/qca8334/qca8338 sgmii is unique and
|
||||||
|
* falling edge is set writing in the PORT0 PAD reg
|
||||||
|
*/
|
||||||
|
@@ -1455,12 +1461,6 @@ qca8k_phylink_mac_config(struct dsa_swit
|
||||||
|
QCA8K_PORT0_PAD_SGMII_TXCLK_FALLING_EDGE,
|
||||||
|
val);
|
||||||
|
|
||||||
|
- /* From original code is reported port instability as SGMII also
|
||||||
|
- * require delay set. Apply advised values here or take them from DT.
|
||||||
|
- */
|
||||||
|
- if (state->interface == PHY_INTERFACE_MODE_SGMII)
|
||||||
|
- qca8k_mac_config_setup_internal_delay(priv, cpu_port_index, reg);
|
||||||
|
-
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev_err(ds->dev, "xMII mode %s not supported for port %d\n",
|
|
@ -0,0 +1,46 @@
|
||||||
|
From 65258b9d8cde45689bdc86ca39b50f01f983733b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Fri, 19 Nov 2021 03:03:50 +0100
|
||||||
|
Subject: [PATCH] net: dsa: qca8k: fix MTU calculation
|
||||||
|
|
||||||
|
qca8k has a global MTU, so its tracking the MTU per port to make sure
|
||||||
|
that the largest MTU gets applied.
|
||||||
|
Since it uses the frame size instead of MTU the driver MTU change function
|
||||||
|
will then add the size of Ethernet header and checksum on top of MTU.
|
||||||
|
|
||||||
|
The driver currently populates the per port MTU size as Ethernet frame
|
||||||
|
length + checksum which equals 1518.
|
||||||
|
|
||||||
|
The issue is that then MTU change function will go through all of the
|
||||||
|
ports, find the largest MTU and apply the Ethernet header + checksum on
|
||||||
|
top of it again, so for a desired MTU of 1500 you will end up with 1536.
|
||||||
|
|
||||||
|
This is obviously incorrect, so to correct it populate the per port struct
|
||||||
|
MTU with just the MTU and not include the Ethernet header + checksum size
|
||||||
|
as those will be added by the MTU change function.
|
||||||
|
|
||||||
|
Fixes: f58d2598cf70 ("net: dsa: qca8k: implement the port MTU callbacks")
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/qca8k.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/qca8k.c
|
||||||
|
+++ b/drivers/net/dsa/qca8k.c
|
||||||
|
@@ -1256,8 +1256,12 @@ qca8k_setup(struct dsa_switch *ds)
|
||||||
|
/* Set initial MTU for every port.
|
||||||
|
* We have only have a general MTU setting. So track
|
||||||
|
* every port and set the max across all port.
|
||||||
|
+ * Set per port MTU to 1500 as the MTU change function
|
||||||
|
+ * will add the overhead and if its set to 1518 then it
|
||||||
|
+ * will apply the overhead again and we will end up with
|
||||||
|
+ * MTU of 1536 instead of 1518
|
||||||
|
*/
|
||||||
|
- priv->port_mtu[i] = ETH_FRAME_LEN + ETH_FCS_LEN;
|
||||||
|
+ priv->port_mtu[i] = ETH_DATA_LEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Special GLOBAL_FC_THRESH value are needed for ar8327 switch */
|
|
@ -0,0 +1,29 @@
|
||||||
|
From b9133f3ef5a2659730cf47a74bd0a9259f1cf8ff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Mon, 22 Nov 2021 16:23:40 +0100
|
||||||
|
Subject: net: dsa: qca8k: remove redundant check in parse_port_config
|
||||||
|
|
||||||
|
The very next check for port 0 and 6 already makes sure we don't go out
|
||||||
|
of bounds with the ports_config delay table.
|
||||||
|
Remove the redundant check.
|
||||||
|
|
||||||
|
Reported-by: kernel test robot <lkp@intel.com>
|
||||||
|
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/qca8k.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/qca8k.c
|
||||||
|
+++ b/drivers/net/dsa/qca8k.c
|
||||||
|
@@ -983,7 +983,7 @@ qca8k_parse_port_config(struct qca8k_pri
|
||||||
|
u32 delay;
|
||||||
|
|
||||||
|
/* We have 2 CPU port. Check them */
|
||||||
|
- for (port = 0; port < QCA8K_NUM_PORTS && cpu_port_index < QCA8K_NUM_CPU_PORTS; port++) {
|
||||||
|
+ for (port = 0; port < QCA8K_NUM_PORTS; port++) {
|
||||||
|
/* Skip every other port */
|
||||||
|
if (port != 0 && port != 6)
|
||||||
|
continue;
|
Loading…
Reference in a new issue