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
0 commit comments