Skip to content

Commit 285b2c7

Browse files
rfvirgilbroonie
authored andcommitted
firmware: cs_dsp: test_bin_error: Fix uninitialized data used as fw version
Call cs_dsp_mock_xm_header_get_fw_version() to get the firmware version from the dummy XM header data in cs_dsp_bin_err_test_common_init(). Make the same change to cs_dsp_bin_test_common_init() and remove the cs_dsp_mock_xm_header_get_fw_version_from_regmap() function. The code in cs_dsp_test_bin.c was correctly calling cs_dsp_mock_xm_header_get_fw_version_from_regmap() to fetch the fw version from a dummy header it wrote to XM registers. However in cs_dsp_test_bin_error.c the test doesn't stuff a dummy header into XM, it populates it the normal way using a wmfw file. It should have called cs_dsp_mock_xm_header_get_fw_version() to get the data from its blob buffer, but was calling cs_dsp_mock_xm_header_get_fw_version_from_regmap(). As nothing had been written to the registers this returned the value of uninitialized data. The only other use of cs_dsp_mock_xm_header_get_fw_version_from_regmap() was cs_dsp_test_bin.c, but it doesn't need to use it. It already has a blob buffer containing the dummy XM header so it can use cs_dsp_mock_xm_header_get_fw_version() to read from that. Fixes: cd8c058 ("firmware: cs_dsp: Add KUnit testing of bin error cases") Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://patch.msgid.link/20250410132129.1312541-1-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 6bbb2b1 commit 285b2c7

File tree

4 files changed

+2
-33
lines changed

4 files changed

+2
-33
lines changed

drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -461,36 +461,6 @@ unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *pri
461461
}
462462
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_alg_base_in_words, "FW_CS_DSP_KUNIT_TEST_UTILS");
463463

464-
/**
465-
* cs_dsp_mock_xm_header_get_fw_version_from_regmap() - Firmware version.
466-
*
467-
* @priv: Pointer to struct cs_dsp_test.
468-
*
469-
* Return: Firmware version word value.
470-
*/
471-
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv)
472-
{
473-
unsigned int xm = cs_dsp_mock_base_addr_for_mem(priv, WMFW_ADSP2_XM);
474-
union {
475-
struct wmfw_id_hdr adsp2;
476-
struct wmfw_v3_id_hdr halo;
477-
} hdr;
478-
479-
switch (priv->dsp->type) {
480-
case WMFW_ADSP2:
481-
regmap_raw_read(priv->dsp->regmap, xm, &hdr.adsp2, sizeof(hdr.adsp2));
482-
return be32_to_cpu(hdr.adsp2.ver);
483-
case WMFW_HALO:
484-
regmap_raw_read(priv->dsp->regmap, xm, &hdr.halo, sizeof(hdr.halo));
485-
return be32_to_cpu(hdr.halo.ver);
486-
default:
487-
KUNIT_FAIL(priv->test, NULL);
488-
return 0;
489-
}
490-
}
491-
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_fw_version_from_regmap,
492-
"FW_CS_DSP_KUNIT_TEST_UTILS");
493-
494464
/**
495465
* cs_dsp_mock_xm_header_get_fw_version() - Firmware version.
496466
*

drivers/firmware/cirrus/test/cs_dsp_test_bin.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2198,7 +2198,7 @@ static int cs_dsp_bin_test_common_init(struct kunit *test, struct cs_dsp *dsp)
21982198

21992199
priv->local->bin_builder =
22002200
cs_dsp_mock_bin_init(priv, 1,
2201-
cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
2201+
cs_dsp_mock_xm_header_get_fw_version(xm_hdr));
22022202
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->local->bin_builder);
22032203

22042204
/* We must provide a dummy wmfw to load */

drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *ds
451451

452452
local->bin_builder =
453453
cs_dsp_mock_bin_init(priv, 1,
454-
cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
454+
cs_dsp_mock_xm_header_get_fw_version(local->xm_header));
455455
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, local->bin_builder);
456456

457457
/* Init cs_dsp */

include/linux/firmware/cirrus/cs_dsp_test_utils.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ unsigned int cs_dsp_mock_num_dsp_words_to_num_packed_regs(unsigned int num_dsp_w
104104
unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv,
105105
unsigned int alg_id,
106106
int mem_type);
107-
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv);
108107
unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header);
109108
void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv);
110109
int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);

0 commit comments

Comments
 (0)