Skip to content

Commit 523abd4

Browse files
committed
Merge tag 'asoc-fix-v6.19-rc8' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v6.19 A bunch more small fixes here, plus some more of the constant stream of quirks. The most notable change here is Richard's change to the cs_dsp code for the KUnit tests which is relatively large, mostly due to boilerplate. The tests were triggering large numbers of error messages as part of verifying that problems with input data are appropriately detected which in turn caused runtime issues for the framework due to the performance impact of pushing the logging out, while the logging is valuable in normal operation it's basically useless while doing tests designed to trigger it so rate limiting is an appropriate fix.
2 parents 124bdc6 + f514248 commit 523abd4

15 files changed

Lines changed: 195 additions & 23 deletions

File tree

Documentation/devicetree/bindings/sound/ti,tlv320aic3x.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ maintainers:
4646
properties:
4747
compatible:
4848
enum:
49+
- ti,tlv320aic23
4950
- ti,tlv320aic3x
5051
- ti,tlv320aic33
5152
- ti,tlv320aic3007

drivers/firmware/cirrus/cs_dsp.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* Cirrus Logic International Semiconductor Ltd.
1010
*/
1111

12+
#include <kunit/visibility.h>
1213
#include <linux/cleanup.h>
1314
#include <linux/ctype.h>
1415
#include <linux/debugfs.h>
@@ -24,6 +25,41 @@
2425
#include <linux/firmware/cirrus/cs_dsp.h>
2526
#include <linux/firmware/cirrus/wmfw.h>
2627

28+
#include "cs_dsp.h"
29+
30+
/*
31+
* When the KUnit test is running the error-case tests will cause a lot
32+
* of messages. Rate-limit to prevent overflowing the kernel log buffer
33+
* during KUnit test runs.
34+
*/
35+
#if IS_ENABLED(CONFIG_FW_CS_DSP_KUNIT_TEST)
36+
bool cs_dsp_suppress_err_messages;
37+
EXPORT_SYMBOL_IF_KUNIT(cs_dsp_suppress_err_messages);
38+
39+
bool cs_dsp_suppress_warn_messages;
40+
EXPORT_SYMBOL_IF_KUNIT(cs_dsp_suppress_warn_messages);
41+
42+
bool cs_dsp_suppress_info_messages;
43+
EXPORT_SYMBOL_IF_KUNIT(cs_dsp_suppress_info_messages);
44+
45+
#define cs_dsp_err(_dsp, fmt, ...) \
46+
do { \
47+
if (!cs_dsp_suppress_err_messages) \
48+
dev_err_ratelimited(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__); \
49+
} while (false)
50+
#define cs_dsp_warn(_dsp, fmt, ...) \
51+
do { \
52+
if (!cs_dsp_suppress_warn_messages) \
53+
dev_warn_ratelimited(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__); \
54+
} while (false)
55+
#define cs_dsp_info(_dsp, fmt, ...) \
56+
do { \
57+
if (!cs_dsp_suppress_info_messages) \
58+
dev_info_ratelimited(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__); \
59+
} while (false)
60+
#define cs_dsp_dbg(_dsp, fmt, ...) \
61+
dev_dbg_ratelimited(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__)
62+
#else
2763
#define cs_dsp_err(_dsp, fmt, ...) \
2864
dev_err(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__)
2965
#define cs_dsp_warn(_dsp, fmt, ...) \
@@ -32,6 +68,7 @@
3268
dev_info(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__)
3369
#define cs_dsp_dbg(_dsp, fmt, ...) \
3470
dev_dbg(_dsp->dev, "%s: " fmt, _dsp->name, ##__VA_ARGS__)
71+
#endif
3572

3673
#define ADSP1_CONTROL_1 0x00
3774
#define ADSP1_CONTROL_2 0x02

drivers/firmware/cirrus/cs_dsp.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/*
3+
* cs_dsp.h -- Private header for cs_dsp driver.
4+
*
5+
* Copyright (C) 2026 Cirrus Logic, Inc. and
6+
* Cirrus Logic International Semiconductor Ltd.
7+
*/
8+
9+
#ifndef FW_CS_DSP_H
10+
#define FW_CS_DSP_H
11+
12+
#if IS_ENABLED(CONFIG_KUNIT)
13+
extern bool cs_dsp_suppress_err_messages;
14+
extern bool cs_dsp_suppress_warn_messages;
15+
extern bool cs_dsp_suppress_info_messages;
16+
#endif
17+
18+
#endif /* ifndef FW_CS_DSP_H */

drivers/firmware/cirrus/test/cs_dsp_test_bin.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <linux/random.h>
1818
#include <linux/regmap.h>
1919

20+
#include "../cs_dsp.h"
21+
2022
/*
2123
* Test method is:
2224
*
@@ -2224,7 +2226,22 @@ static int cs_dsp_bin_test_common_init(struct kunit *test, struct cs_dsp *dsp)
22242226
return ret;
22252227

22262228
/* Automatically call cs_dsp_remove() when test case ends */
2227-
return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
2229+
ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
2230+
if (ret)
2231+
return ret;
2232+
2233+
/*
2234+
* The large number of test cases will cause an unusually large amount
2235+
* of dev_info() messages from cs_dsp, so suppress these.
2236+
*/
2237+
cs_dsp_suppress_info_messages = true;
2238+
2239+
return 0;
2240+
}
2241+
2242+
static void cs_dsp_bin_test_exit(struct kunit *test)
2243+
{
2244+
cs_dsp_suppress_info_messages = false;
22282245
}
22292246

22302247
static int cs_dsp_bin_test_halo_init(struct kunit *test)
@@ -2536,18 +2553,21 @@ static struct kunit_case cs_dsp_bin_test_cases_adsp2[] = {
25362553
static struct kunit_suite cs_dsp_bin_test_halo = {
25372554
.name = "cs_dsp_bin_halo",
25382555
.init = cs_dsp_bin_test_halo_init,
2556+
.exit = cs_dsp_bin_test_exit,
25392557
.test_cases = cs_dsp_bin_test_cases_halo,
25402558
};
25412559

25422560
static struct kunit_suite cs_dsp_bin_test_adsp2_32bit = {
25432561
.name = "cs_dsp_bin_adsp2_32bit",
25442562
.init = cs_dsp_bin_test_adsp2_32bit_init,
2563+
.exit = cs_dsp_bin_test_exit,
25452564
.test_cases = cs_dsp_bin_test_cases_adsp2,
25462565
};
25472566

25482567
static struct kunit_suite cs_dsp_bin_test_adsp2_16bit = {
25492568
.name = "cs_dsp_bin_adsp2_16bit",
25502569
.init = cs_dsp_bin_test_adsp2_16bit_init,
2570+
.exit = cs_dsp_bin_test_exit,
25512571
.test_cases = cs_dsp_bin_test_cases_adsp2,
25522572
};
25532573

drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include <linux/string.h>
1919
#include <linux/vmalloc.h>
2020

21+
#include "../cs_dsp.h"
22+
2123
KUNIT_DEFINE_ACTION_WRAPPER(_put_device_wrapper, put_device, struct device *);
2224
KUNIT_DEFINE_ACTION_WRAPPER(_cs_dsp_remove_wrapper, cs_dsp_remove, struct cs_dsp *);
2325

@@ -380,11 +382,9 @@ static void bin_block_payload_len_garbage(struct kunit *test)
380382

381383
static void cs_dsp_bin_err_test_exit(struct kunit *test)
382384
{
383-
/*
384-
* Testing error conditions can produce a lot of log output
385-
* from cs_dsp error messages, so rate limit the test cases.
386-
*/
387-
usleep_range(200, 500);
385+
cs_dsp_suppress_err_messages = false;
386+
cs_dsp_suppress_warn_messages = false;
387+
cs_dsp_suppress_info_messages = false;
388388
}
389389

390390
static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *dsp,
@@ -474,7 +474,19 @@ static int cs_dsp_bin_err_test_common_init(struct kunit *test, struct cs_dsp *ds
474474
return ret;
475475

476476
/* Automatically call cs_dsp_remove() when test case ends */
477-
return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
477+
ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
478+
if (ret)
479+
return ret;
480+
481+
/*
482+
* Testing error conditions can produce a lot of log output
483+
* from cs_dsp error messages, so suppress messages.
484+
*/
485+
cs_dsp_suppress_err_messages = true;
486+
cs_dsp_suppress_warn_messages = true;
487+
cs_dsp_suppress_info_messages = true;
488+
489+
return 0;
478490
}
479491

480492
static int cs_dsp_bin_err_test_halo_init(struct kunit *test)

drivers/firmware/cirrus/test/cs_dsp_test_wmfw.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include <linux/string.h>
1919
#include <linux/vmalloc.h>
2020

21+
#include "../cs_dsp.h"
22+
2123
/*
2224
* Test method is:
2325
*
@@ -1853,7 +1855,22 @@ static int cs_dsp_wmfw_test_common_init(struct kunit *test, struct cs_dsp *dsp,
18531855
return ret;
18541856

18551857
/* Automatically call cs_dsp_remove() when test case ends */
1856-
return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
1858+
ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
1859+
if (ret)
1860+
return ret;
1861+
1862+
/*
1863+
* The large number of test cases will cause an unusually large amount
1864+
* of dev_info() messages from cs_dsp, so suppress these.
1865+
*/
1866+
cs_dsp_suppress_info_messages = true;
1867+
1868+
return 0;
1869+
}
1870+
1871+
static void cs_dsp_wmfw_test_exit(struct kunit *test)
1872+
{
1873+
cs_dsp_suppress_info_messages = false;
18571874
}
18581875

18591876
static int cs_dsp_wmfw_test_halo_init(struct kunit *test)
@@ -2163,42 +2180,49 @@ static struct kunit_case cs_dsp_wmfw_test_cases_adsp2[] = {
21632180
static struct kunit_suite cs_dsp_wmfw_test_halo = {
21642181
.name = "cs_dsp_wmfwV3_halo",
21652182
.init = cs_dsp_wmfw_test_halo_init,
2183+
.exit = cs_dsp_wmfw_test_exit,
21662184
.test_cases = cs_dsp_wmfw_test_cases_halo,
21672185
};
21682186

21692187
static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw0 = {
21702188
.name = "cs_dsp_wmfwV0_adsp2_32bit",
21712189
.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw0_init,
2190+
.exit = cs_dsp_wmfw_test_exit,
21722191
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
21732192
};
21742193

21752194
static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw1 = {
21762195
.name = "cs_dsp_wmfwV1_adsp2_32bit",
21772196
.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw1_init,
2197+
.exit = cs_dsp_wmfw_test_exit,
21782198
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
21792199
};
21802200

21812201
static struct kunit_suite cs_dsp_wmfw_test_adsp2_32bit_wmfw2 = {
21822202
.name = "cs_dsp_wmfwV2_adsp2_32bit",
21832203
.init = cs_dsp_wmfw_test_adsp2_32bit_wmfw2_init,
2204+
.exit = cs_dsp_wmfw_test_exit,
21842205
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
21852206
};
21862207

21872208
static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw0 = {
21882209
.name = "cs_dsp_wmfwV0_adsp2_16bit",
21892210
.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw0_init,
2211+
.exit = cs_dsp_wmfw_test_exit,
21902212
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
21912213
};
21922214

21932215
static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw1 = {
21942216
.name = "cs_dsp_wmfwV1_adsp2_16bit",
21952217
.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw1_init,
2218+
.exit = cs_dsp_wmfw_test_exit,
21962219
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
21972220
};
21982221

21992222
static struct kunit_suite cs_dsp_wmfw_test_adsp2_16bit_wmfw2 = {
22002223
.name = "cs_dsp_wmfwV2_adsp2_16bit",
22012224
.init = cs_dsp_wmfw_test_adsp2_16bit_wmfw2_init,
2225+
.exit = cs_dsp_wmfw_test_exit,
22022226
.test_cases = cs_dsp_wmfw_test_cases_adsp2,
22032227
};
22042228

drivers/firmware/cirrus/test/cs_dsp_test_wmfw_error.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include <linux/string.h>
1919
#include <linux/vmalloc.h>
2020

21+
#include "../cs_dsp.h"
22+
2123
KUNIT_DEFINE_ACTION_WRAPPER(_put_device_wrapper, put_device, struct device *);
2224
KUNIT_DEFINE_ACTION_WRAPPER(_cs_dsp_remove_wrapper, cs_dsp_remove, struct cs_dsp *);
2325

@@ -989,11 +991,9 @@ static void wmfw_v2_coeff_description_exceeds_block(struct kunit *test)
989991

990992
static void cs_dsp_wmfw_err_test_exit(struct kunit *test)
991993
{
992-
/*
993-
* Testing error conditions can produce a lot of log output
994-
* from cs_dsp error messages, so rate limit the test cases.
995-
*/
996-
usleep_range(200, 500);
994+
cs_dsp_suppress_err_messages = false;
995+
cs_dsp_suppress_warn_messages = false;
996+
cs_dsp_suppress_info_messages = false;
997997
}
998998

999999
static int cs_dsp_wmfw_err_test_common_init(struct kunit *test, struct cs_dsp *dsp,
@@ -1072,7 +1072,19 @@ static int cs_dsp_wmfw_err_test_common_init(struct kunit *test, struct cs_dsp *d
10721072
return ret;
10731073

10741074
/* Automatically call cs_dsp_remove() when test case ends */
1075-
return kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
1075+
ret = kunit_add_action_or_reset(priv->test, _cs_dsp_remove_wrapper, dsp);
1076+
if (ret)
1077+
return ret;
1078+
1079+
/*
1080+
* Testing error conditions can produce a lot of log output
1081+
* from cs_dsp error messages, so suppress messages.
1082+
*/
1083+
cs_dsp_suppress_err_messages = true;
1084+
cs_dsp_suppress_warn_messages = true;
1085+
cs_dsp_suppress_info_messages = true;
1086+
1087+
return 0;
10761088
}
10771089

10781090
static int cs_dsp_wmfw_err_test_halo_init(struct kunit *test)

drivers/firmware/cirrus/test/cs_dsp_tests.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ MODULE_AUTHOR("Richard Fitzgerald <[email protected]>");
1212
MODULE_LICENSE("GPL");
1313
MODULE_IMPORT_NS("FW_CS_DSP");
1414
MODULE_IMPORT_NS("FW_CS_DSP_KUNIT_TEST_UTILS");
15+
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");

sound/soc/amd/renoir/acp3x-pdm-dma.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,11 @@ static int acp_pdm_dma_close(struct snd_soc_component *component,
301301
struct snd_pcm_substream *substream)
302302
{
303303
struct pdm_dev_data *adata = dev_get_drvdata(component->dev);
304+
struct pdm_stream_instance *rtd = substream->runtime->private_data;
304305

305306
disable_pdm_interrupts(adata->acp_base);
306307
adata->capture_stream = NULL;
308+
kfree(rtd);
307309
return 0;
308310
}
309311

sound/soc/amd/yc/acp6x-mach.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
640640
DMI_MATCH(DMI_BOARD_NAME, "8BD6"),
641641
}
642642
},
643+
{
644+
.driver_data = &acp6x_card,
645+
.matches = {
646+
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
647+
DMI_MATCH(DMI_BOARD_NAME, "8EE4"),
648+
}
649+
},
643650
{
644651
.driver_data = &acp6x_card,
645652
.matches = {

0 commit comments

Comments
 (0)