]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: cs_dsp: mock_bin: Add function to create long-offset patches
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 31 Dec 2025 17:27:08 +0000 (17:27 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 5 Jan 2026 13:18:28 +0000 (13:18 +0000)
Add cs_dsp_mock_bin_add_patch_off32(). This is the same as
cs_dsp_mock_bin_add_patch() except that it puts the offset in the
new 32-bit offset field and modifies the block type to indicate
that it uses the long offset.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20251231172711.450024-6-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/firmware/cirrus/test/cs_dsp_mock_bin.c
include/linux/firmware/cirrus/cs_dsp_test_utils.h

index bc6b8651259c65e60e0549c7e09d0e970e96c69e..635e917e05165b2411c7bbb480c93bee45c45fdb 100644 (file)
@@ -163,6 +163,34 @@ void cs_dsp_mock_bin_add_patch(struct cs_dsp_mock_bin_builder *builder,
 }
 EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_bin_add_patch, "FW_CS_DSP_KUNIT_TEST_UTILS");
 
+/**
+ * cs_dsp_mock_bin_add_patch_off32() - Add a patch data block with 32-bit offset.
+ *
+ * @builder:           Pointer to struct cs_dsp_mock_bin_builder.
+ * @alg_id:            Algorithm ID for the patch.
+ * @alg_ver:           Algorithm version for the patch.
+ * @mem_region:                Memory region for the patch.
+ * @reg_addr_offset:   Offset to start of data in register addresses.
+ * @payload_data:      Pointer to buffer containing the payload data.
+ * @payload_len_bytes: Length of payload data in bytes.
+ */
+void cs_dsp_mock_bin_add_patch_off32(struct cs_dsp_mock_bin_builder *builder,
+                                    unsigned int alg_id, unsigned int alg_ver,
+                                    int mem_region, unsigned int reg_addr_offset,
+                                    const void *payload_data, size_t payload_len_bytes)
+{
+       /* Payload length must be a multiple of 4 */
+       KUNIT_ASSERT_EQ(builder->test_priv->test, payload_len_bytes % 4, 0);
+
+       /* Mark the block as using the 32-bit offset */
+       mem_region |= 0xf400;
+
+       cs_dsp_mock_bin_add_raw_block(builder, alg_id, alg_ver,
+                                     mem_region, 0, reg_addr_offset,
+                                     payload_data, payload_len_bytes);
+}
+EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_bin_add_patch_off32, "FW_CS_DSP_KUNIT_TEST_UTILS");
+
 /**
  * cs_dsp_mock_bin_init() - Initialize a struct cs_dsp_mock_bin_builder.
  *
index 877fa4a496ddf4094edfe1d4458e5e9416b3cf8c..51e99f47e90e6b138b00d105cc04a9a2b2cb5fba 100644 (file)
@@ -136,6 +136,10 @@ void cs_dsp_mock_bin_add_patch(struct cs_dsp_mock_bin_builder *builder,
                               unsigned int alg_id, unsigned int alg_ver,
                               int mem_region, unsigned int reg_addr_offset,
                               const void *payload_data, size_t payload_len_bytes);
+void cs_dsp_mock_bin_add_patch_off32(struct cs_dsp_mock_bin_builder *builder,
+                                    unsigned int alg_id, unsigned int alg_ver,
+                                    int mem_region, unsigned int reg_addr_offset,
+                                    const void *payload_data, size_t payload_len_bytes);
 struct firmware *cs_dsp_mock_bin_get_firmware(struct cs_dsp_mock_bin_builder *builder);
 
 struct cs_dsp_mock_wmfw_builder *cs_dsp_mock_wmfw_init(struct cs_dsp_test *priv,