diff options
author | Corey Swenson <cswenson@us.ibm.com> | 2015-03-16 13:23:05 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-03-26 14:48:54 -0500 |
commit | 43c7aed1a01cf20acd11307ce08aab99eb5bcd1c (patch) | |
tree | f23dd8a3aef9f6d1905dd1822a019b8ae7724184 /src/usr/vpd/vpd.C | |
parent | b0b7adcd0c1a072d6ee70c126dee95d570a86bef (diff) | |
download | talos-hostboot-43c7aed1a01cf20acd11307ce08aab99eb5bcd1c.tar.gz talos-hostboot-43c7aed1a01cf20acd11307ce08aab99eb5bcd1c.zip |
Fix VPD cache records/keywords
The CVPD should be checking OPFR:VS/VP first, then VINI:SN/PN
The MVPD should be checking VRML:SN/PN not VINI:SN/PN
Change-Id: If792fae2964011c1ca80e8cc08235477dc8a7a3b
RTC: 124992
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16396
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: ANDRES A. LUGO-REYES <aalugore@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/vpd/vpd.C')
-rwxr-xr-x | src/usr/vpd/vpd.C | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C index 3533af9d1..fa32478e5 100755 --- a/src/usr/vpd/vpd.C +++ b/src/usr/vpd/vpd.C @@ -445,16 +445,16 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target ) if( l_type == TARGETING::TYPE_PROC ) { - l_record = MVPD::VINI; + l_record = MVPD::VRML; l_keywordPN = MVPD::PN; l_keywordSN = MVPD::SN; } else if( l_type == TARGETING::TYPE_MEMBUF ) { l_ipvpd = &(Singleton<CvpdFacade>::instance()); - l_record = CVPD::VINI; - l_keywordPN = CVPD::PN; - l_keywordSN = CVPD::SN; + l_record = CVPD::OPFR; + l_keywordPN = CVPD::VP; + l_keywordSN = CVPD::VS; } else if( l_type == TARGETING::TYPE_DIMM ) { @@ -486,6 +486,40 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target ) do { + // Make sure we are comparing the correct pn/sn for CVPD + if( l_type == TARGETING::TYPE_MEMBUF ) + { + bool l_zeroPN; + l_err = l_ipvpd->cmpSeepromToZero( i_target, + l_record, + l_keywordPN, + l_zeroPN ); + if (l_err) + { + TRACFCOMP(g_trac_vpd,ERR_MRK"VPD::ensureCacheIsInSync: Error checking if OPFR:VP == 0"); + break; + } + + bool l_zeroSN; + l_err = l_ipvpd->cmpSeepromToZero( i_target, + l_record, + l_keywordSN, + l_zeroSN ); + if (l_err) + { + TRACFCOMP(g_trac_vpd,ERR_MRK"VPD::ensureCacheIsInSync: Error checking if OPFR:VS == 0"); + break; + } + + // If VP and VS are zero, use VINI instead + if( l_zeroPN && l_zeroSN ) + { + l_record = CVPD::VINI; + l_keywordPN = CVPD::PN; + l_keywordSN = CVPD::SN; + } + } + // Compare the Part Numbers in PNOR/SEEPROM bool l_matchPN = false; if( ( l_type == TARGETING::TYPE_PROC ) || |