summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorAdam Muhle <armuhle@us.ibm.com>2013-01-23 08:53:04 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-02-04 13:24:10 -0600
commit6ba9a7790919fc430ddf1539579fdb4e9e7bba0d (patch)
tree488d0567844c4904110873531d833a0c5398fb33 /src/kernel
parent68286500750647b14ec5cbbe0253bafef2fdf341 (diff)
downloadtalos-hostboot-6ba9a7790919fc430ddf1539579fdb4e9e7bba0d.tar.gz
talos-hostboot-6ba9a7790919fc430ddf1539579fdb4e9e7bba0d.zip
Triggering Hostboot Shutdown when PNOR is bad
Updating the doShutdown path to support receiving a reason code as input. Then changing PNOR RP to issue a shutdown when problems are detected with the PNOR Partition table. RTC: 44146 Change-Id: Ib4111d0a91f53d90fa100422a1463539897598e6 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3024 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/cpumgr.C16
-rw-r--r--src/kernel/terminate.C4
2 files changed, 15 insertions, 5 deletions
diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C
index 6e6b59860..954232b2d 100644
--- a/src/kernel/cpumgr.C
+++ b/src/kernel/cpumgr.C
@@ -111,11 +111,21 @@ void CpuManager::requestShutdown(uint64_t i_status)
cv_shutdown_requested = true;
// If the shutdown was not called with a Good shutdown status
- // then we know we are shutting down due to error and the
- // status passed back is instead a PLID
+ // then we know we are shutting down due to error. We need to
+ // figure out if the error provided is a PLID or reasoncode
+ // and write it appropriately.
+ // Hostboot PLIDs always start with 0x9 (32-bit)
+ static const uint64_t PLID_MASK = 0x0000000090000000;
if (i_status != SHUTDOWN_STATUS_GOOD)
{
- termWritePlid(TI_SHUTDOWN, i_status);
+ if ((i_status & 0x00000000F0000000) == PLID_MASK)
+ {
+ termWritePlid(TI_SHUTDOWN, i_status);
+ }
+ else
+ {
+ termWriteSRC(TI_SHUTDOWN,i_status, 0);
+ }
printk("TI initiated on all threads (shutdown)\n");
}
diff --git a/src/kernel/terminate.C b/src/kernel/terminate.C
index 10daec717..2c103c5af 100644
--- a/src/kernel/terminate.C
+++ b/src/kernel/terminate.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2013 */
/* */
/* p1 */
/* */
@@ -64,7 +64,7 @@ void termWriteSRC(uint16_t i_source, uint16_t i_reasoncode,uint64_t i_failAddr)
kernel_TIDataArea.src.ID = 0xBC;
kernel_TIDataArea.src.subsystem = 0x11;
kernel_TIDataArea.src.reasoncode = i_reasoncode;
- kernel_TIDataArea.src.moduleID = MOD_KERNEL_TERMINATE;
+ kernel_TIDataArea.src.moduleID = 0;
kernel_TIDataArea.src.iType = TI_WITH_SRC;
// Update User Data with address of fail location
OpenPOWER on IntegriCloud