diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2018-10-22 17:37:01 -0500 |
---|---|---|
committer | Zane C. Shelley <zshelle@us.ibm.com> | 2018-10-29 22:38:16 -0500 |
commit | 414037d985e17e2e3ef769bcc086b08c0e92bbe4 (patch) | |
tree | 2a46028aac36347d382217be14fd966b60ba8524 /src/usr/diag/prdf/plat/mem/prdfMemVcm.C | |
parent | 451a26b55f90bd6d1c23762c8dcab20ab63b2bea (diff) | |
download | talos-hostboot-414037d985e17e2e3ef769bcc086b08c0e92bbe4.tar.gz talos-hostboot-414037d985e17e2e3ef769bcc086b08c0e92bbe4.zip |
PRD: Increment addr to next row for VCM row repair
Change-Id: I3ffb09f8bf1af96587762dbeba665942a13cdcbc
CQ: SW449443
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67860
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/68108
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>
Diffstat (limited to 'src/usr/diag/prdf/plat/mem/prdfMemVcm.C')
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemVcm.C | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemVcm.C b/src/usr/diag/prdf/plat/mem/prdfMemVcm.C index b4dc9903f..8c3c4480a 100644 --- a/src/usr/diag/prdf/plat/mem/prdfMemVcm.C +++ b/src/usr/diag/prdf/plat/mem/prdfMemVcm.C @@ -380,6 +380,29 @@ uint32_t VcmEvent<TYPE_MBA>::handlePhaseComplete( const uint32_t & i_eccAttns, break; } if ( o_done ) break; + + // Row repair is enabled, we found an MCE, and we did not + // need to exit the procedure. This means we will resume the + // command on the next row, but first we need to make sure + // the command did not stop on the last row of the address + // range. So reinitialize iv_canResumeScrub if necessary. + + o_rc = didCmdStopOnLastAddr<TYPE_MBA>( iv_chip, MASTER_RANK, + lastAddr, true ); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC "didCmdStopOnLastAddr(0x%08x) " + "failed", iv_chip->getHuid() ); + break; + } + iv_canResumeScrub = !lastAddr; + + if ( iv_canResumeScrub ) + { + // Indicate that we need to resume the command on the + // next row instead of the next address. + iv_resumeNextRow = true; + } } else { |