ice: Support FCS/CRC strip disable for VF
authorHaiyue Wang <haiyue.wang@intel.com>
Wed, 6 Sep 2023 19:57:02 +0000 (13:57 -0600)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 13 Sep 2023 15:57:28 +0000 (08:57 -0700)
To support CRC strip enable/disable functionality, VF needs the explicit
request VIRTCHNL_VF_OFFLOAD_CRC offload. Then according to crc_disable
flag of Rx queue configuration information to set up the queue context.

Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Ahmed Zaki <ahmed.zaki@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_virtchnl.c

index b03426ac932bc1910e7f644240feeb6c92588144..c0c3e524c52301df181e010ab2bb76058dbf1c1a 100644 (file)
@@ -486,6 +486,9 @@ static int ice_vc_get_vf_res_msg(struct ice_vf *vf, u8 *msg)
        if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_REQ_QUEUES)
                vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_REQ_QUEUES;
 
+       if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_CRC)
+               vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_CRC;
+
        if (vf->driver_caps & VIRTCHNL_VF_CAP_ADV_LINK_SPEED)
                vfres->vf_cap_flags |= VIRTCHNL_VF_CAP_ADV_LINK_SPEED;
 
@@ -1666,6 +1669,18 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
                        vsi->rx_rings[i]->dma = qpi->rxq.dma_ring_addr;
                        vsi->rx_rings[i]->count = qpi->rxq.ring_len;
 
+                       if (qpi->rxq.crc_disable &&
+                           !(vf->driver_caps & VIRTCHNL_VF_OFFLOAD_CRC)) {
+                               goto error_param;
+                       }
+
+                       if (qpi->rxq.crc_disable)
+                               vsi->rx_rings[q_idx]->flags |=
+                                       ICE_RX_FLAGS_CRC_STRIP_DIS;
+                       else
+                               vsi->rx_rings[q_idx]->flags &=
+                                       ~ICE_RX_FLAGS_CRC_STRIP_DIS;
+
                        if (qpi->rxq.databuffer_size != 0 &&
                            (qpi->rxq.databuffer_size > ((16 * 1024) - 128) ||
                             qpi->rxq.databuffer_size < 1024))