summaryrefslogtreecommitdiffstats
path: root/src/kernel/start.S
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-08-29 09:47:03 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-09-06 08:29:24 -0500
commit8fc9c877be31195fcd7ca4f9c28c78acf61b0937 (patch)
treea17d854157ea8fe2e7a637a9b5c44704bf79201b /src/kernel/start.S
parent1c6e1a4cddde411b6219b9e881039ffbda0deb4f (diff)
downloadtalos-hostboot-8fc9c877be31195fcd7ca4f9c28c78acf61b0937.tar.gz
talos-hostboot-8fc9c877be31195fcd7ca4f9c28c78acf61b0937.zip
Allow processors on logical nodes != 0.
Created per-node arrays of CPU objects rather than a single array for the entire system. These are created dynamically as CPUs are enabled. Also disabled support for P7 due to the PIR layout being different and hence would have needed two different sets of assembly code. We have been running exclusively on the P8 Mambo model for a while. RTC: 42815 Change-Id: Ib92de8a7c07c2e700a3b7f0c03c64d484b447ca2 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1630 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/start.S')
-rw-r--r--src/kernel/start.S27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/kernel/start.S b/src/kernel/start.S
index a97fd484f..e8b19b4f5 100644
--- a/src/kernel/start.S
+++ b/src/kernel/start.S
@@ -302,15 +302,19 @@ _other_thread_spinlock_complete:
or 2,2,2 ;// Raise thread priority.
isync
;// Get CPU object from thread ID.
- mfspr r1, PIR
lis r2, _ZN10CpuManager7cv_cpusE@h
ori r2, r2, _ZN10CpuManager7cv_cpusE@l
- ld r2, 0(r2) ;// Dereference cv_cpus to get array.
- muli r3, r1, 8
- add r2, r3, r2
- ld r3, 0(r2) ;// Load CPU object.
+ mfspr r1, PIR ;// Extract node id.
+ 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.
+ 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.
- beq- cr0, 1f ;// Jump to handling if no CPU object found.
+ beq- 1f
ld r1, CPU_KERNEL_STACK(r3) ;// Load initial stack.
lis r2, smp_slave_main@h ;// Load TOC base.
@@ -589,11 +593,16 @@ intvect_system_reset:
;// Get CPU object from thread ID, check for NULL which implies not
;// started yet.
- mfspr r1, PIR
lis r2, _ZN10CpuManager7cv_cpusE@h
ori r2, r2, _ZN10CpuManager7cv_cpusE@l
- ld r2, 0(r2) ;// Dereference cv_cpus to get array.
- muli r1, r1, 8
+ mfspr r1, PIR ;// Extract node id.
+ 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.
+ 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.
beq- _start
OpenPOWER on IntegriCloud