summaryrefslogtreecommitdiffstats
path: root/src/usr/fsi
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2013-06-21 14:23:41 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-06-21 15:07:15 -0500
commit2e62fb5c5819c9b549dd6c073d63f6e194f3867a (patch)
treec10ef134e3773458810ce739589a7b0c48a59033 /src/usr/fsi
parent8e8cfddb36f162dcf3e2ed4e25bde12c4fce7601 (diff)
downloadtalos-hostboot-2e62fb5c5819c9b549dd6c073d63f6e194f3867a.tar.gz
talos-hostboot-2e62fb5c5819c9b549dd6c073d63f6e194f3867a.zip
Clear OPB Errors before starting FSI Init
Some systems seem to power on with OPB Overrun errors. Added code to clear out the OPB status regs before doing anything else. Change-Id: I583fcb0964a7754f3fb6c558d528cbacc1e50714 CQ: SW210986 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5136 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/fsi')
-rw-r--r--src/usr/fsi/fsidd.C61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/usr/fsi/fsidd.C b/src/usr/fsi/fsidd.C
index feb733786..85eeb267a 100644
--- a/src/usr/fsi/fsidd.C
+++ b/src/usr/fsi/fsidd.C
@@ -1595,6 +1595,67 @@ errlHndl_t FsiDD::initMasterControl(TARGETING::Target* i_master,
ctl_reg += getPortOffset(TARGETING::FSI_MASTER_TYPE_MFSI,m_info.port);
}
+ //Always clear out any pending errors before we start anything
+ uint32_t scom_data[2] = {};
+ size_t scom_size = sizeof(scom_data);
+
+ for( uint64_t scomaddr = 0x00020000;
+ scomaddr <= 0x0002000A;
+ ++scomaddr )
+ {
+ if( (scomaddr == 0x00020003)
+ || (scomaddr == 0x00020004) )
+ {
+ continue;
+ }
+
+ scom_size = sizeof(scom_data);
+ l_err = deviceOp( DeviceFW::READ,
+ iv_master,
+ scom_data,
+ scom_size,
+ DEVICE_XSCOM_ADDRESS(scomaddr) );
+ if( l_err ) { break; }
+
+ TRACFCOMP( g_trac_fsi,
+ "Scom %0.8X = %0.8X %0.8X",
+ scomaddr,
+ scom_data[0],
+ scom_data[1] );
+ }
+ if( l_err ) { break; }
+
+ scom_data[0] = 0; scom_data[1] = 0;
+ scom_size = sizeof(scom_data);
+ l_err = deviceOp( DeviceFW::WRITE,
+ iv_master,
+ scom_data,
+ scom_size,
+ DEVICE_XSCOM_ADDRESS(FSI2OPB_OFFSET_0|OPB_REG_RES) );
+ if( l_err ) { break; }
+
+ scom_data[0] = 0; scom_data[1] = 0;
+ scom_size = sizeof(scom_data);
+ l_err = deviceOp( DeviceFW::WRITE,
+ iv_master,
+ scom_data,
+ scom_size,
+ DEVICE_XSCOM_ADDRESS(FSI2OPB_OFFSET_0|OPB_REG_STAT) );
+ if( l_err ) { break; }
+
+ scom_size = sizeof(scom_data);
+ l_err = deviceOp( DeviceFW::READ,
+ iv_master,
+ scom_data,
+ scom_size,
+ DEVICE_XSCOM_ADDRESS(FSI2OPB_OFFSET_0|OPB_REG_STAT) );
+ if( l_err ) { break; }
+ TRACFCOMP(g_trac_fsi,"Scom %0.8X = %0.8X %0.8X",
+ FSI2OPB_OFFSET_0|OPB_REG_STAT,
+ scom_data[0],
+ scom_data[1]);
+
+
if( !fsp_master_init && !is_mpipl )
{
//Clear fsi port errors and general reset on all ports
OpenPOWER on IntegriCloud