xref: /kvm-unit-tests/riscv/sbi-tests.h (revision f9a088b4d8c9d69a156a0b378201a05d70909855)
1661fe480SJames Raphael Tiovalen /* SPDX-License-Identifier: GPL-2.0-only */
2661fe480SJames Raphael Tiovalen #ifndef _RISCV_SBI_TESTS_H_
3661fe480SJames Raphael Tiovalen #define _RISCV_SBI_TESTS_H_
4661fe480SJames Raphael Tiovalen 
5afd2cae5SJames Raphael Tiovalen #define SBI_HSM_TEST_DONE	(1 << 0)
6afd2cae5SJames Raphael Tiovalen #define SBI_HSM_TEST_MAGIC_A1	(1 << 1)
7afd2cae5SJames Raphael Tiovalen #define SBI_HSM_TEST_HARTID_A0	(1 << 2)
8afd2cae5SJames Raphael Tiovalen #define SBI_HSM_TEST_SATP	(1 << 3)
9afd2cae5SJames Raphael Tiovalen #define SBI_HSM_TEST_SIE	(1 << 4)
10afd2cae5SJames Raphael Tiovalen 
11afd2cae5SJames Raphael Tiovalen #define SBI_HSM_MAGIC		0x453
12afd2cae5SJames Raphael Tiovalen 
13afd2cae5SJames Raphael Tiovalen #define SBI_HSM_MAGIC_IDX	0
14afd2cae5SJames Raphael Tiovalen #define SBI_HSM_HARTID_IDX	1
15afd2cae5SJames Raphael Tiovalen #define SBI_HSM_NUM_OF_PARAMS	2
16afd2cae5SJames Raphael Tiovalen 
172ffe016fSAndrew Jones #define SBI_SUSP_MAGIC_IDX	0
182ffe016fSAndrew Jones #define SBI_SUSP_CSRS_IDX	1
192ffe016fSAndrew Jones #define SBI_SUSP_HARTID_IDX	2
202ffe016fSAndrew Jones #define SBI_SUSP_TESTNUM_IDX	3
212ffe016fSAndrew Jones #define SBI_SUSP_RESULTS_IDX	4
222ffe016fSAndrew Jones 
232ffe016fSAndrew Jones #define SBI_CSR_SSTATUS_IDX	0
242ffe016fSAndrew Jones #define SBI_CSR_SIE_IDX		1
252ffe016fSAndrew Jones #define SBI_CSR_STVEC_IDX	2
262ffe016fSAndrew Jones #define SBI_CSR_SSCRATCH_IDX	3
272ffe016fSAndrew Jones #define SBI_CSR_SATP_IDX	4
282ffe016fSAndrew Jones 
292ffe016fSAndrew Jones #define SBI_SUSP_MAGIC		0x505b
302ffe016fSAndrew Jones 
312ffe016fSAndrew Jones #define SBI_SUSP_TEST_SATP	(1 << 0)
322ffe016fSAndrew Jones #define SBI_SUSP_TEST_SIE	(1 << 1)
332ffe016fSAndrew Jones #define SBI_SUSP_TEST_HARTID	(1 << 2)
342ffe016fSAndrew Jones #define SBI_SUSP_TEST_MASK	7
35661fe480SJames Raphael Tiovalen 
36*f9a088b4SAndrew Jones #ifndef __ASSEMBLY__
37*f9a088b4SAndrew Jones #include <asm/sbi.h>
38*f9a088b4SAndrew Jones 
39*f9a088b4SAndrew Jones #define sbiret_report(ret, expected_error, expected_value, fmt, ...) ({						\
40*f9a088b4SAndrew Jones 	long ex_err = expected_error;										\
41*f9a088b4SAndrew Jones 	long ex_val = expected_value;										\
42*f9a088b4SAndrew Jones 	bool ch_err = (ret)->error == ex_err;									\
43*f9a088b4SAndrew Jones 	bool ch_val = (ret)->value == ex_val;									\
44*f9a088b4SAndrew Jones 	bool pass = report(ch_err && ch_val, fmt, ##__VA_ARGS__);						\
45*f9a088b4SAndrew Jones 														\
46*f9a088b4SAndrew Jones 	if (!pass)												\
47*f9a088b4SAndrew Jones 		report_info(fmt ": expected (error: %ld, value: %ld), received: (error: %ld, value %ld)",	\
48*f9a088b4SAndrew Jones 			    ##__VA_ARGS__, ex_err, ex_val, (ret)->error, (ret)->value);				\
49*f9a088b4SAndrew Jones 														\
50*f9a088b4SAndrew Jones 	pass;													\
51*f9a088b4SAndrew Jones })
52*f9a088b4SAndrew Jones 
53*f9a088b4SAndrew Jones #define sbiret_check(ret, expected_error, expected_value) \
54*f9a088b4SAndrew Jones 	sbiret_report(ret, expected_error, expected_value, "check sbi.error and sbi.value")
55*f9a088b4SAndrew Jones 
56*f9a088b4SAndrew Jones #endif /* __ASSEMBLY__ */
57661fe480SJames Raphael Tiovalen #endif /* _RISCV_SBI_TESTS_H_ */
58