Message ID | 20210721103731.232200-2-acelan.kao@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | e1000e blocks the boot process when it tried to write checksum to its NVM | expand |
On 21.07.21 12:37, AceLan Kao wrote: > From: Sasha Neftin <sasha.neftin@intel.com> > > BugLink: https://bugs.launchpad.net/bugs/1936998 > > On new platforms, the NVM is read-only. Attempting to update the NVM > is causing a lockup to occur. Do not attempt to write to the NVM > on platforms where it's not supported. > Emit an error message when the NVM checksum is invalid. > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213667 > Suggested-by: Dima Ruinskiy <dima.ruinskiy@intel.com> > Suggested-by: Vitaly Lifshits <vitaly.lifshits@intel.com> > Signed-off-by: Sasha Neftin <sasha.neftin@intel.com> > (cherry picked from > https://patchwork.ozlabs.org/project/intel-wired-lan/patch/20210718041031.3619696-1-sasha.neftin@intel.com/) This is now upstream as: commit 4051f68318ca9f3d3becef3b54e70ad2c146df97 Author: Sasha Neftin <sasha.neftin@intel.com> Date: Sun Jul 18 07:10:31 2021 +0300 e1000e: Do not take care about recovery NVM checksum On new platforms, the NVM is read-only. Attempting to update the NVM is causing a lockup to occur. Do not attempt to write to the NVM on platforms where it's not supported. Emit an error message when the NVM checksum is invalid. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213667 Fixes: fb776f5d57ee ("e1000e: Add support for Tiger Lake") Suggested-by: Dima Ruinskiy <dima.ruinskiy@intel.com> Suggested-by: Vitaly Lifshits <vitaly.lifshits@intel.com> Signed-off-by: Sasha Neftin <sasha.neftin@intel.com> Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> > Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com> Acked-by: Stefan Bader <stefan.bader@canonical.com> > --- We should take the original cherry pick and add the BugLink and AceLan's s-o-b when applying. -Stefan > drivers/net/ethernet/intel/e1000e/ich8lan.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c > index 16cd6c7cd8cc8..dc2a570f77425 100644 > --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c > +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c > @@ -4125,13 +4125,17 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw) > return ret_val; > > if (!(data & valid_csum_mask)) { > - data |= valid_csum_mask; > - ret_val = e1000_write_nvm(hw, word, 1, &data); > - if (ret_val) > - return ret_val; > - ret_val = e1000e_update_nvm_checksum(hw); > - if (ret_val) > - return ret_val; > + e_dbg("NVM Checksum Invalid\n"); > + > + if (hw->mac.type < e1000_pch_cnp) { > + data |= valid_csum_mask; > + ret_val = e1000_write_nvm(hw, word, 1, &data); > + if (ret_val) > + return ret_val; > + ret_val = e1000e_update_nvm_checksum(hw); > + if (ret_val) > + return ret_val; > + } > } > > return e1000e_validate_nvm_checksum_generic(hw); >
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 16cd6c7cd8cc8..dc2a570f77425 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -4125,13 +4125,17 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw) return ret_val; if (!(data & valid_csum_mask)) { - data |= valid_csum_mask; - ret_val = e1000_write_nvm(hw, word, 1, &data); - if (ret_val) - return ret_val; - ret_val = e1000e_update_nvm_checksum(hw); - if (ret_val) - return ret_val; + e_dbg("NVM Checksum Invalid\n"); + + if (hw->mac.type < e1000_pch_cnp) { + data |= valid_csum_mask; + ret_val = e1000_write_nvm(hw, word, 1, &data); + if (ret_val) + return ret_val; + ret_val = e1000e_update_nvm_checksum(hw); + if (ret_val) + return ret_val; + } } return e1000e_validate_nvm_checksum_generic(hw);