xref: /linux/drivers/net/wireless/intel/iwlwifi/tests/nvm_parse.c (revision 07fdad3a93756b872da7b53647715c48d0f4a2d0)
1*7a7c5264SPagadala Yesu Anjaneyulu // SPDX-License-Identifier: GPL-2.0-only
2*7a7c5264SPagadala Yesu Anjaneyulu /*
3*7a7c5264SPagadala Yesu Anjaneyulu  * KUnit tests for NVM parse
4*7a7c5264SPagadala Yesu Anjaneyulu  *
5*7a7c5264SPagadala Yesu Anjaneyulu  * Copyright (C) 2025 Intel Corporation
6*7a7c5264SPagadala Yesu Anjaneyulu  */
7*7a7c5264SPagadala Yesu Anjaneyulu #include <kunit/static_stub.h>
8*7a7c5264SPagadala Yesu Anjaneyulu #include <kunit/test.h>
9*7a7c5264SPagadala Yesu Anjaneyulu #include <iwl-nvm-parse.h>
10*7a7c5264SPagadala Yesu Anjaneyulu 
11*7a7c5264SPagadala Yesu Anjaneyulu MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
12*7a7c5264SPagadala Yesu Anjaneyulu 
13*7a7c5264SPagadala Yesu Anjaneyulu static const struct nvm_flag_case {
14*7a7c5264SPagadala Yesu Anjaneyulu 	const char *desc;
15*7a7c5264SPagadala Yesu Anjaneyulu 	u16 nvm_flags;
16*7a7c5264SPagadala Yesu Anjaneyulu 	u32 reg_rule_flags;
17*7a7c5264SPagadala Yesu Anjaneyulu 	u32 set_reg_rule_flags;
18*7a7c5264SPagadala Yesu Anjaneyulu 	u32 clear_reg_rule_flags;
19*7a7c5264SPagadala Yesu Anjaneyulu } nvm_flag_cases[] = {
20*7a7c5264SPagadala Yesu Anjaneyulu 	{
21*7a7c5264SPagadala Yesu Anjaneyulu 		.desc = "Restricting VLP client and AP access",
22*7a7c5264SPagadala Yesu Anjaneyulu 		.nvm_flags = 0,
23*7a7c5264SPagadala Yesu Anjaneyulu 		.set_reg_rule_flags = NL80211_RRF_NO_6GHZ_VLP_CLIENT,
24*7a7c5264SPagadala Yesu Anjaneyulu 		.clear_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP,
25*7a7c5264SPagadala Yesu Anjaneyulu 	},
26*7a7c5264SPagadala Yesu Anjaneyulu 	{
27*7a7c5264SPagadala Yesu Anjaneyulu 		.desc = "Allow VLP client and AP access",
28*7a7c5264SPagadala Yesu Anjaneyulu 		.nvm_flags = NVM_CHANNEL_VLP,
29*7a7c5264SPagadala Yesu Anjaneyulu 		.set_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP,
30*7a7c5264SPagadala Yesu Anjaneyulu 		.clear_reg_rule_flags = NL80211_RRF_NO_6GHZ_VLP_CLIENT,
31*7a7c5264SPagadala Yesu Anjaneyulu 	},
32*7a7c5264SPagadala Yesu Anjaneyulu 	{
33*7a7c5264SPagadala Yesu Anjaneyulu 		.desc = "Allow VLP client access, while restricting AP access",
34*7a7c5264SPagadala Yesu Anjaneyulu 		.nvm_flags = NVM_CHANNEL_VLP | NVM_CHANNEL_VLP_AP_NOT_ALLOWED,
35*7a7c5264SPagadala Yesu Anjaneyulu 		.set_reg_rule_flags = 0,
36*7a7c5264SPagadala Yesu Anjaneyulu 		.clear_reg_rule_flags = NL80211_RRF_ALLOW_6GHZ_VLP_AP |
37*7a7c5264SPagadala Yesu Anjaneyulu 					NL80211_RRF_NO_6GHZ_VLP_CLIENT,
38*7a7c5264SPagadala Yesu Anjaneyulu 	},
39*7a7c5264SPagadala Yesu Anjaneyulu };
40*7a7c5264SPagadala Yesu Anjaneyulu 
41*7a7c5264SPagadala Yesu Anjaneyulu KUNIT_ARRAY_PARAM_DESC(nvm_flag, nvm_flag_cases, desc)
42*7a7c5264SPagadala Yesu Anjaneyulu 
43*7a7c5264SPagadala Yesu Anjaneyulu static void test_nvm_flags(struct kunit *test)
44*7a7c5264SPagadala Yesu Anjaneyulu {
45*7a7c5264SPagadala Yesu Anjaneyulu 	const struct nvm_flag_case *params = test->param_value;
46*7a7c5264SPagadala Yesu Anjaneyulu 	struct iwl_reg_capa reg_capa = {};
47*7a7c5264SPagadala Yesu Anjaneyulu 	u32 flags = 0;
48*7a7c5264SPagadala Yesu Anjaneyulu 
49*7a7c5264SPagadala Yesu Anjaneyulu 	flags = iwl_nvm_get_regdom_bw_flags(NULL, 0, params->nvm_flags,
50*7a7c5264SPagadala Yesu Anjaneyulu 					    reg_capa);
51*7a7c5264SPagadala Yesu Anjaneyulu 
52*7a7c5264SPagadala Yesu Anjaneyulu 	if ((params->set_reg_rule_flags & flags) != params->set_reg_rule_flags)
53*7a7c5264SPagadala Yesu Anjaneyulu 		KUNIT_FAIL(test, "Expected set bits:0x%08x flags:0x%08x\n",
54*7a7c5264SPagadala Yesu Anjaneyulu 			   params->set_reg_rule_flags, flags);
55*7a7c5264SPagadala Yesu Anjaneyulu 
56*7a7c5264SPagadala Yesu Anjaneyulu 	if (params->clear_reg_rule_flags & flags)
57*7a7c5264SPagadala Yesu Anjaneyulu 		KUNIT_FAIL(test, "Expected clear bits:0x%08x flags:0x%08x\n",
58*7a7c5264SPagadala Yesu Anjaneyulu 			   params->clear_reg_rule_flags, flags);
59*7a7c5264SPagadala Yesu Anjaneyulu }
60*7a7c5264SPagadala Yesu Anjaneyulu 
61*7a7c5264SPagadala Yesu Anjaneyulu static struct kunit_case nvm_flags_test_cases[] = {
62*7a7c5264SPagadala Yesu Anjaneyulu 	KUNIT_CASE_PARAM(test_nvm_flags,
63*7a7c5264SPagadala Yesu Anjaneyulu 			 nvm_flag_gen_params),
64*7a7c5264SPagadala Yesu Anjaneyulu 	{},
65*7a7c5264SPagadala Yesu Anjaneyulu };
66*7a7c5264SPagadala Yesu Anjaneyulu 
67*7a7c5264SPagadala Yesu Anjaneyulu static struct kunit_suite nvm_flags_suite = {
68*7a7c5264SPagadala Yesu Anjaneyulu 	.name = "iwlwifi-nvm_flags",
69*7a7c5264SPagadala Yesu Anjaneyulu 	.test_cases = nvm_flags_test_cases,
70*7a7c5264SPagadala Yesu Anjaneyulu };
71*7a7c5264SPagadala Yesu Anjaneyulu 
72*7a7c5264SPagadala Yesu Anjaneyulu kunit_test_suite(nvm_flags_suite);
73