File Index
Files and directories
Sign in
FILE

cs_dsp_test_utils.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/firmware/cirrus/cs_dsp_test_utils.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Support utilities for cs_dsp testing.
  4 *
  5 * Copyright (C) 2024 Cirrus Logic, Inc. and
  6 *                    Cirrus Logic International Semiconductor Ltd.
  7 */
  8
  9#include <linux/regmap.h>
 10#include <linux/firmware/cirrus/wmfw.h>
 11
 12struct kunit;
 13struct cs_dsp_test;
 14struct cs_dsp_test_local;
 15
 16/**
 17 * struct cs_dsp_test - base class for test utilities
 18 *
 19 * @test:	Pointer to struct kunit instance.
 20 * @dsp:	Pointer to struct cs_dsp instance.
 21 * @local:	Private data for each test suite.
 22 */
 23struct cs_dsp_test {
 24	struct kunit *test;
 25	struct cs_dsp *dsp;
 26
 27	struct cs_dsp_test_local *local;
 28
 29	/* private: Following members are private */
 30	bool saw_bus_write;
 31};
 32
 33/**
 34 * struct cs_dsp_mock_alg_def - Info for creating a mock algorithm entry.
 35 *
 36 * @id:		   Algorithm ID.
 37 * @ver:	   Algorithm version.
 38 * @xm_base_words: XM base address in DSP words.
 39 * @xm_size_words: XM size in DSP words.
 40 * @ym_base_words: YM base address in DSP words.
 41 * @ym_size_words: YM size in DSP words.
 42 * @zm_base_words: ZM base address in DSP words.
 43 * @zm_size_words: ZM size in DSP words.
 44 */
 45struct cs_dsp_mock_alg_def {
 46	unsigned int id;
 47	unsigned int ver;
 48	unsigned int xm_base_words;
 49	unsigned int xm_size_words;
 50	unsigned int ym_base_words;
 51	unsigned int ym_size_words;
 52	unsigned int zm_base_words;
 53	unsigned int zm_size_words;
 54};
 55
 56struct cs_dsp_mock_coeff_def {
 57	const char *shortname;
 58	const char *fullname;
 59	const char *description;
 60	u16 type;
 61	u16 flags;
 62	u16 mem_type;
 63	unsigned int offset_dsp_words;
 64	unsigned int length_bytes;
 65};
 66
 67/**
 68 * struct cs_dsp_mock_xm_header - XM header builder
 69 *
 70 * @test_priv:	     Pointer to the struct cs_dsp_test.
 71 * @blob_data:	     Pointer to the created blob data.
 72 * @blob_size_bytes: Size of the data at blob_data.
 73 */
 74struct cs_dsp_mock_xm_header {
 75	struct cs_dsp_test *test_priv;
 76	void *blob_data;
 77	size_t blob_size_bytes;
 78};
 79
 80struct cs_dsp_mock_wmfw_builder;
 81struct cs_dsp_mock_bin_builder;
 82
 83extern const unsigned int cs_dsp_mock_adsp2_32bit_sysbase;
 84extern const unsigned int cs_dsp_mock_adsp2_16bit_sysbase;
 85extern const unsigned int cs_dsp_mock_halo_core_base;
 86extern const unsigned int cs_dsp_mock_halo_sysinfo_base;
 87
 88extern const struct cs_dsp_region cs_dsp_mock_halo_dsp1_regions[];
 89extern const unsigned int cs_dsp_mock_halo_dsp1_region_sizes[];
 90extern const struct cs_dsp_region cs_dsp_mock_adsp2_32bit_dsp1_regions[];
 91extern const unsigned int cs_dsp_mock_adsp2_32bit_dsp1_region_sizes[];
 92extern const struct cs_dsp_region cs_dsp_mock_adsp2_16bit_dsp1_regions[];
 93extern const unsigned int cs_dsp_mock_adsp2_16bit_dsp1_region_sizes[];
 94int cs_dsp_mock_count_regions(const unsigned int *region_sizes);
 95unsigned int cs_dsp_mock_size_of_region(const struct cs_dsp *dsp, int mem_type);
 96unsigned int cs_dsp_mock_base_addr_for_mem(struct cs_dsp_test *priv, int mem_type);
 97unsigned int cs_dsp_mock_reg_addr_inc_per_unpacked_word(struct cs_dsp_test *priv);
 98unsigned int cs_dsp_mock_reg_block_length_bytes(struct cs_dsp_test *priv, int mem_type);
 99unsigned int cs_dsp_mock_reg_block_length_registers(struct cs_dsp_test *priv, int mem_type);
100unsigned int cs_dsp_mock_reg_block_length_dsp_words(struct cs_dsp_test *priv, int mem_type);
101bool cs_dsp_mock_has_zm(struct cs_dsp_test *priv);
102int cs_dsp_mock_packed_to_unpacked_mem_type(int packed_mem_type);
103unsigned int cs_dsp_mock_num_dsp_words_to_num_packed_regs(unsigned int num_dsp_words);
104unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv,
105							 unsigned int alg_id,
106							 int mem_type);
107unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header);
108void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv);
109int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);
110struct cs_dsp_mock_xm_header *cs_dsp_create_mock_xm_header(struct cs_dsp_test *priv,
111							   const struct cs_dsp_mock_alg_def *algs,
112							   size_t num_algs);
113
114int cs_dsp_mock_regmap_init(struct cs_dsp_test *priv);
115void cs_dsp_mock_regmap_drop_range(struct cs_dsp_test *priv,
116				   unsigned int first_reg, unsigned int last_reg);
117void cs_dsp_mock_regmap_drop_regs(struct cs_dsp_test *priv,
118				  unsigned int first_reg, size_t num_regs);
119void cs_dsp_mock_regmap_drop_bytes(struct cs_dsp_test *priv,
120				   unsigned int first_reg, size_t num_bytes);
121void cs_dsp_mock_regmap_drop_system_regs(struct cs_dsp_test *priv);
122bool cs_dsp_mock_regmap_is_dirty(struct cs_dsp_test *priv, bool drop_system_regs);
123
124struct cs_dsp_mock_bin_builder *cs_dsp_mock_bin_init(struct cs_dsp_test *priv,
125						     int format_version,
126						     unsigned int fw_version);
127void cs_dsp_mock_bin_add_raw_block(struct cs_dsp_mock_bin_builder *builder,
128				   unsigned int alg_id, unsigned int alg_ver,
129				   int type, unsigned int offset,
130				   const void *payload_data, size_t payload_len_bytes);
131void cs_dsp_mock_bin_add_info(struct cs_dsp_mock_bin_builder *builder,
132			      const char *info);
133void cs_dsp_mock_bin_add_name(struct cs_dsp_mock_bin_builder *builder,
134			      const char *name);
135void cs_dsp_mock_bin_add_patch(struct cs_dsp_mock_bin_builder *builder,
136			       unsigned int alg_id, unsigned int alg_ver,
137			       int mem_region, unsigned int reg_addr_offset,
138			       const void *payload_data, size_t payload_len_bytes);
139struct firmware *cs_dsp_mock_bin_get_firmware(struct cs_dsp_mock_bin_builder *builder);
140
141struct cs_dsp_mock_wmfw_builder *cs_dsp_mock_wmfw_init(struct cs_dsp_test *priv,
142						       int format_version);
143void cs_dsp_mock_wmfw_add_raw_block(struct cs_dsp_mock_wmfw_builder *builder,
144				    int mem_region, unsigned int mem_offset_dsp_words,
145				    const void *payload_data, size_t payload_len_bytes);
146void cs_dsp_mock_wmfw_add_info(struct cs_dsp_mock_wmfw_builder *builder,
147			       const char *info);
148void cs_dsp_mock_wmfw_add_data_block(struct cs_dsp_mock_wmfw_builder *builder,
149				     int mem_region, unsigned int mem_offset_dsp_words,
150				     const void *payload_data, size_t payload_len_bytes);
151void cs_dsp_mock_wmfw_start_alg_info_block(struct cs_dsp_mock_wmfw_builder *builder,
152					   unsigned int alg_id,
153					   const char *name,
154					   const char *description);
155void cs_dsp_mock_wmfw_add_coeff_desc(struct cs_dsp_mock_wmfw_builder *builder,
156				     const struct cs_dsp_mock_coeff_def *def);
157void cs_dsp_mock_wmfw_end_alg_info_block(struct cs_dsp_mock_wmfw_builder *builder);
158struct firmware *cs_dsp_mock_wmfw_get_firmware(struct cs_dsp_mock_wmfw_builder *builder);
159int cs_dsp_mock_wmfw_format_version(struct cs_dsp_mock_wmfw_builder *builder);
~/ Read-only file preview.