diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2016-02-12 15:04:35 -0600 |
---|---|---|
committer | WILLIAM G. HOFFA <wghoffa@us.ibm.com> | 2016-02-26 08:05:15 -0600 |
commit | daa819f2819cd8caf7c409bf91b463fc044104ef (patch) | |
tree | d5c1a9a72d4e099f7b59318b1b693d4ecded6f90 | |
parent | e0d4f2d86a6c40216b6aa219f5e9db3023b9510c (diff) | |
download | talos-hostboot-daa819f2819cd8caf7c409bf91b463fc044104ef.tar.gz talos-hostboot-daa819f2819cd8caf7c409bf91b463fc044104ef.zip |
PRD: Register caching issue with maint errors during fetch handling
Change-Id: I33cbf7aa85da950f4b6ab1a9fd60b27d5a0c0a81
Backport: release-fips840
CQ: SW333542
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/24280
Tested-by: Jenkins Server
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/24330
Tested-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/24747
Reviewed-by: WILLIAM G. HOFFA <wghoffa@us.ibm.com>
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/Mba.rule | 10 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule | 39 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C | 61 |
3 files changed, 107 insertions, 3 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule index 87d9b4c85..e072aefe5 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2012,2015 +# Contributors Listed Below - COPYRIGHT 2012,2016 # [+] International Business Machines Corp. # # @@ -238,6 +238,7 @@ chip Mba mask (|, 0x03010614); capture group FirRegs; capture group MemChipletRegs; + capture group MaintCmdRegs; }; register MBASPA_AND @@ -254,6 +255,7 @@ chip Mba scomaddr 0x03010614; capture group FirRegs; capture group MemChipletRegs; + capture group MaintCmdRegs; }; ############################################################################ @@ -317,6 +319,7 @@ chip Mba name "MBA Maintenance Command Type Register"; scomaddr 0x0301060A; capture group default; + capture group MaintCmdRegs; }; # NOTE: PRD doesn't use MBMCC directly and the bits are cleared by HW so I @@ -327,6 +330,7 @@ chip Mba name "MBA Maintenance Command Status Register"; scomaddr 0x0301060C; capture group default; + capture group MaintCmdRegs; }; register MBMACA @@ -334,6 +338,7 @@ chip Mba name "MBA Maintenance Command Start Address Register"; scomaddr 0x0301060D; capture group default; + capture group MaintCmdRegs; }; register MBMEA @@ -341,6 +346,7 @@ chip Mba name "MBA Maintenance Command End Address Register"; scomaddr 0x0301060E; capture group default; + capture group MaintCmdRegs; }; register MBASCTL @@ -348,6 +354,7 @@ chip Mba name "MBA Memory Scrub/Read Control Register"; scomaddr 0x0301060F; capture group default; + capture group MaintCmdRegs; }; register MBAECTL @@ -355,6 +362,7 @@ chip Mba name "MBA Error Control Register"; scomaddr 0x03010610; capture group default; + capture group MaintCmdRegs; }; }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule index 3c5862534..cefff3c11 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2012,2014 +# Contributors Listed Below - COPYRIGHT 2012,2016 # [+] International Business Machines Corp. # # @@ -255,6 +255,7 @@ mask (|, 0x02011445); capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSECCFIR_AND @@ -271,6 +272,7 @@ scomaddr 0x02011443; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSECCFIR_MASK_AND @@ -296,6 +298,7 @@ capture type secondary; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba0; capture req nonzero("MBA0_MBSECCFIR"); }; @@ -306,6 +309,7 @@ capture type secondary; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba0; capture req nonzero("MBA0_MBSECCFIR"); }; @@ -321,6 +325,7 @@ mask (|, 0x02011485); capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSECCFIR_AND @@ -337,6 +342,7 @@ scomaddr 0x02011483; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSECCFIR_MASK_AND @@ -362,6 +368,7 @@ capture type secondary; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba1; capture req nonzero("MBA1_MBSECCFIR"); }; @@ -372,6 +379,7 @@ capture type secondary; capture group default; capture group FirRegs; + capture group MaintCmdRegs_mba1; capture req nonzero("MBA1_MBSECCFIR"); }; @@ -572,6 +580,7 @@ scomaddr 0x02011466; capture group default; capture group CerrRegs; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSECCERRPT_1 @@ -580,13 +589,16 @@ scomaddr 0x02011467; capture group default; capture group CerrRegs; + capture group MaintCmdRegs_mba0; }; + register MBA1_MBSECCERRPT_0 { name "MBU.MBS.ECC23.MBSECCERR0"; scomaddr 0x020114A6; capture group default; capture group CerrRegs; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSECCERRPT_1 @@ -595,6 +607,7 @@ scomaddr 0x020114A7; capture group default; capture group CerrRegs; + capture group MaintCmdRegs_mba1; }; register MBA0_MBXERRSTAT @@ -690,6 +703,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSEC0Q"; scomaddr 0x02011653; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSEC1 @@ -697,6 +711,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSEC1Q"; scomaddr 0x02011654; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA1_MBSEC0 @@ -704,6 +719,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSEC0Q"; scomaddr 0x02011753; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSEC1 @@ -711,6 +727,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSEC1Q"; scomaddr 0x02011754; capture group default; + capture group MaintCmdRegs_mba1; }; ############################################################################ @@ -722,6 +739,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSTRQ"; scomaddr 0x02011655; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA1_MBSTR @@ -729,6 +747,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSTRQ"; scomaddr 0x02011755; capture group default; + capture group MaintCmdRegs_mba1; }; ############################################################################ @@ -740,6 +759,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC0Q"; scomaddr 0x02011656; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC1 @@ -747,6 +767,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC1Q"; scomaddr 0x02011657; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC2 @@ -754,6 +775,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC2Q"; scomaddr 0x02011658; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC3 @@ -761,6 +783,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC3Q"; scomaddr 0x02011659; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC4 @@ -768,6 +791,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC4Q"; scomaddr 0x0201165a; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC5 @@ -775,6 +799,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC5Q"; scomaddr 0x0201165b; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC6 @@ -782,6 +807,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC6Q"; scomaddr 0x0201165c; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC7 @@ -789,6 +815,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC7Q"; scomaddr 0x0201165d; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA0_MBSSYMEC8 @@ -796,6 +823,7 @@ name "MBU.MBS.MCBISTS01.SCOMFIR.MBSSYMEC8Q"; scomaddr 0x0201165e; capture group default; + capture group MaintCmdRegs_mba0; }; register MBA1_MBSSYMEC0 @@ -803,6 +831,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC0Q"; scomaddr 0x02011756; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC1 @@ -810,6 +839,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC1Q"; scomaddr 0x02011757; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC2 @@ -817,6 +847,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC2Q"; scomaddr 0x02011758; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC3 @@ -824,6 +855,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC3Q"; scomaddr 0x02011759; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC4 @@ -831,6 +863,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC4Q"; scomaddr 0x0201175a; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC5 @@ -838,6 +871,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC5Q"; scomaddr 0x0201175b; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC6 @@ -845,6 +879,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC6Q"; scomaddr 0x0201175c; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC7 @@ -852,6 +887,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC7Q"; scomaddr 0x0201175d; capture group default; + capture group MaintCmdRegs_mba1; }; register MBA1_MBSSYMEC8 @@ -859,6 +895,7 @@ name "MBU.MBS.MCBISTS23.SCOMFIR.MBSSYMEC8Q"; scomaddr 0x0201175e; capture group default; + capture group MaintCmdRegs_mba1; }; ############################################################################ diff --git a/src/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C b/src/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C index e69a128b1..ddf02b414 100755 --- a/src/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C +++ b/src/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2015 */ +/* Contributors Listed Below - COPYRIGHT 2014,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -32,6 +32,7 @@ #include <prdfExtensibleChip.H> #include <prdfPlatServices.H> #include <UtilHash.H> +#include <prdfRegisterCache.H> #ifndef __HOSTBOOT_RUNTIME #include <prdfSdcFileControl.H> @@ -248,6 +249,64 @@ int32_t CenMbaTdCtlr::handleTdEvent( STEP_CODE_DATA_STRUCT & io_sc, } } + // Since we had to manually stop the maintenance command we should + // refresh all relevant registers that may have changed state. + + RegDataCache & cache = RegDataCache::getCachedRegisters(); + + const char * membRegs[2][18] = + { + { "MBA0_MBSECCFIR", "MBA0_MBSECCFIR_MASK", + "MBA0_MBSECCFIR_ACT0", "MBA0_MBSECCFIR_ACT1", + "MBA0_MBSECCERRPT_0","MBA0_MBSECCERRPT_1", + "MBA0_MBSEC0", "MBA0_MBSEC1", "MBA0_MBSTR", + "MBA0_MBSSYMEC0", "MBA0_MBSSYMEC1", "MBA0_MBSSYMEC2", + "MBA0_MBSSYMEC3", "MBA0_MBSSYMEC4", "MBA0_MBSSYMEC5", + "MBA0_MBSSYMEC6", "MBA0_MBSSYMEC7", "MBA0_MBSSYMEC8", }, + { "MBA1_MBSECCFIR", "MBA1_MBSECCFIR_MASK", + "MBA1_MBSECCFIR_ACT0", "MBA1_MBSECCFIR_ACT1", + "MBA1_MBSECCERRPT_0","MBA1_MBSECCERRPT_1", + "MBA1_MBSEC0", "MBA1_MBSEC1", "MBA1_MBSTR", + "MBA1_MBSSYMEC0", "MBA1_MBSSYMEC1", "MBA1_MBSSYMEC2", + "MBA1_MBSSYMEC3", "MBA1_MBSSYMEC4", "MBA1_MBSSYMEC5", + "MBA1_MBSSYMEC6", "MBA1_MBSSYMEC7", "MBA1_MBSSYMEC8", }, + }; + for ( uint32_t i = 0; i < 18; i++ ) + { + SCAN_COMM_REGISTER_CLASS * reg + = iv_membChip->getRegister( membRegs[iv_mbaPos][i] ); + cache.flush( iv_membChip, reg ); + } + + const char * mbaRegs[8] = + { + "MBASPA", "MBASPA_MASK", "MBMCT", "MBMSR", "MBMACA", "MBMEA", + "MBASCTL", "MBAECTL", + }; + for ( uint32_t i = 0; i < 8; i++ ) + { + SCAN_COMM_REGISTER_CLASS * reg + = iv_mbaChip->getRegister( mbaRegs[i] ); + cache.flush( iv_mbaChip, reg ); + } + + // Now recapture those registers. + + CaptureData & cd = io_sc.service_data->GetCaptureData(); + + if ( 0 == iv_mbaPos ) + { + iv_membChip->CaptureErrorData(cd, + Util::hashString("MaintCmdRegs_mba0") ); + } + else + { + iv_membChip->CaptureErrorData(cd, + Util::hashString("MaintCmdRegs_mba1") ); + } + + iv_mbaChip->CaptureErrorData(cd, Util::hashString("MaintCmdRegs")); + // Start the next diagnostics procedure. It is possible that background // scrub could have found an ECC error before we had a chance to stop // the command. Therefore, we need to call analyzeCmdComplete() instead |