From 4fd4fa10399b9958927454575e2a21585a391af0 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Mon, 30 Aug 2004 20:33:23 -0700 Subject: [PATCH] [PATCH] ppc64: set platform cpuids later in boot Move the initialization of the per-cpu paca->hw_cpu_id out of the Open Firmware client boot code and into a common location which is executed later. Signed-off-by: Nathan Lynch Signed-off-by: Paul Mackerras Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/ppc64/kernel/prom.c | 22 ---------------------- arch/ppc64/kernel/setup.c | 6 ++++++ include/asm-ppc64/smp.h | 2 +- 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c index 58f9375d3a789..a4e33f2cc8f95 100644 --- a/arch/ppc64/kernel/prom.c +++ b/arch/ppc64/kernel/prom.c @@ -919,31 +919,11 @@ static void __init prom_hold_cpus(unsigned long mem) unsigned long secondary_hold = virt_to_abs(*PTRRELOC((unsigned long *)__secondary_hold)); struct systemcfg *_systemcfg = RELOC(systemcfg); - struct paca_struct *lpaca = PTRRELOC(&paca[0]); struct prom_t *_prom = PTRRELOC(&prom); #ifdef CONFIG_SMP struct naca_struct *_naca = RELOC(naca); #endif - /* On pmac, we just fill out the various global bitmasks and - * arrays indicating our CPUs are here, they are actually started - * later on from pmac_smp - */ - if (_systemcfg->platform == PLATFORM_POWERMAC) { - for (node = 0; prom_next_node(&node); ) { - type[0] = 0; - prom_getprop(node, "device_type", type, sizeof(type)); - if (strcmp(type, RELOC("cpu")) != 0) - continue; - reg = -1; - prom_getprop(node, "reg", ®, sizeof(reg)); - lpaca[cpuid].hw_cpu_id = reg; - - cpuid++; - } - return; - } - prom_debug("prom_hold_cpus: start...\n"); prom_debug(" 1) spinloop = 0x%x\n", (unsigned long)spinloop); prom_debug(" 1) *spinloop = 0x%x\n", *spinloop); @@ -987,7 +967,6 @@ static void __init prom_hold_cpus(unsigned long mem) prom_debug("\ncpuid = 0x%x\n", cpuid); prom_debug("cpu hw idx = 0x%x\n", reg); - lpaca[cpuid].hw_cpu_id = reg; /* Init the acknowledge var which will be reset by * the secondary cpu when it awakens from its OF @@ -1044,7 +1023,6 @@ next: cpuid++; if (cpuid >= NR_CPUS) continue; - lpaca[cpuid].hw_cpu_id = interrupt_server[i]; prom_printf("%x : preparing thread ... ", interrupt_server[i]); if (_naca->smt_state) { diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c index fbe2161f90e4b..9d7f351fc976d 100644 --- a/arch/ppc64/kernel/setup.c +++ b/arch/ppc64/kernel/setup.c @@ -170,6 +170,8 @@ void __init disable_early_printk(void) * * This function is valid only for Open Firmware systems. finish_device_tree * must be called before using this. + * + * While we're here, we may as well set the "physical" cpu ids in the paca. */ static void __init setup_cpu_maps(void) { @@ -182,11 +184,15 @@ static void __init setup_cpu_maps(void) intserv = (u32 *)get_property(dn, "ibm,ppc-interrupt-server#s", &len); + if (!intserv) + intserv = (u32 *)get_property(dn, "reg", NULL); + nthreads = len / sizeof(u32); for (j = 0; j < nthreads && cpu < NR_CPUS; j++) { cpu_set(cpu, cpu_possible_map); cpu_set(cpu, cpu_present_map); + set_hard_smp_processor_id(cpu, intserv[j]); cpu++; } } diff --git a/include/asm-ppc64/smp.h b/include/asm-ppc64/smp.h index 40627b49f31c8..cac758f686e4b 100644 --- a/include/asm-ppc64/smp.h +++ b/include/asm-ppc64/smp.h @@ -63,7 +63,7 @@ extern int query_cpu_stopped(unsigned int pcpu); #define get_hard_smp_processor_id(CPU) (paca[(CPU)].hw_cpu_id) #define set_hard_smp_processor_id(CPU, VAL) \ - do { (paca[(CPU)].hw_proc_num = (VAL)); } while (0) + do { (paca[(CPU)].hw_cpu_id = (VAL)); } while (0) #endif /* __ASSEMBLY__ */ -- 2.53.0