2023-09-26 11:47:44 +00:00
|
|
|
From 18e8feae4a807994e4906d659116d249bfecd4c5 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
|
|
Date: Sun, 30 Jul 2023 09:41:11 +0200
|
|
|
|
Subject: [PATCH 2/4] net: dsa: qca8k: limit user ports access to the first CPU
|
|
|
|
port on setup
|
|
|
|
|
|
|
|
In preparation for multi-CPU support, set CPU port LOOKUP MEMBER outside
|
|
|
|
the port loop and setup the LOOKUP MEMBER mask for user ports only to
|
|
|
|
the first CPU port.
|
|
|
|
|
|
|
|
This is to handle flooding condition where every CPU port is set as
|
|
|
|
target and prevent packet duplication for unknown frames from user ports.
|
|
|
|
|
|
|
|
Secondary CPU port LOOKUP MEMBER mask will be setup later when
|
|
|
|
port_change_master will be implemented.
|
|
|
|
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
|
|
Reviewed-by: Simon Horman <simon.horman@corigine.com>
|
|
|
|
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
|
|
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
|
|
|
Link: https://lore.kernel.org/r/20230730074113.21889-3-ansuelsmth@gmail.com
|
|
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
|
|
---
|
|
|
|
drivers/net/dsa/qca/qca8k-8xxx.c | 14 ++++++--------
|
|
|
|
1 file changed, 6 insertions(+), 8 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
|
|
|
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
2024-02-06 21:44:12 +00:00
|
|
|
@@ -1885,18 +1885,16 @@ qca8k_setup(struct dsa_switch *ds)
|
2023-09-26 11:47:44 +00:00
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
+ /* CPU port gets connected to all user ports of the switch */
|
|
|
|
+ ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(cpu_port),
|
|
|
|
+ QCA8K_PORT_LOOKUP_MEMBER, dsa_user_ports(ds));
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
+
|
|
|
|
/* Setup connection between CPU port & user ports
|
|
|
|
* Configure specific switch configuration for ports
|
|
|
|
*/
|
|
|
|
for (i = 0; i < QCA8K_NUM_PORTS; i++) {
|
|
|
|
- /* CPU port gets connected to all user ports of the switch */
|
|
|
|
- if (dsa_is_cpu_port(ds, i)) {
|
|
|
|
- ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
|
|
|
|
- QCA8K_PORT_LOOKUP_MEMBER, dsa_user_ports(ds));
|
|
|
|
- if (ret)
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/* Individual user ports get connected to CPU port only */
|
|
|
|
if (dsa_is_user_port(ds, i)) {
|
|
|
|
ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
|