1 // SPDX-License-Identifier: GPL-2.0-only
3 #include "../../kselftest.h"
5 int main(int argc
, char **argv
)
7 struct riscv_hwprobe pairs
[8];
14 /* Fake the CPU_SET ops. */
18 * Just run a basic test: pass enough pairs to get up to the base
19 * behavior, and then check to make sure it's sane.
21 for (long i
= 0; i
< 8; i
++)
24 out
= riscv_hwprobe(pairs
, 8, 1, &cpus
, 0);
26 ksft_exit_fail_msg("hwprobe() failed with %ld\n", out
);
28 for (long i
= 0; i
< 4; ++i
) {
29 /* Fail if the kernel claims not to recognize a base key. */
30 if ((i
< 4) && (pairs
[i
].key
!= i
))
31 ksft_exit_fail_msg("Failed to recognize base key: key != i, "
32 "key=%lld, i=%ld\n", pairs
[i
].key
, i
);
34 if (pairs
[i
].key
!= RISCV_HWPROBE_KEY_BASE_BEHAVIOR
)
37 if (pairs
[i
].value
& RISCV_HWPROBE_BASE_BEHAVIOR_IMA
)
40 ksft_exit_fail_msg("Unexpected pair: (%lld, %llu)\n", pairs
[i
].key
, pairs
[i
].value
);
43 out
= riscv_hwprobe(pairs
, 8, 0, 0, 0);
44 ksft_test_result(out
== 0, "NULL CPU set\n");
46 out
= riscv_hwprobe(pairs
, 8, 0, &cpus
, 0);
47 ksft_test_result(out
!= 0, "Bad CPU set\n");
49 out
= riscv_hwprobe(pairs
, 8, 1, 0, 0);
50 ksft_test_result(out
!= 0, "NULL CPU set with non-zero size\n");
52 pairs
[0].key
= RISCV_HWPROBE_KEY_BASE_BEHAVIOR
;
53 out
= riscv_hwprobe(pairs
, 1, 1, &cpus
, 0);
54 ksft_test_result(out
== 0 && pairs
[0].key
== RISCV_HWPROBE_KEY_BASE_BEHAVIOR
,
55 "Existing key is maintained\n");
57 pairs
[0].key
= 0x5555;
59 pairs
[1].value
= 0xAAAA;
60 out
= riscv_hwprobe(pairs
, 2, 0, 0, 0);
61 ksft_test_result(out
== 0 && pairs
[0].key
== -1 &&
62 pairs
[1].key
== 1 && pairs
[1].value
!= 0xAAAA,
63 "Unknown key overwritten with -1 and doesn't block other elements\n");