diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2014-04-14 14:44:21 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-04-15 10:47:55 -0500 |
commit | 279d152e4d095884110de94e9510a8b7d86ced97 (patch) | |
tree | 81c9110fc66e08e655270122cb897b70ac2a5282 | |
parent | 791c705e31529a345e4e01eb10a6326990de4acb (diff) | |
download | talos-hostboot-279d152e4d095884110de94e9510a8b7d86ced97.tar.gz talos-hostboot-279d152e4d095884110de94e9510a8b7d86ced97.zip |
Fix FSI MRW Parsing
Missed a case where the alt-master chip was pointing to the
wrong master.
Change-Id: I0e8010c5adb871344a7d1fd11fefd7f7f152ec72
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10529
Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: Michael Baiocchi <baiocchi@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r-- | src/include/usr/fsi/fsi_reasoncodes.H | 4 | ||||
-rw-r--r-- | src/usr/fsi/fsidd.C | 34 | ||||
-rwxr-xr-x | src/usr/targeting/common/genHwsvMrwXml.pl | 4 |
3 files changed, 37 insertions, 5 deletions
diff --git a/src/include/usr/fsi/fsi_reasoncodes.H b/src/include/usr/fsi/fsi_reasoncodes.H index f8c7e3f2f..86e3bd746 100644 --- a/src/include/usr/fsi/fsi_reasoncodes.H +++ b/src/include/usr/fsi/fsi_reasoncodes.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ @@ -40,6 +40,7 @@ namespace FSI MOD_FSIDD_GENFULLFSIADDR = 0x09, /**< fsidd.C : FsiDD::genFullFsiAddr */ MOD_FSIDD_CHECKFORERRORS = 0x0A, /**< fsidd.C : FsiDD::checkForErrors */ MOD_FSIDD_VERIFYPRESENT = 0x0B, /**< fsidd.C : FsiDD::verifyPresent */ + MOD_FSIDD_INITIALIZEHARDWARE = 0x0C, /**< fsidd.C : FsiDD::initializeHardware */ MOD_FSIPRES_PROCPRESENCEDETECT = 0x20, /**< fsipres.C : procPresenceDetect */ MOD_FSIPRES_MEMBPRESENCEDETECT = 0x21, /**< fsipres.C : membPresenceDetect */ @@ -65,6 +66,7 @@ namespace FSI RC_FSI_MVPD_MISMATCH = FSI_COMP_ID | 0x0F, RC_FSI_CVPD_MISMATCH = FSI_COMP_ID | 0x10, RC_ERROR_IN_MAEB = FSI_COMP_ID | 0x11, + RC_BAD_ATTRIBUTES = FSI_COMP_ID | 0x12, }; enum UserDetailsTypes diff --git a/src/usr/fsi/fsidd.C b/src/usr/fsi/fsidd.C index 571daf448..f2af99d2e 100644 --- a/src/usr/fsi/fsidd.C +++ b/src/usr/fsi/fsidd.C @@ -498,14 +498,44 @@ errlHndl_t FsiDD::initializeHardware() else { FsiChipInfo_t info2 = getFsiInfo(info.master); - remote_cmfsi[info2.port][info.port].info = info; - remote_cmfsi[info2.port][info.port].targ = *t_itr; + if( info2.master == NULL ) + { + TRACFCOMP( g_trac_fsi, "Problem with attribute data for master %.8X for slave %.8X", TARGETING::get_huid(info.master), TARGETING::get_huid(*t_itr) ); + /*@ + * @errortype + * @moduleid FSI::MOD_FSIDD_INITIALIZEHARDWARE + * @reasoncode FSI::RC_BAD_ATTRIBUTES + * @userdata1[00:31] Slave HUID + * @userdata1[32:63] Slave FSI LinkId + * @userdata2[00:31] Master HUID + * @userdata2[32:63] Master FSI LinkId + * @devdesc FsiDD::initializeHardware> + * Unexpected attribute data for remote FSI link + */ + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + FSI::MOD_FSIDD_INITIALIZEHARDWARE, + FSI::RC_BAD_ATTRIBUTES, + TWO_UINT32_TO_UINT64( + TARGETING::get_huid(*t_itr), + info.linkid.id), + TWO_UINT32_TO_UINT64( + TARGETING::get_huid(info.master), + info2.linkid.id)); + break; + } + else + { + remote_cmfsi[info2.port][info.port].info = info; + remote_cmfsi[info2.port][info.port].targ = *t_itr; + } } } } ++t_itr; } + if( l_err ) { break; } // Cleanup any initial error states l_err = resetPib2Opb( iv_master ); diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl index 1665f43f2..3c297c302 100755 --- a/src/usr/targeting/common/genHwsvMrwXml.pl +++ b/src/usr/targeting/common/genHwsvMrwXml.pl @@ -1156,7 +1156,7 @@ for (my $do_core = 0, my $i = 0; $i <= $#STargets; $i++) { if (($Fsis[$j][FSI_TARGET_FIELD] eq "n${node}:p$proc") && ($Fsis[$j][FSI_TARGET_TYPE_FIELD] eq "pu") && - (lc($Fsis[$j][FSI_SLAVE_PORT_FIELD]) eq "fsi_slave0") && + (lc($Fsis[$j][FSI_MASTERPOS_FIELD]) eq "0") && (lc($Fsis[$j][FSI_TYPE_FIELD]) eq "hub master") ) { @fsi = @{@Fsis[$j]}; @@ -1169,7 +1169,7 @@ for (my $do_core = 0, my $i = 0; $i <= $#STargets; $i++) { if (($Fsis[$j][FSI_TARGET_FIELD] eq "n${node}:p$proc") && ($Fsis[$j][FSI_TARGET_TYPE_FIELD] eq "pu") && - (lc($Fsis[$j][FSI_SLAVE_PORT_FIELD]) eq "fsi_slave1") && + (lc($Fsis[$j][FSI_MASTERPOS_FIELD]) eq "1") && (lc($Fsis[$j][FSI_TYPE_FIELD]) eq "hub master") ) { @altfsi = @{@Fsis[$j]}; |