Skip to content

Commit 70110f3

Browse files
lyakhlgirdwood
authored andcommitted
audio: copier: mark non-performance critical code as "cold"
Add __cold qualifiers and debugging tests to non-performance critical code. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
1 parent eba2cdd commit 70110f3

File tree

7 files changed

+124
-62
lines changed

7 files changed

+124
-62
lines changed

src/audio/copier/copier.c

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <rtos/alloc.h>
1919
#include <rtos/cache.h>
2020
#include <rtos/init.h>
21+
#include <sof/lib/memory.h>
2122
#include <sof/lib/uuid.h>
2223
#include <sof/list.h>
2324
#include <rtos/string.h>
@@ -127,7 +128,7 @@ static void mic_privacy_free(struct copier_data *cd)
127128
}
128129
#endif
129130

130-
static int copier_init(struct processing_module *mod)
131+
__cold static int copier_init(struct processing_module *mod)
131132
{
132133
union ipc4_connector_node_id node_id;
133134
struct ipc_comp_dev *ipc_pipe;
@@ -141,6 +142,8 @@ static int copier_init(struct processing_module *mod)
141142
size_t gtw_cfg_size;
142143
int i, ret = 0;
143144

145+
assert_can_be_cold();
146+
144147
cd = rzalloc(SOF_MEM_ZONE_RUNTIME, 0, SOF_MEM_CAPS_RAM, sizeof(*cd));
145148
if (!cd)
146149
return -ENOMEM;
@@ -274,11 +277,13 @@ static int copier_init(struct processing_module *mod)
274277
return ret;
275278
}
276279

277-
static int copier_free(struct processing_module *mod)
280+
__cold static int copier_free(struct processing_module *mod)
278281
{
279282
struct copier_data *cd = module_get_private_data(mod);
280283
struct comp_dev *dev = mod->dev;
281284

285+
assert_can_be_cold();
286+
282287
#if CONFIG_INTEL_ADSP_MIC_PRIVACY
283288
mic_privacy_free(cd);
284289
#endif
@@ -752,14 +757,16 @@ static int copier_params(struct processing_module *mod)
752757
return ret;
753758
}
754759

755-
static int copier_set_sink_fmt(struct comp_dev *dev, const void *data,
756-
int max_data_size)
760+
__cold static int copier_set_sink_fmt(struct comp_dev *dev, const void *data,
761+
int max_data_size)
757762
{
758763
const struct ipc4_copier_config_set_sink_format *sink_fmt = data;
759764
struct processing_module *mod = comp_mod(dev);
760765
struct copier_data *cd = module_get_private_data(mod);
761766
uint32_t chmap;
762767

768+
assert_can_be_cold();
769+
763770
if (max_data_size < sizeof(*sink_fmt)) {
764771
comp_err(dev, "error: max_data_size %d should be bigger than %d", max_data_size,
765772
sizeof(*sink_fmt));
@@ -797,13 +804,15 @@ static int copier_set_sink_fmt(struct comp_dev *dev, const void *data,
797804
return 0;
798805
}
799806

800-
static int set_attenuation(struct comp_dev *dev, uint32_t data_offset, const char *data)
807+
__cold static int set_attenuation(struct comp_dev *dev, uint32_t data_offset, const char *data)
801808
{
802809
struct processing_module *mod = comp_mod(dev);
803810
struct copier_data *cd = module_get_private_data(mod);
804811
uint32_t attenuation;
805812
enum sof_ipc_frame valid_fmt, frame_fmt;
806813

814+
assert_can_be_cold();
815+
807816
/* only support attenuation in format of 32bit */
808817
if (data_offset > sizeof(uint32_t)) {
809818
comp_err(dev, "attenuation data size %d is incorrect", data_offset);
@@ -832,7 +841,7 @@ static int set_attenuation(struct comp_dev *dev, uint32_t data_offset, const cha
832841
return 0;
833842
}
834843

835-
static int set_chmap(struct comp_dev *dev, const void *data, size_t data_size)
844+
__cold static int set_chmap(struct comp_dev *dev, const void *data, size_t data_size)
836845
{
837846
const struct ipc4_copier_config_channel_map *chmap_cfg = data;
838847
struct processing_module *mod = comp_mod(dev);
@@ -845,6 +854,8 @@ static int set_chmap(struct comp_dev *dev, const void *data, size_t data_size)
845854
int i;
846855
uint32_t irq_flags;
847856

857+
assert_can_be_cold();
858+
848859
if (data_size < sizeof(*chmap_cfg)) {
849860
comp_err(dev, "Wrong payload size: %d", data_size);
850861
return -EINVAL;
@@ -908,16 +919,18 @@ static int set_chmap(struct comp_dev *dev, const void *data, size_t data_size)
908919
return 0;
909920
}
910921

911-
static int copier_set_configuration(struct processing_module *mod,
912-
uint32_t config_id,
913-
enum module_cfg_fragment_position pos,
914-
uint32_t data_offset_size,
915-
const uint8_t *fragment, size_t fragment_size,
916-
uint8_t *response,
917-
size_t response_size)
922+
__cold static int copier_set_configuration(struct processing_module *mod,
923+
uint32_t config_id,
924+
enum module_cfg_fragment_position pos,
925+
uint32_t data_offset_size,
926+
const uint8_t *fragment, size_t fragment_size,
927+
uint8_t *response,
928+
size_t response_size)
918929
{
919930
struct comp_dev *dev = mod->dev;
920931

932+
assert_can_be_cold();
933+
921934
comp_dbg(dev, "copier_set_config()");
922935

923936
switch (config_id) {
@@ -938,16 +951,18 @@ static inline void convert_u64_to_u32s(uint64_t val, uint32_t *val_l, uint32_t *
938951
*val_h = (uint32_t)((val >> 32) & 0xffffffff);
939952
}
940953

941-
static int copier_get_configuration(struct processing_module *mod,
942-
uint32_t config_id, uint32_t *data_offset_size,
943-
uint8_t *fragment, size_t fragment_size)
954+
__cold static int copier_get_configuration(struct processing_module *mod,
955+
uint32_t config_id, uint32_t *data_offset_size,
956+
uint8_t *fragment, size_t fragment_size)
944957
{
945958
struct copier_data *cd = module_get_private_data(mod);
946959
struct ipc4_llp_reading_extended llp_ext;
947960
struct comp_dev *dev = mod->dev;
948961
struct sof_ipc_stream_posn posn;
949962
struct ipc4_llp_reading llp;
950963

964+
assert_can_be_cold();
965+
951966
if (cd->ipc_gtw)
952967
return 0;
953968

@@ -1143,27 +1158,31 @@ static int copier_dai_ts_stop_op(struct comp_dev *dev)
11431158
return dai_common_ts_stop(dd, dev);
11441159
}
11451160

1146-
static int copier_get_hw_params(struct comp_dev *dev, struct sof_ipc_stream_params *params,
1147-
int dir)
1161+
__cold static int copier_get_hw_params(struct comp_dev *dev, struct sof_ipc_stream_params *params,
1162+
int dir)
11481163
{
11491164
struct processing_module *mod = comp_mod(dev);
11501165
struct copier_data *cd = module_get_private_data(mod);
11511166
struct dai_data *dd = cd->dd[0];
11521167

1168+
assert_can_be_cold();
1169+
11531170
if (dev->ipc_config.type != SOF_COMP_DAI)
11541171
return -EINVAL;
11551172

11561173
return dai_common_get_hw_params(dd, dev, params, dir);
11571174
}
11581175

1159-
static int copier_bind(struct processing_module *mod, void *data)
1176+
__cold static int copier_bind(struct processing_module *mod, void *data)
11601177
{
11611178
const struct ipc4_module_bind_unbind *const bu = (struct ipc4_module_bind_unbind *)data;
11621179
const uint32_t src_id = IPC4_COMP_ID(bu->primary.r.module_id, bu->primary.r.instance_id);
11631180
const uint32_t src_queue_id = bu->extension.r.src_queue;
11641181
struct copier_data *cd = module_get_private_data(mod);
11651182
struct comp_dev *dev = mod->dev;
11661183

1184+
assert_can_be_cold();
1185+
11671186
if (dev->ipc_config.id != src_id)
11681187
return 0; /* Another component is a data producer */
11691188

@@ -1183,11 +1202,13 @@ static int copier_bind(struct processing_module *mod, void *data)
11831202
return -ENODEV;
11841203
}
11851204

1186-
static int copier_unbind(struct processing_module *mod, void *data)
1205+
__cold static int copier_unbind(struct processing_module *mod, void *data)
11871206
{
11881207
struct copier_data *cd = module_get_private_data(mod);
11891208
struct comp_dev *dev = mod->dev;
11901209

1210+
assert_can_be_cold();
1211+
11911212
if (dev->ipc_config.type == SOF_COMP_DAI) {
11921213
struct dai_data *dd = cd->dd[0];
11931214

src/audio/copier/copier_dai.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//
55
// Author: Baofeng Tian <baofeng.tian@intel.com>
66

7+
#include <sof/lib/memory.h>
78
#include <sof/trace/trace.h>
89
#include <sof/audio/component_ext.h>
910
#include <ipc/dai.h>
@@ -155,20 +156,22 @@ static int copier_alh_assign_dai_index(struct comp_dev *dev,
155156
return 0;
156157
}
157158

158-
static int copier_dai_init(struct comp_dev *dev,
159-
struct comp_ipc_config *config,
160-
const struct ipc4_copier_module_cfg *copier,
161-
struct pipeline *pipeline,
162-
struct ipc_config_dai *dai,
163-
enum ipc4_gateway_type type,
164-
int index, int dai_count)
159+
__cold static int copier_dai_init(struct comp_dev *dev,
160+
struct comp_ipc_config *config,
161+
const struct ipc4_copier_module_cfg *copier,
162+
struct pipeline *pipeline,
163+
struct ipc_config_dai *dai,
164+
enum ipc4_gateway_type type,
165+
int index, int dai_count)
165166
{
166167
struct processing_module *mod = comp_mod(dev);
167168
struct copier_data *cd = module_get_private_data(mod);
168169
uint32_t chmap;
169170
struct dai_data *dd;
170171
int ret;
171172

173+
assert_can_be_cold();
174+
172175
if (cd->direction == SOF_IPC_STREAM_PLAYBACK) {
173176
enum sof_ipc_frame out_frame_fmt, out_valid_fmt;
174177

@@ -254,9 +257,9 @@ static int copier_dai_init(struct comp_dev *dev,
254257
* ssp, dmic or alh. Sof dai component can support this case so copier
255258
* reuses dai component to support non-host gateway.
256259
*/
257-
int copier_dai_create(struct comp_dev *dev, struct copier_data *cd,
258-
const struct ipc4_copier_module_cfg *copier,
259-
struct pipeline *pipeline)
260+
__cold int copier_dai_create(struct comp_dev *dev, struct copier_data *cd,
261+
const struct ipc4_copier_module_cfg *copier,
262+
struct pipeline *pipeline)
260263
{
261264
struct processing_module *mod = comp_mod(dev);
262265
struct comp_ipc_config *config = &dev->ipc_config;
@@ -266,6 +269,8 @@ int copier_dai_create(struct comp_dev *dev, struct copier_data *cd,
266269
int dai_count;
267270
int i, ret;
268271

272+
assert_can_be_cold();
273+
269274
config->type = SOF_COMP_DAI;
270275

271276
memset(&dai, 0, sizeof(dai));
@@ -370,8 +375,10 @@ int copier_dai_create(struct comp_dev *dev, struct copier_data *cd,
370375
return 0;
371376
}
372377

373-
void copier_dai_free(struct copier_data *cd)
378+
__cold void copier_dai_free(struct copier_data *cd)
374379
{
380+
assert_can_be_cold();
381+
375382
for (int i = 0; i < cd->endpoint_num; i++) {
376383
dai_common_free(cd->dd[i]);
377384
rfree(cd->dd[i]->gain_data);

src/audio/copier/copier_gain.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//
55
// Author: Ievgen Ganakov <ievgen.ganakov@intel.com>
66

7+
#include <sof/lib/memory.h>
78
#include <sof/trace/trace.h>
89
#include <ipc4/base-config.h>
910
#include <sof/audio/component_ext.h>
@@ -15,10 +16,8 @@
1516

1617
LOG_MODULE_DECLARE(copier, CONFIG_SOF_LOG_LEVEL);
1718

18-
int copier_gain_set_params(struct comp_dev *dev,
19-
struct copier_gain_params *gain_params,
20-
uint32_t fade_period,
21-
enum sof_ipc_dai_type dai_type)
19+
__cold int copier_gain_set_params(struct comp_dev *dev, struct copier_gain_params *gain_params,
20+
uint32_t fade_period, enum sof_ipc_dai_type dai_type)
2221
{
2322
struct processing_module *mod = comp_mod(dev);
2423
struct copier_data *cd = module_get_private_data(mod);
@@ -27,6 +26,8 @@ int copier_gain_set_params(struct comp_dev *dev,
2726
uint32_t frames = sampling_freq / dev->pipeline->period;
2827
int ret;
2928

29+
assert_can_be_cold();
30+
3031
/* Set basic gain parameters */
3132
copier_gain_set_basic_params(dev, gain_params, ipc4_cfg);
3233

src/audio/copier/copier_generic.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <ipc4/base-config.h>
88
#include <sof/audio/component_ext.h>
9+
#include <sof/lib/memory.h>
910
#include <module/module/base.h>
1011
#include <sof/common.h>
1112
#include <ipc/dai.h>
@@ -60,22 +61,26 @@ int apply_attenuation(struct comp_dev *dev, struct copier_data *cd,
6061
}
6162
}
6263

63-
void copier_gain_set_basic_params(struct comp_dev *dev, struct copier_gain_params *gain_params,
64-
struct ipc4_base_module_cfg *ipc4_cfg)
64+
__cold void copier_gain_set_basic_params(struct comp_dev *dev,
65+
struct copier_gain_params *gain_params,
66+
struct ipc4_base_module_cfg *ipc4_cfg)
6567
{
68+
assert_can_be_cold();
6669

6770
gain_params->channels_count = ipc4_cfg->audio_fmt.channels_count;
6871

6972
for (int i = 0; i < MAX_GAIN_COEFFS_CNT; i++)
7073
gain_params->gain_coeffs[i] = UNITY_GAIN_GENERIC;
7174
}
7275

73-
int copier_gain_set_fade_params(struct comp_dev *dev, struct copier_gain_params *gain_params,
74-
struct ipc4_base_module_cfg *ipc4_cfg,
75-
uint32_t fade_period, uint32_t frames)
76+
__cold int copier_gain_set_fade_params(struct comp_dev *dev, struct copier_gain_params *gain_params,
77+
struct ipc4_base_module_cfg *ipc4_cfg,
78+
uint32_t fade_period, uint32_t frames)
7679
{
7780
uint16_t step_i64_to_i16;
7881

82+
assert_can_be_cold();
83+
7984
if (fade_period == GAIN_DEFAULT_FADE_PERIOD) {
8085
/* Set fade transition delay to default value*/
8186
if (ipc4_cfg->audio_fmt.sampling_frequency > IPC4_FS_16000HZ)
@@ -347,9 +352,9 @@ void copier_update_params(struct copier_data *cd, struct comp_dev *dev,
347352
}
348353
}
349354

350-
int create_multi_endpoint_buffer(struct comp_dev *dev,
351-
struct copier_data *cd,
352-
const struct ipc4_copier_module_cfg *copier_cfg)
355+
__cold int create_multi_endpoint_buffer(struct comp_dev *dev,
356+
struct copier_data *cd,
357+
const struct ipc4_copier_module_cfg *copier_cfg)
353358
{
354359
struct comp_ipc_config *config = &dev->ipc_config;
355360
enum sof_ipc_frame in_frame_fmt, out_frame_fmt;
@@ -361,6 +366,8 @@ int create_multi_endpoint_buffer(struct comp_dev *dev,
361366
uint32_t chan_map;
362367
int i;
363368

369+
assert_can_be_cold();
370+
364371
audio_stream_fmt_conversion(copier_cfg->base.audio_fmt.depth,
365372
copier_cfg->base.audio_fmt.valid_bit_depth,
366373
&in_frame_fmt, &in_valid_fmt,
@@ -442,9 +449,11 @@ int create_multi_endpoint_buffer(struct comp_dev *dev,
442449
return 0;
443450
}
444451

445-
enum sof_ipc_stream_direction
452+
__cold enum sof_ipc_stream_direction
446453
get_gateway_direction(enum ipc4_connector_node_id_type node_id_type)
447454
{
455+
assert_can_be_cold();
456+
448457
/* WARNING: simple "% 2" formula that was used before does not work for all
449458
* interfaces: at least it does not work for IPC gateway. But it may also
450459
* does not work for other not yet supported interfaces. And so additional

0 commit comments

Comments
 (0)