• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Contains CPU specific branch predictor invalidation sequences
3 *
4 * Copyright (C) 2018 ARM Ltd.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <linux/linkage.h>
20#include <linux/arm-smccc.h>
21
22.macro ventry target
23	.rept 31
24	nop
25	.endr
26	b	\target
27.endm
28
29.macro vectors target
30	ventry \target + 0x000
31	ventry \target + 0x080
32	ventry \target + 0x100
33	ventry \target + 0x180
34
35	ventry \target + 0x200
36	ventry \target + 0x280
37	ventry \target + 0x300
38	ventry \target + 0x380
39
40	ventry \target + 0x400
41	ventry \target + 0x480
42	ventry \target + 0x500
43	ventry \target + 0x580
44
45	ventry \target + 0x600
46	ventry \target + 0x680
47	ventry \target + 0x700
48	ventry \target + 0x780
49.endm
50
51	.align	11
52ENTRY(__bp_harden_hyp_vecs_start)
53	.rept 4
54	vectors __kvm_hyp_vector
55	.endr
56ENTRY(__bp_harden_hyp_vecs_end)
57
58
59ENTRY(__smccc_workaround_1_smc_start)
60	sub	sp, sp, #(8 * 4)
61	stp	x2, x3, [sp, #(8 * 0)]
62	stp	x0, x1, [sp, #(8 * 2)]
63	mov	w0, #ARM_SMCCC_ARCH_WORKAROUND_1
64	smc	#0
65	ldp	x2, x3, [sp, #(8 * 0)]
66	ldp	x0, x1, [sp, #(8 * 2)]
67	add	sp, sp, #(8 * 4)
68ENTRY(__smccc_workaround_1_smc_end)
69