summaryrefslogtreecommitdiffstats
path: root/src/usr/vpd
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2019-09-20 14:23:21 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-09-27 17:29:55 -0500
commit0f3e041cbe1c7d6d2ae203187f843b1714b287db (patch)
tree3ae30da8ad9a402c9b11dbd2ccb20eec024db199 /src/usr/vpd
parent7b87226522ddaf755b241c8352f5c7e9ed273741 (diff)
downloadblackbird-hostboot-0f3e041cbe1c7d6d2ae203187f843b1714b287db.tar.gz
blackbird-hostboot-0f3e041cbe1c7d6d2ae203187f843b1714b287db.zip
Add new DDR4 DDIMM keyword ENTIRE_SPD_WITHOUT_EFD
With the DDR4 DDIMM SPD there are really two parts. There is the 640 bytes of information you typically see in a DIMM's SPD and then there are 2 KB - 640 bytes of EFD (extensible function descriptors) to give vendors space to add customized data. In many cases we want the ENTIRE_SPD (including the EFD area) but in other cases we want to save some time/space and only read in the first 640 bytes. This new keyword will give us that flexibility. Change-Id: I88ed58b37417b576f2ec4a779ee0c114791c6c21 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84070 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Matthew Raybuck <matthew.raybuck@ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/vpd')
-rw-r--r--src/usr/vpd/ocmb_spd.C19
-rwxr-xr-xsrc/usr/vpd/spdDDR4_DDIMM.H3
2 files changed, 7 insertions, 15 deletions
diff --git a/src/usr/vpd/ocmb_spd.C b/src/usr/vpd/ocmb_spd.C
index 442eb3672..2767efca7 100644
--- a/src/usr/vpd/ocmb_spd.C
+++ b/src/usr/vpd/ocmb_spd.C
@@ -152,25 +152,16 @@ errlHndl_t ocmbGetSPD(T::TargetHandle_t i_target,
}
}
- // For ENTIRE_SPD, we must read OCMB SPD and EFD combined size.
- size_t dataSize = entry->length;
- if (i_keyword == ENTIRE_SPD)
- {
- assert(((io_buflen >= OCMB_SPD_EFD_COMBINED_SIZE)
- || (io_buffer == nullptr)),
- "Buffer must be at least 2 KB in ocmbGetSPD for ENTIRE_SPD");
- dataSize = OCMB_SPD_EFD_COMBINED_SIZE;
- }
-
// Support passing in nullptr buffer to return VPD field size.
if (io_buffer == nullptr)
{
- io_buflen = dataSize;
+ io_buflen = entry->length;
break;
}
+
l_errl = spdCheckSize(io_buflen,
- dataSize,
+ entry->length,
i_keyword);
if (l_errl != nullptr)
@@ -180,7 +171,7 @@ errlHndl_t ocmbGetSPD(T::TargetHandle_t i_target,
l_errl = ocmbFetchData(i_target,
entry->offset,
- dataSize,
+ entry->length,
io_buffer,
i_location);
@@ -190,7 +181,7 @@ errlHndl_t ocmbGetSPD(T::TargetHandle_t i_target,
}
// Return the size read.
- io_buflen = dataSize;
+ io_buflen = entry->length;
} while(0);
diff --git a/src/usr/vpd/spdDDR4_DDIMM.H b/src/usr/vpd/spdDDR4_DDIMM.H
index 759c9c3df..db115d36a 100755
--- a/src/usr/vpd/spdDDR4_DDIMM.H
+++ b/src/usr/vpd/spdDDR4_DDIMM.H
@@ -127,7 +127,8 @@ const KeywordData ddr4DDIMMData[] =
{ TCKMAX_FINE_OFFSET, 0x7c, 0x01, 0x00, 0x00, false, false, ALL },
{ BASE_CONFIG_CRC, 0x7f, 0x02, 0x00, 0x00, true, false, ALL },
// Module Specific fields supported on DDR4 only
- { ENTIRE_SPD, 0x00, 0x280, 0x00, 0x00, false, false, ALL },
+ { ENTIRE_SPD_WITHOUT_EFD, 0x00, 0x280, 0x00, 0x00, false, false, ALL },
+ { ENTIRE_SPD, 0x00, 0x800, 0x00, 0x00, false, false, ALL },
//---------------------------------------------------------------------------------------
};
OpenPOWER on IntegriCloud