net/octeontx2: extend RSS supported offload types
authorKiran Kumar K <kirankumark@marvell.com>
Fri, 24 Jan 2020 03:46:02 +0000 (09:16 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 5 Feb 2020 08:51:20 +0000 (09:51 +0100)
Extend RSS offload types for octeontx2. Add support to select
L3 SRC, L3 DST, L4 SRC and L4 DST for RSS calculation.

Add support to select L3 SRC or DST only, L4 SRC or DST only for RSS
calculation.

With this requirement there will be following combinations,
IPV[4,6]_SRC_ONLY, IPV[4,6]_DST_ONLY, [TCP,UDP,SCTP]_SRC_ONLY,
[TCP,UDP,SCTP]_DST_ONLY. So, instead of creating a bit for each
combination, we are using upper 4 bits (31:28) in the flow_key_cfg
to represent the SRC, DST selection. 31 => L3_SRC, 30 => L3_DST,
29 => L4_SRC, 28 => L4_DST. These won't be part of flow_cfg, so that
we don't need to change the existing ABI.

Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/octeontx2/otx2_mbox.h
drivers/net/octeontx2/otx2_ethdev.h
drivers/net/octeontx2/otx2_rss.c

index e0e4e2f..4972b8a 100644 (file)
@@ -918,7 +918,11 @@ struct nix_rss_flowkey_cfg {
 #define FLOW_KEY_TYPE_INNR_UDP      BIT(15)
 #define FLOW_KEY_TYPE_INNR_SCTP     BIT(16)
 #define FLOW_KEY_TYPE_INNR_ETH_DMAC BIT(17)
-       uint8_t group;       /* RSS context or group */
+#define FLOW_KEY_TYPE_L4_DST BIT(28)
+#define FLOW_KEY_TYPE_L4_SRC BIT(29)
+#define FLOW_KEY_TYPE_L3_DST BIT(30)
+#define FLOW_KEY_TYPE_L3_SRC BIT(31)
+       uint8_t __otx2_io group;       /* RSS context or group */
 };
 
 struct nix_rss_flowkey_cfg_rsp {
index 3f3fdec..c075b8d 100644 (file)
 #define CQ_TIMER_THRESH_DEFAULT        0xAULL /* ~1usec i.e (0xA * 100nsec) */
 #define CQ_TIMER_THRESH_MAX     255
 
+#define NIX_RSS_L3_L4_SRC_DST  (ETH_RSS_L3_SRC_ONLY | ETH_RSS_L3_DST_ONLY \
+                               | ETH_RSS_L4_SRC_ONLY | ETH_RSS_L4_DST_ONLY)
+
 #define NIX_RSS_OFFLOAD                (ETH_RSS_PORT | ETH_RSS_IP | ETH_RSS_UDP |\
                                 ETH_RSS_TCP | ETH_RSS_SCTP | \
-                                ETH_RSS_TUNNEL | ETH_RSS_L2_PAYLOAD)
+                                ETH_RSS_TUNNEL | ETH_RSS_L2_PAYLOAD | \
+                                NIX_RSS_L3_L4_SRC_DST)
 
 #define NIX_TX_OFFLOAD_CAPA ( \
        DEV_TX_OFFLOAD_MBUF_FAST_FREE   | \
index bc7b643..7a8c8f3 100644 (file)
@@ -210,6 +210,18 @@ otx2_rss_ethdev_to_nix(struct otx2_eth_dev *dev, uint64_t ethdev_rss,
 
        dev->rss_info.nix_rss = ethdev_rss;
 
+       if (ethdev_rss & ETH_RSS_L3_SRC_ONLY)
+               flowkey_cfg |= FLOW_KEY_TYPE_L3_SRC;
+
+       if (ethdev_rss & ETH_RSS_L3_DST_ONLY)
+               flowkey_cfg |= FLOW_KEY_TYPE_L3_DST;
+
+       if (ethdev_rss & ETH_RSS_L4_SRC_ONLY)
+               flowkey_cfg |= FLOW_KEY_TYPE_L4_SRC;
+
+       if (ethdev_rss & ETH_RSS_L4_DST_ONLY)
+               flowkey_cfg |= FLOW_KEY_TYPE_L4_DST;
+
        if (ethdev_rss & RSS_IPV4_ENABLE)
                flowkey_cfg |= flow_key_type[rss_level][RSS_IPV4_INDEX];