[coreboot-gerrit] Change in coreboot[master]: AGESA: f15 f15tn f16kb: Add extra check for incorrect SPD data
Aladyshev Konstantin (Code Review)
gerrit at coreboot.org
Tue Aug 1 14:34:56 CEST 2017
Aladyshev Konstantin has uploaded this change for review. ( https://review.coreboot.org/20839
Change subject: AGESA: f15 f15tn f16kb: Add extra check for incorrect SPD data
......................................................................
AGESA: f15 f15tn f16kb: Add extra check for incorrect SPD data
If memory module is broken and its SPD data is wrong in a way
that Data[11] or Data[9]&0xF is equal to zero, division by 0
in DIMM speed calculation could reboot CPU. Add extra check
to avoid this issue.
Change-Id: Ica92850cc77e1f7cbf3e7e44717de42a03b93bbe
Signed-off-by: Konstantin Aladyshev <aladyshev22 at gmail.com>
---
M src/vendorcode/amd/agesa/f15/Proc/Mem/Feat/DMI/mfDMI.c
M src/vendorcode/amd/agesa/f15tn/Proc/Mem/Feat/DMI/mfDMI.c
M src/vendorcode/amd/agesa/f16kb/Proc/Mem/Feat/DMI/mfDMI.c
3 files changed, 21 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/39/20839/1
diff --git a/src/vendorcode/amd/agesa/f15/Proc/Mem/Feat/DMI/mfDMI.c b/src/vendorcode/amd/agesa/f15/Proc/Mem/Feat/DMI/mfDMI.c
index 3138f3f..b968349 100644
--- a/src/vendorcode/amd/agesa/f15/Proc/Mem/Feat/DMI/mfDMI.c
+++ b/src/vendorcode/amd/agesa/f15/Proc/Mem/Feat/DMI/mfDMI.c
@@ -228,6 +228,13 @@
DmiTable[DimmIndex].PartNumber[i] = 0x0;
}
+ // If SPD is wrong, division by 0 in DIMM speed calculation could reboot CPU
+ // So avoid it by this check
+ if ((SpdDataStructure[DimmIndex].Data[11]==0) || ((SpdDataStructure[DimmIndex].Data[9] & 0xF) == 0)) {
+ DmiTable[DimmIndex].DimmPresent = 0;
+ SpdDataStructure[DimmIndex].DimmPresent = 0;
+ }
+
if (SpdDataStructure[DimmIndex].DimmPresent) {
// Total Width (offset 08h) & Data Width (offset 0Ah)
TotalWidth = (UINT16) SpdDataStructure[DimmIndex].Data[8];
diff --git a/src/vendorcode/amd/agesa/f15tn/Proc/Mem/Feat/DMI/mfDMI.c b/src/vendorcode/amd/agesa/f15tn/Proc/Mem/Feat/DMI/mfDMI.c
index 6620030..61499f5 100644
--- a/src/vendorcode/amd/agesa/f15tn/Proc/Mem/Feat/DMI/mfDMI.c
+++ b/src/vendorcode/amd/agesa/f15tn/Proc/Mem/Feat/DMI/mfDMI.c
@@ -243,6 +243,13 @@
DmiTable[DimmIndex].PartNumber[i] = 0x0;
}
+ // If SPD is wrong, division by 0 in DIMM speed calculation could reboot CPU
+ // So avoid it by this check
+ if ((SpdDataStructure[DimmIndex].Data[11]==0) || ((SpdDataStructure[DimmIndex].Data[9] & 0xF) == 0)) {
+ DmiTable[DimmIndex].DimmPresent = 0;
+ SpdDataStructure[DimmIndex].DimmPresent = 0;
+ }
+
if (SpdDataStructure[DimmIndex].DimmPresent) {
// Total Width (offset 08h) & Data Width (offset 0Ah)
TotalWidth = (UINT16) SpdDataStructure[DimmIndex].Data[8];
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/Mem/Feat/DMI/mfDMI.c b/src/vendorcode/amd/agesa/f16kb/Proc/Mem/Feat/DMI/mfDMI.c
index 57cc491..edaf9ee 100644
--- a/src/vendorcode/amd/agesa/f16kb/Proc/Mem/Feat/DMI/mfDMI.c
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/Mem/Feat/DMI/mfDMI.c
@@ -293,6 +293,13 @@
DmiPhysicalDimmInfoTable->PartNumber[i] = 0x0;
}
+ // If SPD is wrong, division by 0 in DIMM speed calculation could reboot CPU
+ // So avoid it by this check
+ if ((SpdDataStructure[DimmIndex].Data[11]==0) || ((SpdDataStructure[DimmIndex].Data[9] & 0xF) == 0)) {
+ DmiTable[DimmIndex].DimmPresent = 0;
+ SpdDataStructure[DimmIndex].DimmPresent = 0;
+ }
+
if (SpdDataStructure->DimmPresent) {
// Total Width (offset 08h) & Data Width (offset 0Ah)
TotalWidth = (UINT16) SpdDataStructure->Data[8];
--
To view, visit https://review.coreboot.org/20839
To unsubscribe, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ica92850cc77e1f7cbf3e7e44717de42a03b93bbe
Gerrit-Change-Number: 20839
Gerrit-PatchSet: 1
Gerrit-Owner: Aladyshev Konstantin <aladyshev22 at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20170801/99b04e1d/attachment-0001.html>
More information about the coreboot-gerrit
mailing list