aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kvm
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2016-01-28 09:31:37 -0500
committerMarc Zyngier <marc.zyngier@arm.com>2016-02-29 13:34:18 -0500
commitf1c9cad7c508f59fedd9f77eb36e5859e11ce5ab (patch)
tree267c954cfaadb6d6b4832c2919d9a67437a97544 /arch/arm/kvm
parent6d50d54cd80cb60d701e70fb0633250115606459 (diff)
ARM: KVM: Move kvm/hyp/hyp.h to include/asm/kvm_hyp.h
In order to be able to use the code located in virt/kvm/arm/hyp, we need to make the global hyp.h file accessible from include/asm, similar to what we did for arm64. Acked-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm/kvm')
-rw-r--r--arch/arm/kvm/hyp/banked-sr.c2
-rw-r--r--arch/arm/kvm/hyp/cp15-sr.c2
-rw-r--r--arch/arm/kvm/hyp/hyp.h130
-rw-r--r--arch/arm/kvm/hyp/s2-setup.c3
-rw-r--r--arch/arm/kvm/hyp/switch.c2
-rw-r--r--arch/arm/kvm/hyp/timer-sr.c4
-rw-r--r--arch/arm/kvm/hyp/tlb.c2
-rw-r--r--arch/arm/kvm/hyp/vgic-v2-sr.c4
8 files changed, 7 insertions, 142 deletions
diff --git a/arch/arm/kvm/hyp/banked-sr.c b/arch/arm/kvm/hyp/banked-sr.c
index d02dc804f611..111bda8cdebd 100644
--- a/arch/arm/kvm/hyp/banked-sr.c
+++ b/arch/arm/kvm/hyp/banked-sr.c
@@ -18,7 +18,7 @@
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */ 19 */
20 20
21#include "hyp.h" 21#include <asm/kvm_hyp.h>
22 22
23__asm__(".arch_extension virt"); 23__asm__(".arch_extension virt");
24 24
diff --git a/arch/arm/kvm/hyp/cp15-sr.c b/arch/arm/kvm/hyp/cp15-sr.c
index 732abbc34bd0..c4782812714c 100644
--- a/arch/arm/kvm/hyp/cp15-sr.c
+++ b/arch/arm/kvm/hyp/cp15-sr.c
@@ -18,7 +18,7 @@
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */ 19 */
20 20
21#include "hyp.h" 21#include <asm/kvm_hyp.h>
22 22
23static u64 *cp15_64(struct kvm_cpu_context *ctxt, int idx) 23static u64 *cp15_64(struct kvm_cpu_context *ctxt, int idx)
24{ 24{
diff --git a/arch/arm/kvm/hyp/hyp.h b/arch/arm/kvm/hyp/hyp.h
deleted file mode 100644
index ff6de6a3af2d..000000000000
--- a/arch/arm/kvm/hyp/hyp.h
+++ /dev/null
@@ -1,130 +0,0 @@
1/*
2 * Copyright (C) 2015 - ARM Ltd
3 * Author: Marc Zyngier <marc.zyngier@arm.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __ARM_KVM_HYP_H__
19#define __ARM_KVM_HYP_H__
20
21#include <linux/compiler.h>
22#include <linux/kvm_host.h>
23#include <asm/kvm_mmu.h>
24#include <asm/vfp.h>
25
26#define __hyp_text __section(.hyp.text) notrace
27
28#define kern_hyp_va(v) (v)
29#define hyp_kern_va(v) (v)
30
31#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
32 "mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
33#define __ACCESS_CP15_64(Op1, CRm) \
34 "mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
35#define __ACCESS_VFP(CRn) \
36 "mrc", "mcr", __stringify(p10, 7, %0, CRn, cr0, 0), u32
37
38#define __write_sysreg(v, r, w, c, t) asm volatile(w " " c : : "r" ((t)(v)))
39#define write_sysreg(v, ...) __write_sysreg(v, __VA_ARGS__)
40
41#define __read_sysreg(r, w, c, t) ({ \
42 t __val; \
43 asm volatile(r " " c : "=r" (__val)); \
44 __val; \
45})
46#define read_sysreg(...) __read_sysreg(__VA_ARGS__)
47
48#define write_special(v, r) \
49 asm volatile("msr " __stringify(r) ", %0" : : "r" (v))
50#define read_special(r) ({ \
51 u32 __val; \
52 asm volatile("mrs %0, " __stringify(r) : "=r" (__val)); \
53 __val; \
54})
55
56#define TTBR0 __ACCESS_CP15_64(0, c2)
57#define TTBR1 __ACCESS_CP15_64(1, c2)
58#define VTTBR __ACCESS_CP15_64(6, c2)
59#define PAR __ACCESS_CP15_64(0, c7)
60#define CNTV_CVAL __ACCESS_CP15_64(3, c14)
61#define CNTVOFF __ACCESS_CP15_64(4, c14)
62
63#define MIDR __ACCESS_CP15(c0, 0, c0, 0)
64#define CSSELR __ACCESS_CP15(c0, 2, c0, 0)
65#define VPIDR __ACCESS_CP15(c0, 4, c0, 0)
66#define VMPIDR __ACCESS_CP15(c0, 4, c0, 5)
67#define SCTLR __ACCESS_CP15(c1, 0, c0, 0)
68#define CPACR __ACCESS_CP15(c1, 0, c0, 2)
69#define HCR __ACCESS_CP15(c1, 4, c1, 0)
70#define HDCR __ACCESS_CP15(c1, 4, c1, 1)
71#define HCPTR __ACCESS_CP15(c1, 4, c1, 2)
72#define HSTR __ACCESS_CP15(c1, 4, c1, 3)
73#define TTBCR __ACCESS_CP15(c2, 0, c0, 2)
74#define HTCR __ACCESS_CP15(c2, 4, c0, 2)
75#define VTCR __ACCESS_CP15(c2, 4, c1, 2)
76#define DACR __ACCESS_CP15(c3, 0, c0, 0)
77#define DFSR __ACCESS_CP15(c5, 0, c0, 0)
78#define IFSR __ACCESS_CP15(c5, 0, c0, 1)
79#define ADFSR __ACCESS_CP15(c5, 0, c1, 0)
80#define AIFSR __ACCESS_CP15(c5, 0, c1, 1)
81#define HSR __ACCESS_CP15(c5, 4, c2, 0)
82#define DFAR __ACCESS_CP15(c6, 0, c0, 0)
83#define IFAR __ACCESS_CP15(c6, 0, c0, 2)
84#define HDFAR __ACCESS_CP15(c6, 4, c0, 0)
85#define HIFAR __ACCESS_CP15(c6, 4, c0, 2)
86#define HPFAR __ACCESS_CP15(c6, 4, c0, 4)
87#define ICIALLUIS __ACCESS_CP15(c7, 0, c1, 0)
88#define ATS1CPR __ACCESS_CP15(c7, 0, c8, 0)
89#define TLBIALLIS __ACCESS_CP15(c8, 0, c3, 0)
90#define TLBIALLNSNHIS __ACCESS_CP15(c8, 4, c3, 4)
91#define PRRR __ACCESS_CP15(c10, 0, c2, 0)
92#define NMRR __ACCESS_CP15(c10, 0, c2, 1)
93#define AMAIR0 __ACCESS_CP15(c10, 0, c3, 0)
94#define AMAIR1 __ACCESS_CP15(c10, 0, c3, 1)
95#define VBAR __ACCESS_CP15(c12, 0, c0, 0)
96#define CID __ACCESS_CP15(c13, 0, c0, 1)
97#define TID_URW __ACCESS_CP15(c13, 0, c0, 2)
98#define TID_URO __ACCESS_CP15(c13, 0, c0, 3)
99#define TID_PRIV __ACCESS_CP15(c13, 0, c0, 4)
100#define HTPIDR __ACCESS_CP15(c13, 4, c0, 2)
101#define CNTKCTL __ACCESS_CP15(c14, 0, c1, 0)
102#define CNTV_CTL __ACCESS_CP15(c14, 0, c3, 1)
103#define CNTHCTL __ACCESS_CP15(c14, 4, c1, 0)
104
105#define VFP_FPEXC __ACCESS_VFP(FPEXC)
106
107void __timer_save_state(struct kvm_vcpu *vcpu);
108void __timer_restore_state(struct kvm_vcpu *vcpu);
109
110void __vgic_v2_save_state(struct kvm_vcpu *vcpu);
111void __vgic_v2_restore_state(struct kvm_vcpu *vcpu);
112
113void __sysreg_save_state(struct kvm_cpu_context *ctxt);
114void __sysreg_restore_state(struct kvm_cpu_context *ctxt);
115
116void asmlinkage __vfp_save_state(struct vfp_hard_struct *vfp);
117void asmlinkage __vfp_restore_state(struct vfp_hard_struct *vfp);
118static inline bool __vfp_enabled(void)
119{
120 return !(read_sysreg(HCPTR) & (HCPTR_TCP(11) | HCPTR_TCP(10)));
121}
122
123void __hyp_text __banked_save_state(struct kvm_cpu_context *ctxt);
124void __hyp_text __banked_restore_state(struct kvm_cpu_context *ctxt);
125
126int asmlinkage __guest_enter(struct kvm_vcpu *vcpu,
127 struct kvm_cpu_context *host);
128int asmlinkage __hyp_do_panic(const char *, int, u32);
129
130#endif /* __ARM_KVM_HYP_H__ */
diff --git a/arch/arm/kvm/hyp/s2-setup.c b/arch/arm/kvm/hyp/s2-setup.c
index f5f49c53be28..7be39af2ed6c 100644
--- a/arch/arm/kvm/hyp/s2-setup.c
+++ b/arch/arm/kvm/hyp/s2-setup.c
@@ -18,8 +18,7 @@
18#include <linux/types.h> 18#include <linux/types.h>
19#include <asm/kvm_arm.h> 19#include <asm/kvm_arm.h>
20#include <asm/kvm_asm.h> 20#include <asm/kvm_asm.h>
21 21#include <asm/kvm_hyp.h>
22#include "hyp.h"
23 22
24void __hyp_text __init_stage2_translation(void) 23void __hyp_text __init_stage2_translation(void)
25{ 24{
diff --git a/arch/arm/kvm/hyp/switch.c b/arch/arm/kvm/hyp/switch.c
index f11ede159080..b13caa90cd44 100644
--- a/arch/arm/kvm/hyp/switch.c
+++ b/arch/arm/kvm/hyp/switch.c
@@ -16,7 +16,7 @@
16 */ 16 */
17 17
18#include <asm/kvm_asm.h> 18#include <asm/kvm_asm.h>
19#include "hyp.h" 19#include <asm/kvm_hyp.h>
20 20
21__asm__(".arch_extension virt"); 21__asm__(".arch_extension virt");
22 22
diff --git a/arch/arm/kvm/hyp/timer-sr.c b/arch/arm/kvm/hyp/timer-sr.c
index d7535fd0784e..2bb0c926e01c 100644
--- a/arch/arm/kvm/hyp/timer-sr.c
+++ b/arch/arm/kvm/hyp/timer-sr.c
@@ -19,9 +19,7 @@
19#include <linux/compiler.h> 19#include <linux/compiler.h>
20#include <linux/kvm_host.h> 20#include <linux/kvm_host.h>
21 21
22#include <asm/kvm_mmu.h> 22#include <asm/kvm_hyp.h>
23
24#include "hyp.h"
25 23
26/* vcpu is already in the HYP VA space */ 24/* vcpu is already in the HYP VA space */
27void __hyp_text __timer_save_state(struct kvm_vcpu *vcpu) 25void __hyp_text __timer_save_state(struct kvm_vcpu *vcpu)
diff --git a/arch/arm/kvm/hyp/tlb.c b/arch/arm/kvm/hyp/tlb.c
index 82958b8f6a74..a2636001e616 100644
--- a/arch/arm/kvm/hyp/tlb.c
+++ b/arch/arm/kvm/hyp/tlb.c
@@ -18,7 +18,7 @@
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */ 19 */
20 20
21#include "hyp.h" 21#include <asm/kvm_hyp.h>
22 22
23/** 23/**
24 * Flush per-VMID TLBs 24 * Flush per-VMID TLBs
diff --git a/arch/arm/kvm/hyp/vgic-v2-sr.c b/arch/arm/kvm/hyp/vgic-v2-sr.c
index e71761238cfc..9514a7d90d71 100644
--- a/arch/arm/kvm/hyp/vgic-v2-sr.c
+++ b/arch/arm/kvm/hyp/vgic-v2-sr.c
@@ -19,9 +19,7 @@
19#include <linux/irqchip/arm-gic.h> 19#include <linux/irqchip/arm-gic.h>
20#include <linux/kvm_host.h> 20#include <linux/kvm_host.h>
21 21
22#include <asm/kvm_mmu.h> 22#include <asm/kvm_hyp.h>
23
24#include "hyp.h"
25 23
26/* vcpu is already in the HYP VA space */ 24/* vcpu is already in the HYP VA space */
27void __hyp_text __vgic_v2_save_state(struct kvm_vcpu *vcpu) 25void __hyp_text __vgic_v2_save_state(struct kvm_vcpu *vcpu)