1 From 55dfb8bed6fe8bda390cc71cca878d11a9407099 Mon Sep 17 00:00:00 2001
2 From: Gautam Menghani <gautam@linux.ibm.com>
3 Date: Wed, 5 Jun 2024 17:09:09 +0530
4 Subject: KVM: PPC: Book3S HV nestedv2: Add DPDES support in helper library for Guest state buffer
6 From: Gautam Menghani <gautam@linux.ibm.com>
8 commit 55dfb8bed6fe8bda390cc71cca878d11a9407099 upstream.
10 Add support for using DPDES in the library for using guest state
11 buffers. DPDES support is needed for enabling usage of doorbells in a L2
14 Fixes: 6ccbbc33f06a ("KVM: PPC: Add helper library for Guest State Buffers")
15 Cc: stable@vger.kernel.org # v6.7+
16 Signed-off-by: Gautam Menghani <gautam@linux.ibm.com>
17 Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
18 Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
19 Link: https://msgid.link/20240605113913.83715-2-gautam@linux.ibm.com
20 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
22 Documentation/arch/powerpc/kvm-nested.rst | 4 +++-
23 arch/powerpc/include/asm/guest-state-buffer.h | 3 ++-
24 arch/powerpc/include/asm/kvm_book3s.h | 1 +
25 arch/powerpc/kvm/book3s_hv_nestedv2.c | 7 +++++++
26 arch/powerpc/kvm/test-guest-state-buffer.c | 2 +-
27 5 files changed, 14 insertions(+), 3 deletions(-)
29 --- a/Documentation/arch/powerpc/kvm-nested.rst
30 +++ b/Documentation/arch/powerpc/kvm-nested.rst
31 @@ -546,7 +546,9 @@ table information.
32 +--------+-------+----+--------+----------------------------------+
33 | 0x1052 | 0x08 | RW | T | CTRL |
34 +--------+-------+----+--------+----------------------------------+
35 -| 0x1053-| | | | Reserved |
36 +| 0x1053 | 0x08 | RW | T | DPDES |
37 ++--------+-------+----+--------+----------------------------------+
38 +| 0x1054-| | | | Reserved |
40 +--------+-------+----+--------+----------------------------------+
41 | 0x2000 | 0x04 | RW | T | CR |
42 --- a/arch/powerpc/include/asm/guest-state-buffer.h
43 +++ b/arch/powerpc/include/asm/guest-state-buffer.h
45 #define KVMPPC_GSID_HASHKEYR 0x1050
46 #define KVMPPC_GSID_HASHPKEYR 0x1051
47 #define KVMPPC_GSID_CTRL 0x1052
48 +#define KVMPPC_GSID_DPDES 0x1053
50 #define KVMPPC_GSID_CR 0x2000
51 #define KVMPPC_GSID_PIDR 0x2001
53 #define KVMPPC_GSE_META_COUNT (KVMPPC_GSE_META_END - KVMPPC_GSE_META_START + 1)
55 #define KVMPPC_GSE_DW_REGS_START KVMPPC_GSID_GPR(0)
56 -#define KVMPPC_GSE_DW_REGS_END KVMPPC_GSID_CTRL
57 +#define KVMPPC_GSE_DW_REGS_END KVMPPC_GSID_DPDES
58 #define KVMPPC_GSE_DW_REGS_COUNT \
59 (KVMPPC_GSE_DW_REGS_END - KVMPPC_GSE_DW_REGS_START + 1)
61 --- a/arch/powerpc/include/asm/kvm_book3s.h
62 +++ b/arch/powerpc/include/asm/kvm_book3s.h
63 @@ -594,6 +594,7 @@ static inline u##size kvmppc_get_##reg(s
66 KVMPPC_BOOK3S_VCORE_ACCESSOR(vtb, 64, KVMPPC_GSID_VTB)
67 +KVMPPC_BOOK3S_VCORE_ACCESSOR(dpdes, 64, KVMPPC_GSID_DPDES)
68 KVMPPC_BOOK3S_VCORE_ACCESSOR_GET(arch_compat, 32, KVMPPC_GSID_LOGICAL_PVR)
69 KVMPPC_BOOK3S_VCORE_ACCESSOR_GET(lpcr, 64, KVMPPC_GSID_LPCR)
70 KVMPPC_BOOK3S_VCORE_ACCESSOR_SET(tb_offset, 64, KVMPPC_GSID_TB_OFFSET)
71 --- a/arch/powerpc/kvm/book3s_hv_nestedv2.c
72 +++ b/arch/powerpc/kvm/book3s_hv_nestedv2.c
73 @@ -311,6 +311,10 @@ static int gs_msg_ops_vcpu_fill_info(str
74 rc = kvmppc_gse_put_u64(gsb, iden,
75 vcpu->arch.vcore->vtb);
77 + case KVMPPC_GSID_DPDES:
78 + rc = kvmppc_gse_put_u64(gsb, iden,
79 + vcpu->arch.vcore->dpdes);
81 case KVMPPC_GSID_LPCR:
82 rc = kvmppc_gse_put_u64(gsb, iden,
83 vcpu->arch.vcore->lpcr);
84 @@ -543,6 +547,9 @@ static int gs_msg_ops_vcpu_refresh_info(
86 vcpu->arch.vcore->vtb = kvmppc_gse_get_u64(gse);
88 + case KVMPPC_GSID_DPDES:
89 + vcpu->arch.vcore->dpdes = kvmppc_gse_get_u64(gse);
91 case KVMPPC_GSID_LPCR:
92 vcpu->arch.vcore->lpcr = kvmppc_gse_get_u64(gse);
94 --- a/arch/powerpc/kvm/test-guest-state-buffer.c
95 +++ b/arch/powerpc/kvm/test-guest-state-buffer.c
96 @@ -151,7 +151,7 @@ static void test_gs_bitmap(struct kunit
100 - for (u16 iden = KVMPPC_GSID_GPR(0); iden <= KVMPPC_GSID_CTRL; iden++) {
101 + for (u16 iden = KVMPPC_GSID_GPR(0); iden <= KVMPPC_GSE_DW_REGS_END; iden++) {
102 kvmppc_gsbm_set(&gsbm, iden);
103 kvmppc_gsbm_set(&gsbm1, iden);
104 KUNIT_EXPECT_TRUE(test, kvmppc_gsbm_test(&gsbm, iden));