[v2] net/octeontx2: extend RSS supported offload types

Message ID 20200124034602.4660-1-kirankumark@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series [v2] net/octeontx2: extend RSS supported offload types |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/Intel-compilation fail Compilation issues
ci/travis-robot success Travis build: passed

Commit Message

Kiran Kumar Kokkilagadda Jan. 24, 2020, 3:46 a.m. UTC
  From: Kiran Kumar K <kirankumark@marvell.com>

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>
---
V2 Changes:
* Updated supported offloads

 drivers/common/octeontx2/otx2_mbox.h |  6 +++++-
 drivers/net/octeontx2/otx2_ethdev.h  |  6 +++++-
 drivers/net/octeontx2/otx2_rss.c     | 12 ++++++++++++
 3 files changed, 22 insertions(+), 2 deletions(-)

--
2.17.1
  

Comments

Jerin Jacob Jan. 28, 2020, 11:14 a.m. UTC | #1
On Fri, Jan 24, 2020 at 9:16 AM <kirankumark@marvell.com> wrote:
>
> From: Kiran Kumar K <kirankumark@marvell.com>
>
> 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>

Applied to dpdk-next-net-mrvl/master. Thanks


> ---
> V2 Changes:
> * Updated supported offloads
>
>  drivers/common/octeontx2/otx2_mbox.h |  6 +++++-
>  drivers/net/octeontx2/otx2_ethdev.h  |  6 +++++-
>  drivers/net/octeontx2/otx2_rss.c     | 12 ++++++++++++
>  3 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
> index e0e4e2f63..4972b8a6e 100644
> --- a/drivers/common/octeontx2/otx2_mbox.h
> +++ b/drivers/common/octeontx2/otx2_mbox.h
> @@ -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 {
> diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h
> index 3f3fdecc4..c075b8d1a 100644
> --- a/drivers/net/octeontx2/otx2_ethdev.h
> +++ b/drivers/net/octeontx2/otx2_ethdev.h
> @@ -113,9 +113,13 @@
>  #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   | \
> diff --git a/drivers/net/octeontx2/otx2_rss.c b/drivers/net/octeontx2/otx2_rss.c
> index bc7b64387..7a8c8f3de 100644
> --- a/drivers/net/octeontx2/otx2_rss.c
> +++ b/drivers/net/octeontx2/otx2_rss.c
> @@ -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];
>
> --
> 2.17.1
>
  

Patch

diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
index e0e4e2f63..4972b8a6e 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -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 {
diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h
index 3f3fdecc4..c075b8d1a 100644
--- a/drivers/net/octeontx2/otx2_ethdev.h
+++ b/drivers/net/octeontx2/otx2_ethdev.h
@@ -113,9 +113,13 @@ 
 #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	| \
diff --git a/drivers/net/octeontx2/otx2_rss.c b/drivers/net/octeontx2/otx2_rss.c
index bc7b64387..7a8c8f3de 100644
--- a/drivers/net/octeontx2/otx2_rss.c
+++ b/drivers/net/octeontx2/otx2_rss.c
@@ -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];