arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / arch / powerpc / include / asm / kvm_book3s_asm.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *
4  * Copyright SUSE Linux Products GmbH 2009
5  *
6  * Authors: Alexander Graf <agraf@suse.de>
7  */
8
9 #ifndef __ASM_KVM_BOOK3S_ASM_H__
10 #define __ASM_KVM_BOOK3S_ASM_H__
11
12 /* XICS ICP register offsets */
13 #define XICS_XIRR               4
14 #define XICS_MFRR               0xc
15 #define XICS_IPI                2       /* interrupt source # for IPIs */
16
17 /* Maximum number of threads per physical core */
18 #define MAX_SMT_THREADS         8
19
20 /* Maximum number of subcores per physical core */
21 #define MAX_SUBCORES            4
22
23 #ifdef __ASSEMBLY__
24
25 #ifdef CONFIG_KVM_BOOK3S_HANDLER
26
27 #include <asm/kvm_asm.h>
28
29 .macro DO_KVM intno
30         .if (\intno == BOOK3S_INTERRUPT_SYSTEM_RESET) || \
31             (\intno == BOOK3S_INTERRUPT_MACHINE_CHECK) || \
32             (\intno == BOOK3S_INTERRUPT_DATA_STORAGE) || \
33             (\intno == BOOK3S_INTERRUPT_INST_STORAGE) || \
34             (\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \
35             (\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \
36             (\intno == BOOK3S_INTERRUPT_EXTERNAL) || \
37             (\intno == BOOK3S_INTERRUPT_EXTERNAL_HV) || \
38             (\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \
39             (\intno == BOOK3S_INTERRUPT_PROGRAM) || \
40             (\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \
41             (\intno == BOOK3S_INTERRUPT_DECREMENTER) || \
42             (\intno == BOOK3S_INTERRUPT_SYSCALL) || \
43             (\intno == BOOK3S_INTERRUPT_TRACE) || \
44             (\intno == BOOK3S_INTERRUPT_PERFMON) || \
45             (\intno == BOOK3S_INTERRUPT_ALTIVEC) || \
46             (\intno == BOOK3S_INTERRUPT_VSX)
47
48         b       kvmppc_trampoline_\intno
49 kvmppc_resume_\intno:
50
51         .endif
52 .endm
53
54 #else
55
56 .macro DO_KVM intno
57 .endm
58
59 #endif /* CONFIG_KVM_BOOK3S_HANDLER */
60
61 #else  /*__ASSEMBLY__ */
62
63 struct kvmppc_vcore;
64
65 /* Struct used for coordinating micro-threading (split-core) mode changes */
66 struct kvm_split_mode {
67         unsigned long   rpr;
68         unsigned long   pmmar;
69         unsigned long   ldbar;
70         u8              subcore_size;
71         u8              do_nap;
72         u8              napped[MAX_SMT_THREADS];
73         struct kvmppc_vcore *vc[MAX_SUBCORES];
74 };
75
76 /*
77  * This struct goes in the PACA on 64-bit processors.  It is used
78  * to store host state that needs to be saved when we enter a guest
79  * and restored when we exit, but isn't specific to any particular
80  * guest or vcpu.  It also has some scratch fields used by the guest
81  * exit code.
82  */
83 struct kvmppc_host_state {
84         ulong host_r1;
85         ulong host_r2;
86         ulong host_msr;
87         ulong vmhandler;
88         ulong scratch0;
89         ulong scratch1;
90         ulong scratch2;
91         u8 in_guest;
92         u8 restore_hid5;
93         u8 napping;
94
95 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
96         u8 hwthread_req;
97         u8 hwthread_state;
98         u8 host_ipi;
99         u8 ptid;                /* thread number within subcore when split */
100         u8 fake_suspend;
101         struct kvm_vcpu *kvm_vcpu;
102         struct kvmppc_vcore *kvm_vcore;
103         void __iomem *xics_phys;
104         void __iomem *xive_tima_phys;
105         void __iomem *xive_tima_virt;
106         u32 saved_xirr;
107         u64 dabr;
108         u64 host_mmcr[7];       /* MMCR 0,1,A, SIAR, SDAR, MMCR2, SIER */
109         u32 host_pmc[8];
110         u64 host_purr;
111         u64 host_spurr;
112         u64 host_dscr;
113         u64 dec_expires;
114         struct kvm_split_mode *kvm_split_mode;
115 #endif
116 #ifdef CONFIG_PPC_BOOK3S_64
117         u64 cfar;
118         u64 ppr;
119         u64 host_fscr;
120 #endif
121 };
122
123 struct kvmppc_book3s_shadow_vcpu {
124         bool in_use;
125         ulong gpr[14];
126         u32 cr;
127         ulong xer;
128         ulong ctr;
129         ulong lr;
130         ulong pc;
131
132         ulong shadow_srr1;
133         ulong fault_dar;
134         u32 fault_dsisr;
135         u32 last_inst;
136
137 #ifdef CONFIG_PPC_BOOK3S_32
138         u32     sr[16];                 /* Guest SRs */
139
140         struct kvmppc_host_state hstate;
141 #endif
142
143 #ifdef CONFIG_PPC_BOOK3S_64
144         u8 slb_max;                     /* highest used guest slb entry */
145         struct  {
146                 u64     esid;
147                 u64     vsid;
148         } slb[64];                      /* guest SLB */
149         u64 shadow_fscr;
150 #endif
151 };
152
153 #endif /*__ASSEMBLY__ */
154
155 /* Values for kvm_state */
156 #define KVM_HWTHREAD_IN_KERNEL  0
157 #define KVM_HWTHREAD_IN_IDLE    1
158 #define KVM_HWTHREAD_IN_KVM     2
159
160 #endif /* __ASM_KVM_BOOK3S_ASM_H__ */