18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) IBM Corporation, 2012 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Author: Anton Blanchard <anton@au.ibm.com> 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci#include <asm/ppc_asm.h> 98c2ecf20Sopenharmony_ci#include <asm/vdso.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci .text 128c2ecf20Sopenharmony_ci/* 138c2ecf20Sopenharmony_ci * Exact prototype of getcpu 148c2ecf20Sopenharmony_ci * 158c2ecf20Sopenharmony_ci * int __kernel_getcpu(unsigned *cpu, unsigned *node); 168c2ecf20Sopenharmony_ci * 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci#if defined(CONFIG_PPC64) 198c2ecf20Sopenharmony_ciV_FUNCTION_BEGIN(__kernel_getcpu) 208c2ecf20Sopenharmony_ci .cfi_startproc 218c2ecf20Sopenharmony_ci mfspr r5,SPRN_SPRG_VDSO_READ 228c2ecf20Sopenharmony_ci cmpwi cr0,r3,0 238c2ecf20Sopenharmony_ci cmpwi cr1,r4,0 248c2ecf20Sopenharmony_ci clrlwi r6,r5,16 258c2ecf20Sopenharmony_ci rlwinm r7,r5,16,31-15,31-0 268c2ecf20Sopenharmony_ci beq cr0,1f 278c2ecf20Sopenharmony_ci stw r6,0(r3) 288c2ecf20Sopenharmony_ci1: crclr cr0*4+so 298c2ecf20Sopenharmony_ci li r3,0 /* always success */ 308c2ecf20Sopenharmony_ci beqlr cr1 318c2ecf20Sopenharmony_ci stw r7,0(r4) 328c2ecf20Sopenharmony_ci blr 338c2ecf20Sopenharmony_ci .cfi_endproc 348c2ecf20Sopenharmony_ciV_FUNCTION_END(__kernel_getcpu) 358c2ecf20Sopenharmony_ci#elif !defined(CONFIG_SMP) 368c2ecf20Sopenharmony_ciV_FUNCTION_BEGIN(__kernel_getcpu) 378c2ecf20Sopenharmony_ci .cfi_startproc 388c2ecf20Sopenharmony_ci cmpwi cr0, r3, 0 398c2ecf20Sopenharmony_ci cmpwi cr1, r4, 0 408c2ecf20Sopenharmony_ci li r5, 0 418c2ecf20Sopenharmony_ci beq cr0, 1f 428c2ecf20Sopenharmony_ci stw r5, 0(r3) 438c2ecf20Sopenharmony_ci1: li r3, 0 /* always success */ 448c2ecf20Sopenharmony_ci crclr cr0*4+so 458c2ecf20Sopenharmony_ci beqlr cr1 468c2ecf20Sopenharmony_ci stw r5, 0(r4) 478c2ecf20Sopenharmony_ci blr 488c2ecf20Sopenharmony_ci .cfi_endproc 498c2ecf20Sopenharmony_ciV_FUNCTION_END(__kernel_getcpu) 508c2ecf20Sopenharmony_ci#endif 51