]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
firmware: cs_dsp: test_bin_error: Fix uninitialized data used as fw version
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Thu, 10 Apr 2025 13:21:29 +0000 (14:21 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 10 Apr 2025 13:47:14 +0000 (14:47 +0100)
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: cd8c058499b6 ("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>
drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c
drivers/firmware/cirrus/test/cs_dsp_test_bin.c
drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c
include/linux/firmware/cirrus/cs_dsp_test_utils.h

index 161272e47bdabcc1fc9c63726035e9529b2cf434..73412bcef50c5055aa85b1e6f6ac37f8b0ab4f55 100644 (file)
@@ -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.
  *
index 1e161bbc5b4a46e6098d194ef32c390a8389aa01..163b7faecff4662dd444a69ba6cfe10d1d91d55b 100644 (file)
@@ -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 */
index 8748874f05524739b39676e45b68fd0ae76aaa91..a7ec956d27249ec4abca50757f079d158aa5199a 100644 (file)
@@ -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 */
index 4f87a908ab4f6ba752677620e15342e696af12ca..ecd821ed8064f1a49d3d84914f310dbbce31e710 100644 (file)
@@ -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);