diff options
| author | Bill Hoffa <wghoffa@us.ibm.com> | 2016-01-13 14:06:31 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-05-06 11:03:22 -0400 |
| commit | b42194c6063f64d59fe1c360fa4ae4edd85ad2f3 (patch) | |
| tree | b055e27081164600409203f31c3eac93f32397cb /src/kernel/cpumgr.C | |
| parent | daf95f9b2b66313079186c2d8669ffa75155056f (diff) | |
| download | blackbird-hostboot-b42194c6063f64d59fe1c360fa4ae4edd85ad2f3.tar.gz blackbird-hostboot-b42194c6063f64d59fe1c360fa4ae4edd85ad2f3.zip | |
Doorbell Interrupt Base Support for Core/Thread Wakeup
This change includes:
- Implementation of a generic KernelWorkItem Class
- Kernel functionality for doorbell send to specific PIRs
- Kernel changes to send core/thread Wakeup doorbells using
doorbell_send() + placing KernelWorkItems on a cpu stack obj
to be executed during doorbell wakeup
- Kernel Interrupt Message handler changes to send wakeup msgs
- Interrupt Resource Provider (INTRRP) Changes to handle
wakeup msgs and monitor for timeouts
- Changes to the IPL flow to invoke proper Core/Thread Wakeup
- A basic outline (commented out) for how IPC messages can be
implemented in the future
Change-Id: I547fb8719bac657def561565ae11ab18cde72096
CMVC-Prereq: 992722
RTC:137564
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22815
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/kernel/cpumgr.C')
| -rw-r--r-- | src/kernel/cpumgr.C | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index 1aef65650..c1733bb7c 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2010,2015 */ +/* Contributors Listed Below - COPYRIGHT 2010,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -45,6 +45,7 @@ #include <kernel/hbterminatetypes.H> #include <kernel/kernel_reasoncodes.H> #include <kernel/cpuid.H> +#include <kernel/doorbell.H> cpu_t** CpuManager::cv_cpus[KERNEL_MAX_SUPPORTED_NODES]; bool CpuManager::cv_shutdown_requested = false; @@ -193,7 +194,7 @@ void CpuManager::startCPU(ssize_t i) // Initialize CPU structure. if (NULL == cv_cpus[nodeId][cpuId]) { - printk("Starting CPU %ld...", i); + printk("Starting CPU with pir %ld...", i); cpu_t* cpu = cv_cpus[nodeId][cpuId] = new cpu_t(); // Initialize CPU. @@ -434,8 +435,21 @@ void CpuManager::startCore(uint64_t pir,uint64_t i_threads) } __sync_synchronize(); + //Send a message to userspace that a core with this base pir is being added + // userspace will know which threads on the core to expect already InterruptMsgHdlr::addCpuCore(pir); + for(size_t i = 0; i < threads; i++) + { + // Only wakeup the threads we were told to wakeup + if( i_threads & (0x8000000000000000 >> i) ) + { + printk("Dbell wkup pir %ld\n", pir + i); + //Initiate the Doorbell for this core/pir + send_doorbell_wakeup(pir + i); + } + } + return; }; |

