qca8k 83xx switch have 2 cpu ports. Rework the driver to support
multiple cpu port. All ports can access both cpu ports by default as
they support the same features.

Signed-off-by: Ansuel Smith <ansuels...@gmail.com>
---
 drivers/net/dsa/qca8k.c | 18 +++++++++---------
 drivers/net/dsa/qca8k.h |  2 --
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c
index cdaf9f85a2cb..942d2a75f709 100644
--- a/drivers/net/dsa/qca8k.c
+++ b/drivers/net/dsa/qca8k.c
@@ -724,11 +724,6 @@ qca8k_setup(struct dsa_switch *ds)
        /* Enable MIB counters */
        qca8k_mib_init(priv);
 
-       /* Enable QCA header mode on the cpu port */
-       qca8k_write(priv, QCA8K_REG_PORT_HDR_CTRL(QCA8K_CPU_PORT),
-                   QCA8K_PORT_HDR_CTRL_ALL << QCA8K_PORT_HDR_CTRL_TX_S |
-                   QCA8K_PORT_HDR_CTRL_ALL << QCA8K_PORT_HDR_CTRL_RX_S);
-
        /* Disable forwarding by default on all ports */
        for (i = 0; i < QCA8K_NUM_PORTS; i++)
                qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
@@ -749,7 +744,12 @@ qca8k_setup(struct dsa_switch *ds)
        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)) {
-                       qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(QCA8K_CPU_PORT),
+                       /* Enable QCA header mode on the cpu port */
+                       qca8k_write(priv, QCA8K_REG_PORT_HDR_CTRL(i),
+                                   QCA8K_PORT_HDR_CTRL_ALL << 
QCA8K_PORT_HDR_CTRL_TX_S |
+                                       QCA8K_PORT_HDR_CTRL_ALL << 
QCA8K_PORT_HDR_CTRL_RX_S);
+
+                       qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
                                  QCA8K_PORT_LOOKUP_MEMBER, dsa_user_ports(ds));
                }
 
@@ -759,7 +759,7 @@ qca8k_setup(struct dsa_switch *ds)
 
                        qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
                                  QCA8K_PORT_LOOKUP_MEMBER,
-                                 BIT(QCA8K_CPU_PORT));
+                                 dsa_cpu_ports(ds));
 
                        /* Enable ARP Auto-learning by default */
                        qca8k_reg_set(priv, QCA8K_PORT_LOOKUP_CTRL(i),
@@ -1140,7 +1140,7 @@ static int
 qca8k_port_bridge_join(struct dsa_switch *ds, int port, struct net_device *br)
 {
        struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
-       int port_mask = BIT(QCA8K_CPU_PORT);
+       int port_mask = dsa_cpu_ports(ds);
        int i;
 
        for (i = 1; i < QCA8K_NUM_PORTS; i++) {
@@ -1183,7 +1183,7 @@ qca8k_port_bridge_leave(struct dsa_switch *ds, int port, 
struct net_device *br)
         * this port
         */
        qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(port),
-                 QCA8K_PORT_LOOKUP_MEMBER, BIT(QCA8K_CPU_PORT));
+                 QCA8K_PORT_LOOKUP_MEMBER, dsa_cpu_ports(ds));
 }
 
 static int
diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h
index 7ca4b93e0bb5..17bc643231c3 100644
--- a/drivers/net/dsa/qca8k.h
+++ b/drivers/net/dsa/qca8k.h
@@ -20,8 +20,6 @@
 
 #define QCA8K_NUM_FDB_RECORDS                          2048
 
-#define QCA8K_CPU_PORT                                 0
-
 #define QCA8K_PORT_VID_DEF                             1
 
 /* Global control registers */
-- 
2.30.2

Reply via email to