xref: /linux/sound/soc/codecs/wm_adsp_fw_find_test.c (revision 19cbc75c56c0ed4fa3f637e3c41a98895a68dfae)
1bf2d44d0SRichard Fitzgerald // SPDX-License-Identifier: GPL-2.0-only
2bf2d44d0SRichard Fitzgerald //
3bf2d44d0SRichard Fitzgerald // Test cases for wm_adsp library.
4bf2d44d0SRichard Fitzgerald //
5bf2d44d0SRichard Fitzgerald // Copyright (C) 2025 Cirrus Logic, Inc. and
6bf2d44d0SRichard Fitzgerald //                    Cirrus Logic International Semiconductor Ltd.
7bf2d44d0SRichard Fitzgerald 
8bf2d44d0SRichard Fitzgerald #include <kunit/device.h>
9bf2d44d0SRichard Fitzgerald #include <kunit/static_stub.h>
10bf2d44d0SRichard Fitzgerald #include <kunit/test.h>
11bf2d44d0SRichard Fitzgerald #include <linux/slab.h>
12bf2d44d0SRichard Fitzgerald #include "wm_adsp.h"
13bf2d44d0SRichard Fitzgerald 
14bf2d44d0SRichard Fitzgerald KUNIT_DEFINE_ACTION_WRAPPER(_put_device_wrapper, put_device, struct device *);
15bf2d44d0SRichard Fitzgerald 
16bf2d44d0SRichard Fitzgerald struct wm_adsp_fw_find_test {
17bf2d44d0SRichard Fitzgerald 	struct wm_adsp dsp;
18bf2d44d0SRichard Fitzgerald 
197bca3ca5SRichard Fitzgerald 	struct wm_adsp_fw_files found_fw;
20bf2d44d0SRichard Fitzgerald 	char searched_fw_files[768];
21bf2d44d0SRichard Fitzgerald };
22bf2d44d0SRichard Fitzgerald 
23bf2d44d0SRichard Fitzgerald struct wm_adsp_fw_find_test_params {
24bf2d44d0SRichard Fitzgerald 	const char *part;
25bf2d44d0SRichard Fitzgerald 	const char *dsp_name;
26bf2d44d0SRichard Fitzgerald 	const char *fwf_name;
27bf2d44d0SRichard Fitzgerald 	const char *system_name;
28bf2d44d0SRichard Fitzgerald 	const char *alsa_name;
29bf2d44d0SRichard Fitzgerald 	bool wmfw_optional;
30bf2d44d0SRichard Fitzgerald 	bool bin_mandatory;
31bf2d44d0SRichard Fitzgerald 
32bf2d44d0SRichard Fitzgerald 	/* If non-NULL this file should be returned as "found" */
33bf2d44d0SRichard Fitzgerald 	const char *expect_wmfw;
34bf2d44d0SRichard Fitzgerald 
35bf2d44d0SRichard Fitzgerald 	/* If non-NULL this file should be returned as "found" */
36bf2d44d0SRichard Fitzgerald 	const char *expect_bin;
37bf2d44d0SRichard Fitzgerald 
38bf2d44d0SRichard Fitzgerald 	/* Space-separated list of filenames in expected order of searching */
39bf2d44d0SRichard Fitzgerald 	const char *expected_searches;
40bf2d44d0SRichard Fitzgerald 
41bf2d44d0SRichard Fitzgerald 	/* NULL-terminated array of pointers to filenames to simulate directory content */
42bf2d44d0SRichard Fitzgerald 	const char * const *dir_files;
43bf2d44d0SRichard Fitzgerald };
44bf2d44d0SRichard Fitzgerald 
45bf2d44d0SRichard Fitzgerald /* Dummy struct firmware to return from wm_adsp_request_firmware_files */
46bf2d44d0SRichard Fitzgerald static const struct firmware wm_adsp_find_test_dummy_firmware;
47bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_release_firmware_files_stub(struct wm_adsp_fw_files * fw)4878538047SRichard Fitzgerald static void wm_adsp_fw_find_test_release_firmware_files_stub(struct wm_adsp_fw_files *fw)
4978538047SRichard Fitzgerald {
5078538047SRichard Fitzgerald 	/*
5178538047SRichard Fitzgerald 	 * fw->wmfw.firmware and fw->coeff.firmware allocated by this KUnit
5278538047SRichard Fitzgerald 	 * test are dummies not allocated by the real request_firmware() call
5378538047SRichard Fitzgerald 	 * so they must not be passed to release_firmware().
5478538047SRichard Fitzgerald 	 * This function replaces wm_adsp_release_firmware_files().
5578538047SRichard Fitzgerald 	 */
5678538047SRichard Fitzgerald 
5778538047SRichard Fitzgerald 	if (!fw)
5878538047SRichard Fitzgerald 		return;
5978538047SRichard Fitzgerald 
6078538047SRichard Fitzgerald 	kfree(fw->wmfw.filename);
6178538047SRichard Fitzgerald 	kfree(fw->coeff.filename);
6278538047SRichard Fitzgerald 
6378538047SRichard Fitzgerald 	fw->wmfw.firmware = NULL;
6478538047SRichard Fitzgerald 	fw->coeff.firmware = NULL;
6578538047SRichard Fitzgerald 	fw->wmfw.filename = NULL;
6678538047SRichard Fitzgerald 	fw->coeff.filename = NULL;
6778538047SRichard Fitzgerald }
6878538047SRichard Fitzgerald 
wm_adsp_free_found_fw(struct kunit * test)6978538047SRichard Fitzgerald static void wm_adsp_free_found_fw(struct kunit *test)
7078538047SRichard Fitzgerald {
7178538047SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv = test->priv;
7278538047SRichard Fitzgerald 
7378538047SRichard Fitzgerald 	wm_adsp_fw_find_test_release_firmware_files_stub(&priv->found_fw);
7478538047SRichard Fitzgerald }
7578538047SRichard Fitzgerald 
76bf2d44d0SRichard Fitzgerald /* Simple lookup of a filename in a list of names */
wm_adsp_fw_find_test_firmware_request_simple_stub(const struct firmware ** firmware,const char * filename,struct device * dev)77bf2d44d0SRichard Fitzgerald static int wm_adsp_fw_find_test_firmware_request_simple_stub(const struct firmware **firmware,
78bf2d44d0SRichard Fitzgerald 							     const char *filename,
79bf2d44d0SRichard Fitzgerald 							     struct device *dev)
80bf2d44d0SRichard Fitzgerald {
81bf2d44d0SRichard Fitzgerald 	struct kunit *test = kunit_get_current_test();
82bf2d44d0SRichard Fitzgerald 	const struct wm_adsp_fw_find_test_params *params = test->param_value;
83bf2d44d0SRichard Fitzgerald 	int i;
84bf2d44d0SRichard Fitzgerald 
85bf2d44d0SRichard Fitzgerald 	/* Non-parameterized test? */
86bf2d44d0SRichard Fitzgerald 	if (!params)
87bf2d44d0SRichard Fitzgerald 		return -ENOENT;
88bf2d44d0SRichard Fitzgerald 
89bf2d44d0SRichard Fitzgerald 	if (!params->dir_files)
90bf2d44d0SRichard Fitzgerald 		return -ENOENT;
91bf2d44d0SRichard Fitzgerald 
92bf2d44d0SRichard Fitzgerald 	for (i = 0; params->dir_files[i]; i++) {
93bf2d44d0SRichard Fitzgerald 		if (strcmp(params->dir_files[i], filename) == 0) {
94bf2d44d0SRichard Fitzgerald 			*firmware = &wm_adsp_find_test_dummy_firmware;
95bf2d44d0SRichard Fitzgerald 			return 0;
96bf2d44d0SRichard Fitzgerald 		}
97bf2d44d0SRichard Fitzgerald 	}
98bf2d44d0SRichard Fitzgerald 
99bf2d44d0SRichard Fitzgerald 	return -ENOENT;
100bf2d44d0SRichard Fitzgerald }
101bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_pick_file(struct kunit * test)102bf2d44d0SRichard Fitzgerald static void wm_adsp_fw_find_test_pick_file(struct kunit *test)
103bf2d44d0SRichard Fitzgerald {
104bf2d44d0SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv = test->priv;
105bf2d44d0SRichard Fitzgerald 	const struct wm_adsp_fw_find_test_params *params = test->param_value;
106bf2d44d0SRichard Fitzgerald 	struct wm_adsp *dsp = &priv->dsp;
107bf2d44d0SRichard Fitzgerald 	int i, ret;
108bf2d44d0SRichard Fitzgerald 
109bf2d44d0SRichard Fitzgerald 	/* Concatenate string of dir content for error messages */
110bf2d44d0SRichard Fitzgerald 	for (i = 0; params->dir_files[i]; i++) {
111bf2d44d0SRichard Fitzgerald 		strlcat(priv->searched_fw_files, params->dir_files[i],
112bf2d44d0SRichard Fitzgerald 			sizeof(priv->searched_fw_files));
113bf2d44d0SRichard Fitzgerald 		strlcat(priv->searched_fw_files, ";",
114bf2d44d0SRichard Fitzgerald 			sizeof(priv->searched_fw_files));
115bf2d44d0SRichard Fitzgerald 	}
116bf2d44d0SRichard Fitzgerald 
117bf2d44d0SRichard Fitzgerald 	dsp->cs_dsp.name = params->dsp_name;
118bf2d44d0SRichard Fitzgerald 	dsp->part = params->part;
119bf2d44d0SRichard Fitzgerald 	dsp->fwf_name = params->fwf_name;
120bf2d44d0SRichard Fitzgerald 	dsp->system_name = params->system_name;
121bf2d44d0SRichard Fitzgerald 	dsp->component->name_prefix = params->alsa_name;
122bf2d44d0SRichard Fitzgerald 	dsp->wmfw_optional = params->wmfw_optional;
123bf2d44d0SRichard Fitzgerald 	dsp->bin_mandatory = params->bin_mandatory;
124bf2d44d0SRichard Fitzgerald 
125bf2d44d0SRichard Fitzgerald 	kunit_activate_static_stub(test,
126bf2d44d0SRichard Fitzgerald 				   wm_adsp_firmware_request,
127bf2d44d0SRichard Fitzgerald 				   wm_adsp_fw_find_test_firmware_request_simple_stub);
12878538047SRichard Fitzgerald 	kunit_activate_static_stub(test,
12978538047SRichard Fitzgerald 				   wm_adsp_release_firmware_files,
13078538047SRichard Fitzgerald 				   wm_adsp_fw_find_test_release_firmware_files_stub);
131bf2d44d0SRichard Fitzgerald 
1327bca3ca5SRichard Fitzgerald 	ret = wm_adsp_request_firmware_files(dsp, &priv->found_fw);
133bf2d44d0SRichard Fitzgerald 	kunit_deactivate_static_stub(test, wm_adsp_firmware_request);
13478538047SRichard Fitzgerald 	kunit_deactivate_static_stub(test, wm_adsp_release_firmware_files);
13578538047SRichard Fitzgerald 
136bf2d44d0SRichard Fitzgerald 	KUNIT_EXPECT_EQ_MSG(test, ret,
137bf2d44d0SRichard Fitzgerald 			    (params->expect_wmfw || params->expect_bin) ? 0 : -ENOENT,
138bf2d44d0SRichard Fitzgerald 			    "%s\n", priv->searched_fw_files);
139bf2d44d0SRichard Fitzgerald 
1407bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ_MSG(test, !!priv->found_fw.wmfw.filename, !!params->expect_wmfw,
141bf2d44d0SRichard Fitzgerald 			    "%s\n", priv->searched_fw_files);
1427bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ_MSG(test, !!priv->found_fw.coeff.filename, !!params->expect_bin,
143bf2d44d0SRichard Fitzgerald 			    "%s\n", priv->searched_fw_files);
144bf2d44d0SRichard Fitzgerald 
145bf2d44d0SRichard Fitzgerald 	if (params->expect_wmfw) {
1467bca3ca5SRichard Fitzgerald 		KUNIT_EXPECT_STREQ_MSG(test, priv->found_fw.wmfw.filename, params->expect_wmfw,
147bf2d44d0SRichard Fitzgerald 				       "%s\n", priv->searched_fw_files);
148bf2d44d0SRichard Fitzgerald 	}
149bf2d44d0SRichard Fitzgerald 
150bf2d44d0SRichard Fitzgerald 	if (params->expect_bin) {
1517bca3ca5SRichard Fitzgerald 		KUNIT_EXPECT_STREQ_MSG(test, priv->found_fw.coeff.filename, params->expect_bin,
152bf2d44d0SRichard Fitzgerald 				       "%s\n", priv->searched_fw_files);
153bf2d44d0SRichard Fitzgerald 	}
154bf2d44d0SRichard Fitzgerald }
155bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_firmware_request_stub(const struct firmware ** firmware,const char * filename,struct device * dev)156bf2d44d0SRichard Fitzgerald static int wm_adsp_fw_find_test_firmware_request_stub(const struct firmware **firmware,
157bf2d44d0SRichard Fitzgerald 						      const char *filename,
158bf2d44d0SRichard Fitzgerald 						      struct device *dev)
159bf2d44d0SRichard Fitzgerald {
160bf2d44d0SRichard Fitzgerald 	struct kunit *test = kunit_get_current_test();
161bf2d44d0SRichard Fitzgerald 	const struct wm_adsp_fw_find_test_params *params = test->param_value;
162bf2d44d0SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv = test->priv;
163bf2d44d0SRichard Fitzgerald 
164bf2d44d0SRichard Fitzgerald 	/*
165bf2d44d0SRichard Fitzgerald 	 * Searches are accumulated as a single string of space-separated names.
166bf2d44d0SRichard Fitzgerald 	 * The list of expected searches are stored the same way in
167bf2d44d0SRichard Fitzgerald 	 * struct wm_adsp_fw_find_test_params. This allows for comparision using
168bf2d44d0SRichard Fitzgerald 	 * a simple KUNIT_EXPECT_STREQ(), which avoids the risk of bugs in a
169bf2d44d0SRichard Fitzgerald 	 * more complex custom comparison.
170bf2d44d0SRichard Fitzgerald 	 */
171bf2d44d0SRichard Fitzgerald 	if (priv->searched_fw_files[0] != '\0')
172bf2d44d0SRichard Fitzgerald 		strlcat(priv->searched_fw_files, " ", sizeof(priv->searched_fw_files));
173bf2d44d0SRichard Fitzgerald 
174bf2d44d0SRichard Fitzgerald 	strlcat(priv->searched_fw_files, filename, sizeof(priv->searched_fw_files));
175bf2d44d0SRichard Fitzgerald 
176bf2d44d0SRichard Fitzgerald 	/* Non-parameterized test? */
177bf2d44d0SRichard Fitzgerald 	if (!params)
178bf2d44d0SRichard Fitzgerald 		return -ENOENT;
179bf2d44d0SRichard Fitzgerald 
180bf2d44d0SRichard Fitzgerald 	if (params->expect_wmfw && (strcmp(filename, params->expect_wmfw) == 0)) {
181bf2d44d0SRichard Fitzgerald 		*firmware = &wm_adsp_find_test_dummy_firmware;
182bf2d44d0SRichard Fitzgerald 		return 0;
183bf2d44d0SRichard Fitzgerald 	}
184bf2d44d0SRichard Fitzgerald 
185bf2d44d0SRichard Fitzgerald 	if (params->expect_bin && (strcmp(filename, params->expect_bin) == 0)) {
186bf2d44d0SRichard Fitzgerald 		*firmware = &wm_adsp_find_test_dummy_firmware;
187bf2d44d0SRichard Fitzgerald 		return 0;
188bf2d44d0SRichard Fitzgerald 	}
189bf2d44d0SRichard Fitzgerald 
190bf2d44d0SRichard Fitzgerald 	return -ENOENT;
191bf2d44d0SRichard Fitzgerald }
192bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_search_order(struct kunit * test)193bf2d44d0SRichard Fitzgerald static void wm_adsp_fw_find_test_search_order(struct kunit *test)
194bf2d44d0SRichard Fitzgerald {
195bf2d44d0SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv = test->priv;
196bf2d44d0SRichard Fitzgerald 	const struct wm_adsp_fw_find_test_params *params = test->param_value;
197bf2d44d0SRichard Fitzgerald 	struct wm_adsp *dsp = &priv->dsp;
198bf2d44d0SRichard Fitzgerald 
199bf2d44d0SRichard Fitzgerald 	dsp->cs_dsp.name = params->dsp_name;
200bf2d44d0SRichard Fitzgerald 	dsp->part = params->part;
201bf2d44d0SRichard Fitzgerald 	dsp->fwf_name = params->fwf_name;
202bf2d44d0SRichard Fitzgerald 	dsp->system_name = params->system_name;
203bf2d44d0SRichard Fitzgerald 	dsp->component->name_prefix = params->alsa_name;
204bf2d44d0SRichard Fitzgerald 	dsp->wmfw_optional = params->wmfw_optional;
205bf2d44d0SRichard Fitzgerald 
206bf2d44d0SRichard Fitzgerald 	kunit_activate_static_stub(test,
207bf2d44d0SRichard Fitzgerald 				   wm_adsp_firmware_request,
208bf2d44d0SRichard Fitzgerald 				   wm_adsp_fw_find_test_firmware_request_stub);
20978538047SRichard Fitzgerald 	kunit_activate_static_stub(test,
21078538047SRichard Fitzgerald 				   wm_adsp_release_firmware_files,
21178538047SRichard Fitzgerald 				   wm_adsp_fw_find_test_release_firmware_files_stub);
212bf2d44d0SRichard Fitzgerald 
2137bca3ca5SRichard Fitzgerald 	wm_adsp_request_firmware_files(dsp, &priv->found_fw);
214bf2d44d0SRichard Fitzgerald 	kunit_deactivate_static_stub(test, wm_adsp_firmware_request);
21578538047SRichard Fitzgerald 	kunit_deactivate_static_stub(test, wm_adsp_release_firmware_files);
216bf2d44d0SRichard Fitzgerald 
217bf2d44d0SRichard Fitzgerald 	KUNIT_EXPECT_STREQ(test, priv->searched_fw_files, params->expected_searches);
218bf2d44d0SRichard Fitzgerald 
2197bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ(test, !!priv->found_fw.wmfw.filename, !!params->expect_wmfw);
220bf2d44d0SRichard Fitzgerald 	if (params->expect_wmfw)
2217bca3ca5SRichard Fitzgerald 		KUNIT_EXPECT_STREQ(test, priv->found_fw.wmfw.filename, params->expect_wmfw);
222bf2d44d0SRichard Fitzgerald 
2237bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ(test, !!priv->found_fw.coeff.filename, !!params->expect_bin);
224bf2d44d0SRichard Fitzgerald 	if (params->expect_bin)
2257bca3ca5SRichard Fitzgerald 		KUNIT_EXPECT_STREQ(test, priv->found_fw.coeff.filename, params->expect_bin);
226bf2d44d0SRichard Fitzgerald 
227bf2d44d0SRichard Fitzgerald 	/* Either we get a filename and firmware, or neither */
2287bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ(test, !!priv->found_fw.wmfw.filename, !!priv->found_fw.wmfw.firmware);
2297bca3ca5SRichard Fitzgerald 	KUNIT_EXPECT_EQ(test, !!priv->found_fw.coeff.filename, !!priv->found_fw.coeff.firmware);
230bf2d44d0SRichard Fitzgerald }
231bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_find_firmware_byindex(struct kunit * test)232bf2d44d0SRichard Fitzgerald static void wm_adsp_fw_find_test_find_firmware_byindex(struct kunit *test)
233bf2d44d0SRichard Fitzgerald {
234bf2d44d0SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv = test->priv;
235bf2d44d0SRichard Fitzgerald 	struct wm_adsp *dsp = &priv->dsp;
236bf2d44d0SRichard Fitzgerald 	const char *fw_name;
237bf2d44d0SRichard Fitzgerald 
238bf2d44d0SRichard Fitzgerald 	dsp->cs_dsp.name = "cs1234";
239bf2d44d0SRichard Fitzgerald 	dsp->part = "dsp1";
24078538047SRichard Fitzgerald 
241bf2d44d0SRichard Fitzgerald 	for (dsp->fw = 0;; dsp->fw++) {
242bf2d44d0SRichard Fitzgerald 		fw_name = wm_adsp_get_fwf_name_by_index(dsp->fw);
243bf2d44d0SRichard Fitzgerald 		if (!fw_name)
244bf2d44d0SRichard Fitzgerald 			break;
245bf2d44d0SRichard Fitzgerald 
246bf2d44d0SRichard Fitzgerald 		kunit_activate_static_stub(test,
247bf2d44d0SRichard Fitzgerald 					   wm_adsp_firmware_request,
248bf2d44d0SRichard Fitzgerald 					   wm_adsp_fw_find_test_firmware_request_stub);
24978538047SRichard Fitzgerald 		kunit_activate_static_stub(test,
25078538047SRichard Fitzgerald 					   wm_adsp_release_firmware_files,
25178538047SRichard Fitzgerald 					   wm_adsp_fw_find_test_release_firmware_files_stub);
252bf2d44d0SRichard Fitzgerald 
2537bca3ca5SRichard Fitzgerald 		wm_adsp_request_firmware_files(dsp, &priv->found_fw);
25478538047SRichard Fitzgerald 
255bf2d44d0SRichard Fitzgerald 		kunit_deactivate_static_stub(test, wm_adsp_firmware_request);
25678538047SRichard Fitzgerald 		kunit_deactivate_static_stub(test, wm_adsp_release_firmware_files);
257bf2d44d0SRichard Fitzgerald 
258bf2d44d0SRichard Fitzgerald 		KUNIT_EXPECT_NOT_NULL_MSG(test,
259bf2d44d0SRichard Fitzgerald 					  strstr(priv->searched_fw_files, fw_name),
260bf2d44d0SRichard Fitzgerald 					  "fw#%d Did not find '%s' in '%s'\n",
261bf2d44d0SRichard Fitzgerald 					  dsp->fw, fw_name, priv->searched_fw_files);
26278538047SRichard Fitzgerald 
26378538047SRichard Fitzgerald 		wm_adsp_free_found_fw(test);
264*af64f790SRichard Fitzgerald 		memset(priv->searched_fw_files, 0, sizeof(priv->searched_fw_files));
265bf2d44d0SRichard Fitzgerald 	}
266bf2d44d0SRichard Fitzgerald }
267bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_case_init(struct kunit * test)268bf2d44d0SRichard Fitzgerald static int wm_adsp_fw_find_test_case_init(struct kunit *test)
269bf2d44d0SRichard Fitzgerald {
270bf2d44d0SRichard Fitzgerald 	struct wm_adsp_fw_find_test *priv;
271bf2d44d0SRichard Fitzgerald 	struct device *test_dev;
272bf2d44d0SRichard Fitzgerald 	int ret;
273bf2d44d0SRichard Fitzgerald 
274bf2d44d0SRichard Fitzgerald 	priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
275bf2d44d0SRichard Fitzgerald 	if (!priv)
276bf2d44d0SRichard Fitzgerald 		return -ENOMEM;
277bf2d44d0SRichard Fitzgerald 
278bf2d44d0SRichard Fitzgerald 	/* Require dummy struct snd_soc_component for the alsa name prefix string */
279bf2d44d0SRichard Fitzgerald 	priv->dsp.component = kunit_kzalloc(test, sizeof(*priv->dsp.component), GFP_KERNEL);
280bf2d44d0SRichard Fitzgerald 	if (!priv->dsp.component)
281bf2d44d0SRichard Fitzgerald 		return -ENOMEM;
282bf2d44d0SRichard Fitzgerald 
283bf2d44d0SRichard Fitzgerald 	test->priv = priv;
284bf2d44d0SRichard Fitzgerald 
285bf2d44d0SRichard Fitzgerald 	/* Create dummy amp device */
286bf2d44d0SRichard Fitzgerald 	test_dev = kunit_device_register(test, "wm_adsp_test_drv");
287bf2d44d0SRichard Fitzgerald 	if (IS_ERR(test_dev))
288bf2d44d0SRichard Fitzgerald 		return PTR_ERR(test_dev);
289bf2d44d0SRichard Fitzgerald 
290bf2d44d0SRichard Fitzgerald 	priv->dsp.cs_dsp.dev = get_device(test_dev);
291bf2d44d0SRichard Fitzgerald 	if (!priv->dsp.cs_dsp.dev)
292bf2d44d0SRichard Fitzgerald 		return -ENODEV;
293bf2d44d0SRichard Fitzgerald 
294bf2d44d0SRichard Fitzgerald 	ret = kunit_add_action_or_reset(test, _put_device_wrapper, priv->dsp.cs_dsp.dev);
295bf2d44d0SRichard Fitzgerald 	if (ret)
296bf2d44d0SRichard Fitzgerald 		return ret;
297bf2d44d0SRichard Fitzgerald 
298bf2d44d0SRichard Fitzgerald 	return 0;
299bf2d44d0SRichard Fitzgerald }
300bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_case_exit(struct kunit * test)301bf2d44d0SRichard Fitzgerald static void wm_adsp_fw_find_test_case_exit(struct kunit *test)
302bf2d44d0SRichard Fitzgerald {
30378538047SRichard Fitzgerald 	wm_adsp_free_found_fw(test);
304bf2d44d0SRichard Fitzgerald }
305bf2d44d0SRichard Fitzgerald 
wm_adsp_fw_find_test_param_desc(const struct wm_adsp_fw_find_test_params * param,char * desc)306bf2d44d0SRichard Fitzgerald static void wm_adsp_fw_find_test_param_desc(const struct wm_adsp_fw_find_test_params *param,
307bf2d44d0SRichard Fitzgerald 					    char *desc)
308bf2d44d0SRichard Fitzgerald {
309bf2d44d0SRichard Fitzgerald 	snprintf(desc, KUNIT_PARAM_DESC_SIZE,
310bf2d44d0SRichard Fitzgerald 		 "%s %s fwf_name:%s system:%s alsa_name:%s %s expects:(%s %s)",
311bf2d44d0SRichard Fitzgerald 		  param->part, param->dsp_name,
312bf2d44d0SRichard Fitzgerald 		  param->fwf_name ? param->fwf_name : "",
313bf2d44d0SRichard Fitzgerald 		  param->system_name ? param->system_name : "",
314bf2d44d0SRichard Fitzgerald 		  param->alsa_name ? param->alsa_name : "",
315bf2d44d0SRichard Fitzgerald 		  param->wmfw_optional ? "wmfw_optional" : "",
316bf2d44d0SRichard Fitzgerald 		  param->expect_wmfw ? param->expect_wmfw : "",
317bf2d44d0SRichard Fitzgerald 		  param->expect_bin ? param->expect_bin : "");
318bf2d44d0SRichard Fitzgerald }
319bf2d44d0SRichard Fitzgerald 
320bf2d44d0SRichard Fitzgerald /* Cases where firmware file not found. Tests full search sequence. */
321bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_full_search_cases[] = {
322bf2d44d0SRichard Fitzgerald 	{ /* system name and alsa prefix, wmfw mandatory. */
323bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
324bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
325bf2d44d0SRichard Fitzgerald 		.expected_searches =
326bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
327bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
328bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
329bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw",
330bf2d44d0SRichard Fitzgerald 	},
331bf2d44d0SRichard Fitzgerald 	{ /* system name and alsa prefix, wmfw optional. */
332bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
333bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
334bf2d44d0SRichard Fitzgerald 		.expected_searches =
335bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
336bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
337bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
338bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
339bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
340bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
341bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
342bf2d44d0SRichard Fitzgerald 	},
343bf2d44d0SRichard Fitzgerald 	{ /* system name only, wmfw mandatory. */
344bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
345bf2d44d0SRichard Fitzgerald 		.expected_searches =
346bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
347bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
348bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw",
349bf2d44d0SRichard Fitzgerald 	},
350bf2d44d0SRichard Fitzgerald 	{ /* system name only, wmfw optional. */
351bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
352bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
353bf2d44d0SRichard Fitzgerald 		.expected_searches =
354bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
355bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
356bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
357bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
358bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
359bf2d44d0SRichard Fitzgerald 	},
360bf2d44d0SRichard Fitzgerald 
361bf2d44d0SRichard Fitzgerald 	/*
362bf2d44d0SRichard Fitzgerald 	 * TODO: Is this a bug? Device-specific bin is only allowed when there
363bf2d44d0SRichard Fitzgerald 	 * is a system_name. But if there isn't any meaningful system name on
364bf2d44d0SRichard Fitzgerald 	 * a product, why can't it load firmware files qualified by alsa prefix?
365bf2d44d0SRichard Fitzgerald 	 */
366bf2d44d0SRichard Fitzgerald 
367bf2d44d0SRichard Fitzgerald 	{ /* Alsa prefix, wmfw mandatory. No system name so generic files only. */
368bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
369bf2d44d0SRichard Fitzgerald 		.expected_searches =
370bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
371bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw",
372bf2d44d0SRichard Fitzgerald 	},
373bf2d44d0SRichard Fitzgerald 	{ /* Alsa prefix, wmfw optional. No system name so generic files only. */
374bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
375bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
376bf2d44d0SRichard Fitzgerald 		.expected_searches =
377bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
378bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
379bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
380bf2d44d0SRichard Fitzgerald 	},
381bf2d44d0SRichard Fitzgerald 
382bf2d44d0SRichard Fitzgerald 	{ /* fwf_name, system name and alsa prefix, wmfw mandatory. */
383bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
384bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .fwf_name = "ao",
385bf2d44d0SRichard Fitzgerald 		.expected_searches =
386bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123-amp1.wmfw "
387bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123.wmfw "
388bf2d44d0SRichard Fitzgerald 			"cs1234-ao-mbc-vss.wmfw "
389bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss.wmfw",
390bf2d44d0SRichard Fitzgerald 	},
391bf2d44d0SRichard Fitzgerald 	{ /* fwf_name, system name and alsa prefix, wmfw optional. */
392bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
393bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .fwf_name = "ao",
394bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
395bf2d44d0SRichard Fitzgerald 		.expected_searches =
396bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123-amp1.wmfw "
397bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123.wmfw "
398bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123-amp1.bin "
399bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss-abc123.bin "
400bf2d44d0SRichard Fitzgerald 			"cs1234-ao-mbc-vss.wmfw "
401bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss.wmfw "
402bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-ao-mbc-vss.bin",
403bf2d44d0SRichard Fitzgerald 	},
404bf2d44d0SRichard Fitzgerald };
405bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_full_search,
406bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_full_search_cases,
407bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
408bf2d44d0SRichard Fitzgerald 
409bf2d44d0SRichard Fitzgerald /* Cases with system name and alsa prefix both given. */
410bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_system_alsaname_cases[] = {
411bf2d44d0SRichard Fitzgerald 	{ /* Fully-qualified wmfw exists. No bin */
412bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
413bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
414bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw",
415bf2d44d0SRichard Fitzgerald 		.expected_searches =
416bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
417bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
418bf2d44d0SRichard Fitzgerald 	},
419bf2d44d0SRichard Fitzgerald 	{ /* Optional fully-qualified wmfw exists. No bin */
420bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
421bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
422bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw",
423bf2d44d0SRichard Fitzgerald 		.expected_searches =
424bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
425bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
426bf2d44d0SRichard Fitzgerald 	},
427bf2d44d0SRichard Fitzgerald 	{ /* Fully-qualified wmfw and bin exist. */
428bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
429bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
430bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw",
431bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
432bf2d44d0SRichard Fitzgerald 		.expected_searches =
433bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
434bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
435bf2d44d0SRichard Fitzgerald 	},
436bf2d44d0SRichard Fitzgerald 	{ /* Optional fully-qualified wmfw and fully-qualified bin exist. */
437bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
438bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
439bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw",
440bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
441bf2d44d0SRichard Fitzgerald 		.expected_searches =
442bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
443bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
444bf2d44d0SRichard Fitzgerald 	},
445bf2d44d0SRichard Fitzgerald 	{ /* wmfw matches system name only. No bin */
446bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
447bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
448bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
449bf2d44d0SRichard Fitzgerald 		.expected_searches =
450bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
451bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
452bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
453bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
454bf2d44d0SRichard Fitzgerald 	},
455bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw matches system name only. No bin */
456bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
457bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
458bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
459bf2d44d0SRichard Fitzgerald 		.expected_searches =
460bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
461bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
462bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
463bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
464bf2d44d0SRichard Fitzgerald 	},
465bf2d44d0SRichard Fitzgerald 	{ /* wmfw matches system name only. Fully-qualified bin. */
466bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
467bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
468bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
469bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
470bf2d44d0SRichard Fitzgerald 		.expected_searches =
471bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
472bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
473bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
474bf2d44d0SRichard Fitzgerald 	},
475bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw matches system name only. Fully-qualified bin. */
476bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
477bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
478bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
479bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
480bf2d44d0SRichard Fitzgerald 		.expected_searches =
481bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
482bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
483bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
484bf2d44d0SRichard Fitzgerald 	},
485bf2d44d0SRichard Fitzgerald 	{ /* wmfw and bin match system name only. */
486bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
487bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
488bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
489bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
490bf2d44d0SRichard Fitzgerald 		.expected_searches =
491bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
492bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
493bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
494bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
495bf2d44d0SRichard Fitzgerald 	},
496bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw and bin match system name only. */
497bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
498bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
499bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
500bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
501bf2d44d0SRichard Fitzgerald 		.expected_searches =
502bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
503bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
504bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
505bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
506bf2d44d0SRichard Fitzgerald 	},
507bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw not found. bin matches fully-qualified name. */
508bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
509bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
510bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
511bf2d44d0SRichard Fitzgerald 		.expected_searches =
512bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
513bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
514bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin",
515bf2d44d0SRichard Fitzgerald 	},
516bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw not found. bin matches system name only. */
517bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
518bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
519bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
520bf2d44d0SRichard Fitzgerald 		.expected_searches =
521bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
522bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
523bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
524bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
525bf2d44d0SRichard Fitzgerald 	},
526bf2d44d0SRichard Fitzgerald 	{ /* No qualified wmfw. Legacy generic wmfw found. No bin. */
527bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
528bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
529bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
530bf2d44d0SRichard Fitzgerald 		.expected_searches =
531bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
532bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
533bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
534bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
535bf2d44d0SRichard Fitzgerald 	},
536bf2d44d0SRichard Fitzgerald 	{ /* No qualified optional wmfw. Legacy generic wmfw found. No bin. */
537bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
538bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
539bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
540bf2d44d0SRichard Fitzgerald 		.expected_searches =
541bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
542bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
543bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
544bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
545bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
546bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
547bf2d44d0SRichard Fitzgerald 	},
548bf2d44d0SRichard Fitzgerald 	{ /* No qualified wmfw. Legacy generic wmfw and bin found. */
549bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
550bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
551bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
552bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
553bf2d44d0SRichard Fitzgerald 		.expected_searches =
554bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
555bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
556bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
557bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
558bf2d44d0SRichard Fitzgerald 	},
559bf2d44d0SRichard Fitzgerald 	{ /* No qualified optional wmfw. Legacy generic wmfw and bin found. */
560bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
561bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
562bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
563bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
564bf2d44d0SRichard Fitzgerald 		.expected_searches =
565bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
566bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
567bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
568bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
569bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
570bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
571bf2d44d0SRichard Fitzgerald 	},
572bf2d44d0SRichard Fitzgerald 	{ /* No qualified or legacy wmfw. Generic wmfw found. No bin. */
573bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
574bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
575bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
576bf2d44d0SRichard Fitzgerald 		.expected_searches =
577bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
578bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
579bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
580bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
581bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
582bf2d44d0SRichard Fitzgerald 	},
583bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or legacy wmfw. Generic wmfw found. No bin. */
584bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
585bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
586bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
587bf2d44d0SRichard Fitzgerald 		.expected_searches =
588bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
589bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
590bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
591bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
592bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
593bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
594bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
595bf2d44d0SRichard Fitzgerald 	},
596bf2d44d0SRichard Fitzgerald 	{ /* No qualified or legacy wmfw. Generic wmfw and bin found. */
597bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
598bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
599bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
600bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
601bf2d44d0SRichard Fitzgerald 		.expected_searches =
602bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
603bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
604bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
605bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
606bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
607bf2d44d0SRichard Fitzgerald 	},
608bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or legacy wmfw. Generic wmfw and bin found. */
609bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
610bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
611bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
612bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
613bf2d44d0SRichard Fitzgerald 		.expected_searches =
614bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
615bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
616bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
617bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
618bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
619bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
620bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
621bf2d44d0SRichard Fitzgerald 	},
622bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or generic wmfw. Generic bin found. */
623bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
624bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
625bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
626bf2d44d0SRichard Fitzgerald 		.expected_searches =
627bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.wmfw "
628bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
629bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123-amp1.bin "
630bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
631bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
632bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
633bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
634bf2d44d0SRichard Fitzgerald 	},
635bf2d44d0SRichard Fitzgerald };
636bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_system_alsaname,
637bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_system_alsaname_cases,
638bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
639bf2d44d0SRichard Fitzgerald 
640bf2d44d0SRichard Fitzgerald /* Cases with system name but without alsa name prefix. */
641bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_system_cases[] = {
642bf2d44d0SRichard Fitzgerald 	{ /* Qualified wmfw found. No bin */
643bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
644bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
645bf2d44d0SRichard Fitzgerald 		.expected_searches =
646bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
647bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
648bf2d44d0SRichard Fitzgerald 	},
649bf2d44d0SRichard Fitzgerald 	{ /* Optional qualified wmfw found. No bin */
650bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
651bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
652bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
653bf2d44d0SRichard Fitzgerald 		.expected_searches =
654bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
655bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
656bf2d44d0SRichard Fitzgerald 	},
657bf2d44d0SRichard Fitzgerald 	{ /* Qualified wmfw found. Qualified bin found. */
658bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
659bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
660bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
661bf2d44d0SRichard Fitzgerald 		.expected_searches =
662bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
663bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
664bf2d44d0SRichard Fitzgerald 	},
665bf2d44d0SRichard Fitzgerald 	{ /* Optional qualified wmfw found. Qualified bin found. */
666bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
667bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
668bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw",
669bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
670bf2d44d0SRichard Fitzgerald 		.expected_searches =
671bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
672bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
673bf2d44d0SRichard Fitzgerald 	},
674bf2d44d0SRichard Fitzgerald 	{ /* Optional wmfw not found. Qualified bin found. */
675bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
676bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
677bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
678bf2d44d0SRichard Fitzgerald 		.expected_searches =
679bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
680bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin",
681bf2d44d0SRichard Fitzgerald 	},
682bf2d44d0SRichard Fitzgerald 	{ /* No qualified wmfw. Legacy generic wmfw found. No bin. */
683bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
684bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
685bf2d44d0SRichard Fitzgerald 		.expected_searches =
686bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
687bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
688bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
689bf2d44d0SRichard Fitzgerald 	},
690bf2d44d0SRichard Fitzgerald 	{ /* No qualified optional wmfw. Legacy generic wmfw found. No bin. */
691bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
692bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
693bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
694bf2d44d0SRichard Fitzgerald 		.expected_searches =
695bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
696bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
697bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
698bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
699bf2d44d0SRichard Fitzgerald 	},
700bf2d44d0SRichard Fitzgerald 	{ /* No qualified wmfw. Legacy generic wmfw and bin found. */
701bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
702bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
703bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
704bf2d44d0SRichard Fitzgerald 		.expected_searches =
705bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
706bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
707bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
708bf2d44d0SRichard Fitzgerald 	},
709bf2d44d0SRichard Fitzgerald 	{ /* No qualified optional wmfw. Legacy generic wmfw and bin found. */
710bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
711bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
712bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
713bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
714bf2d44d0SRichard Fitzgerald 		.expected_searches =
715bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
716bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
717bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
718bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
719bf2d44d0SRichard Fitzgerald 	},
720bf2d44d0SRichard Fitzgerald 	{ /* No qualified or legacy wmfw. Generic wmfw found. No bin. */
721bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
722bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
723bf2d44d0SRichard Fitzgerald 		.expected_searches =
724bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
725bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
726bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
727bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
728bf2d44d0SRichard Fitzgerald 	},
729bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or legacy wmfw. Generic wmfw found. No bin. */
730bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
731bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
732bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
733bf2d44d0SRichard Fitzgerald 		.expected_searches =
734bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
735bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
736bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
737bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
738bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
739bf2d44d0SRichard Fitzgerald 	},
740bf2d44d0SRichard Fitzgerald 	{ /* No qualified or legacy wmfw. Generic wmfw and bin found. */
741bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
742bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
743bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
744bf2d44d0SRichard Fitzgerald 		.expected_searches =
745bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
746bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
747bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
748bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
749bf2d44d0SRichard Fitzgerald 	},
750bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or legacy wmfw. Generic wmfw and bin found. */
751bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
752bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
753bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
754bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
755bf2d44d0SRichard Fitzgerald 		.expected_searches =
756bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
757bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
758bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
759bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
760bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
761bf2d44d0SRichard Fitzgerald 	},
762bf2d44d0SRichard Fitzgerald 	{ /* No optional qualified or generic wmfw. Generic bin found. */
763bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "ABC123",
764bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
765bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
766bf2d44d0SRichard Fitzgerald 		.expected_searches =
767bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.wmfw "
768bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc123.bin "
769bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
770bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
771bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
772bf2d44d0SRichard Fitzgerald 	},
773bf2d44d0SRichard Fitzgerald };
774bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_system,
775bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_system_cases,
776bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
777bf2d44d0SRichard Fitzgerald 
778bf2d44d0SRichard Fitzgerald /* Cases without system name but with alsa name prefix. */
779bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_alsaname_cases[] = {
780bf2d44d0SRichard Fitzgerald 	{ /* Legacy generic wmfw found. No bin. */
781bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
782bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
783bf2d44d0SRichard Fitzgerald 		.expected_searches =
784bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
785bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
786bf2d44d0SRichard Fitzgerald 	},
787bf2d44d0SRichard Fitzgerald 	{ /* wmfw optional. Legacy generic wmfw found. No bin. */
788bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
789bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
790bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
791bf2d44d0SRichard Fitzgerald 		.expected_searches =
792bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
793bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
794bf2d44d0SRichard Fitzgerald 	},
795bf2d44d0SRichard Fitzgerald 	{ /* Legacy generic wmfw and bin found. */
796bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
797bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
798bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
799bf2d44d0SRichard Fitzgerald 		.expected_searches =
800bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
801bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
802bf2d44d0SRichard Fitzgerald 	},
803bf2d44d0SRichard Fitzgerald 	{ /* wmfw optional. Legacy generic wmfw and bin found. */
804bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
805bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
806bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
807bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
808bf2d44d0SRichard Fitzgerald 		.expected_searches =
809bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
810bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
811bf2d44d0SRichard Fitzgerald 	},
812bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Generic wmfw found. No bin. */
813bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
814bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
815bf2d44d0SRichard Fitzgerald 		.expected_searches =
816bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
817bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
818bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
819bf2d44d0SRichard Fitzgerald 	},
820bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Optional generic wmfw found. No bin. */
821bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
822bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
823bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
824bf2d44d0SRichard Fitzgerald 		.expected_searches =
825bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
826bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
827bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
828bf2d44d0SRichard Fitzgerald 	},
829bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Generic wmfw and bin found. */
830bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
831bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
832bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
833bf2d44d0SRichard Fitzgerald 		.expected_searches =
834bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
835bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
836bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
837bf2d44d0SRichard Fitzgerald 	},
838bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Optional generic wmfw and bin found. */
839bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
840bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
841bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
842bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
843bf2d44d0SRichard Fitzgerald 		.expected_searches =
844bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
845bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
846bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
847bf2d44d0SRichard Fitzgerald 	},
848bf2d44d0SRichard Fitzgerald 	{ /* No legacy or generic wmfw. Generic bin found. */
849bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .alsa_name = "amp1",
850bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
851bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
852bf2d44d0SRichard Fitzgerald 		.expected_searches =
853bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
854bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
855bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
856bf2d44d0SRichard Fitzgerald 	},
857bf2d44d0SRichard Fitzgerald };
858bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_alsaname,
859bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_alsaname_cases,
860bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
861bf2d44d0SRichard Fitzgerald 
862bf2d44d0SRichard Fitzgerald /* Cases without system name or alsa name prefix. */
863bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_noqual_cases[] = {
864bf2d44d0SRichard Fitzgerald 	{ /* Legacy generic wmfw found. No bin. */
865bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
866bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
867bf2d44d0SRichard Fitzgerald 		.expected_searches =
868bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
869bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
870bf2d44d0SRichard Fitzgerald 	},
871bf2d44d0SRichard Fitzgerald 	{ /* wmfw optional. Legacy generic wmfw found. No bin. */
872bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
873bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
874bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
875bf2d44d0SRichard Fitzgerald 		.expected_searches =
876bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
877bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
878bf2d44d0SRichard Fitzgerald 	},
879bf2d44d0SRichard Fitzgerald 	{ /* Legacy generic wmfw and bin found. */
880bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
881bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
882bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
883bf2d44d0SRichard Fitzgerald 		.expected_searches =
884bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
885bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
886bf2d44d0SRichard Fitzgerald 	},
887bf2d44d0SRichard Fitzgerald 	{ /* wmfw optional. Legacy generic wmfw and bin found. */
888bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
889bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
890bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cs1234-dsp1-mbc-vss.wmfw",
891bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cs1234-dsp1-mbc-vss.bin",
892bf2d44d0SRichard Fitzgerald 		.expected_searches =
893bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
894bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.bin",
895bf2d44d0SRichard Fitzgerald 	},
896bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Generic wmfw found. No bin. */
897bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
898bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
899bf2d44d0SRichard Fitzgerald 		.expected_searches =
900bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
901bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
902bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
903bf2d44d0SRichard Fitzgerald 	},
904bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Optional generic wmfw found. No bin. */
905bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
906bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
907bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
908bf2d44d0SRichard Fitzgerald 		.expected_searches =
909bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
910bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
911bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
912bf2d44d0SRichard Fitzgerald 	},
913bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Generic wmfw and bin found. */
914bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
915bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
916bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
917bf2d44d0SRichard Fitzgerald 		.expected_searches =
918bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
919bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
920bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
921bf2d44d0SRichard Fitzgerald 	},
922bf2d44d0SRichard Fitzgerald 	{ /* No legacy wmfw. Optional generic wmfw and bin found. */
923bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
924bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
925bf2d44d0SRichard Fitzgerald 		.expect_wmfw =  "cirrus/cs1234-dsp1-mbc-vss.wmfw",
926bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
927bf2d44d0SRichard Fitzgerald 		.expected_searches =
928bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
929bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
930bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
931bf2d44d0SRichard Fitzgerald 	},
932bf2d44d0SRichard Fitzgerald 	{ /* No legacy or generic wmfw. Generic bin found. */
933bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
934bf2d44d0SRichard Fitzgerald 		.wmfw_optional = true,
935bf2d44d0SRichard Fitzgerald 		.expect_bin =  "cirrus/cs1234-dsp1-mbc-vss.bin",
936bf2d44d0SRichard Fitzgerald 		.expected_searches =
937bf2d44d0SRichard Fitzgerald 			"cs1234-dsp1-mbc-vss.wmfw "
938bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.wmfw "
939bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss.bin",
940bf2d44d0SRichard Fitzgerald 	},
941bf2d44d0SRichard Fitzgerald };
942bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_noqual,
943bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_noqual_cases,
944bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
945bf2d44d0SRichard Fitzgerald 
946bf2d44d0SRichard Fitzgerald /*
947bf2d44d0SRichard Fitzgerald  * Tests for filename normalization. The system name and alsa prefix strings
948bf2d44d0SRichard Fitzgerald  * should be converted to lower-case and delimiters are converted to '-', except
949bf2d44d0SRichard Fitzgerald  * for '.' which is preserved.
950bf2d44d0SRichard Fitzgerald  */
951bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_normalization_cases[] = {
952bf2d44d0SRichard Fitzgerald 	{
953bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "Vendor",
954bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-vendor.wmfw",
955bf2d44d0SRichard Fitzgerald 		.expected_searches =
956bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor.wmfw "
957bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor.bin",
958bf2d44d0SRichard Fitzgerald 	},
959bf2d44d0SRichard Fitzgerald 	{
960bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "Vendor Device",
961bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw",
962bf2d44d0SRichard Fitzgerald 		.expected_searches =
963bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw "
964bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.bin",
965bf2d44d0SRichard Fitzgerald 	},
966bf2d44d0SRichard Fitzgerald 	{
967bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "Vendor_Device",
968bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw",
969bf2d44d0SRichard Fitzgerald 		.expected_searches =
970bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw "
971bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.bin",
972bf2d44d0SRichard Fitzgerald 	},
973bf2d44d0SRichard Fitzgerald 	{
974d8a4c960SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "Vendor/Device",
975d8a4c960SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw",
976d8a4c960SRichard Fitzgerald 		.expected_searches =
977d8a4c960SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.wmfw "
978d8a4c960SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-vendor-device.bin",
979d8a4c960SRichard Fitzgerald 	},
980d8a4c960SRichard Fitzgerald 	{
981bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "1234:56AB",
982bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-1234-56ab.wmfw",
983bf2d44d0SRichard Fitzgerald 		.expected_searches =
984bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-1234-56ab.wmfw "
985bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-1234-56ab.bin",
986bf2d44d0SRichard Fitzgerald 	},
987bf2d44d0SRichard Fitzgerald 
988bf2d44d0SRichard Fitzgerald 	{
989bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
990bf2d44d0SRichard Fitzgerald 		.alsa_name = "LEFT",
991bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-left.wmfw",
992bf2d44d0SRichard Fitzgerald 		.expected_searches =
993bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left.wmfw "
994bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left.bin",
995bf2d44d0SRichard Fitzgerald 	},
996bf2d44d0SRichard Fitzgerald 	{
997bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
998bf2d44d0SRichard Fitzgerald 		.alsa_name = "LEFT AMP",
999bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.wmfw",
1000bf2d44d0SRichard Fitzgerald 		.expected_searches =
1001bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.wmfw "
1002bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.bin",
1003bf2d44d0SRichard Fitzgerald 	},
1004bf2d44d0SRichard Fitzgerald 	{
1005bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
1006bf2d44d0SRichard Fitzgerald 		.alsa_name = "Left Amp",
1007bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.wmfw",
1008bf2d44d0SRichard Fitzgerald 		.expected_searches =
1009bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.wmfw "
1010bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-left-amp.bin",
1011bf2d44d0SRichard Fitzgerald 	},
1012bf2d44d0SRichard Fitzgerald 	{
1013bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
1014bf2d44d0SRichard Fitzgerald 		.alsa_name = "Amp_1",
1015bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-amp-1.wmfw",
1016bf2d44d0SRichard Fitzgerald 		.expected_searches =
1017bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-amp-1.wmfw "
1018bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-amp-1.bin",
1019bf2d44d0SRichard Fitzgerald 	},
1020bf2d44d0SRichard Fitzgerald 	{
1021bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
1022bf2d44d0SRichard Fitzgerald 		.alsa_name = "cs1234.1",
1023bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-cs1234.1.wmfw",
1024bf2d44d0SRichard Fitzgerald 		.expected_searches =
1025bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-cs1234.1.wmfw "
1026bf2d44d0SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-cs1234.1.bin",
1027bf2d44d0SRichard Fitzgerald 	},
1028d8a4c960SRichard Fitzgerald 	{
1029d8a4c960SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "abc",
1030d8a4c960SRichard Fitzgerald 		.alsa_name = "Spk/Jack",
1031d8a4c960SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-abc-spk-jack.wmfw",
1032d8a4c960SRichard Fitzgerald 		.expected_searches =
1033d8a4c960SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-spk-jack.wmfw "
1034d8a4c960SRichard Fitzgerald 			"cirrus/cs1234-dsp1-mbc-vss-abc-spk-jack.bin",
1035d8a4c960SRichard Fitzgerald 	},
1036bf2d44d0SRichard Fitzgerald };
1037bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_normalization,
1038bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_normalization_cases,
1039bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
1040bf2d44d0SRichard Fitzgerald 
1041bf2d44d0SRichard Fitzgerald /*
1042bf2d44d0SRichard Fitzgerald  * Dummy directory content for regression tests.
1043bf2d44d0SRichard Fitzgerald  * DSP part name and system name are used to select different available
1044bf2d44d0SRichard Fitzgerald  * files.
1045bf2d44d0SRichard Fitzgerald  *
1046bf2d44d0SRichard Fitzgerald  * System:
1047bf2d44d0SRichard Fitzgerald  * WFBF1111 = wmfw and bin fully-qualified
1048bf2d44d0SRichard Fitzgerald  * WSBF1111 = wmfw system-qualified, bin fully-qualified
1049bf2d44d0SRichard Fitzgerald  * WSBS1111 = wmfw and bin system-qualified
1050bf2d44d0SRichard Fitzgerald  * WFXX1111 = wmfw fully-qualified, bin not present
1051bf2d44d0SRichard Fitzgerald  * XXBF1111 = wmfw not present, bin fully-qualified
1052bf2d44d0SRichard Fitzgerald  *
1053bf2d44d0SRichard Fitzgerald  * Part:
1054bf2d44d0SRichard Fitzgerald  * cs1234	= for testing fully-qualified configurations
1055bf2d44d0SRichard Fitzgerald  * cs1234nobin	= generic wmfw without a bin available
1056bf2d44d0SRichard Fitzgerald  * wm1234	= legacy wmfw and bin
1057bf2d44d0SRichard Fitzgerald  * wm1234nobin	= legacy wmfw without bin
1058bf2d44d0SRichard Fitzgerald  */
1059bf2d44d0SRichard Fitzgerald static const char * const wm_adsp_fw_find_test_dir_all_files[] = {
1060bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.wmfw",
1061bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfbf1111-l1u2.wmfw",
1062bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfbf1111.wmfw",
1063bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wsbf1111.wmfw",
1064bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wsbs1111.wmfw",
1065bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfxx1111.wmfw",
1066bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss.wmfw",
1067bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234nobin-dsp1-mbc-vss.wmfw",
1068bf2d44d0SRichard Fitzgerald 	"cirrus/wm1234-dsp1-mbc-vss.wmfw",
1069bf2d44d0SRichard Fitzgerald 	"cirrus/wm1234nobin-dsp1-mbc-vss.wmfw",
1070bf2d44d0SRichard Fitzgerald 	"wm1234-dsp1-mbc-vss.wmfw",
1071bf2d44d0SRichard Fitzgerald 	"wm1234nobin-dsp1-mbc-vss.wmfw",
1072bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.bin",
1073bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wfbf1111-l1u2.bin",
1074bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wsbf1111-amp1.bin",
1075bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wsbf1111-l1u2.bin",
1076bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-wsbs1111.bin",
1077bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss-xxbf1111-amp1.bin",
1078bf2d44d0SRichard Fitzgerald 	"cirrus/cs1234-dsp1-mbc-vss.bin",
1079bf2d44d0SRichard Fitzgerald 	"cirrus/wm1234-dsp1-mbc-vss.bin",
1080bf2d44d0SRichard Fitzgerald 	"wm1234-dsp1-mbc-vss.bin",
1081951a4e85SRichard Fitzgerald 	NULL /* terminator */
1082bf2d44d0SRichard Fitzgerald };
1083bf2d44d0SRichard Fitzgerald 
1084bf2d44d0SRichard Fitzgerald /*
1085bf2d44d0SRichard Fitzgerald  * Regression testing that a change in the search algorithm doesn't change
1086bf2d44d0SRichard Fitzgerald  * which file is picked. This doesn't cover every possible combination, only
1087bf2d44d0SRichard Fitzgerald  * those that are already in use and typical cases.
1088bf2d44d0SRichard Fitzgerald  *
1089bf2d44d0SRichard Fitzgerald  * It wouldn't be efficent to fully prove the algorithm this way (too many
1090bf2d44d0SRichard Fitzgerald  * directory content combinations would be needed, and it only infers what the
1091bf2d44d0SRichard Fitzgerald  * algorithm searched for, it doesn't prove exactly what searches were made).
1092bf2d44d0SRichard Fitzgerald  * So the main testing is done by checking for the expected file searches.
1093bf2d44d0SRichard Fitzgerald  * This regression test is independent of the search algorithm.
1094bf2d44d0SRichard Fitzgerald  *
1095bf2d44d0SRichard Fitzgerald  * The main tests already prove that the algorithm only searches for files
1096bf2d44d0SRichard Fitzgerald  * with the correct qualifiers so we can assume that files with the wrong
1097bf2d44d0SRichard Fitzgerald  * qualifiers would not be picked and there's no need to test for that here.
1098bf2d44d0SRichard Fitzgerald  */
1099bf2d44d0SRichard Fitzgerald static const struct wm_adsp_fw_find_test_params wm_adsp_fw_find_pick_cases[] = {
1100bf2d44d0SRichard Fitzgerald 	/*
1101bf2d44d0SRichard Fitzgerald 	 * Amps
1102bf2d44d0SRichard Fitzgerald 	 */
1103bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin fully-qualified */
1104bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFBF1111",
1105bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
1106bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.wmfw",
1107bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.bin",
1108bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1109bf2d44d0SRichard Fitzgerald 	},
1110bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin fully-qualified */
1111bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFBF1111",
1112bf2d44d0SRichard Fitzgerald 		.alsa_name = "l1u2",
1113bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-l1u2.wmfw",
1114bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-l1u2.bin",
1115bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1116bf2d44d0SRichard Fitzgerald 	},
1117bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw only system-qualified, bin fully-qualified */
1118bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WSBF1111",
1119bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
1120bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111.wmfw",
1121bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111-amp1.bin",
1122bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1123bf2d44d0SRichard Fitzgerald 	},
1124bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw only system-qualified, bin fully-qualified */
1125bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WSBF1111",
1126bf2d44d0SRichard Fitzgerald 		.alsa_name = "l1u2",
1127bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111.wmfw",
1128bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111-l1u2.bin",
1129bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1130bf2d44d0SRichard Fitzgerald 	},
1131bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw optional but present, and bin fully-qualified */
1132bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFBF1111",
1133bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
1134bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.wmfw",
1135bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.bin",
1136bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1137bf2d44d0SRichard Fitzgerald 	},
1138bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin only system-qualified */
1139bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WSBS1111",
1140bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
1141bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wsbs1111.wmfw",
1142bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wsbs1111.bin",
1143bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1144bf2d44d0SRichard Fitzgerald 	},
1145bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw optional but system-qualified wmfm present, bin fully-qualified */
1146bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WSBF1111",
1147bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
1148bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111.wmfw",
1149bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wsbf1111-amp1.bin",
1150bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1151bf2d44d0SRichard Fitzgerald 	},
1152bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw optional not present, and bin fully-qualified */
1153bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "XXBF1111",
1154bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true,
1155bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-xxbf1111-amp1.bin",
1156bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1157bf2d44d0SRichard Fitzgerald 	},
1158bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin fully-qualified, bin mandatory and present */
1159bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFBF1111",
1160bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .bin_mandatory = true,
1161bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.wmfw",
1162bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss-wfbf1111-amp1.bin",
1163bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1164bf2d44d0SRichard Fitzgerald 	},
1165bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin fully-qualified, bin mandatory but not present */
1166bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFXX1111",
1167bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .bin_mandatory = true,
1168bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfxx1111.wmfw",
1169bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1170bf2d44d0SRichard Fitzgerald 	},
1171bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw optional but present, bin mandatory but not present */
1172bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "WFXX1111",
1173bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1", .wmfw_optional = true, .bin_mandatory = true,
1174bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss-wfxx1111.wmfw",
1175bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1176bf2d44d0SRichard Fitzgerald 	},
1177bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin not present, generic fallbacks are present */
1178bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1", .system_name = "XXXX1111",
1179bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
1180bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss.wmfw",
1181bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss.bin",
1182bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1183bf2d44d0SRichard Fitzgerald 	},
1184bf2d44d0SRichard Fitzgerald 	{ /* Full info, wmfw and bin not present, generic wmfw present */
1185bf2d44d0SRichard Fitzgerald 		.part = "cs1234nobin", .dsp_name = "dsp1", .system_name = "XXXX1111",
1186bf2d44d0SRichard Fitzgerald 		.alsa_name = "amp1",
1187bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234nobin-dsp1-mbc-vss.wmfw",
1188bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1189bf2d44d0SRichard Fitzgerald 	},
1190bf2d44d0SRichard Fitzgerald 
1191bf2d44d0SRichard Fitzgerald 	/*
1192bf2d44d0SRichard Fitzgerald 	 * Codecs
1193bf2d44d0SRichard Fitzgerald 	 */
1194bf2d44d0SRichard Fitzgerald 	{ /* No qualifiers. Generic wmfws exist, legacy should be chosen. */
1195bf2d44d0SRichard Fitzgerald 		.part = "wm1234nobin", .dsp_name = "dsp1",
1196bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "wm1234nobin-dsp1-mbc-vss.wmfw",
1197bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1198bf2d44d0SRichard Fitzgerald 	},
1199bf2d44d0SRichard Fitzgerald 	{ /* No qualifiers. Generic wmfw and bin exist, legacy should be chosen */
1200bf2d44d0SRichard Fitzgerald 		.part = "wm1234", .dsp_name = "dsp1",
1201bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "wm1234-dsp1-mbc-vss.wmfw",
1202bf2d44d0SRichard Fitzgerald 		.expect_bin = "wm1234-dsp1-mbc-vss.bin",
1203bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1204bf2d44d0SRichard Fitzgerald 	},
1205bf2d44d0SRichard Fitzgerald 	{ /* No qualifiers. New generic wmfw exists, no legacy files. */
1206bf2d44d0SRichard Fitzgerald 		.part = "cs1234nobin", .dsp_name = "dsp1",
1207bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234nobin-dsp1-mbc-vss.wmfw",
1208bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1209bf2d44d0SRichard Fitzgerald 	},
1210bf2d44d0SRichard Fitzgerald 	{ /* No qualifiers. New generic wmfw and bin exist, no legacy files. */
1211bf2d44d0SRichard Fitzgerald 		.part = "cs1234", .dsp_name = "dsp1",
1212bf2d44d0SRichard Fitzgerald 		.expect_wmfw = "cirrus/cs1234-dsp1-mbc-vss.wmfw",
1213bf2d44d0SRichard Fitzgerald 		.expect_bin = "cirrus/cs1234-dsp1-mbc-vss.bin",
1214bf2d44d0SRichard Fitzgerald 		.dir_files = wm_adsp_fw_find_test_dir_all_files,
1215bf2d44d0SRichard Fitzgerald 	},
1216bf2d44d0SRichard Fitzgerald };
1217bf2d44d0SRichard Fitzgerald KUNIT_ARRAY_PARAM(wm_adsp_fw_find_pick,
1218bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_pick_cases,
1219bf2d44d0SRichard Fitzgerald 		  wm_adsp_fw_find_test_param_desc);
1220bf2d44d0SRichard Fitzgerald 
1221bf2d44d0SRichard Fitzgerald static struct kunit_case wm_adsp_fw_find_test_cases[] = {
1222bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1223bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_full_search_gen_params),
1224bf2d44d0SRichard Fitzgerald 
1225bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1226bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_system_alsaname_gen_params),
1227bf2d44d0SRichard Fitzgerald 
1228bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1229bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_system_gen_params),
1230bf2d44d0SRichard Fitzgerald 
1231bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1232bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_alsaname_gen_params),
1233bf2d44d0SRichard Fitzgerald 
1234bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1235bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_noqual_gen_params),
1236bf2d44d0SRichard Fitzgerald 
1237bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_search_order,
1238bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_normalization_gen_params),
1239bf2d44d0SRichard Fitzgerald 
1240bf2d44d0SRichard Fitzgerald 	KUNIT_CASE_PARAM(wm_adsp_fw_find_test_pick_file,
1241bf2d44d0SRichard Fitzgerald 			 wm_adsp_fw_find_pick_gen_params),
1242bf2d44d0SRichard Fitzgerald 
1243bf2d44d0SRichard Fitzgerald 	KUNIT_CASE(wm_adsp_fw_find_test_find_firmware_byindex),
1244bf2d44d0SRichard Fitzgerald 
1245bf2d44d0SRichard Fitzgerald 	{ } /* terminator */
1246bf2d44d0SRichard Fitzgerald };
1247bf2d44d0SRichard Fitzgerald 
1248bf2d44d0SRichard Fitzgerald static struct kunit_suite wm_adsp_fw_find_test_suite = {
1249bf2d44d0SRichard Fitzgerald 	.name = "wm-adsp-fw-find",
1250bf2d44d0SRichard Fitzgerald 	.init = wm_adsp_fw_find_test_case_init,
1251bf2d44d0SRichard Fitzgerald 	.exit = wm_adsp_fw_find_test_case_exit,
1252bf2d44d0SRichard Fitzgerald 	.test_cases = wm_adsp_fw_find_test_cases,
1253bf2d44d0SRichard Fitzgerald };
1254bf2d44d0SRichard Fitzgerald 
1255bf2d44d0SRichard Fitzgerald kunit_test_suite(wm_adsp_fw_find_test_suite);
1256bf2d44d0SRichard Fitzgerald 
1257bf2d44d0SRichard Fitzgerald MODULE_DESCRIPTION("KUnit test for Cirrus Logic wm_adsp driver");
1258bf2d44d0SRichard Fitzgerald MODULE_AUTHOR("Richard Fitzgerald <rf@opensource.cirrus.com>");
1259bf2d44d0SRichard Fitzgerald MODULE_LICENSE("GPL");
1260bf2d44d0SRichard Fitzgerald MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
1261