OSDN Git Service

dpaa2-eth: install a single steering rule when SHARED_FS is enabled
authorIonut-robert Aron <ionut-robert.aron@nxp.com>
Fri, 25 Sep 2020 14:44:21 +0000 (17:44 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sat, 26 Sep 2020 00:10:27 +0000 (17:10 -0700)
When SHARED_FS is enabled on a DPNI object the flow steering tables are
shared between all the traffic classes. Modify the driver so that we
only add a new flow steering entry on the TC#0 when this new option is
enabled.

Signed-off-by: Ionut-robert Aron <ionut-robert.aron@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
drivers/net/ethernet/freescale/dpaa2/dpni.h

index 4867994..fe4caf7 100644 (file)
@@ -3454,6 +3454,12 @@ static int dpaa2_eth_config_hash_key(struct dpaa2_eth_priv *priv, dma_addr_t key
                        dev_err(dev, "dpni_set_rx_hash_dist failed\n");
                        break;
                }
+
+               /* If the flow steering / hashing key is shared between all
+                * traffic classes, install it just once
+                */
+               if (priv->dpni_attrs.options & DPNI_OPT_SHARED_FS)
+                       break;
        }
 
        return err;
@@ -3480,6 +3486,12 @@ static int dpaa2_eth_config_cls_key(struct dpaa2_eth_priv *priv, dma_addr_t key)
                        dev_err(dev, "dpni_set_rx_fs_dist failed\n");
                        break;
                }
+
+               /* If the flow steering / hashing key is shared between all
+                * traffic classes, install it just once
+                */
+               if (priv->dpni_attrs.options & DPNI_OPT_SHARED_FS)
+                       break;
        }
 
        return err;
index 11e0c04..f981a52 100644 (file)
@@ -618,7 +618,7 @@ static int dpaa2_eth_do_cls_rule(struct net_device *net_dev,
                        err = dpni_remove_fs_entry(priv->mc_io, 0,
                                                   priv->mc_token, i,
                                                   &rule_cfg);
-               if (err)
+               if (err || priv->dpni_attrs.options & DPNI_OPT_SHARED_FS)
                        break;
        }
 
index 74456a3..e7b9e19 100644 (file)
@@ -75,6 +75,10 @@ struct fsl_mc_io;
  * Disables the flow steering table.
  */
 #define DPNI_OPT_NO_FS                         0x000020
+/**
+ * Flow steering table is shared between all traffic classes
+ */
+#define DPNI_OPT_SHARED_FS                     0x001000
 
 int dpni_open(struct fsl_mc_io *mc_io,
              u32               cmd_flags,