]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: dsa: sja1105: configure the multicast policers, if present
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 24 May 2021 13:14:20 +0000 (16:14 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 May 2021 20:59:03 +0000 (13:59 -0700)
The SJA1110 policer array is similar in layout with SJA1105, except it
contains one multicast policer per port at the end.

Detect the presence of multicast policers based on the maximum number of
supported L2 Policing Table entries, and make those policers have a
shared index equal to the port's default policer. Letting the user
configure these policers is not supported at the moment.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_main.c

index cd9359722e5f9e8309553b0312e7fab4146e508f..c391ab00e0032846aaee4b2e7758c2b05b9a1b5a 100644 (file)
@@ -719,12 +719,16 @@ static int sja1105_init_l2_policing(struct sja1105_private *priv)
 
        /* Setup shared indices for the matchall policers */
        for (port = 0; port < ds->num_ports; port++) {
+               int mcast = (ds->num_ports * (SJA1105_NUM_TC + 1)) + port;
                int bcast = (ds->num_ports * SJA1105_NUM_TC) + port;
 
                for (tc = 0; tc < SJA1105_NUM_TC; tc++)
                        policing[port * SJA1105_NUM_TC + tc].sharindx = port;
 
                policing[bcast].sharindx = port;
+               /* Only SJA1110 has multicast policers */
+               if (mcast <= table->ops->max_entry_count)
+                       policing[mcast].sharindx = port;
        }
 
        /* Setup the matchall policer parameters */