summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2016-02-12 15:04:35 -0600
committerWILLIAM G. HOFFA <wghoffa@us.ibm.com>2016-02-26 08:05:15 -0600
commitdaa819f2819cd8caf7c409bf91b463fc044104ef (patch)
treed5c1a9a72d4e099f7b59318b1b693d4ecded6f90 /src
parente0d4f2d86a6c40216b6aa219f5e9db3023b9510c (diff)
downloadtalos-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>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Mba.rule10
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule39
-rwxr-xr-xsrc/usr/diag/prdf/common/runtime/prdfCenMbaTdCtlr_rt.C61
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
OpenPOWER on IntegriCloud