Yes, you are right, thanks for your comment.
And I found this logic is not right, and I have update this logic as below We 
will use RSS2 if NIC cap support, otherwise will use RSS

                if (hw->cap & NFP_NET_CFG_CTRL_RSS2)
                        new_ctrl |= NFP_NET_CFG_CTRL_RSS2;
                else
                        new_ctrl |= NFP_NET_CFG_CTRL_RSS;

-----Original Message-----
From: Ferruh Yigit <ferruh.yi...@xilinx.com> 
Sent: Friday, June 3, 2022 06:57
To: Kevin Liu <jin....@corigine.com>; dev@dpdk.org
Cc: Niklas Soderlund <niklas.soderl...@corigine.com>; Diana Wang 
<na.w...@corigine.com>; Nole Zhang <peng.zh...@corigine.com>; Chaoyong He 
<chaoyong...@corigine.com>
Subject: Re: [PATCH 14/14] net/nfp: modify RSS logic

On 6/2/2022 2:53 AM, Jin Liu wrote:
> Modify RSS-related interface functions, as the NFDK firmware support 
> feature NFP_NET_CFG_CTRL_RSS2 rather than NFP_NET_CFG_CTRL_RSS.
> 
> Signed-off-by: Jin Liu <jin....@corigine.com>
> Signed-off-by: Diana Wang <na.w...@corigine.com>
> Signed-off-by: Peng Zhang <peng.zh...@corigine.com>
> Signed-off-by: Chaoyong He <chaoyong...@corigine.com>
> Signed-off-by: Niklas Söderlund <niklas.soderl...@corigine.com>

<...>

> diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h 
> index e73715e2aa..372d537462 100644
> --- a/drivers/net/nfp/nfp_ctrl.h
> +++ b/drivers/net/nfp/nfp_ctrl.h
> @@ -119,6 +119,7 @@
>   #define NFP_NET_CFG_MACADDR             0x0024
>   
>   #define NFP_NET_CFG_CTRL_LSO_ANY (NFP_NET_CFG_CTRL_LSO | 
> NFP_NET_CFG_CTRL_LSO2)
> +#define NFP_NET_CFG_CTRL_RSS_ANY (NFP_NET_CFG_CTRL_RSS | 
> +NFP_NET_CFG_CTRL_RSS2)
>   
>   /*
>    * Read-only words (0x0030 - 0x0050):
> diff --git a/drivers/net/nfp/nfp_ethdev.c 
> b/drivers/net/nfp/nfp_ethdev.c index 238b2b5451..bd7dd30f10 100644
> --- a/drivers/net/nfp/nfp_ethdev.c
> +++ b/drivers/net/nfp/nfp_ethdev.c
> @@ -123,7 +123,17 @@ nfp_net_start(struct rte_eth_dev *dev)
>       if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) {
>               nfp_net_rss_config_default(dev);
>               update |= NFP_NET_CFG_UPDATE_RSS;
> -             new_ctrl |= NFP_NET_CFG_CTRL_RSS;
> +             switch (NFD_CFG_CLASS_VER_of(hw->ver)) {
> +             case NFP_NET_CFG_VERSION_DP_NFD3:
> +                     new_ctrl |= NFP_NET_CFG_CTRL_RSS;
> +                     break;
> +             case NFP_NET_CFG_VERSION_DP_NFDK:
> +                     new_ctrl |= NFP_NET_CFG_CTRL_RSS2;
> +                     break;
> +             default:
> +                     PMD_INIT_LOG(ERR, "nfp_net: no fw version match");
> +                     return -ENODEV;
> +             }
>       }
>   
>       /* Enable device */
> diff --git a/drivers/net/nfp/nfp_ethdev_vf.c 
> b/drivers/net/nfp/nfp_ethdev_vf.c index bb8206c4f6..8769f07be4 100644
> --- a/drivers/net/nfp/nfp_ethdev_vf.c
> +++ b/drivers/net/nfp/nfp_ethdev_vf.c
> @@ -95,7 +95,17 @@ nfp_netvf_start(struct rte_eth_dev *dev)
>       if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS) {
>               nfp_net_rss_config_default(dev);
>               update |= NFP_NET_CFG_UPDATE_RSS;
> -             new_ctrl |= NFP_NET_CFG_CTRL_RSS;
> +             switch (NFD_CFG_CLASS_VER_of(hw->ver)) {
> +             case NFP_NET_CFG_VERSION_DP_NFD3:
> +                     new_ctrl |= NFP_NET_CFG_CTRL_RSS;
> +                     break;
> +             case NFP_NET_CFG_VERSION_DP_NFDK:
> +                     new_ctrl |= NFP_NET_CFG_CTRL_RSS2;
> +                     break;
> +             default:
> +                     PMD_INIT_LOG(ERR, "nfp_net: no fw version match");
> +                     return -ENODEV;
> +             }

As this FW specific changes crept into various locations, it can be harder to 
maintain the code.
I wonder if something like below can help, what do you think:

unsigned int nfp_FW_RSS[] = { // common for both PF & VF
        NFP_NET_CFG_CTRL_RSS,
        NFP_NET_CFG_CTRL_RSS2,
};

new_ctrl = nfp_FW_RSS[NFD_CFG_CLASS_VER_of(hw->ver)];

Reply via email to