67 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2#include "hwprobe.h"3#include "../../kselftest.h"4 5int main(int argc, char **argv)6{7 struct riscv_hwprobe pairs[8];8 unsigned long cpus;9 long out;10 11 ksft_print_header();12 ksft_set_plan(5);13 14 /* Fake the CPU_SET ops. */15 cpus = -1;16 17 /*18 * Just run a basic test: pass enough pairs to get up to the base19 * behavior, and then check to make sure it's sane.20 */21 for (long i = 0; i < 8; i++)22 pairs[i].key = i;23 24 out = riscv_hwprobe(pairs, 8, 1, &cpus, 0);25 if (out != 0)26 ksft_exit_fail_msg("hwprobe() failed with %ld\n", out);27 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);33 34 if (pairs[i].key != RISCV_HWPROBE_KEY_BASE_BEHAVIOR)35 continue;36 37 if (pairs[i].value & RISCV_HWPROBE_BASE_BEHAVIOR_IMA)38 continue;39 40 ksft_exit_fail_msg("Unexpected pair: (%lld, %llu)\n", pairs[i].key, pairs[i].value);41 }42 43 out = riscv_hwprobe(pairs, 8, 0, 0, 0);44 ksft_test_result(out == 0, "NULL CPU set\n");45 46 out = riscv_hwprobe(pairs, 8, 0, &cpus, 0);47 ksft_test_result(out != 0, "Bad CPU set\n");48 49 out = riscv_hwprobe(pairs, 8, 1, 0, 0);50 ksft_test_result(out != 0, "NULL CPU set with non-zero size\n");51 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");56 57 pairs[0].key = 0x5555;58 pairs[1].key = 1;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");64 65 ksft_finished();66}67