diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2012-08-29 09:47:03 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-09-06 08:29:24 -0500 |
commit | 8fc9c877be31195fcd7ca4f9c28c78acf61b0937 (patch) | |
tree | a17d854157ea8fe2e7a637a9b5c44704bf79201b /src/kernel/start.S | |
parent | 1c6e1a4cddde411b6219b9e881039ffbda0deb4f (diff) | |
download | talos-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.S | 27 |
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 |