diff options
author | Adam Muhle <armuhle@us.ibm.com> | 2013-01-23 08:53:04 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-02-04 13:24:10 -0600 |
commit | 6ba9a7790919fc430ddf1539579fdb4e9e7bba0d (patch) | |
tree | 488d0567844c4904110873531d833a0c5398fb33 /src/kernel | |
parent | 68286500750647b14ec5cbbe0253bafef2fdf341 (diff) | |
download | talos-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.C | 16 | ||||
-rw-r--r-- | src/kernel/terminate.C | 4 |
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 |