1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- From 18e8feae4a807994e4906d659116d249bfecd4c5 Mon Sep 17 00:00:00 2001
- From: Christian Marangi <[email protected]>
- 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 <[email protected]>
- Reviewed-by: Simon Horman <[email protected]>
- Reviewed-by: Florian Fainelli <[email protected]>
- Reviewed-by: Vladimir Oltean <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Paolo Abeni <[email protected]>
- ---
- 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
- @@ -1885,18 +1885,16 @@ qca8k_setup(struct dsa_switch *ds)
- 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),
|