1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2015-2018 - ARM Ltd
4 * Author: Marc Zyngier <marc.zyngier@arm.com>
5 */
6
7#include <linux/arm-smccc.h>
8#include <linux/linkage.h>
9
10#include <asm/kvm_asm.h>
11#include <asm/kvm_mmu.h>
12
13	/*
14	 * This is not executed directly and is instead copied into the vectors
15	 * by install_bp_hardening_cb().
16	 */
17	.data
18	.pushsection	.rodata
19	.global		__smccc_workaround_1_smc
20SYM_DATA_START(__smccc_workaround_1_smc)
21	esb
22	sub	sp, sp, #(8 * 4)
23	stp	x2, x3, [sp, #(8 * 0)]
24	stp	x0, x1, [sp, #(8 * 2)]
25	mov	w0, #ARM_SMCCC_ARCH_WORKAROUND_1
26	smc	#0
27	ldp	x2, x3, [sp, #(8 * 0)]
28	ldp	x0, x1, [sp, #(8 * 2)]
29	add	sp, sp, #(8 * 4)
301:	.org __smccc_workaround_1_smc + __SMCCC_WORKAROUND_1_SMC_SZ
31	.org 1b
32SYM_DATA_END(__smccc_workaround_1_smc)
33