summaryrefslogtreecommitdiffstats
path: root/src/usr/xscom/xscom.C
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2013-03-22 10:45:46 -0500
committerDean Sanner <dsanner@us.ibm.com>2013-03-22 12:55:37 -0500
commitd040645c9edcae9317160c0aa12474d6b261ba87 (patch)
tree29649ac03ed5004f49f0717624ac249faf10cd09 /src/usr/xscom/xscom.C
parent51d6d869221edb7c07cdfba8e7fa5771471d1350 (diff)
downloadtalos-hostboot-d040645c9edcae9317160c0aa12474d6b261ba87.tar.gz
talos-hostboot-d040645c9edcae9317160c0aa12474d6b261ba87.zip
Workaround for SW192221 - simics multicast
Working around a simics limitation with multicast scoms by ignoring xscom errors that happen on multicast ops to group 7. The workaround will be removed with RTC:67295. Change-Id: Ide8191bec31284b09554e526349b0db7b92929f2 RTC: 67285 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3694 Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Diffstat (limited to 'src/usr/xscom/xscom.C')
-rw-r--r--src/usr/xscom/xscom.C33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/usr/xscom/xscom.C b/src/usr/xscom/xscom.C
index 59c65ad20..255b55167 100644
--- a/src/usr/xscom/xscom.C
+++ b/src/usr/xscom/xscom.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
/* */
/* p1 */
/* */
@@ -43,6 +43,8 @@
#include "xscom.H"
#include <assert.h>
+//@fixme-RTC:67295 Only log the error once
+bool MULTICAST_ERROR_LOGGED_ONCE = false;
// Trace definition
trace_desc_t* g_trac_xscom = NULL;
@@ -431,7 +433,7 @@ errlHndl_t xscomPerformOp(DeviceFW::OperationType i_opType,
{
errlHndl_t l_err = NULL;
HMER l_hmer;
- mutex_t* l_XSComMutex;
+ mutex_t* l_XSComMutex = NULL;
uint64_t l_addr = va_arg(i_args,uint64_t);
// Retry loop
@@ -522,7 +524,8 @@ errlHndl_t xscomPerformOp(DeviceFW::OperationType i_opType,
if (i_opType == DeviceFW::READ)
{
- TRACDCOMP(g_trac_xscom, "xscomPerformOp: Read data: %.16llx", l_data); }
+ TRACDCOMP(g_trac_xscom, "xscomPerformOp: Read data: %.16llx", l_data);
+ }
else
{
TRACDCOMP(g_trac_xscom, "xscomPerformOp: Write data: %.16llx", l_data);
@@ -531,9 +534,26 @@ errlHndl_t xscomPerformOp(DeviceFW::OperationType i_opType,
// Handle error
if (l_hmer.mXSComStatus != HMER::XSCOM_GOOD)
{
+ //@fixme-RTC:67295 remove these hacks, make log UNRECOVERABLE again
+ if( ((l_addr & 0xFF000000) == 0x57000000)
+ && (l_hmer.mXSComStatus == HMER::XSCOM_BAD_ADDRESS) )
+ {
+ if( MULTICAST_ERROR_LOGGED_ONCE )
+ {
+ // Ignore this due to a Simics issue - see SW193003
+ TRACFCOMP(g_trac_xscom,
+ ERR_MRK "Skipping XSCOM errorlog for multicast error for addr=%llx",
+ l_addr );
+ io_buflen = XSCOM_BUFFER_SIZE;
+ break;
+ }
+ MULTICAST_ERROR_LOGGED_ONCE = true;
+ }
+
uint64_t l_hmerVal = l_hmer;
- TRACFCOMP(g_trac_xscom, ERR_MRK "XSCOM status error HMER: %.16llx, XSComStatus %llx",
- l_hmerVal, l_hmer.mXSComStatus);
+ TRACFCOMP(g_trac_xscom,
+ ERR_MRK "XSCOM status error HMER: %.16llx, XSComStatus %llx, Addr=%llx",
+ l_hmerVal, l_hmer.mXSComStatus, l_addr );
/*@
* @errortype
* @moduleid XSCOM_PERFORM_OP
@@ -542,11 +562,12 @@ errlHndl_t xscomPerformOp(DeviceFW::OperationType i_opType,
* @userdata2 XSCom address
* @devdesc XSCom access error
*/
- l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_INFORMATIONAL,
XSCOM_PERFORM_OP,
XSCOM_STATUS_ERR,
l_hmer,
l_mmioAddr);
+
// @todo - Collect more FFDC: HMER value, target ID, other registers?
OpenPOWER on IntegriCloud