blob: 931260b59ac6563e0f73f74a470b4a900b6f569a [file] [log] [blame]
Scott Woodd30f6e42011-12-20 15:34:43 +00001/*
2 * Copyright 2010-2011 Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License, version 2, as
6 * published by the Free Software Foundation.
7 */
8
9#ifndef ASM_KVM_BOOKE_HV_ASM_H
10#define ASM_KVM_BOOKE_HV_ASM_H
11
Christophe Leroy2c86cd12018-07-05 16:25:01 +000012#include <asm/feature-fixups.h>
13
Scott Woodd30f6e42011-12-20 15:34:43 +000014#ifdef __ASSEMBLY__
15
16/*
17 * All exceptions from guest state must go through KVM
18 * (except for those which are delivered directly to the guest) --
19 * there are no exceptions for which we fall through directly to
20 * the normal host handler.
21 *
Mihai Caramane51f8f32012-10-11 06:13:21 +000022 * 32-bit host
Scott Woodd30f6e42011-12-20 15:34:43 +000023 * Expected inputs (normal exceptions):
24 * SCRATCH0 = saved r10
25 * r10 = thread struct
26 * r11 = appropriate SRR1 variant (currently used as scratch)
27 * r13 = saved CR
28 * *(r10 + THREAD_NORMSAVE(0)) = saved r11
29 * *(r10 + THREAD_NORMSAVE(2)) = saved r13
30 *
31 * Expected inputs (crit/mcheck/debug exceptions):
32 * appropriate SCRATCH = saved r8
33 * r8 = exception level stack frame
34 * r9 = *(r8 + _CCR) = saved CR
35 * r11 = appropriate SRR1 variant (currently used as scratch)
36 * *(r8 + GPR9) = saved r9
37 * *(r8 + GPR10) = saved r10 (r10 not yet clobbered)
38 * *(r8 + GPR11) = saved r11
Mihai Caramane51f8f32012-10-11 06:13:21 +000039 *
40 * 64-bit host
Scott Wood9d378df2014-03-10 17:29:38 -050041 * Expected inputs (GEN/GDBELL/DBG/CRIT/MC exception types):
Mihai Caramane51f8f32012-10-11 06:13:21 +000042 * r10 = saved CR
43 * r13 = PACA_POINTER
44 * *(r13 + PACA_EX##type + EX_R10) = saved r10
45 * *(r13 + PACA_EX##type + EX_R11) = saved r11
46 * SPRN_SPRG_##type##_SCRATCH = saved r13
47 *
Mihai Caramane51f8f32012-10-11 06:13:21 +000048 * Expected inputs (TLB exception type):
49 * r10 = saved CR
Scott Wooda3dc6202014-03-10 17:29:38 -050050 * r12 = extlb pointer
Mihai Caramane51f8f32012-10-11 06:13:21 +000051 * r13 = PACA_POINTER
Scott Wooda3dc6202014-03-10 17:29:38 -050052 * *(r12 + EX_TLB_R10) = saved r10
53 * *(r12 + EX_TLB_R11) = saved r11
54 * *(r12 + EX_TLB_R13) = saved r13
55 * SPRN_SPRG_GEN_SCRATCH = saved r12
Mihai Caramane51f8f32012-10-11 06:13:21 +000056 *
57 * Only the bolted version of TLB miss exception handlers is supported now.
Scott Woodd30f6e42011-12-20 15:34:43 +000058 */
59.macro DO_KVM intno srr1
60#ifdef CONFIG_KVM_BOOKE_HV
61BEGIN_FTR_SECTION
62 mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */
Mihai Caramand61966f2012-09-12 03:18:14 +000063 bf 3, 1975f
Scott Woodd30f6e42011-12-20 15:34:43 +000064 b kvmppc_handler_\intno\()_\srr1
Mihai Caramand61966f2012-09-12 03:18:14 +0000651975:
Scott Woodd30f6e42011-12-20 15:34:43 +000066END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
67#endif
68.endm
69
70#endif /*__ASSEMBLY__ */
71#endif /* ASM_KVM_BOOKE_HV_ASM_H */