mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00

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>
160 lines
6.4 KiB
C
160 lines
6.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Support utilities for cs_dsp testing.
|
|
*
|
|
* Copyright (C) 2024 Cirrus Logic, Inc. and
|
|
* Cirrus Logic International Semiconductor Ltd.
|
|
*/
|
|
|
|
#include <linux/regmap.h>
|
|
#include <linux/firmware/cirrus/wmfw.h>
|
|
|
|
struct kunit;
|
|
struct cs_dsp_test;
|
|
struct cs_dsp_test_local;
|
|
|
|
/**
|
|
* struct cs_dsp_test - base class for test utilities
|
|
*
|
|
* @test: Pointer to struct kunit instance.
|
|
* @dsp: Pointer to struct cs_dsp instance.
|
|
* @local: Private data for each test suite.
|
|
*/
|
|
struct cs_dsp_test {
|
|
struct kunit *test;
|
|
struct cs_dsp *dsp;
|
|
|
|
struct cs_dsp_test_local *local;
|
|
|
|
/* Following members are private */
|
|
bool saw_bus_write;
|
|
};
|
|
|
|
/**
|
|
* struct cs_dsp_mock_alg_def - Info for creating a mock algorithm entry.
|
|
*
|
|
* @id Algorithm ID.
|
|
* @ver; Algorithm version.
|
|
* @xm_base_words XM base address in DSP words.
|
|
* @xm_size_words XM size in DSP words.
|
|
* @ym_base_words YM base address in DSP words.
|
|
* @ym_size_words YM size in DSP words.
|
|
* @zm_base_words ZM base address in DSP words.
|
|
* @zm_size_words ZM size in DSP words.
|
|
*/
|
|
struct cs_dsp_mock_alg_def {
|
|
unsigned int id;
|
|
unsigned int ver;
|
|
unsigned int xm_base_words;
|
|
unsigned int xm_size_words;
|
|
unsigned int ym_base_words;
|
|
unsigned int ym_size_words;
|
|
unsigned int zm_base_words;
|
|
unsigned int zm_size_words;
|
|
};
|
|
|
|
struct cs_dsp_mock_coeff_def {
|
|
const char *shortname;
|
|
const char *fullname;
|
|
const char *description;
|
|
u16 type;
|
|
u16 flags;
|
|
u16 mem_type;
|
|
unsigned int offset_dsp_words;
|
|
unsigned int length_bytes;
|
|
};
|
|
|
|
/**
|
|
* struct cs_dsp_mock_xm_header - XM header builder
|
|
*
|
|
* @test_priv: Pointer to the struct cs_dsp_test.
|
|
* @blob_data: Pointer to the created blob data.
|
|
* @blob_size_bytes: Size of the data at blob_data.
|
|
*/
|
|
struct cs_dsp_mock_xm_header {
|
|
struct cs_dsp_test *test_priv;
|
|
void *blob_data;
|
|
size_t blob_size_bytes;
|
|
};
|
|
|
|
struct cs_dsp_mock_wmfw_builder;
|
|
struct cs_dsp_mock_bin_builder;
|
|
|
|
extern const unsigned int cs_dsp_mock_adsp2_32bit_sysbase;
|
|
extern const unsigned int cs_dsp_mock_adsp2_16bit_sysbase;
|
|
extern const unsigned int cs_dsp_mock_halo_core_base;
|
|
extern const unsigned int cs_dsp_mock_halo_sysinfo_base;
|
|
|
|
extern const struct cs_dsp_region cs_dsp_mock_halo_dsp1_regions[];
|
|
extern const unsigned int cs_dsp_mock_halo_dsp1_region_sizes[];
|
|
extern const struct cs_dsp_region cs_dsp_mock_adsp2_32bit_dsp1_regions[];
|
|
extern const unsigned int cs_dsp_mock_adsp2_32bit_dsp1_region_sizes[];
|
|
extern const struct cs_dsp_region cs_dsp_mock_adsp2_16bit_dsp1_regions[];
|
|
extern const unsigned int cs_dsp_mock_adsp2_16bit_dsp1_region_sizes[];
|
|
int cs_dsp_mock_count_regions(const unsigned int *region_sizes);
|
|
unsigned int cs_dsp_mock_size_of_region(const struct cs_dsp *dsp, int mem_type);
|
|
unsigned int cs_dsp_mock_base_addr_for_mem(struct cs_dsp_test *priv, int mem_type);
|
|
unsigned int cs_dsp_mock_reg_addr_inc_per_unpacked_word(struct cs_dsp_test *priv);
|
|
unsigned int cs_dsp_mock_reg_block_length_bytes(struct cs_dsp_test *priv, int mem_type);
|
|
unsigned int cs_dsp_mock_reg_block_length_registers(struct cs_dsp_test *priv, int mem_type);
|
|
unsigned int cs_dsp_mock_reg_block_length_dsp_words(struct cs_dsp_test *priv, int mem_type);
|
|
bool cs_dsp_mock_has_zm(struct cs_dsp_test *priv);
|
|
int cs_dsp_mock_packed_to_unpacked_mem_type(int packed_mem_type);
|
|
unsigned int cs_dsp_mock_num_dsp_words_to_num_packed_regs(unsigned int num_dsp_words);
|
|
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(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);
|
|
struct cs_dsp_mock_xm_header *cs_dsp_create_mock_xm_header(struct cs_dsp_test *priv,
|
|
const struct cs_dsp_mock_alg_def *algs,
|
|
size_t num_algs);
|
|
|
|
int cs_dsp_mock_regmap_init(struct cs_dsp_test *priv);
|
|
void cs_dsp_mock_regmap_drop_range(struct cs_dsp_test *priv,
|
|
unsigned int first_reg, unsigned int last_reg);
|
|
void cs_dsp_mock_regmap_drop_regs(struct cs_dsp_test *priv,
|
|
unsigned int first_reg, size_t num_regs);
|
|
void cs_dsp_mock_regmap_drop_bytes(struct cs_dsp_test *priv,
|
|
unsigned int first_reg, size_t num_bytes);
|
|
void cs_dsp_mock_regmap_drop_system_regs(struct cs_dsp_test *priv);
|
|
bool cs_dsp_mock_regmap_is_dirty(struct cs_dsp_test *priv, bool drop_system_regs);
|
|
|
|
struct cs_dsp_mock_bin_builder *cs_dsp_mock_bin_init(struct cs_dsp_test *priv,
|
|
int format_version,
|
|
unsigned int fw_version);
|
|
void cs_dsp_mock_bin_add_raw_block(struct cs_dsp_mock_bin_builder *builder,
|
|
unsigned int alg_id, unsigned int alg_ver,
|
|
int type, unsigned int offset,
|
|
const void *payload_data, size_t payload_len_bytes);
|
|
void cs_dsp_mock_bin_add_info(struct cs_dsp_mock_bin_builder *builder,
|
|
const char *info);
|
|
void cs_dsp_mock_bin_add_name(struct cs_dsp_mock_bin_builder *builder,
|
|
const char *name);
|
|
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);
|
|
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,
|
|
int format_version);
|
|
void cs_dsp_mock_wmfw_add_raw_block(struct cs_dsp_mock_wmfw_builder *builder,
|
|
int mem_region, unsigned int mem_offset_dsp_words,
|
|
const void *payload_data, size_t payload_len_bytes);
|
|
void cs_dsp_mock_wmfw_add_info(struct cs_dsp_mock_wmfw_builder *builder,
|
|
const char *info);
|
|
void cs_dsp_mock_wmfw_add_data_block(struct cs_dsp_mock_wmfw_builder *builder,
|
|
int mem_region, unsigned int mem_offset_dsp_words,
|
|
const void *payload_data, size_t payload_len_bytes);
|
|
void cs_dsp_mock_wmfw_start_alg_info_block(struct cs_dsp_mock_wmfw_builder *builder,
|
|
unsigned int alg_id,
|
|
const char *name,
|
|
const char *description);
|
|
void cs_dsp_mock_wmfw_add_coeff_desc(struct cs_dsp_mock_wmfw_builder *builder,
|
|
const struct cs_dsp_mock_coeff_def *def);
|
|
void cs_dsp_mock_wmfw_end_alg_info_block(struct cs_dsp_mock_wmfw_builder *builder);
|
|
struct firmware *cs_dsp_mock_wmfw_get_firmware(struct cs_dsp_mock_wmfw_builder *builder);
|
|
int cs_dsp_mock_wmfw_format_version(struct cs_dsp_mock_wmfw_builder *builder);
|