summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2017-07-26 12:59:22 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-07-28 11:33:35 -0400
commitf72905787eb3f1bc4d3b5ee0ea45d3051c4f48d2 (patch)
tree40195d7b1a7b38e660288903b3521c2e3bab672e
parent8bbfc6d5127458cf3c9614460d87e6588cf97e2a (diff)
downloadtalos-hostboot-f72905787eb3f1bc4d3b5ee0ea45d3051c4f48d2.tar.gz
talos-hostboot-f72905787eb3f1bc4d3b5ee0ea45d3051c4f48d2.zip
PRD: address mismatch in UE table
Change-Id: I1842dc304e83d8c130c6c5d421ac989b05f0b54a CQ: SW394475 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43693 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43799 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>
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C6
-rw-r--r--src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H13
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C15
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C14
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C28
5 files changed, 52 insertions, 24 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
index 29b9815d8..8abd09515 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
@@ -50,7 +50,7 @@ MemAddr MemAddr::fromReadAddr<TYPE_MCBIST>( uint64_t i_addr )
{
uint64_t mrnk = (i_addr >> 59) & 0x7; // 2: 4
uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
- uint64_t row = (i_addr >> 38) & 0x1ffff; // 8:25
+ uint64_t row = (i_addr >> 38) & 0x3ffff; // 8:25
uint64_t col = (i_addr >> 31) & 0x7f; // 26:32
uint64_t bnk = (i_addr >> 26) & 0x1f; // 33:37
@@ -75,9 +75,9 @@ MemAddr MemAddr::fromReadAddr<TYPE_MEMBUF>( uint64_t i_addr )
template<>
MemAddr MemAddr::fromMaintAddr<TYPE_MCBIST>( uint64_t i_addr )
{
- uint64_t rslct = (i_addr >> 59) & 0x7; // 3: 4
+ uint64_t rslct = (i_addr >> 59) & 0x3; // 3: 4
uint64_t srnk = (i_addr >> 56) & 0x7; // 5: 7
- uint64_t row = (i_addr >> 38) & 0x1ffff; // 8:25
+ uint64_t row = (i_addr >> 38) & 0x3ffff; // 8:25
uint64_t col = (i_addr >> 31) & 0x7f; // 26:32
uint64_t bnk = (i_addr >> 26) & 0x1f; // 33:37
uint64_t dslct = (i_addr >> 23) & 0x1; // 40
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
index 07808a990..4d4e0ee2b 100644
--- a/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
+++ b/src/usr/diag/prdf/common/plat/mem/prdfMemAddress.H
@@ -86,19 +86,6 @@ class MemAddr
template<TARGETING::TYPE T>
static MemAddr fromMaintAddr( uint64_t i_addr );
- /**
- * @brief Occassionally we will need a MemAddr, but all we have is a
- * MemRank. This mostly happens when adding FFDC during Targeted
- * Diagnostics procedures. In this case, we will input a valid rank
- * and this function will add invalid bank, row, and column
- * addresses.
- * @param i_rank A valid rank for this address.
- */
- static MemAddr fromRank( const MemRank & i_rank )
- {
- return MemAddr( i_rank, 0xff, 0xffff, 0xffff );
- }
-
/** @return This address's rank. */
const MemRank& getRank() const { return iv_rnk; }
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
index 8525c47f2..339d3ac0a 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTps_ipl.C
@@ -123,9 +123,20 @@ uint32_t TpsEvent<TYPE_MCA>::nextStep( STEP_CODE_DATA_STRUCT & io_sc,
PRDFSIG_MaintIUE );
}
+ // At this point we don't actually have an address for the UE.
+ // The best we can do is get the address in which the command
+ // stopped.
+ MemAddr addr;
+ o_rc = getMemMaintAddr<TYPE_MCA>( iv_chip, addr );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "getMemMaintAddr(0x%08x) failed",
+ iv_chip->getHuid() );
+ break;
+ }
+
// Do memory UE handling.
- o_rc = MemEcc::handleMemUe<TYPE_MCA>(iv_chip,
- MemAddr::fromRank(iv_rank),
+ o_rc = MemEcc::handleMemUe<TYPE_MCA>(iv_chip, addr,
UE_TABLE::SCRUB_UE, io_sc);
if ( SUCCESS != o_rc )
{
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
index 730a2f687..e331d736c 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_ipl.C
@@ -115,8 +115,18 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
? PRDFSIG_MaintUE
: PRDFSIG_MaintIUE );
- o_rc = MemEcc::handleMemUe<TYPE_MCA>( iv_chip,
- MemAddr::fromRank(iv_rank),
+ // At this point we don't actually have an address for the UE. The
+ // best we can do is get the address in which the command stopped.
+ MemAddr addr;
+ o_rc = getMemMaintAddr<TYPE_MCA>( iv_chip, addr );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "getMemMaintAddr(0x%08x) failed",
+ iv_chip->getHuid() );
+ break;
+ }
+
+ o_rc = MemEcc::handleMemUe<TYPE_MCA>( iv_chip, addr,
UE_TABLE::SCRUB_UE, io_sc );
if ( SUCCESS != o_rc )
{
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
index 34d78d37e..835a54cfe 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm_rt.C
@@ -139,8 +139,18 @@ uint32_t VcmEvent<TYPE_MCA>::checkEcc( const uint32_t & i_eccAttns,
io_sc.service_data->setSignature( iv_chip->getHuid(),
PRDFSIG_MaintUE );
- o_rc = MemEcc::handleMemUe<TYPE_MCA>( iv_chip,
- MemAddr::fromRank(iv_rank),
+ // At this point we don't actually have an address for the UE. The
+ // best we can do is get the address in which the command stopped.
+ MemAddr addr;
+ o_rc = getMemMaintAddr<TYPE_MCA>( iv_chip, addr );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "getMemMaintAddr(0x%08x) failed",
+ iv_chip->getHuid() );
+ break;
+ }
+
+ o_rc = MemEcc::handleMemUe<TYPE_MCA>( iv_chip, addr,
UE_TABLE::SCRUB_UE, io_sc );
if ( SUCCESS != o_rc )
{
@@ -217,9 +227,19 @@ uint32_t VcmEvent<TYPE_MBA>::checkEcc( const uint32_t & i_eccAttns,
io_sc.service_data->setSignature( iv_chip->getHuid(),
PRDFSIG_MaintUE );
+ // At this point we don't actually have an address for the UE. The
+ // best we can do is get the address in which the command stopped.
+ MemAddr addr;
+ o_rc = getMemMaintAddr<TYPE_MBA>( iv_chip, addr );
+ if ( SUCCESS != o_rc )
+ {
+ PRDF_ERR( PRDF_FUNC "getMemMaintAddr(0x%08x) failed",
+ iv_chip->getHuid() );
+ break;
+ }
+
/* TODO: RTC 157888
- o_rc = MemEcc::handleMemUe<TYPE_MBA>( iv_chip,
- MemAddr::fromRank(iv_rank),
+ o_rc = MemEcc::handleMemUe<TYPE_MBA>( iv_chip, addr,
UE_TABLE::SCRUB_UE, io_sc );
*/
if ( SUCCESS != o_rc )
OpenPOWER on IntegriCloud