aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2005-11-03 03:34:38 -0500
committerMichael Ellerman <michael@ellerman.id.au>2005-11-03 03:34:38 -0500
commit40765d2b8b86446b4ac8ec880cf4fdf56ce4ae7e (patch)
tree36f18519c5094495840a1a1c424f24db837eed22 /arch
parentc87ef1171db207d9d19f87ad12db92974d95c466 (diff)
powerpc: Cleanup vpa code
register_vpa() doesn't actually do a VPA register call it just uses the flags you pass it, so rename it to vpa_call() to be clearer. We can then define register_vpa() and unregister_vpa() which are both simple wrappers around vpa_call(). (we'll need unregister_vpa() for kexec soon) We can then cleanup vpa_init(), and because vpa_init() is only called from platforms/pseries we remove the definition in asm-ppc64/smp.h. Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c10
-rw-r--r--arch/powerpc/platforms/pseries/plpar_wrappers.h19
2 files changed, 19 insertions, 10 deletions
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 8a7bda3db67..e384a5a9179 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -261,22 +261,18 @@ out:
261void vpa_init(int cpu) 261void vpa_init(int cpu)
262{ 262{
263 int hwcpu = get_hard_smp_processor_id(cpu); 263 int hwcpu = get_hard_smp_processor_id(cpu);
264 unsigned long vpa = (unsigned long)&(paca[cpu].lppaca); 264 unsigned long vpa = __pa(&paca[cpu].lppaca);
265 long ret; 265 long ret;
266 unsigned long flags;
267
268 /* Register the Virtual Processor Area (VPA) */
269 flags = 1UL << (63 - 18);
270 266
271 if (cpu_has_feature(CPU_FTR_ALTIVEC)) 267 if (cpu_has_feature(CPU_FTR_ALTIVEC))
272 paca[cpu].lppaca.vmxregs_in_use = 1; 268 paca[cpu].lppaca.vmxregs_in_use = 1;
273 269
274 ret = register_vpa(flags, hwcpu, __pa(vpa)); 270 ret = register_vpa(hwcpu, vpa);
275 271
276 if (ret) 272 if (ret)
277 printk(KERN_ERR "WARNING: vpa_init: VPA registration for " 273 printk(KERN_ERR "WARNING: vpa_init: VPA registration for "
278 "cpu %d (hw %d) of area %lx returns %ld\n", 274 "cpu %d (hw %d) of area %lx returns %ld\n",
279 cpu, hwcpu, __pa(vpa), ret); 275 cpu, hwcpu, vpa, ret);
280} 276}
281 277
282long pSeries_lpar_hpte_insert(unsigned long hpte_group, 278long pSeries_lpar_hpte_insert(unsigned long hpte_group,
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h
index 2457be2e217..382f8c5b0e7 100644
--- a/arch/powerpc/platforms/pseries/plpar_wrappers.h
+++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h
@@ -21,13 +21,26 @@ static inline long cede_processor(void)
21 return 0; 21 return 0;
22} 22}
23 23
24static inline long register_vpa(unsigned long flags, unsigned long proc, 24static inline long vpa_call(unsigned long flags, unsigned long cpu,
25 unsigned long vpa) 25 unsigned long vpa)
26{ 26{
27 return plpar_hcall_norets(H_REGISTER_VPA, flags, proc, vpa); 27 /* flags are in bits 16-18 (counting from most significant bit) */
28 flags = flags << (63 - 18);
29
30 return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa);
31}
32
33static inline long unregister_vpa(unsigned long cpu, unsigned long vpa)
34{
35 return vpa_call(0x5, cpu, vpa);
36}
37
38static inline long register_vpa(unsigned long cpu, unsigned long vpa)
39{
40 return vpa_call(0x1, cpu, vpa);
28} 41}
29 42
30void vpa_init(int cpu); 43extern void vpa_init(int cpu);
31 44
32static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex, 45static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex,
33 unsigned long avpn, unsigned long *old_pteh_ret, 46 unsigned long avpn, unsigned long *old_pteh_ret,