diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2014-03-18 16:45:02 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-21 11:35:30 -0500 |
commit | cf9dc218eea42f99b283f8cf32fbb1371ebf4367 (patch) | |
tree | 196fd5b6a32ab4a68dc5bcd8898d8447594f166d /src/usr/fsi | |
parent | c857bac776d690c846af8076f280a1e2f66d7e16 (diff) | |
download | talos-hostboot-cf9dc218eea42f99b283f8cf32fbb1371ebf4367.tar.gz talos-hostboot-cf9dc218eea42f99b283f8cf32fbb1371ebf4367.zip |
Always use PIB2OPB-1 on proc1 in Brazos
If FSP-B is not installed, the PIB2OPB-0 logic has no clocks so
we get xscom errors if we attempt to access it. Until the full
B-port support is in place (see RTC: 35041) I have a hack to
get systems IPLing again.
Change-Id: Ia4c4b04e3041f5722ed1fae7526370de2a4bc9d8
CQ: SW252489
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9711
Tested-by: Jenkins Server
Reviewed-by: Michael Baiocchi <baiocchi@us.ibm.com>
Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/fsi')
-rw-r--r-- | src/usr/fsi/fsidd.C | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/usr/fsi/fsidd.C b/src/usr/fsi/fsidd.C index 30a611d64..9b51799af 100644 --- a/src/usr/fsi/fsidd.C +++ b/src/usr/fsi/fsidd.C @@ -826,11 +826,24 @@ errlHndl_t FsiDD::resetPib2Opb( TARGETING::Target* i_target ) errlHndl_t errhdl = NULL; do { + //@fixme -- RTC:35041 + //hack for Brazos when FSP-B is not installed + uint64_t opb_offset = FSI2OPB_OFFSET_0; + if( iv_master->getAttr<TARGETING::ATTR_MODEL>() + == TARGETING::MODEL_VENICE ) + { + // always use the B-port engine on proc1 + if( i_target->getAttr<TARGETING::ATTR_POSITION>() == 1 ) + { + opb_offset = FSI2OPB_OFFSET_1; + } + } + // Clear out OPB error uint64_t scom_data = 0; size_t scom_size = sizeof(scom_data); - uint64_t opbaddr = FSI2OPB_OFFSET_0 | OPB_REG_RES; + uint64_t opbaddr = opb_offset | OPB_REG_RES; scom_data = 0x8000000000000000; //0=Unit Reset errhdl = deviceOp( DeviceFW::WRITE, i_target, @@ -839,7 +852,7 @@ errlHndl_t FsiDD::resetPib2Opb( TARGETING::Target* i_target ) DEVICE_XSCOM_ADDRESS(opbaddr) ); if( errhdl ) { break; } - opbaddr = FSI2OPB_OFFSET_0 | OPB_REG_STAT; + opbaddr = opb_offset | OPB_REG_STAT; errhdl = deviceOp( DeviceFW::WRITE, i_target, &scom_data, @@ -848,7 +861,7 @@ errlHndl_t FsiDD::resetPib2Opb( TARGETING::Target* i_target ) if( errhdl ) { break; } // Check if we have any errors left - opbaddr = FSI2OPB_OFFSET_0 | OPB_REG_STAT; + opbaddr = opb_offset | OPB_REG_STAT; scom_data = 0; errhdl = deviceOp( DeviceFW::READ, i_target, |