diff options
author | Bill Hoffa <wghoffa@us.ibm.com> | 2015-10-15 13:59:58 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-03-30 16:24:17 -0400 |
commit | 6b5097872a33a20d4c03f995ca8f1585b9e43e53 (patch) | |
tree | b97d48402b8e54b14d1ce554191bbeb78890d09c /src/include/kernel | |
parent | 550f30129f455317e65610cd90e9d06b2018e4c1 (diff) | |
download | talos-hostboot-6b5097872a33a20d4c03f995ca8f1585b9e43e53.tar.gz talos-hostboot-6b5097872a33a20d4c03f995ca8f1585b9e43e53.zip |
P9 PSIHB Base Interrupt Support
This change includes the following:
- Kernel Updates to handle hypervisor interrupt vector
- Interrupt Resource Provider changes to setup and handle
LSI Based interrupts
- Kernel updates to handle modified interrupt flow for
LSI Based interrupts
- Attribute updates for Scom BAR Registers
Change-Id: If63f246a0090ab8c81c3fa8ac3ab6871a0af2e31
RTC:137561
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/20692
Tested-by: Jenkins Server
Tested-by: FSP CI Jenkins
Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include/kernel')
-rw-r--r-- | src/include/kernel/cpumgr.H | 5 | ||||
-rw-r--r-- | src/include/kernel/intmsghandler.H | 26 |
2 files changed, 17 insertions, 14 deletions
diff --git a/src/include/kernel/cpumgr.H b/src/include/kernel/cpumgr.H index 30009da73..25bb794bf 100644 --- a/src/include/kernel/cpumgr.H +++ b/src/include/kernel/cpumgr.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2010,2015 */ +/* Contributors Listed Below - COPYRIGHT 2010,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -170,8 +170,9 @@ class CpuManager * bit 51 - Wake-up from machine check. * bit 60 - LPES(0) = 1 (see ISA). * bit 61 - LPES(1) = 0 (P8 RFC02204 forces to 0) + * bit 62 - HVICE - Hypervisor Virt Interrupt Conditionally Enable */ - static const uint64_t WAKEUP_LPCR_VALUE = 0x0000000000007008; + static const uint64_t WAKEUP_LPCR_VALUE = 0x000000000000700A; /** Desired value for RPR after wakeup. * diff --git a/src/include/kernel/intmsghandler.H b/src/include/kernel/intmsghandler.H index 98d8d5288..8fd4e34b6 100644 --- a/src/include/kernel/intmsghandler.H +++ b/src/include/kernel/intmsghandler.H @@ -46,6 +46,7 @@ class InterruptMsgHdlr : public MessageHandler public: /** + * TODO RTC 150260 * Field values for P8 * @note This is used to calculate the mmio address offset * from the PIR for the interrupt presenter memory mapped registers. @@ -56,19 +57,20 @@ class InterruptMsgHdlr : public MessageHandler */ enum { - P8_PIR_THREADID_MSK = PIR_t::THREAD_MASK, - P8_PIR_COREID_MSK = PIR_t::CORE_MASK, - P8_PIR_CHIPID_MSK = PIR_t::CHIP_MASK, - P8_PIR_NODEID_MSK = PIR_t::GROUP_MASK, + P9_PIR_THREADID_MSK = PIR_t::THREAD_MASK, + P9_PIR_COREID_MSK = PIR_t::CORE_MASK, + P9_PIR_CHIPID_MSK = PIR_t::CHIP_MASK, + P9_PIR_NODEID_MSK = PIR_t::GROUP_MASK, // Logical Shift Left fields for mmio Base address from PIR. // (IP addr bit pos - PIR bit pos) - P8_IP_THREADID_LSL = (12-PIR_t::BITS_AFTER_CORE), - P8_IP_COREID_LSL = (15-PIR_t::BITS_AFTER_CORE), - P8_IP_CHIPID_LSL = (20-PIR_t::BITS_AFTER_CHIP), - P8_IP_NODEID_LSL = (22-PIR_t::BITS_AFTER_GROUP), + P9_IP_THREADID_LSL = (12-PIR_t::BITS_AFTER_CORE), + P9_IP_COREID_LSL = (15-PIR_t::BITS_AFTER_CORE), + P9_IP_CHIPID_LSL = (20-PIR_t::BITS_AFTER_CHIP), + P9_IP_NODEID_LSL = (22-PIR_t::BITS_AFTER_GROUP), XIRR_ADDR_OFFSET = 4, MFRR_ADDR_OFFSET = 12, + ACK_HYPERVISOR_INT_REG_OFFSET = 0x830, INTP_BAR_VALUE = 0xFFFFE000, // upper 32 bits of IPCBAR @@ -109,16 +111,16 @@ class InterruptMsgHdlr : public MessageHandler // The PIR chip id field has 1 extra bit (8 chips), so we need // to shift the node and chip separately offset |= - (i_pir & P8_PIR_NODEID_MSK) << P8_IP_NODEID_LSL; + (i_pir & P9_PIR_NODEID_MSK) << P9_IP_NODEID_LSL; offset |= - (i_pir & P8_PIR_CHIPID_MSK) << P8_IP_CHIPID_LSL; + (i_pir & P9_PIR_CHIPID_MSK) << P9_IP_CHIPID_LSL; // The core and thread id field are adjacent in both the PIR and // the mmio offset, so they can be done in one shift operation. offset |= - (i_pir & (P8_PIR_COREID_MSK | P8_PIR_THREADID_MSK)) - << P8_IP_THREADID_LSL; + (i_pir & (P9_PIR_COREID_MSK | P9_PIR_THREADID_MSK)) + << P9_IP_THREADID_LSL; return offset; } |