From b23d4daee35dfc8761aecc86ade077be1bcac548 Mon Sep 17 00:00:00 2001 From: Mark Wenning Date: Tue, 18 Sep 2012 13:42:55 -0500 Subject: pore_gen_cpureg Change-Id: Ic5cb0817118bf0de7d706124708e5b8551ba4258 RTC: 41425 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1899 Tested-by: Jenkins Server Reviewed-by: Van H. Lee Reviewed-by: A. Patrick Williams III --- src/kernel/cpumgr.C | 1 + src/kernel/misc.C | 2 +- src/kernel/start.S | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index 2667d5b02..162b49f41 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -270,6 +270,7 @@ void CpuManager::activateCPU(cpu_t * i_cpu) // Verify / set SPRs. uint64_t msr = getMSR(); + msr |= 0x1000; // TODO: RTC: 51148 - Simics workaround for SW170137. kassert(WAKEUP_MSR_VALUE == msr); setLPCR(WAKEUP_LPCR_VALUE); } diff --git a/src/kernel/misc.C b/src/kernel/misc.C index 9b2872f04..beddbbb81 100644 --- a/src/kernel/misc.C +++ b/src/kernel/misc.C @@ -161,7 +161,7 @@ namespace KernelMisc // Create kernel save area and store ptr in bottom of kernel stack. task_t* saveArea = new task_t; memset(saveArea, '\0', sizeof(task_t)); - saveArea->context.msr_mask = 0xC030; // EE, PR, IR, DR. + saveArea->context.msr_mask = 0xD030; // EE, ME, PR, IR, DR. *(reinterpret_cast(cpu->kernel_stack_bottom)) = saveArea; // Execute winkle. diff --git a/src/kernel/start.S b/src/kernel/start.S index 2cd97d816..55cf7f193 100644 --- a/src/kernel/start.S +++ b/src/kernel/start.S @@ -30,11 +30,11 @@ _start: ;// Set thread priority high. or 2,2,2 - ;// Clear MSR[TA] (bit 1) and MSR[ME] (bit 51). + ;// Clear MSR[TA] (bit 1) and enable MSR[ME] (bit 51). mfmsr r2 - rldicl r2,r2,1,1 ;// Clear bit 1 - result [1-63,0] - rldicl r2,r2,50,1 ;// Clear bit 51 - result [51-63,0-50] - rldicl r2,r2,13,0 ;// Rotate around back to [0-63] + rldicl r2,r2,1,1 ;// Clear bit 1 - result [1-63,0] + rotrdi r2,r2,1 ;// Rotate right 1 - result [0,63] + ori r2,r2,4096 ;// Set bit 51 ;// Set up SRR0 / SRR1 to enable new MSR. mtsrr1 r2 li r2, _start_postmsr@l @@ -448,7 +448,7 @@ kernel_dispatch_task: stdcx. r0, TASK_CPUPTR, r1 ;// the CPU pointer in the task. mfmsr r2 ;// Get current MSR - ori r2,r2, 0xC030 ;// Enable MSR[EE,PR,IR,DR]. + ori r2,r2, 0xD030 ;// Enable MSR[EE,ME,PR,IR,DR]. rldicl r2,r2,50,1 ;// Clear ... rotldi r2,r2,14 ;// MSR[FP] ld r3, TASK_MSR_MASK(r1) ;// Load MSR mask. @@ -628,6 +628,7 @@ intvect_system_reset_inactive: beq+ _start ;// Now we are a winkled processor that is awoken. + ld r1, CPU_KERNEL_STACK_BOTTOM(r2) ld r1, 0(r1) mtsprg3 r1 -- cgit v1.2.1