Skip to content

Commit f6d02aa

Browse files
reijiw-kvmMarc Zyngier
authored andcommitted
KVM: arm64: selftests: Add write_dbg{b,w}{c,v}r helpers in debug-exceptions
Introduce helpers in the debug-exceptions test to write to dbg{b,w}{c,v}r registers. Those helpers will be useful for test cases that will be added to the test in subsequent patches. No functional change intended. Signed-off-by: Reiji Watanabe <[email protected]> Reviewed-by: Ricardo Koller <[email protected]> Signed-off-by: Marc Zyngier <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 1a61820 commit f6d02aa

File tree

1 file changed

+68
-4
lines changed

1 file changed

+68
-4
lines changed

tools/testing/selftests/kvm/aarch64/debug-exceptions.c

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,69 @@ static volatile uint64_t svc_addr;
3030
static volatile uint64_t ss_addr[4], ss_idx;
3131
#define PC(v) ((uint64_t)&(v))
3232

33+
#define GEN_DEBUG_WRITE_REG(reg_name) \
34+
static void write_##reg_name(int num, uint64_t val) \
35+
{ \
36+
switch (num) { \
37+
case 0: \
38+
write_sysreg(val, reg_name##0_el1); \
39+
break; \
40+
case 1: \
41+
write_sysreg(val, reg_name##1_el1); \
42+
break; \
43+
case 2: \
44+
write_sysreg(val, reg_name##2_el1); \
45+
break; \
46+
case 3: \
47+
write_sysreg(val, reg_name##3_el1); \
48+
break; \
49+
case 4: \
50+
write_sysreg(val, reg_name##4_el1); \
51+
break; \
52+
case 5: \
53+
write_sysreg(val, reg_name##5_el1); \
54+
break; \
55+
case 6: \
56+
write_sysreg(val, reg_name##6_el1); \
57+
break; \
58+
case 7: \
59+
write_sysreg(val, reg_name##7_el1); \
60+
break; \
61+
case 8: \
62+
write_sysreg(val, reg_name##8_el1); \
63+
break; \
64+
case 9: \
65+
write_sysreg(val, reg_name##9_el1); \
66+
break; \
67+
case 10: \
68+
write_sysreg(val, reg_name##10_el1); \
69+
break; \
70+
case 11: \
71+
write_sysreg(val, reg_name##11_el1); \
72+
break; \
73+
case 12: \
74+
write_sysreg(val, reg_name##12_el1); \
75+
break; \
76+
case 13: \
77+
write_sysreg(val, reg_name##13_el1); \
78+
break; \
79+
case 14: \
80+
write_sysreg(val, reg_name##14_el1); \
81+
break; \
82+
case 15: \
83+
write_sysreg(val, reg_name##15_el1); \
84+
break; \
85+
default: \
86+
GUEST_ASSERT(0); \
87+
} \
88+
}
89+
90+
/* Define write_dbgbcr()/write_dbgbvr()/write_dbgwcr()/write_dbgwvr() */
91+
GEN_DEBUG_WRITE_REG(dbgbcr)
92+
GEN_DEBUG_WRITE_REG(dbgbvr)
93+
GEN_DEBUG_WRITE_REG(dbgwcr)
94+
GEN_DEBUG_WRITE_REG(dbgwvr)
95+
3396
static void reset_debug_state(void)
3497
{
3598
asm volatile("msr daifset, #8");
@@ -61,8 +124,9 @@ static void install_wp(uint64_t addr)
61124
uint32_t mdscr;
62125

63126
wcr = DBGWCR_LEN8 | DBGWCR_RD | DBGWCR_WR | DBGWCR_EL1 | DBGWCR_E;
64-
write_sysreg(wcr, dbgwcr0_el1);
65-
write_sysreg(addr, dbgwvr0_el1);
127+
write_dbgwcr(0, wcr);
128+
write_dbgwvr(0, addr);
129+
66130
isb();
67131

68132
asm volatile("msr daifclr, #8");
@@ -78,8 +142,8 @@ static void install_hw_bp(uint64_t addr)
78142
uint32_t mdscr;
79143

80144
bcr = DBGBCR_LEN8 | DBGBCR_EXEC | DBGBCR_EL1 | DBGBCR_E;
81-
write_sysreg(bcr, dbgbcr0_el1);
82-
write_sysreg(addr, dbgbvr0_el1);
145+
write_dbgbcr(0, bcr);
146+
write_dbgbvr(0, addr);
83147
isb();
84148

85149
asm volatile("msr daifclr, #8");

0 commit comments

Comments
 (0)