summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2018-02-09 13:15:41 -0600
committerZane C. Shelley <zshelle@us.ibm.com>2018-02-16 12:29:59 -0500
commit21d980956449cb113ff1f12f46b26563ae1d146a (patch)
treed200c6146016f5eefbd0e0b6eca2627adc11122b /src/usr
parentf81091a35f5d113f8f03a569c4d553a1a6d50e44 (diff)
downloadtalos-hostboot-21d980956449cb113ff1f12f46b26563ae1d146a.tar.gz
talos-hostboot-21d980956449cb113ff1f12f46b26563ae1d146a.zip
Reenable reconfig loop for new bad dq data
Change-Id: I47ae857062ffe7861d8b130b29dfc7b6baa4249e CQ: SW417224 Backport: release-fips910 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53944 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-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> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/fapi2/attribute_service.C80
1 files changed, 48 insertions, 32 deletions
diff --git a/src/usr/fapi2/attribute_service.C b/src/usr/fapi2/attribute_service.C
index e6138f706..71bce3e8e 100644
--- a/src/usr/fapi2/attribute_service.C
+++ b/src/usr/fapi2/attribute_service.C
@@ -1271,6 +1271,27 @@ ReturnCode fapiAttrGetBadDqBitmap(
(l_spdData.iv_version != DIMM_BAD_DQ_VERSION) )
{
FAPI_INF( "fapiAttrGetBadDqBitmap: SPD DQ not initialized." );
+
+ // We still set the ECC and spare bytes in the output data to
+ // avoid issues in the setter when SPD DQ is not initialized.
+ // Set bits for any unconnected DQs.
+ // First, check ECC.
+ l_errl = __dimmUpdateDqBitmapEccByte( l_dimmTarget, o_data );
+ if ( l_errl )
+ {
+ FAPI_ERR( "fapiAttrGetBadDqBitmap: Error getting ECC data" );
+ l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
+ break;
+ }
+
+ // Check spare DRAM.
+ l_rc = __dimmUpdateDqBitmapSpareByte( l_dimmTarget, o_data );
+ if ( l_rc )
+ {
+ FAPI_ERR( "fapiAttrGetBadDqBitmap: Error getting spare DRAM "
+ "data" );
+ break;
+ }
}
else
{
@@ -1386,6 +1407,23 @@ ReturnCode fapiAttrSetBadDqBitmap(
// Flag to set if the discrepancies are found
bool mfgModeBadBitsPresent = false;
+ uint8_t l_tmpData[mss::MAX_RANK_PER_DIMM][mss::BAD_DQ_BYTE_COUNT];
+ memcpy( &l_tmpData, &i_data, sizeof(i_data) );
+ l_errl = __dimmUpdateDqBitmapEccByte( l_dimmTarget, l_tmpData );
+ if ( l_errl )
+ {
+ FAPI_ERR( "fapiAttrSetBadDqBitmap: Error getting ECC data." );
+ l_rc.setPlatDataPtr(reinterpret_cast<void *>(l_errl));
+ break;
+ }
+
+ l_rc = __dimmUpdateDqBitmapSpareByte( l_dimmTarget, l_tmpData );
+ if ( l_rc )
+ {
+ FAPI_ERR("fapiAttrSetBadDqBitmap: Error getting spare DRAM data.");
+ break;
+ }
+
// Check if Bad DQ bit set
// Loop through all ranks
for ( uint8_t i = 0; i < mss::MAX_RANK_PER_DIMM; i++ )
@@ -1393,7 +1431,7 @@ ReturnCode fapiAttrSetBadDqBitmap(
// Loop through all DQs
for (uint8_t j = 0; j < mss::BAD_DQ_BYTE_COUNT; j++)
{
- if ( i_data[i][j] != l_prev_data[i][j] )
+ if ( l_tmpData[i][j] != l_prev_data[i][j] )
{
badDqSet = true;
break;
@@ -1422,18 +1460,15 @@ ReturnCode fapiAttrSetBadDqBitmap(
l_reconfigAttr |= fapi2::ENUM_ATTR_RECONFIGURE_LOOP_BAD_DQ_BIT_SET;
#ifndef CONFIG_VPD_GETMACRO_USE_EFF_ATTR
- // TODO RTC 164707
- // Restore DRAM Repairs not finished yet so commenting out the
- // reconfig loop for now.
- //l_rc = FAPI_ATTR_SET( fapi2::ATTR_RECONFIGURE_LOOP,
- // fapi2::Target<fapi2::TARGET_TYPE_SYSTEM>(),
- // l_reconfigAttr );
- //if ( l_rc )
- //{
- // FAPI_ERR( "fapiAttrSetBadDqBitmap: Error setting "
- // "ATTR_RECONFIGURE_LOOP" );
- // break;
- //}
+ l_rc = FAPI_ATTR_SET( fapi2::ATTR_RECONFIGURE_LOOP,
+ fapi2::Target<fapi2::TARGET_TYPE_SYSTEM>(),
+ l_reconfigAttr );
+ if ( l_rc )
+ {
+ FAPI_ERR( "fapiAttrSetBadDqBitmap: Error setting "
+ "ATTR_RECONFIGURE_LOOP" );
+ break;
+ }
#endif
}
@@ -1445,25 +1480,6 @@ ReturnCode fapiAttrSetBadDqBitmap(
uint8_t l_eccSpareBitmap[mss::MAX_RANK_PER_DIMM]
[mss::BAD_DQ_BYTE_COUNT];
- uint8_t l_tmpData[mss::MAX_RANK_PER_DIMM][mss::BAD_DQ_BYTE_COUNT];
- memcpy( &l_tmpData, &i_data, sizeof(i_data) );
-
- l_errl = __dimmUpdateDqBitmapEccByte( l_dimmTarget, l_tmpData );
- if ( l_errl )
- {
- FAPI_ERR( "fapiAttrSetBadDqBitmap: Error getting ECC data." );
- l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl));
- break;
- }
-
- l_rc = __dimmUpdateDqBitmapSpareByte( l_dimmTarget, l_tmpData );
- if ( l_rc )
- {
- FAPI_ERR( "fapiAttrSetBadDqBitmap: Error getting spare DRAM "
- "data." );
- break;
- }
-
l_rc = __compareEccAndSpare( l_dimmTarget, mfgModeBadBitsPresent,
l_tmpData, l_eccSpareBitmap );
if ( l_rc )
OpenPOWER on IntegriCloud