blob: ac16f0947e091ccb54bde4bded80e76a628ec4df [file] [log] [blame]
From 5f06da05527c3ef2d9ee709e912c5840eb366e87 Mon Sep 17 00:00:00 2001
From: Dan Crowell <dcrowell@us.ibm.com>
Date: Thu, 2 Apr 2015 12:29:45 -0500
Subject: [PATCH 04/10] Fix constant refresh of vpd cache
Code was inadvertantly detecting mismatched pnor cache contents
on every boot.
Change-Id: I631dc758e03316a28d13f6d19032c1a76e3cffc1
(cherry picked from commit 0d95414e03ff337404a3e20fd421fd8b4272ebc5)
---
src/usr/vpd/ipvpd.C | 18 ++++++++++++------
src/usr/vpd/ipvpd.H | 5 ++++-
src/usr/vpd/vpd.C | 2 +-
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/usr/vpd/ipvpd.C b/src/usr/vpd/ipvpd.C
index a0682d2..2cefb6e 100644
--- a/src/usr/vpd/ipvpd.C
+++ b/src/usr/vpd/ipvpd.C
@@ -397,6 +397,9 @@ errlHndl_t IpVpdFacade::cmpPnorToSeeprom ( TARGETING::Target * i_target,
l_dataSeeprom,
l_sizePnor ) != 0 )
{
+ TRACFCOMP( g_trac_vpd, "cmpPnorToSeeprom found mismatch for HUID %.8X 0x%X:0x%X", TARGETING::get_huid(i_target), i_record, i_keyword );
+ TRACFBIN( g_trac_vpd, "EEPROM", l_dataSeeprom, l_sizeSeeprom );
+ TRACFBIN( g_trac_vpd, "PNOR", l_dataPnor, l_sizePnor );
break;
}
@@ -898,8 +901,9 @@ bool IpVpdFacade::hasVpdPresent( TARGETING::Target * i_target,
}
vpdPresent = recordPresent( recordName,
- recordOffset,
- i_target );
+ recordOffset,
+ i_target,
+ VPD::AUTOSELECT );
}while( 0 );
@@ -918,7 +922,8 @@ bool IpVpdFacade::hasVpdPresent( TARGETING::Target * i_target,
// ------------------------------------------------------------------
bool IpVpdFacade::recordPresent( const char * i_record,
uint16_t & o_offset,
- TARGETING::Target * i_target )
+ TARGETING::Target * i_target,
+ VPD::vpdCmdTarget i_location )
{
errlHndl_t err = NULL;
uint64_t tmpOffset = 0x0;
@@ -946,7 +951,7 @@ bool IpVpdFacade::recordPresent( const char * i_record,
RECORD_BYTE_SIZE,
record,
i_target,
- VPD::AUTOSELECT );
+ i_location );
tmpOffset += RECORD_BYTE_SIZE;
if( err )
@@ -963,7 +968,7 @@ bool IpVpdFacade::recordPresent( const char * i_record,
RECORD_ADDR_BYTE_SIZE,
&o_offset,
i_target,
- VPD::AUTOSELECT );
+ i_location );
if( err )
{
break;
@@ -1003,7 +1008,8 @@ errlHndl_t IpVpdFacade::findRecordOffsetPnor ( const char * i_record,
matchFound = recordPresent( i_record,
offset,
- i_target );
+ i_target,
+ i_args.location );
if( !matchFound )
{
diff --git a/src/usr/vpd/ipvpd.H b/src/usr/vpd/ipvpd.H
index 2350bdd..7c2090c 100644
--- a/src/usr/vpd/ipvpd.H
+++ b/src/usr/vpd/ipvpd.H
@@ -353,11 +353,14 @@ class IpVpdFacade
*
* @param[in] i_target - The target to retrieve the data for.
*
+ * @param[in] i_location - VPD location to fetch data from (PNOR/SEEPROM)
+ *
* @return bool - True if the record is found, False otherwise.
*/
bool recordPresent( const char * i_record,
uint16_t & offset,
- TARGETING::Target * i_target );
+ TARGETING::Target * i_target,
+ VPD::vpdCmdTarget i_location );
/**
* @brief This function will read the VPD TOC to find the offset where the
diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C
index 3533af9..963025f 100755
--- a/src/usr/vpd/vpd.C
+++ b/src/usr/vpd/vpd.C
@@ -533,7 +533,7 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
// If we did not match, we need to load SEEPROM VPD data into PNOR
if( l_matchPN && l_matchSN )
{
- TRACFCOMP(g_trac_vpd,"VPD::ensureCacheIsInSync: PNOR_PN/SN = SEEPROM_PN/SN for target %.8X",TARGETING::get_huid(i_target));
+ TRACFCOMP(g_trac_vpd,"VPD::ensureCacheIsInSync: PNOR_PN/SN == SEEPROM_PN/SN for target %.8X",TARGETING::get_huid(i_target));
}
else
{
--
1.8.2.2