summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2013-07-29 15:26:05 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-07-30 12:40:18 -0500
commitf68322ccb2aaf92486f1af352deff3987011e8c7 (patch)
tree8b7ce2c0a1e43067e8e3e54a0a246246c8753bb9 /src/usr
parent7d14c1e4d4297c8537d4c003fe8d7130ae490169 (diff)
downloadtalos-hostboot-f68322ccb2aaf92486f1af352deff3987011e8c7.tar.gz
talos-hostboot-f68322ccb2aaf92486f1af352deff3987011e8c7.zip
HOSTBOOT - Add workaround for Centaur SBE Repair Loader failure
SW212513 Change-Id: Ic459656aa6c650938bedd63ada72559efeae0ef8 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5626 Tested-by: Jenkins Server Reviewed-by: Brian H. Horton <brianh@linux.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C60
-rw-r--r--src/usr/pore/makefile2
-rw-r--r--src/usr/pore/poreve/porevesrc/pib2cfam.C7
-rw-r--r--src/usr/pore/poreve/porevesrc/pib2cfam.H9
4 files changed, 68 insertions, 10 deletions
diff --git a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
index a53edab9a..c509a9258 100644
--- a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
+++ b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
@@ -58,11 +58,15 @@
extern fapi::ReturnCode fapiPoreVe(const fapi::Target i_target,
std::list<uint64_t> & io_sharedObjectArgs);
+const uint64_t REPAIR_LOADER_RETRY_CTR_MASK = 0x000007FC00000000ull;
// Constants
// Memory Relocation Register for Centaur SBE image
const uint64_t CENTAUR_SBE_PNOR_MRR = 0;
+// Max SBE image buffer size
+const uint32_t MAX_SBE_IMG_SIZE = 48 * 1024;
+
namespace SBE_CENTAUR_INIT
{
@@ -154,9 +158,11 @@ void* call_sbe_centaur_init( void *io_pArgs )
const fapi::Target l_fapiTarget( fapi::TARGET_TYPE_MEMBUF_CHIP,
(const_cast<TARGETING::Target*>(l_membuf_target)));
- const uint32_t l_customizedMaxSize = 32 * 1024;
- const uint32_t l_buf1Size = 32 * 1024;
- const uint32_t l_buf2Size = 32 * 1024;
+ // Expand buffer for new image size
+ const uint32_t l_customizedMaxSize = MAX_SBE_IMG_SIZE;
+ const uint32_t l_buf1Size = MAX_SBE_IMG_SIZE;
+ const uint32_t l_buf2Size = MAX_SBE_IMG_SIZE;
+
uint32_t l_customizedSize = l_customizedMaxSize;
char * l_pCustomizedImage = (char *)malloc(l_customizedMaxSize);
void * l_pBuf1 = malloc(l_buf1Size);
@@ -227,6 +233,54 @@ void* call_sbe_centaur_init( void *io_pArgs )
"ERROR 0x%.8X call_sbe_centaur_init - Error returned from"
" VSBE engine on this Centaur, l_rc 0x%llX",
l_errl->reasonCode());
+ l_errl->collectTrace(FAPI_IMP_TRACE_NAME, 1024);
+ l_errl->collectTrace("ISTEPS_TRACE", 512);
+ }
+
+ // Log informational error if we retried the Repair Loader
+ errlHndl_t l_tempErrl = NULL;
+ ecmdDataBufferBase l_dataBuffer(64);
+ fapi::ReturnCode l_rc = fapiGetScom(l_fapiTarget, 0x0104000A,
+ l_dataBuffer);
+ if (!l_rc.ok())
+ {
+ FAPI_ERR("ERROR in call_sbe_centaur_init - target %.8X "
+ "Scom error reading Repair Loader retry counter 0x0104000A",
+ TARGETING::get_huid(l_membuf_target));
+ l_tempErrl = fapi::fapiRcToErrl(l_rc);
+ l_tempErrl->setSev(ERRL_SEV_INFORMATIONAL);
+ errlCommit( l_tempErrl, HWPF_COMP_ID );
+ }
+ else
+ {
+ // If the counter !=0, log an informational error
+ uint64_t l_counter = l_dataBuffer.getDoubleWord(0);
+ FAPI_INF("Target 0x%.8X - RepairLoader Reg_0x0104000A %.16llX",
+ TARGETING::get_huid(l_membuf_target), l_counter);
+
+ if (l_counter & REPAIR_LOADER_RETRY_CTR_MASK)
+ {
+ FAPI_ERR("ERROR in call_sbe_centaur_init - target %.8X "
+ "Repair Loader retry occured, "
+ "RepairLoader Reg_0x0104000A %.16llX",
+ TARGETING::get_huid(l_membuf_target), l_counter);
+
+ /*@
+ * @errortype
+ * @moduleid ISTEP_SBE_CENTAUR_INIT
+ * @reasoncode ISTEP_REPAIR_LOADER_RETRY_OCCURED
+ * @userdata1 Register 0x0104000A
+ * @userdata2 Membuf target
+ * @devdesc Repair Loader error, retry was performed
+ */
+ l_tempErrl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ ISTEP_SBE_CENTAUR_INIT,
+ ISTEP_REPAIR_LOADER_RETRY_OCCURED,
+ l_counter,
+ TARGETING::get_huid(l_membuf_target));
+ errlCommit( l_tempErrl, HWPF_COMP_ID );
+ }
}
}
diff --git a/src/usr/pore/makefile b/src/usr/pore/makefile
index 3f4a10460..35a9b805f 100644
--- a/src/usr/pore/makefile
+++ b/src/usr/pore/makefile
@@ -23,5 +23,5 @@
ROOTPATH = ../../..
SUBDIRS = fapiporeve.d poreve.d test.d
-BINARY_FILES = $(IMGDIR)/centaur.sbe_pnor.bin:08498a624168c7b2aecb423fca8bd2361ec5e9e2
+BINARY_FILES = $(IMGDIR)/centaur.sbe_pnor.bin:97621f98ecec1ee446086712534755998fc59ee5
include ${ROOTPATH}/config.mk
diff --git a/src/usr/pore/poreve/porevesrc/pib2cfam.C b/src/usr/pore/poreve/porevesrc/pib2cfam.C
index 689c456b7..3c9171ccf 100644
--- a/src/usr/pore/poreve/porevesrc/pib2cfam.C
+++ b/src/usr/pore/poreve/porevesrc/pib2cfam.C
@@ -21,7 +21,7 @@
/* */
/* IBM_PROLOG_END_TAG */
// -*- mode: C++; c-file-style: "linux"; -*-
-// $Id: pib2cfam.C,v 1.14 2013/01/11 15:54:22 thi Exp $
+// $Id: pib2cfam.C,v 1.15 2013/06/24 14:51:53 jeshua Exp $
/// \file pib2cfam.C
/// \brief A simple PibSlave that maps a small range of PIB addresses to CFAM
@@ -79,7 +79,8 @@ Pib2Cfam::operation(Transaction& io_transaction)
case ACCESS_MODE_READ:
switch (io_transaction.iv_address) {
- case 0x00050007:
+ case 0x00050006:
+ case 0x00050007:
case 0x00050012:
case 0x00050013:
case 0x00050014:
@@ -110,6 +111,8 @@ Pib2Cfam::operation(Transaction& io_transaction)
switch (io_transaction.iv_address) {
+ case 0x00050006:
+ case 0x00050007:
case 0x00050012:
case 0x00050013:
case 0x00050014:
diff --git a/src/usr/pore/poreve/porevesrc/pib2cfam.H b/src/usr/pore/poreve/porevesrc/pib2cfam.H
index 2220323c8..0f55cc4c9 100644
--- a/src/usr/pore/poreve/porevesrc/pib2cfam.H
+++ b/src/usr/pore/poreve/porevesrc/pib2cfam.H
@@ -23,7 +23,7 @@
#ifndef __VSBE_PIB2CFAM_H
#define __VSBE_PIB2CFAM_H
-// $Id: pib2cfam.H,v 1.4 2013/01/11 15:53:49 thi Exp $
+// $Id: pib2cfam.H,v 1.6 2013/07/30 15:15:30 jeshua Exp $
/// \file pib2cfam.H
/// \brief A temporary hack while waiting for hardware updates - a simple
@@ -36,10 +36,10 @@ namespace vsbe {
class Pib2Cfam;
/// PIB base address of PIB range mapped by Pib2Cfam
- const uint32_t PIB2CFAM_PIB_BASE = 0x00050007;
+ const uint32_t PIB2CFAM_PIB_BASE = 0x00050006;
/// Number of PIB addresses mapped by Pib2Cfam
- const int PIB2CFAM_PIB_SIZE = ((0x0005001b - 0x00050007) + 1);
+ const int PIB2CFAM_PIB_SIZE = ((0x0005001b - 0x00050006) + 1);
}
@@ -69,7 +69,8 @@ public:
///
/// The following PIB registers are mapped to CFAM registers:
///
- /// - PIB 0x00050007 -> CFAM 0x1007, FSI2PIB.STATUS, R
+ /// - PIB 0x00050006 -> CFAM 0x1006, FSI2PIB Reset, W
+ /// - PIB 0x00050007 -> CFAM 0x1007, FSI2PIB STATUS (R), PIB RESET (W)
/// - PIB 0x00050012 -> CFAM 0x1012, FSIGP3, R/W
/// - PIB 0x00050013 -> CFAM 0x1013, FSIGP4, R/W
/// - PIB 0x00050014 -> CFAM 0x1014, FSIGP5, R/W
OpenPOWER on IntegriCloud