brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · fd73c87 Raw
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