diff options
-rw-r--r-- | src/kernel/start.S | 41 | ||||
-rw-r--r-- | src/runtime/rt_start.S | 7 |
2 files changed, 26 insertions, 22 deletions
diff --git a/src/kernel/start.S b/src/kernel/start.S index 190717257..9b61720a3 100644 --- a/src/kernel/start.S +++ b/src/kernel/start.S @@ -5,8 +5,9 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2010,2016 +# Contributors Listed Below - COPYRIGHT 2010,2017 # [+] International Business Machines Corp. +# [+] Joel Stanley # # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -202,7 +203,7 @@ UNIMPL_INTERRUPT(hype_decrementer, 0x980) ;// .org _start + 0xC00 intvect_system_call_fast: - cmpi cr0, r3, 0x0800 + cmpwi cr0, r3, 0x0800 bge cr0, system_call_fast_path STD_INTERRUPT(system_call, 0xC08) @@ -306,7 +307,7 @@ _other_thread_spinlock: 1: ld r3, 0(r2) ;// Loop until value is 1... - cmpi cr0, r3, 1 + cmpwi cr0, r3, 1 beq _other_thread_spinlock_complete or 1,1,1 ;// Lower thread priority. b 1b @@ -321,12 +322,12 @@ _other_thread_spinlock_complete: extrwi r1, r1, 3, 19 sldi r1, r1, 3 ldx r2, r1, r2 ;// Dereference to get on-node CPUs array. - cmpi cr0, r2, 0 ;// Check for NULL node array. + cmpwi cr0, r2, 0 ;// Check for NULL node array. beq- 1f mfspr r1, PIR ;// Extract on-node CPU id. clrlslwi r1, r1, 22, 3 ldx r3, r1, r2 ;// Load CPU object. - cmpi cr0, r3, 0 ;// Check for NULL CPU object. + cmpwi cr0, r3, 0 ;// Check for NULL CPU object. beq- 1f ld r1, CPU_KERNEL_STACK(r3) ;// Load initial stack. @@ -402,7 +403,7 @@ kernel_save_task: std r31, TASK_GPR_31(r1) ;// Save GPR31 ld r2, TASK_FP_CONTEXT(r1) ;// Load FP Context pointer. - cmpi cr0, r2, 0 + cmpwi cr0, r2, 0 bne- cr0, 1f ;// Jump to FP-save if != NULL. 2: @@ -484,7 +485,7 @@ kernel_dispatch_task: ;// Check if FP enabled, load context. ld r2, TASK_FP_CONTEXT(r1) - cmpi cr0, r2, 0 + cmpwi cr0, r2, 0 bne- 1f 2: ;// Restore GPRs from context. @@ -601,7 +602,7 @@ intvect_system_reset: lis r2, kernel_other_thread_spinlock@h ori r2, r2, kernel_other_thread_spinlock@l ld r2, 0(r2) - cmpi cr0, r2, 0 + cmpwi cr0, r2, 0 beq- _start ;// Get CPU object from thread ID, check for NULL which implies not @@ -612,12 +613,12 @@ intvect_system_reset: extrwi r1, r1, 3, 19 sldi r1, r1, 3 ldx r2, r1, r2 ;// Dereference to get on-node CPUs array. - cmpi cr0, r2, 0 ;// Check for NULL node array. + cmpwi cr0, r2, 0 ;// Check for NULL node array. beq- _start mfspr r1, PIR ;// Extract on-node CPU id. clrlslwi r1, r1, 22, 3 ldx r2, r1, r2 ;// Load CPU object. - cmpi cr0, r2, 0 ;// Check for NULL CPU object. + cmpwi cr0, r2, 0 ;// Check for NULL CPU object. beq- _start ;// Check for inactive CPU. @@ -631,13 +632,13 @@ intvect_system_reset: mfsrr1 r2 extrdi r2, r2, 3, 42 ;// Check for decrementer (bits = 011). - cmpi cr0, r2, 0x3 + cmpwi cr0, r2, 0x3 beq+ intvect_system_reset_decrementer ;// Check for external interrupt (bits = 010). - cmpi cr0, r2, 0x4 + cmpwi cr0, r2, 0x4 beq+ intvect_system_reset_external ;// Check for HMI (bits = 101). - cmpi cr0, r2, 0x5 + cmpwi cr0, r2, 0x5 beq+ 1f ;// Unable to handle HMI, jump to 'unknown reason'. 1: ;// Unknown reason, call as unhandled_exception. @@ -749,14 +750,14 @@ system_call_fast_path: b 1f ;// Jump to exit point. ;// Check if this is HMER write (0x801). 2: - cmpi cr0, r3, 0x801 + cmpwi cr0, r3, 0x801 bne cr0, 3f mtspr HMER, r4 li r3, 0 b 1f ;// Jump to exit point. ;// Check if this is SCRATCH read (0x802). 3: - cmpi cr0, r3, 0x802 + cmpwi cr0, r3, 0x802 bne cr0, 4f ;// Check for being on master processor. mfsprg3 r6 ;// Get task structure. @@ -783,7 +784,7 @@ system_call_fast_path: b intvect_system_call ;// Check if this is SCRATCH write (0x803). 4: - cmpi cr0, r3, 0x803 + cmpwi cr0, r3, 0x803 bne cr0, 5f ;// Check for master processor. mfsprg3 r6 ;// Get task structure. @@ -798,7 +799,7 @@ system_call_fast_path: b 1f ;// Jump to exit point. ;// Check if this is PVR read (0x804). 5: - cmpi cr0, r3, 0x804 + cmpwi cr0, r3, 0x804 bne cr0, 6f mfspr r3, PVR b 1f ;// Jump to exit point. @@ -828,7 +829,7 @@ system_call_fast_path: .global userspace_task_entry userspace_task_entry: ;// Skip stack frame if GPR1 == NULL. - cmpi cr0, r1, 0 + cmpwi cr0, r1, 0 beq- 1f ;// Create frame. ;// NULL back-chain + 48 bytes + quad-word alignment. See ABI. @@ -846,11 +847,11 @@ userspace_task_entry: .global task_end_stub task_end_stub: // Check for a NULL stack pointer and skip TLS cleanup. - cmpi cr0, r1, 0 + cmpwi cr0, r1, 0 beq 1f // Check for a NULL TLS-context and skip TLS cleanup. ld r0, TASK_TLS_CONTEXT(r13) - cmpi cr0, r0, 0 + cmpwi cr0, r0, 0 beq 1f // Save off r3. mr r31, r3 diff --git a/src/runtime/rt_start.S b/src/runtime/rt_start.S index d69184aef..ba1a975d7 100644 --- a/src/runtime/rt_start.S +++ b/src/runtime/rt_start.S @@ -5,7 +5,10 @@ # # OpenPOWER HostBoot Project # -# COPYRIGHT International Business Machines Corp. 2013,2014 +# Contributors Listed Below - COPYRIGHT 2013,2017 +# [+] International Business Machines Corp. +# [+] Joel Stanley +# # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -47,7 +50,7 @@ _init: ld r8, 0(r10) # Get count of relocations. - cmpi cr0, r8, 0 # Perform relocations (if any). + cmpwi cr0, r8, 0 # Perform relocations (if any). beq 2f mtctr r8 1: |