aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Bowling <kbowling@FreeBSD.org>2026-08-11 18:57:52 +0000
committerKevin Bowling <kbowling@FreeBSD.org>2026-08-11 19:44:17 +0000
commitccb8ad1f645eb77d393eb81ff1b86b213b74bc87 (patch)
tree804144e5b9265bfa6b5b032a003bacb7648d87e6
parent8e8755e011955d12abab7c2be324429cccf0b975 (diff)
e1000: Accept uninitialized Tiger Lake NVM checksums
Some transitional Tiger Lake systems shipped with an uninitialized checksum word. Accept that state while continuing to validate newer read-only NVM images. MFC after: 2 weeks
-rw-r--r--sys/dev/e1000/e1000_defines.h1
-rw-r--r--sys/dev/e1000/e1000_nvm.c7
2 files changed, 8 insertions, 0 deletions
diff --git a/sys/dev/e1000/e1000_defines.h b/sys/dev/e1000/e1000_defines.h
index 9b8aca173856..fb21ad3d24b0 100644
--- a/sys/dev/e1000/e1000_defines.h
+++ b/sys/dev/e1000/e1000_defines.h
@@ -1177,6 +1177,7 @@
/* For checksumming, the sum of all words in the NVM should equal 0xBABA. */
#define NVM_SUM 0xBABA
+#define NVM_CHECKSUM_UNINITIALIZED 0xFFFF
/* PBA (printed board assembly) number words */
#define NVM_PBA_OFFSET_0 8
diff --git a/sys/dev/e1000/e1000_nvm.c b/sys/dev/e1000/e1000_nvm.c
index 8a26e1dd0427..bc5ca47eae34 100644
--- a/sys/dev/e1000/e1000_nvm.c
+++ b/sys/dev/e1000/e1000_nvm.c
@@ -1215,6 +1215,13 @@ s32 e1000_validate_nvm_checksum_generic(struct e1000_hw *hw)
checksum += nvm_data;
}
+ /* Some transitional TGP systems shipped with an empty checksum word. */
+ if (hw->mac.type == e1000_pch_tgp &&
+ nvm_data == NVM_CHECKSUM_UNINITIALIZED) {
+ DEBUGOUT("Uninitialized NVM checksum on TGP; ignoring\n");
+ return E1000_SUCCESS;
+ }
+
if (checksum != (u16) NVM_SUM) {
DEBUGOUT("NVM Checksum Invalid\n");
return -E1000_ERR_NVM;