Unverified Commit 285b2c74 authored by Richard Fitzgerald's avatar Richard Fitzgerald Committed by Mark Brown
Browse files

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: cd8c0584 ("firmware: cs_dsp: Add KUnit testing of bin error cases")
Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20250410132129.1312541-1-rf@opensource.cirrus.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6bbb2b12
Loading
Loading
Loading
Loading
+0 −30
Original line number Diff line number Diff line
@@ -461,36 +461,6 @@ unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *pri
}
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_alg_base_in_words, "FW_CS_DSP_KUNIT_TEST_UTILS");

/**
 * cs_dsp_mock_xm_header_get_fw_version_from_regmap() - Firmware version.
 *
 * @priv:	Pointer to struct cs_dsp_test.
 *
 * Return: Firmware version word value.
 */
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv)
{
	unsigned int xm = cs_dsp_mock_base_addr_for_mem(priv, WMFW_ADSP2_XM);
	union {
		struct wmfw_id_hdr adsp2;
		struct wmfw_v3_id_hdr halo;
	} hdr;

	switch (priv->dsp->type) {
	case WMFW_ADSP2:
		regmap_raw_read(priv->dsp->regmap, xm, &hdr.adsp2, sizeof(hdr.adsp2));
		return be32_to_cpu(hdr.adsp2.ver);
	case WMFW_HALO:
		regmap_raw_read(priv->dsp->regmap, xm, &hdr.halo, sizeof(hdr.halo));
		return be32_to_cpu(hdr.halo.ver);
	default:
		KUNIT_FAIL(priv->test, NULL);
		return 0;
	}
}
EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_fw_version_from_regmap,
		     "FW_CS_DSP_KUNIT_TEST_UTILS");

/**
 * cs_dsp_mock_xm_header_get_fw_version() - Firmware version.
 *
+1 −1
Original line number Diff line number Diff line
@@ -2198,7 +2198,7 @@ static int cs_dsp_bin_test_common_init(struct kunit *test, struct cs_dsp *dsp)

	priv->local->bin_builder =
		cs_dsp_mock_bin_init(priv, 1,
				     cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
				     cs_dsp_mock_xm_header_get_fw_version(xm_hdr));
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->local->bin_builder);

	/* We must provide a dummy wmfw to load */
+1 −1
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *ds

	local->bin_builder =
		cs_dsp_mock_bin_init(priv, 1,
				     cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));
				     cs_dsp_mock_xm_header_get_fw_version(local->xm_header));
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, local->bin_builder);

	/* Init cs_dsp */
+0 −1
Original line number Diff line number Diff line
@@ -104,7 +104,6 @@ unsigned int cs_dsp_mock_num_dsp_words_to_num_packed_regs(unsigned int num_dsp_w
unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv,
							 unsigned int alg_id,
							 int mem_type);
unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv);
unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header);
void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv);
int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);