WIP FPC-III support
[linux/fpc-iii.git] / arch / powerpc / kernel / vdso32 / getcpu.S
blobff5e214fec415ef51accb450af88683b13c61687
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *
4  * Copyright (C) IBM Corporation, 2012
5  *
6  * Author: Anton Blanchard <anton@au.ibm.com>
7  */
8 #include <asm/ppc_asm.h>
9 #include <asm/vdso.h>
11         .text
13  * Exact prototype of getcpu
14  *
15  * int __kernel_getcpu(unsigned *cpu, unsigned *node);
16  *
17  */
18 #if defined(CONFIG_PPC64)
19 V_FUNCTION_BEGIN(__kernel_getcpu)
20   .cfi_startproc
21         mfspr   r5,SPRN_SPRG_VDSO_READ
22         cmpwi   cr0,r3,0
23         cmpwi   cr1,r4,0
24         clrlwi  r6,r5,16
25         rlwinm  r7,r5,16,31-15,31-0
26         beq     cr0,1f
27         stw     r6,0(r3)
28 1:      crclr   cr0*4+so
29         li      r3,0                    /* always success */
30         beqlr   cr1
31         stw     r7,0(r4)
32         blr
33   .cfi_endproc
34 V_FUNCTION_END(__kernel_getcpu)
35 #elif !defined(CONFIG_SMP)
36 V_FUNCTION_BEGIN(__kernel_getcpu)
37   .cfi_startproc
38         cmpwi   cr0, r3, 0
39         cmpwi   cr1, r4, 0
40         li      r5, 0
41         beq     cr0, 1f
42         stw     r5, 0(r3)
43 1:      li      r3, 0                   /* always success */
44         crclr   cr0*4+so
45         beqlr   cr1
46         stw     r5, 0(r4)
47         blr
48   .cfi_endproc
49 V_FUNCTION_END(__kernel_getcpu)
50 #endif