Commit 226436dc authored by Maciej Paczkowski's avatar Maciej Paczkowski Committed by Jeff Kirsher

i40e: ShadowRAM checksum calculation change

Due to changes in FW the SW is required to perform double SR dump in
some cases.

Implementation adds two new steps to update nvm checksum function:
* recalculate checksum and check if checksum in NVM is correct
* if checksum in NVM is not correct then update it again
Signed-off-by: default avatarMaciej Paczkowski <maciej.paczkowski@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 5a189f15
...@@ -574,14 +574,35 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw, ...@@ -574,14 +574,35 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw,
i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw) i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw)
{ {
i40e_status ret_code; i40e_status ret_code;
u16 checksum; u16 checksum, checksum_sr;
__le16 le_sum; __le16 le_sum;
ret_code = i40e_calc_nvm_checksum(hw, &checksum); ret_code = i40e_calc_nvm_checksum(hw, &checksum);
if (!ret_code) { if (ret_code)
return ret_code;
le_sum = cpu_to_le16(checksum); le_sum = cpu_to_le16(checksum);
ret_code = i40e_write_nvm_aq(hw, 0x00, I40E_SR_SW_CHECKSUM_WORD, ret_code = i40e_write_nvm_aq(hw, 0x00, I40E_SR_SW_CHECKSUM_WORD,
1, &le_sum, true); 1, &le_sum, true);
if (ret_code)
return ret_code;
/* Due to changes in FW the SW is required to perform double SR-dump
* in some cases. SR-dump is the process when internal shadow RAM is
* dumped into flash bank. It is triggered by setting "last_command"
* argument in i40e_write_nvm_aq function call.
* Since FW 1.8 we need to calculate SR checksum again and update it
* in flash if it is not equal to previously computed checksum.
* This situation would occur only in FW >= 1.8
*/
ret_code = i40e_calc_nvm_checksum(hw, &checksum_sr);
if (ret_code)
return ret_code;
if (checksum_sr != checksum) {
le_sum = cpu_to_le16(checksum_sr);
ret_code = i40e_write_nvm_aq(hw, 0x00,
I40E_SR_SW_CHECKSUM_WORD,
1, &le_sum, true);
} }
return ret_code; return ret_code;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment