diff options
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/vpd/errlud_vpd.C | 10 | ||||
-rw-r--r-- | src/usr/vpd/ipvpd.C | 16 | ||||
-rw-r--r-- | src/usr/vpd/pvpd.C | 2 | ||||
-rwxr-xr-x | src/usr/vpd/vpd.C | 136 |
4 files changed, 68 insertions, 96 deletions
diff --git a/src/usr/vpd/errlud_vpd.C b/src/usr/vpd/errlud_vpd.C index f24a5a030..8030e134c 100644 --- a/src/usr/vpd/errlud_vpd.C +++ b/src/usr/vpd/errlud_vpd.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014 */ +/* Contributors Listed Below - COPYRIGHT 2014,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -61,8 +61,8 @@ UdVpdParms::UdVpdParms( TARGETING::Target * i_target, reallocUsrBuf(sizeof(uint8_t) +sizeof(uint32_t) +sizeof(uint64_t)*3)); - uint32_t tmp64 = 0; - uint16_t tmp32 = 0; + uint64_t tmp64 = 0; + uint32_t tmp32 = 0; uint8_t tmp8 = 0; tmp8 = read_notWrite; @@ -124,8 +124,8 @@ UdConfigParms::UdConfigParms( TARGETING::Target * i_target, char * l_pBuf = reinterpret_cast<char *>( reallocUsrBuf(sizeof(uint32_t) +sizeof(uint64_t)*7)); - uint32_t tmp64 = 0; - uint16_t tmp32 = 0; + uint64_t tmp64 = 0; + uint32_t tmp32 = 0; tmp32 = TARGETING::get_huid(i_target); memcpy(l_pBuf, &tmp32, sizeof(tmp32)); diff --git a/src/usr/vpd/ipvpd.C b/src/usr/vpd/ipvpd.C index 0469c0250..3348c7a54 100644 --- a/src/usr/vpd/ipvpd.C +++ b/src/usr/vpd/ipvpd.C @@ -988,8 +988,12 @@ errlHndl_t IpVpdFacade::findRecordOffset ( const char * i_record, return err; } - TRACFCOMP( g_trac_vpd, INFO_MRK" Record %s for target 0x%.8X exists at %p in PNOR", + // Don't trace that record exists in PNOR if it does not + if (l_overridePtr != nullptr) + { + TRACFCOMP( g_trac_vpd, INFO_MRK" Record %s for target 0x%.8X exists at %p in PNOR", i_record, get_huid(i_target), l_overridePtr ); + } } // If we have an override, the record is already pointed at directly @@ -1283,7 +1287,7 @@ errlHndl_t IpVpdFacade::findRecordOffsetSeeprom ( const char * i_record, TARGETING::Target * i_target, input_args_t i_args ) { - errlHndl_t err = NULL; + errlHndl_t err = nullptr; char l_buffer[256] = { 0 }; uint16_t offset = 0x0; @@ -1351,6 +1355,12 @@ errlHndl_t IpVpdFacade::findRecordOffsetSeeprom ( const char * i_record, err = retrieveKeyword( "PT", "VTOC", offset, index, i_target, l_buffer, pt_len, i_args ); if ( err ) { + // There may be only one PT record + if (index != 0) + { + delete err; + err = nullptr; + } break; } @@ -1374,7 +1384,7 @@ errlHndl_t IpVpdFacade::findRecordOffsetSeeprom ( const char * i_record, } } - if ( !found && err == NULL ) { + if ( !found && err == nullptr ) { TRACFCOMP( g_trac_vpd, ERR_MRK"IpVpdFacade::findRecordOffsetSeeprom: " "No matching Record (%s) found in VTOC!", i_record ); diff --git a/src/usr/vpd/pvpd.C b/src/usr/vpd/pvpd.C index 8d33a24af..c5d85d827 100644 --- a/src/usr/vpd/pvpd.C +++ b/src/usr/vpd/pvpd.C @@ -246,7 +246,7 @@ errlHndl_t nodePresenceDetect(DeviceFW::OperationType i_opType, } pvpd_present = VPD::pvpdPresent( i_target ); -#if(defined( CONFIG_PVPD_READ_FROM_HW ) && !defined( __HOSTBOOT_RUNTIME) ) +#if(defined( CONFIG_PVPD_READ_FROM_HW ) && !defined( __HOSTBOOT_RUNTIME) && defined(CONFIG_PVPD_READ_FROM_PNOR)) if( pvpd_present ) { // Check if the VPD data in the PNOR matches the SEEPROM diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C index aa85a3ed6..a749ff9ec 100755 --- a/src/usr/vpd/vpd.C +++ b/src/usr/vpd/vpd.C @@ -475,55 +475,55 @@ void setPartAndSerialNumberAttributes( TARGETING::Target * i_target ) void updateSerialNumberFromBMC( TARGETING::Target * i_nodetarget ) { #ifdef CONFIG_UPDATE_SN_FROM_BMC - errlHndl_t l_errl = NULL; - size_t l_vpdSize = 0; - - //Get Product Serial Number from Backplane - char* l_sn_prod = NULL; - l_sn_prod = IPMIFRUINV::getProductSN(0); - if (l_sn_prod != NULL) - { - TRACFCOMP(g_trac_vpd, "Got system serial number from BMC."); - TRACFCOMP(g_trac_vpd, "SN from BMC is: %s", l_sn_prod); - - l_errl = deviceRead(i_nodetarget, NULL, l_vpdSize, - DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); - - if(l_errl == NULL) - { - uint8_t l_vpddata[l_vpdSize]; - - l_errl = deviceRead(i_nodetarget, l_vpddata, l_vpdSize, - DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); - - if(l_errl == NULL) - { - TRACFCOMP(g_trac_vpd, "SN in PVPD::OSYS:SS: %s, size: %d", l_vpddata, l_vpdSize); - - if (strncmp(l_sn_prod, l_vpddata, l_vpdSize) != 0) - { - l_errl = deviceWrite(i_nodetarget, l_sn_prod, l_vpdSize, - DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); - CONSOLE::displayf(NULL, "updated SN from BMC into PVPD."); - CONSOLE::flush(); - CONSOLE::displayf(NULL, "Need a reboot."); - CONSOLE::flush(); - INITSERVICE::requestReboot(); - } - } - } - - if(l_errl) - { - ERRORLOG::errlCommit(l_errl,VPD_COMP_ID); - } - - //getProductSN requires the caller to delete the char array - delete[] l_sn_prod; - l_sn_prod = NULL; - - TRACFCOMP(g_trac_vpd, "End updateSerialNumberFromBMC."); - } + errlHndl_t l_errl = NULL; + size_t l_vpdSize = 0; + + //Get Product Serial Number from Backplane + char* l_sn_prod = NULL; + l_sn_prod = IPMIFRUINV::getProductSN(0); + if (l_sn_prod != NULL) + { + TRACFCOMP(g_trac_vpd, "Got system serial number from BMC."); + TRACFCOMP(g_trac_vpd, "SN from BMC is: %s", l_sn_prod); + + l_errl = deviceRead(i_nodetarget, NULL, l_vpdSize, + DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); + + if(l_errl == NULL) + { + uint8_t l_vpddata[l_vpdSize]; + + l_errl = deviceRead(i_nodetarget, l_vpddata, l_vpdSize, + DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); + + if(l_errl == NULL) + { + TRACFCOMP(g_trac_vpd, "SN in PVPD::OSYS:SS: %s, size: %d", l_vpddata, l_vpdSize); + + if (strncmp(l_sn_prod, l_vpddata, l_vpdSize) != 0) + { + l_errl = deviceWrite(i_nodetarget, l_sn_prod, l_vpdSize, + DEVICE_PVPD_ADDRESS( PVPD::OSYS, PVPD::SS )); + CONSOLE::displayf(NULL, "updated SN from BMC into PVPD."); + CONSOLE::flush(); + CONSOLE::displayf(NULL, "Need a reboot."); + CONSOLE::flush(); + INITSERVICE::requestReboot(); + } + } + } + + if(l_errl) + { + ERRORLOG::errlCommit(l_errl,VPD_COMP_ID); + } + + //getProductSN requires the caller to delete the char array + delete[] l_sn_prod; + l_sn_prod = NULL; + + TRACFCOMP(g_trac_vpd, "End updateSerialNumberFromBMC."); + } #endif } @@ -600,47 +600,9 @@ errlHndl_t getPnAndSnRecordAndKeywords( TARGETING::Target * i_target, } else if( i_type == TARGETING::TYPE_NODE ) { -#if defined(CONFIG_PVPD_READ_FROM_HW) && defined(CONFIG_PVPD_READ_FROM_PNOR) - IpVpdFacade* l_ipvpd = &(Singleton<PvpdFacade>::instance()); io_record = PVPD::OPFR; io_keywordPN = PVPD::VP; io_keywordSN = PVPD::VS; - - bool l_zeroPN; - l_err = l_ipvpd->cmpSeepromToZero( i_target, - io_record, - io_keywordPN, - l_zeroPN ); - if (l_err) - { - TRACFCOMP(g_trac_vpd,ERR_MRK"VPD::getPnAndSnRecordAndKeywords: Error checking if OPFR:VP == 0"); - break; - } - - bool l_zeroSN; - l_err = l_ipvpd->cmpSeepromToZero( i_target, - io_record, - io_keywordSN, - l_zeroSN ); - if (l_err) - { - TRACFCOMP(g_trac_vpd,ERR_MRK"VPD::getPnAndSnRecordAndKeywords: Error checking if OPFR:VS == 0"); - break; - } - - // If VP and VS are zero, use VINI instead - if( l_zeroPN && l_zeroSN ) - { - TRACFCOMP(g_trac_vpd, "setting cvpd to VINI PN SN"); - io_record = PVPD::VINI; - io_keywordPN = PVPD::PN; - io_keywordSN = PVPD::SN; - } -#else - io_record = PVPD::VINI; - io_keywordPN = PVPD::PN; - io_keywordSN = PVPD::SN; -#endif } else if( i_type == TARGETING::TYPE_MCS ) { |