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> |
10 | |
11 | .text |
12 | /* |
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 | PPC_LCMPI cr0,r3,0 |
23 | PPC_LCMPI 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 |
51 | |