diff mbox series

[5/7] ice: Introduce ice_dev_onetime_setup

Message ID 20181018153709.32664-6-anirudh.venkataramanan@intel.com
State Accepted
Delegated to: Jeff Kirsher
Headers show
Series [1/7] ice: Make ice_msix_clean_rings static | expand

Commit Message

Anirudh Venkataramanan Oct. 18, 2018, 3:37 p.m. UTC
ice_dev_onetime_setup contains a couple of driver workarounds for current
firmware limitations. These workarounds are expected to go away once
these limitations are fixed in the firmware.

Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_common.c     | 19 +++++++++++++++++++
 drivers/net/ethernet/intel/ice/ice_common.h     |  3 +++
 drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
 drivers/net/ethernet/intel/ice/ice_lib.c        |  1 +
 4 files changed, 25 insertions(+)

Comments

Shannon Nelson Oct. 18, 2018, 4:06 p.m. UTC | #1
On 10/18/2018 8:37 AM, Anirudh Venkataramanan wrote:
> ice_dev_onetime_setup contains a couple of driver workarounds for current
> firmware limitations. These workarounds are expected to go away once
> these limitations are fixed in the firmware.

Can you add a check for firmware version or feature to see if this is 
needed before using it?

sln


> 
> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_common.c     | 19 +++++++++++++++++++
>   drivers/net/ethernet/intel/ice/ice_common.h     |  3 +++
>   drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
>   drivers/net/ethernet/intel/ice/ice_lib.c        |  1 +
>   4 files changed, 25 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index 78df54b25bf1..5a91a9087d1e 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -42,6 +42,23 @@ static enum ice_status ice_set_mac_type(struct ice_hw *hw)
>   	return 0;
>   }
>   
> +/**
> + * ice_dev_onetime_setup - Temporary HW/FW workarounds
> + * @hw: pointer to the HW structure
> + *
> + * This function provides temporary workarounds for certain issues
> + * that are expected to be fixed in the HW/FW.
> + */
> +void ice_dev_onetime_setup(struct ice_hw *hw)
> +{
> +	/* configure Rx - set non pxe mode */
> +	wr32(hw, GLLAN_RCTL_0, 0x1);
> +
> +#define MBX_PF_VT_PFALLOC	0x00231E80
> +	/* set VFs per PF */
> +	wr32(hw, MBX_PF_VT_PFALLOC, rd32(hw, PF_VT_PFALLOC_HIF));
> +}
> +
>   /**
>    * ice_clear_pf_cfg - Clear PF configuration
>    * @hw: pointer to the hardware structure
> @@ -740,6 +757,8 @@ enum ice_status ice_init_hw(struct ice_hw *hw)
>   	if (status)
>   		goto err_unroll_sched;
>   
> +	ice_dev_onetime_setup(hw);
> +
>   	/* Get MAC information */
>   	/* A single port can report up to two (LAN and WoL) addresses */
>   	mac_buf = devm_kcalloc(ice_hw_to_dev(hw), 2,
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.h b/drivers/net/ethernet/intel/ice/ice_common.h
> index 1900681289a4..876347e32b6f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.h
> +++ b/drivers/net/ethernet/intel/ice/ice_common.h
> @@ -34,6 +34,9 @@ ice_sq_send_cmd(struct ice_hw *hw, struct ice_ctl_q_info *cq,
>   		struct ice_sq_cd *cd);
>   void ice_clear_pxe_mode(struct ice_hw *hw);
>   enum ice_status ice_get_caps(struct ice_hw *hw);
> +
> +void ice_dev_onetime_setup(struct ice_hw *hw);
> +
>   enum ice_status
>   ice_write_rxq_ctx(struct ice_hw *hw, struct ice_rlan_ctx *rlan_ctx,
>   		  u32 rxq_index);
> diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> index a6679a9bfd3a..228afcad6fc3 100644
> --- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> +++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> @@ -157,6 +157,7 @@
>   #define VPINT_ALLOC_LAST_S			12
>   #define VPINT_ALLOC_LAST_M			ICE_M(0x7FF, 12)
>   #define VPINT_ALLOC_VALID_M			BIT(31)
> +#define GLLAN_RCTL_0				0x002941F8
>   #define QRX_CONTEXT(_i, _QRX)			(0x00280000 + ((_i) * 8192 + (_QRX) * 4))
>   #define QRX_CTRL(_QRX)				(0x00120000 + ((_QRX) * 4))
>   #define QRX_CTRL_MAX_INDEX			2047
> @@ -320,6 +321,7 @@
>   #define GLV_UPRCL(_i)				(0x003B2000 + ((_i) * 8))
>   #define GLV_UPTCH(_i)				(0x0030A004 + ((_i) * 8))
>   #define GLV_UPTCL(_i)				(0x0030A000 + ((_i) * 8))
> +#define PF_VT_PFALLOC_HIF			0x0009DD80
>   #define VSIQF_HKEY_MAX_INDEX			12
>   #define VSIQF_HLUT_MAX_INDEX			15
>   #define VFINT_DYN_CTLN(_i)			(0x00003800 + ((_i) * 4))
> diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
> index e750702bcdce..5bacad01f0c9 100644
> --- a/drivers/net/ethernet/intel/ice/ice_lib.c
> +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
> @@ -2529,6 +2529,7 @@ int ice_vsi_rebuild(struct ice_vsi *vsi)
>   	vsi->hw_base_vector = 0;
>   	ice_vsi_clear_rings(vsi);
>   	ice_vsi_free_arrays(vsi, false);
> +	ice_dev_onetime_setup(&vsi->back->hw);
>   	ice_vsi_set_num_qs(vsi);
>   
>   	/* Initialize VSI struct elements and create VSI in FW */
>
Anirudh Venkataramanan Oct. 18, 2018, 9:05 p.m. UTC | #2
On Thu, 2018-10-18 at 09:06 -0700, Shannon Nelson wrote:
> On 10/18/2018 8:37 AM, Anirudh Venkataramanan wrote:
> > ice_dev_onetime_setup contains a couple of driver workarounds for
> > current
> > firmware limitations. These workarounds are expected to go away
> > once
> > these limitations are fixed in the firmware.
> 
> Can you add a check for firmware version or feature to see if this
> is 
> needed before using it?
> 
> sln

Hi Shannon,

We discussed this internally a few weeks back and the conclusion was
that right now there's no reliable way to apply these workarounds
conditionally.

On a FW release that has these issues addressed, these workarounds
while unncessary, won't break anything. So for now, IMHO, it's fine the
way it is.

Thanks,
Ani

> 
> 
> > 
> > Signed-off-by: Anirudh Venkataramanan <
> > anirudh.venkataramanan@intel.com>
> > ---
> >   drivers/net/ethernet/intel/ice/ice_common.c     | 19
> > +++++++++++++++++++
> >   drivers/net/ethernet/intel/ice/ice_common.h     |  3 +++
> >   drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
> >   drivers/net/ethernet/intel/ice/ice_lib.c        |  1 +
> >   4 files changed, 25 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/intel/ice/ice_common.c
> > b/drivers/net/ethernet/intel/ice/ice_common.c
> > index 78df54b25bf1..5a91a9087d1e 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_common.c
> > +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> > @@ -42,6 +42,23 @@ static enum ice_status ice_set_mac_type(struct
> > ice_hw *hw)
> >   	return 0;
> >   }
> >   
> > +/**
> > + * ice_dev_onetime_setup - Temporary HW/FW workarounds
> > + * @hw: pointer to the HW structure
> > + *
> > + * This function provides temporary workarounds for certain issues
> > + * that are expected to be fixed in the HW/FW.
> > + */
> > +void ice_dev_onetime_setup(struct ice_hw *hw)
> > +{
> > +	/* configure Rx - set non pxe mode */
> > +	wr32(hw, GLLAN_RCTL_0, 0x1);
> > +
> > +#define MBX_PF_VT_PFALLOC	0x00231E80
> > +	/* set VFs per PF */
> > +	wr32(hw, MBX_PF_VT_PFALLOC, rd32(hw, PF_VT_PFALLOC_HIF));
> > +}
> > +
> >   /**
> >    * ice_clear_pf_cfg - Clear PF configuration
> >    * @hw: pointer to the hardware structure
> > @@ -740,6 +757,8 @@ enum ice_status ice_init_hw(struct ice_hw *hw)
> >   	if (status)
> >   		goto err_unroll_sched;
> >   
> > +	ice_dev_onetime_setup(hw);
> > +
> >   	/* Get MAC information */
> >   	/* A single port can report up to two (LAN and WoL) addresses
> > */
> >   	mac_buf = devm_kcalloc(ice_hw_to_dev(hw), 2,
> > diff --git a/drivers/net/ethernet/intel/ice/ice_common.h
> > b/drivers/net/ethernet/intel/ice/ice_common.h
> > index 1900681289a4..876347e32b6f 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_common.h
> > +++ b/drivers/net/ethernet/intel/ice/ice_common.h
> > @@ -34,6 +34,9 @@ ice_sq_send_cmd(struct ice_hw *hw, struct
> > ice_ctl_q_info *cq,
> >   		struct ice_sq_cd *cd);
> >   void ice_clear_pxe_mode(struct ice_hw *hw);
> >   enum ice_status ice_get_caps(struct ice_hw *hw);
> > +
> > +void ice_dev_onetime_setup(struct ice_hw *hw);
> > +
> >   enum ice_status
> >   ice_write_rxq_ctx(struct ice_hw *hw, struct ice_rlan_ctx
> > *rlan_ctx,
> >   		  u32 rxq_index);
> > diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> > b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> > index a6679a9bfd3a..228afcad6fc3 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> > +++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
> > @@ -157,6 +157,7 @@
> >   #define VPINT_ALLOC_LAST_S			12
> >   #define VPINT_ALLOC_LAST_M			ICE_M(0x7FF,
> > 12)
> >   #define VPINT_ALLOC_VALID_M			BIT(31)
> > +#define GLLAN_RCTL_0				0x002941F8
> >   #define QRX_CONTEXT(_i, _QRX)			(0x00280000 +
> > ((_i) * 8192 + (_QRX) * 4))
> >   #define QRX_CTRL(_QRX)				(0x00120000 +
> > ((_QRX) * 4))
> >   #define QRX_CTRL_MAX_INDEX			2047
> > @@ -320,6 +321,7 @@
> >   #define GLV_UPRCL(_i)				(0x003B2000 +
> > ((_i) * 8))
> >   #define GLV_UPTCH(_i)				(0x0030A004 +
> > ((_i) * 8))
> >   #define GLV_UPTCL(_i)				(0x0030A000 +
> > ((_i) * 8))
> > +#define PF_VT_PFALLOC_HIF			0x0009DD80
> >   #define VSIQF_HKEY_MAX_INDEX			12
> >   #define VSIQF_HLUT_MAX_INDEX			15
> >   #define VFINT_DYN_CTLN(_i)			(0x00003800 +
> > ((_i) * 4))
> > diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c
> > b/drivers/net/ethernet/intel/ice/ice_lib.c
> > index e750702bcdce..5bacad01f0c9 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_lib.c
> > +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
> > @@ -2529,6 +2529,7 @@ int ice_vsi_rebuild(struct ice_vsi *vsi)
> >   	vsi->hw_base_vector = 0;
> >   	ice_vsi_clear_rings(vsi);
> >   	ice_vsi_free_arrays(vsi, false);
> > +	ice_dev_onetime_setup(&vsi->back->hw);
> >   	ice_vsi_set_num_qs(vsi);
> >   
> >   	/* Initialize VSI struct elements and create VSI in FW */
> >
Bowers, AndrewX Oct. 18, 2018, 9:44 p.m. UTC | #3
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> Behalf Of Anirudh Venkataramanan
> Sent: Thursday, October 18, 2018 8:37 AM
> To: intel-wired-lan@lists.osuosl.org
> Subject: [Intel-wired-lan] [PATCH 5/7] ice: Introduce
> ice_dev_onetime_setup
> 
> ice_dev_onetime_setup contains a couple of driver workarounds for current
> firmware limitations. These workarounds are expected to go away once
> these limitations are fixed in the firmware.
> 
> Signed-off-by: Anirudh Venkataramanan
> <anirudh.venkataramanan@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_common.c     | 19
> +++++++++++++++++++
>  drivers/net/ethernet/intel/ice/ice_common.h     |  3 +++
>  drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
>  drivers/net/ethernet/intel/ice/ice_lib.c        |  1 +
>  4 files changed, 25 insertions(+)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Shannon Nelson Oct. 18, 2018, 9:48 p.m. UTC | #4
On 10/18/2018 2:05 PM, Venkataramanan, Anirudh wrote:
> On Thu, 2018-10-18 at 09:06 -0700, Shannon Nelson wrote:
>> On 10/18/2018 8:37 AM, Anirudh Venkataramanan wrote:
>>> ice_dev_onetime_setup contains a couple of driver workarounds for
>>> current
>>> firmware limitations. These workarounds are expected to go away
>>> once
>>> these limitations are fixed in the firmware.
>>
>> Can you add a check for firmware version or feature to see if this
>> is
>> needed before using it?
>>
>> sln
> 
> Hi Shannon,
> 
> We discussed this internally a few weeks back and the conclusion was
> that right now there's no reliable way to apply these workarounds
> conditionally.
> 
> On a FW release that has these issues addressed, these workarounds
> while unncessary, won't break anything. So for now, IMHO, it's fine the
> way it is.

You should add this statement into the commit message.

The "won't break anything" is something that has bitten things in the 
past, so you'll want to keep an eye on that.

sln

> 
> Thanks,
> Ani
> 
>>
>>
>>>
>>> Signed-off-by: Anirudh Venkataramanan <
>>> anirudh.venkataramanan@intel.com>
>>> ---
>>>    drivers/net/ethernet/intel/ice/ice_common.c     | 19
>>> +++++++++++++++++++
>>>    drivers/net/ethernet/intel/ice/ice_common.h     |  3 +++
>>>    drivers/net/ethernet/intel/ice/ice_hw_autogen.h |  2 ++
>>>    drivers/net/ethernet/intel/ice/ice_lib.c        |  1 +
>>>    4 files changed, 25 insertions(+)
>>>
>>> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c
>>> b/drivers/net/ethernet/intel/ice/ice_common.c
>>> index 78df54b25bf1..5a91a9087d1e 100644
>>> --- a/drivers/net/ethernet/intel/ice/ice_common.c
>>> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
>>> @@ -42,6 +42,23 @@ static enum ice_status ice_set_mac_type(struct
>>> ice_hw *hw)
>>>    	return 0;
>>>    }
>>>    
>>> +/**
>>> + * ice_dev_onetime_setup - Temporary HW/FW workarounds
>>> + * @hw: pointer to the HW structure
>>> + *
>>> + * This function provides temporary workarounds for certain issues
>>> + * that are expected to be fixed in the HW/FW.
>>> + */
>>> +void ice_dev_onetime_setup(struct ice_hw *hw)
>>> +{
>>> +	/* configure Rx - set non pxe mode */
>>> +	wr32(hw, GLLAN_RCTL_0, 0x1);
>>> +
>>> +#define MBX_PF_VT_PFALLOC	0x00231E80
>>> +	/* set VFs per PF */
>>> +	wr32(hw, MBX_PF_VT_PFALLOC, rd32(hw, PF_VT_PFALLOC_HIF));
>>> +}
>>> +
>>>    /**
>>>     * ice_clear_pf_cfg - Clear PF configuration
>>>     * @hw: pointer to the hardware structure
>>> @@ -740,6 +757,8 @@ enum ice_status ice_init_hw(struct ice_hw *hw)
>>>    	if (status)
>>>    		goto err_unroll_sched;
>>>    
>>> +	ice_dev_onetime_setup(hw);
>>> +
>>>    	/* Get MAC information */
>>>    	/* A single port can report up to two (LAN and WoL) addresses
>>> */
>>>    	mac_buf = devm_kcalloc(ice_hw_to_dev(hw), 2,
>>> diff --git a/drivers/net/ethernet/intel/ice/ice_common.h
>>> b/drivers/net/ethernet/intel/ice/ice_common.h
>>> index 1900681289a4..876347e32b6f 100644
>>> --- a/drivers/net/ethernet/intel/ice/ice_common.h
>>> +++ b/drivers/net/ethernet/intel/ice/ice_common.h
>>> @@ -34,6 +34,9 @@ ice_sq_send_cmd(struct ice_hw *hw, struct
>>> ice_ctl_q_info *cq,
>>>    		struct ice_sq_cd *cd);
>>>    void ice_clear_pxe_mode(struct ice_hw *hw);
>>>    enum ice_status ice_get_caps(struct ice_hw *hw);
>>> +
>>> +void ice_dev_onetime_setup(struct ice_hw *hw);
>>> +
>>>    enum ice_status
>>>    ice_write_rxq_ctx(struct ice_hw *hw, struct ice_rlan_ctx
>>> *rlan_ctx,
>>>    		  u32 rxq_index);
>>> diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
>>> b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
>>> index a6679a9bfd3a..228afcad6fc3 100644
>>> --- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
>>> +++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
>>> @@ -157,6 +157,7 @@
>>>    #define VPINT_ALLOC_LAST_S			12
>>>    #define VPINT_ALLOC_LAST_M			ICE_M(0x7FF,
>>> 12)
>>>    #define VPINT_ALLOC_VALID_M			BIT(31)
>>> +#define GLLAN_RCTL_0				0x002941F8
>>>    #define QRX_CONTEXT(_i, _QRX)			(0x00280000 +
>>> ((_i) * 8192 + (_QRX) * 4))
>>>    #define QRX_CTRL(_QRX)				(0x00120000 +
>>> ((_QRX) * 4))
>>>    #define QRX_CTRL_MAX_INDEX			2047
>>> @@ -320,6 +321,7 @@
>>>    #define GLV_UPRCL(_i)				(0x003B2000 +
>>> ((_i) * 8))
>>>    #define GLV_UPTCH(_i)				(0x0030A004 +
>>> ((_i) * 8))
>>>    #define GLV_UPTCL(_i)				(0x0030A000 +
>>> ((_i) * 8))
>>> +#define PF_VT_PFALLOC_HIF			0x0009DD80
>>>    #define VSIQF_HKEY_MAX_INDEX			12
>>>    #define VSIQF_HLUT_MAX_INDEX			15
>>>    #define VFINT_DYN_CTLN(_i)			(0x00003800 +
>>> ((_i) * 4))
>>> diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c
>>> b/drivers/net/ethernet/intel/ice/ice_lib.c
>>> index e750702bcdce..5bacad01f0c9 100644
>>> --- a/drivers/net/ethernet/intel/ice/ice_lib.c
>>> +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
>>> @@ -2529,6 +2529,7 @@ int ice_vsi_rebuild(struct ice_vsi *vsi)
>>>    	vsi->hw_base_vector = 0;
>>>    	ice_vsi_clear_rings(vsi);
>>>    	ice_vsi_free_arrays(vsi, false);
>>> +	ice_dev_onetime_setup(&vsi->back->hw);
>>>    	ice_vsi_set_num_qs(vsi);
>>>    
>>>    	/* Initialize VSI struct elements and create VSI in FW */
>>>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 78df54b25bf1..5a91a9087d1e 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -42,6 +42,23 @@  static enum ice_status ice_set_mac_type(struct ice_hw *hw)
 	return 0;
 }
 
+/**
+ * ice_dev_onetime_setup - Temporary HW/FW workarounds
+ * @hw: pointer to the HW structure
+ *
+ * This function provides temporary workarounds for certain issues
+ * that are expected to be fixed in the HW/FW.
+ */
+void ice_dev_onetime_setup(struct ice_hw *hw)
+{
+	/* configure Rx - set non pxe mode */
+	wr32(hw, GLLAN_RCTL_0, 0x1);
+
+#define MBX_PF_VT_PFALLOC	0x00231E80
+	/* set VFs per PF */
+	wr32(hw, MBX_PF_VT_PFALLOC, rd32(hw, PF_VT_PFALLOC_HIF));
+}
+
 /**
  * ice_clear_pf_cfg - Clear PF configuration
  * @hw: pointer to the hardware structure
@@ -740,6 +757,8 @@  enum ice_status ice_init_hw(struct ice_hw *hw)
 	if (status)
 		goto err_unroll_sched;
 
+	ice_dev_onetime_setup(hw);
+
 	/* Get MAC information */
 	/* A single port can report up to two (LAN and WoL) addresses */
 	mac_buf = devm_kcalloc(ice_hw_to_dev(hw), 2,
diff --git a/drivers/net/ethernet/intel/ice/ice_common.h b/drivers/net/ethernet/intel/ice/ice_common.h
index 1900681289a4..876347e32b6f 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.h
+++ b/drivers/net/ethernet/intel/ice/ice_common.h
@@ -34,6 +34,9 @@  ice_sq_send_cmd(struct ice_hw *hw, struct ice_ctl_q_info *cq,
 		struct ice_sq_cd *cd);
 void ice_clear_pxe_mode(struct ice_hw *hw);
 enum ice_status ice_get_caps(struct ice_hw *hw);
+
+void ice_dev_onetime_setup(struct ice_hw *hw);
+
 enum ice_status
 ice_write_rxq_ctx(struct ice_hw *hw, struct ice_rlan_ctx *rlan_ctx,
 		  u32 rxq_index);
diff --git a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
index a6679a9bfd3a..228afcad6fc3 100644
--- a/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
+++ b/drivers/net/ethernet/intel/ice/ice_hw_autogen.h
@@ -157,6 +157,7 @@ 
 #define VPINT_ALLOC_LAST_S			12
 #define VPINT_ALLOC_LAST_M			ICE_M(0x7FF, 12)
 #define VPINT_ALLOC_VALID_M			BIT(31)
+#define GLLAN_RCTL_0				0x002941F8
 #define QRX_CONTEXT(_i, _QRX)			(0x00280000 + ((_i) * 8192 + (_QRX) * 4))
 #define QRX_CTRL(_QRX)				(0x00120000 + ((_QRX) * 4))
 #define QRX_CTRL_MAX_INDEX			2047
@@ -320,6 +321,7 @@ 
 #define GLV_UPRCL(_i)				(0x003B2000 + ((_i) * 8))
 #define GLV_UPTCH(_i)				(0x0030A004 + ((_i) * 8))
 #define GLV_UPTCL(_i)				(0x0030A000 + ((_i) * 8))
+#define PF_VT_PFALLOC_HIF			0x0009DD80
 #define VSIQF_HKEY_MAX_INDEX			12
 #define VSIQF_HLUT_MAX_INDEX			15
 #define VFINT_DYN_CTLN(_i)			(0x00003800 + ((_i) * 4))
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index e750702bcdce..5bacad01f0c9 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -2529,6 +2529,7 @@  int ice_vsi_rebuild(struct ice_vsi *vsi)
 	vsi->hw_base_vector = 0;
 	ice_vsi_clear_rings(vsi);
 	ice_vsi_free_arrays(vsi, false);
+	ice_dev_onetime_setup(&vsi->back->hw);
 	ice_vsi_set_num_qs(vsi);
 
 	/* Initialize VSI struct elements and create VSI in FW */