diff options
-rw-r--r-- | drivers/firmware/cirrus/test/cs_dsp_mock_bin.c | 4 | ||||
-rw-r--r-- | drivers/firmware/cirrus/test/cs_dsp_test_bin.c | 33 | ||||
-rw-r--r-- | sound/soc/codecs/rt715-sdw.c | 41 | ||||
-rw-r--r-- | sound/soc/codecs/rt715.h | 3 | ||||
-rw-r--r-- | sound/soc/generic/simple-card-utils.c | 12 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 2 | ||||
-rw-r--r-- | sound/soc/soc-pcm.c | 32 | ||||
-rw-r--r-- | sound/soc/soc-topology.c | 8 |
8 files changed, 62 insertions, 73 deletions
diff --git a/drivers/firmware/cirrus/test/cs_dsp_mock_bin.c b/drivers/firmware/cirrus/test/cs_dsp_mock_bin.c index 1e271ccfd9b0..49d84f7e59e6 100644 --- a/drivers/firmware/cirrus/test/cs_dsp_mock_bin.c +++ b/drivers/firmware/cirrus/test/cs_dsp_mock_bin.c @@ -53,7 +53,7 @@ EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_bin_get_firmware, "FW_CS_DSP_KUNIT_TEST_UTILS") * cs_dsp_mock_bin_add_raw_block() - Add a data block to the bin file. * * @builder: Pointer to struct cs_dsp_mock_bin_builder. - * @alg_ig: Algorithm ID. + * @alg_id: Algorithm ID. * @alg_ver: Algorithm version. * @type: Type of the block. * @offset: Offset. @@ -139,7 +139,7 @@ EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_bin_add_name, "FW_CS_DSP_KUNIT_TEST_UTILS"); * cs_dsp_mock_bin_add_patch() - Add a patch data block to the bin file. * * @builder: Pointer to struct cs_dsp_mock_bin_builder. - * @alg_ig: Algorithm ID for the patch. + * @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. diff --git a/drivers/firmware/cirrus/test/cs_dsp_test_bin.c b/drivers/firmware/cirrus/test/cs_dsp_test_bin.c index 689190453307..bbff6caee285 100644 --- a/drivers/firmware/cirrus/test/cs_dsp_test_bin.c +++ b/drivers/firmware/cirrus/test/cs_dsp_test_bin.c @@ -1978,8 +1978,10 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) 4, 51, 76, 72, 16, 6, 39, 62, 15, 41, 28, 73, 53, 40, 45, 54, 14, 55, 46, 66, 64, 59, 23, 9, 67, 47, 19, 71, 35, 18, 42, 1, }; - u32 packed_payload[80][3]; - u32 unpacked_payload[80]; + struct { + u32 packed[80][3]; + u32 unpacked[80]; + } *payload; u32 readback[3]; unsigned int alg_base_words, patch_pos_words; unsigned int alg_base_in_packed_regs, patch_pos_in_packed_regs; @@ -1988,8 +1990,11 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) struct firmware *fw; int i; - get_random_bytes(packed_payload, sizeof(packed_payload)); - get_random_bytes(unpacked_payload, sizeof(unpacked_payload)); + payload = kunit_kmalloc(test, sizeof(*payload), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, payload); + + get_random_bytes(payload->packed, sizeof(payload->packed)); + get_random_bytes(payload->unpacked, sizeof(payload->unpacked)); /* Create a patch entry for every offset in offset_words[] */ for (i = 0; i < ARRAY_SIZE(offset_words); ++i) { @@ -2010,8 +2015,8 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) bin_test_mock_algs[0].ver, param->mem_type, payload_offset, - packed_payload[i], - sizeof(packed_payload[i])); + payload->packed[i], + sizeof(payload->packed[i])); } else { payload_offset = offset_words[i] * 4; cs_dsp_mock_bin_add_patch(priv->local->bin_builder, @@ -2019,8 +2024,8 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) bin_test_mock_algs[0].ver, unpacked_mem_type, payload_offset, - &unpacked_payload[i], - sizeof(unpacked_payload[i])); + &payload->unpacked[i], + sizeof(payload->unpacked[i])); } } @@ -2033,7 +2038,7 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) /* * Readback the packed registers that should have been written. * Place the values into the expected location in readback[] so - * that the content of readback[] should match packed_payload[] + * that the content of readback[] should match payload->packed[] */ for (i = 0; i < ARRAY_SIZE(offset_words); ++i) { alg_base_words = cs_dsp_mock_xm_header_get_alg_base_in_words(priv, @@ -2055,16 +2060,16 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) regmap_raw_read(priv->dsp->regmap, reg_addr, readback, sizeof(readback)), 0); - KUNIT_EXPECT_MEMEQ(test, readback, packed_payload[i], sizeof(packed_payload[i])); + KUNIT_EXPECT_MEMEQ(test, readback, payload->packed[i], sizeof(payload->packed[i])); /* Drop expected writes from the cache */ - cs_dsp_mock_regmap_drop_bytes(priv, reg_addr, sizeof(packed_payload[i])); + cs_dsp_mock_regmap_drop_bytes(priv, reg_addr, sizeof(payload->packed[i])); } /* * Readback the unpacked registers that should have been written. * Place the values into the expected location in readback[] so - * that the content of readback[] should match unpacked_payload[] + * that the content of readback[] should match payload->unpacked[] */ for (i = 0; i < ARRAY_SIZE(offset_words); ++i) { alg_base_words = cs_dsp_mock_xm_header_get_alg_base_in_words(priv, @@ -2085,10 +2090,10 @@ static void bin_patch_mixed_packed_unpacked_random(struct kunit *test) regmap_raw_read(priv->dsp->regmap, reg_addr, &readback[0], sizeof(readback[0])), 0); - KUNIT_EXPECT_EQ(test, readback[0], unpacked_payload[i]); + KUNIT_EXPECT_EQ(test, readback[0], payload->unpacked[i]); /* Drop expected writes from the cache */ - cs_dsp_mock_regmap_drop_bytes(priv, reg_addr, sizeof(unpacked_payload[i])); + cs_dsp_mock_regmap_drop_bytes(priv, reg_addr, sizeof(payload->unpacked[i])); } /* Drop expected writes and the cache should then be clean */ diff --git a/sound/soc/codecs/rt715-sdw.c b/sound/soc/codecs/rt715-sdw.c index ec255ada44e0..cd702574c84b 100644 --- a/sound/soc/codecs/rt715-sdw.c +++ b/sound/soc/codecs/rt715-sdw.c @@ -372,47 +372,6 @@ static const struct regmap_config rt715_sdw_regmap = { .use_single_write = true, }; -int hda_to_sdw(unsigned int nid, unsigned int verb, unsigned int payload, - unsigned int *sdw_addr_h, unsigned int *sdw_data_h, - unsigned int *sdw_addr_l, unsigned int *sdw_data_l) -{ - unsigned int offset_h, offset_l, e_verb; - - if (((verb & 0xff) != 0) || verb == 0xf00) { /* 12 bits command */ - if (verb == 0x7ff) /* special case */ - offset_h = 0; - else - offset_h = 0x3000; - - if (verb & 0x800) /* get command */ - e_verb = (verb - 0xf00) | 0x80; - else /* set command */ - e_verb = (verb - 0x700); - - *sdw_data_h = payload; /* 7 bits payload */ - *sdw_addr_l = *sdw_data_l = 0; - } else { /* 4 bits command */ - if ((verb & 0x800) == 0x800) { /* read */ - offset_h = 0x9000; - offset_l = 0xa000; - } else { /* write */ - offset_h = 0x7000; - offset_l = 0x8000; - } - e_verb = verb >> 8; - *sdw_data_h = (payload >> 8); /* 16 bits payload [15:8] */ - *sdw_addr_l = (e_verb << 8) | nid | 0x80; /* 0x80: valid bit */ - *sdw_addr_l += offset_l; - *sdw_data_l = payload & 0xff; - } - - *sdw_addr_h = (e_verb << 8) | nid; - *sdw_addr_h += offset_h; - - return 0; -} -EXPORT_SYMBOL(hda_to_sdw); - static int rt715_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { diff --git a/sound/soc/codecs/rt715.h b/sound/soc/codecs/rt715.h index 6e37bf64e12f..a0c56aa1003a 100644 --- a/sound/soc/codecs/rt715.h +++ b/sound/soc/codecs/rt715.h @@ -220,8 +220,5 @@ int rt715_io_init(struct device *dev, struct sdw_slave *slave); int rt715_init(struct device *dev, struct regmap *sdw_regmap, struct regmap *regmap, struct sdw_slave *slave); -int hda_to_sdw(unsigned int nid, unsigned int verb, unsigned int payload, - unsigned int *sdw_addr_h, unsigned int *sdw_data_h, - unsigned int *sdw_addr_l, unsigned int *sdw_data_l); int rt715_clock_config(struct device *dev); #endif /* __RT715_H__ */ diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index 6c5a1c5a6b3b..a0c3111f7e08 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -365,8 +365,7 @@ void simple_util_shutdown(struct snd_pcm_substream *substream) struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, i); if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(cpu_dai)) - snd_soc_dai_set_sysclk(cpu_dai, - 0, 0, SND_SOC_CLOCK_OUT); + snd_soc_dai_set_sysclk(cpu_dai, 0, 0, dai->clk_direction); simple_clk_disable(dai); } @@ -374,8 +373,7 @@ void simple_util_shutdown(struct snd_pcm_substream *substream) struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, i); if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(codec_dai)) - snd_soc_dai_set_sysclk(codec_dai, - 0, 0, SND_SOC_CLOCK_IN); + snd_soc_dai_set_sysclk(codec_dai, 0, 0, dai->clk_direction); simple_clk_disable(dai); } @@ -483,13 +481,15 @@ int simple_util_hw_params(struct snd_pcm_substream *substream, } for_each_rtd_codec_dais(rtd, i, sdai) { - ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, SND_SOC_CLOCK_IN); + pdai = simple_props_to_dai_codec(props, i); + ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); if (ret && ret != -ENOTSUPP) return ret; } for_each_rtd_cpu_dais(rtd, i, sdai) { - ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, SND_SOC_CLOCK_OUT); + pdai = simple_props_to_dai_cpu(props, i); + ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); if (ret && ret != -ENOTSUPP) return ret; } diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index a1dace4bb616..c8b7f78b02f0 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1646,6 +1646,7 @@ static int soc_probe_component(struct snd_soc_card *card, component->driver->num_dapm_routes); if (ret < 0) { if (card->disable_route_checks) { + ret = 0; dev_info(card->dev, "%s: disable_route_checks set, ignoring errors on add_routes\n", __func__); @@ -2236,6 +2237,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) card->num_dapm_routes); if (ret < 0) { if (card->disable_route_checks) { + ret = 0; dev_info(card->dev, "%s: disable_route_checks set, ignoring errors on add_routes\n", __func__); diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 1150455619aa..88b3ad5a2552 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -38,7 +38,6 @@ static inline int _soc_pcm_ret(struct snd_soc_pcm_runtime *rtd, switch (ret) { case -EPROBE_DEFER: case -ENOTSUPP: - case -EINVAL: break; default: dev_err(rtd->dev, @@ -986,7 +985,13 @@ static int __soc_pcm_prepare(struct snd_soc_pcm_runtime *rtd, } out: - return soc_pcm_ret(rtd, ret); + /* + * Don't use soc_pcm_ret() on .prepare callback to lower error log severity + * + * We don't want to log an error since we do not want to give userspace a way to do a + * denial-of-service attack on the syslog / diskspace. + */ + return ret; } /* PCM prepare ops for non-DPCM streams */ @@ -998,6 +1003,13 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream) snd_soc_dpcm_mutex_lock(rtd); ret = __soc_pcm_prepare(rtd, substream); snd_soc_dpcm_mutex_unlock(rtd); + + /* + * Don't use soc_pcm_ret() on .prepare callback to lower error log severity + * + * We don't want to log an error since we do not want to give userspace a way to do a + * denial-of-service attack on the syslog / diskspace. + */ return ret; } @@ -2539,7 +2551,13 @@ int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream) be->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE; } - return soc_pcm_ret(fe, ret); + /* + * Don't use soc_pcm_ret() on .prepare callback to lower error log severity + * + * We don't want to log an error since we do not want to give userspace a way to do a + * denial-of-service attack on the syslog / diskspace. + */ + return ret; } static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream) @@ -2579,7 +2597,13 @@ out: dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO); snd_soc_dpcm_mutex_unlock(fe); - return soc_pcm_ret(fe, ret); + /* + * Don't use soc_pcm_ret() on .prepare callback to lower error log severity + * + * We don't want to log an error since we do not want to give userspace a way to do a + * denial-of-service attack on the syslog / diskspace. + */ + return ret; } static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream) diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 43003d2d3666..ae2d6802cce0 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1102,12 +1102,14 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg, ret = snd_soc_dapm_add_routes(dapm, route, 1); if (ret) { - if (!dapm->card->disable_route_checks) { + if (dapm->card->disable_route_checks) { + ret = 0; + dev_info(tplg->dev, + "ASoC: disable_route_checks set, ignoring dapm_add_routes errors\n"); + } else { dev_err(tplg->dev, "ASoC: dapm_add_routes failed: %d\n", ret); break; } - dev_info(tplg->dev, - "ASoC: disable_route_checks set, ignoring dapm_add_routes errors\n"); } } |