diff options
| author | Christian Geddes <crgeddes@us.ibm.com> | 2019-09-20 14:23:21 -0500 |
|---|---|---|
| committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-09-27 17:29:55 -0500 |
| commit | 0f3e041cbe1c7d6d2ae203187f843b1714b287db (patch) | |
| tree | 3ae30da8ad9a402c9b11dbd2ccb20eec024db199 /src/usr/vpd | |
| parent | 7b87226522ddaf755b241c8352f5c7e9ed273741 (diff) | |
| download | blackbird-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.C | 19 | ||||
| -rwxr-xr-x | src/usr/vpd/spdDDR4_DDIMM.H | 3 |
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 }, //--------------------------------------------------------------------------------------- }; |

