1*c2da86f3SMasahiro Yamada/* 2*c2da86f3SMasahiro Yamada * Copyright (c) 2015, Linaro Limited 3*c2da86f3SMasahiro Yamada * 4*c2da86f3SMasahiro Yamada * This program is free software; you can redistribute it and/or modify 5*c2da86f3SMasahiro Yamada * it under the terms of the GNU General Public License Version 2 as 6*c2da86f3SMasahiro Yamada * published by the Free Software Foundation. 7*c2da86f3SMasahiro Yamada * 8*c2da86f3SMasahiro Yamada * This program is distributed in the hope that it will be useful, 9*c2da86f3SMasahiro Yamada * but WITHOUT ANY WARRANTY; without even the implied warranty of 10*c2da86f3SMasahiro Yamada * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11*c2da86f3SMasahiro Yamada * GNU General Public License for more details. 12*c2da86f3SMasahiro Yamada * 13*c2da86f3SMasahiro Yamada */ 14*c2da86f3SMasahiro Yamada#include <linux/linkage.h> 15*c2da86f3SMasahiro Yamada#include <linux/arm-smccc.h> 16*c2da86f3SMasahiro Yamada#include <asm/asm-offsets.h> 17*c2da86f3SMasahiro Yamada 18*c2da86f3SMasahiro Yamada .macro SMCCC instr 19*c2da86f3SMasahiro Yamada .cfi_startproc 20*c2da86f3SMasahiro Yamada \instr #0 21*c2da86f3SMasahiro Yamada ldr x4, [sp] 22*c2da86f3SMasahiro Yamada stp x0, x1, [x4, #ARM_SMCCC_RES_X0_OFFS] 23*c2da86f3SMasahiro Yamada stp x2, x3, [x4, #ARM_SMCCC_RES_X2_OFFS] 24*c2da86f3SMasahiro Yamada ldr x4, [sp, #8] 25*c2da86f3SMasahiro Yamada cbz x4, 1f /* no quirk structure */ 26*c2da86f3SMasahiro Yamada ldr x9, [x4, #ARM_SMCCC_QUIRK_ID_OFFS] 27*c2da86f3SMasahiro Yamada cmp x9, #ARM_SMCCC_QUIRK_QCOM_A6 28*c2da86f3SMasahiro Yamada b.ne 1f 29*c2da86f3SMasahiro Yamada str x6, [x4, ARM_SMCCC_QUIRK_STATE_OFFS] 30*c2da86f3SMasahiro Yamada1: ret 31*c2da86f3SMasahiro Yamada .cfi_endproc 32*c2da86f3SMasahiro Yamada .endm 33*c2da86f3SMasahiro Yamada 34*c2da86f3SMasahiro Yamada/* 35*c2da86f3SMasahiro Yamada * void arm_smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2, 36*c2da86f3SMasahiro Yamada * unsigned long a3, unsigned long a4, unsigned long a5, 37*c2da86f3SMasahiro Yamada * unsigned long a6, unsigned long a7, struct arm_smccc_res *res, 38*c2da86f3SMasahiro Yamada * struct arm_smccc_quirk *quirk) 39*c2da86f3SMasahiro Yamada */ 40*c2da86f3SMasahiro YamadaENTRY(__arm_smccc_smc) 41*c2da86f3SMasahiro Yamada SMCCC smc 42*c2da86f3SMasahiro YamadaENDPROC(__arm_smccc_smc) 43*c2da86f3SMasahiro Yamada 44*c2da86f3SMasahiro Yamada/* 45*c2da86f3SMasahiro Yamada * void arm_smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2, 46*c2da86f3SMasahiro Yamada * unsigned long a3, unsigned long a4, unsigned long a5, 47*c2da86f3SMasahiro Yamada * unsigned long a6, unsigned long a7, struct arm_smccc_res *res, 48*c2da86f3SMasahiro Yamada * struct arm_smccc_quirk *quirk) 49*c2da86f3SMasahiro Yamada */ 50*c2da86f3SMasahiro YamadaENTRY(__arm_smccc_hvc) 51*c2da86f3SMasahiro Yamada SMCCC hvc 52*c2da86f3SMasahiro YamadaENDPROC(__arm_smccc_hvc) 53