diff --git a/src/init/init.c b/src/init/init.c index 9ff13c5d8b12..486ce49a2147 100644 --- a/src/init/init.c +++ b/src/init/init.c @@ -164,7 +164,7 @@ static int secondary_core_restore(void) #endif -int secondary_core_init(struct sof *sof) +__cold int secondary_core_init(struct sof *sof) { int err; struct ll_schedule_domain *dma_domain; @@ -237,7 +237,7 @@ int secondary_core_init(struct sof *sof) #endif -static void print_version_banner(void) +__cold static void print_version_banner(void) { /* * Non-Zephyr builds emit the version banner in DMA-trace @@ -267,7 +267,7 @@ static log_timestamp_t default_get_timestamp(void) } #endif -static int primary_core_init(int argc, char *argv[], struct sof *sof) +__cold static int primary_core_init(int argc, char *argv[], struct sof *sof) { /* setup context */ sof->argc = argc; diff --git a/src/ipc/ipc-common.c b/src/ipc/ipc-common.c index 244a218d5be8..a3d2674f2162 100644 --- a/src/ipc/ipc-common.c +++ b/src/ipc/ipc-common.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -41,7 +42,7 @@ SOF_DEFINE_REG_UUID(ipc); DECLARE_TR_CTX(ipc_tr, SOF_UUID(ipc_uuid), LOG_LEVEL_INFO); -int ipc_process_on_core(uint32_t core, bool blocking) +__cold int ipc_process_on_core(uint32_t core, bool blocking) { struct ipc *ipc = ipc_get(); struct idc_msg msg = { .header = IDC_MSG_IPC, .core = core, }; @@ -83,7 +84,7 @@ int ipc_process_on_core(uint32_t core, bool blocking) * Components, buffers and pipelines are stored in the same lists, hence * type and ID have to be used for the identification. */ -struct ipc_comp_dev *ipc_get_comp_dev(struct ipc *ipc, uint16_t type, uint32_t id) +__cold struct ipc_comp_dev *ipc_get_comp_dev(struct ipc *ipc, uint16_t type, uint32_t id) { struct ipc_comp_dev *icd; struct list_item *clist; @@ -101,7 +102,7 @@ EXPORT_SYMBOL(ipc_get_comp_dev); /* Walks through the list of components looking for a sink/source endpoint component * of the given pipeline */ -struct ipc_comp_dev *ipc_get_ppl_comp(struct ipc *ipc, uint32_t pipeline_id, int dir) +__cold struct ipc_comp_dev *ipc_get_ppl_comp(struct ipc *ipc, uint32_t pipeline_id, int dir) { struct ipc_comp_dev *icd; struct comp_buffer *buffer; @@ -140,7 +141,7 @@ struct ipc_comp_dev *ipc_get_ppl_comp(struct ipc *ipc, uint32_t pipeline_id, int return next_ppl_icd; } -void ipc_send_queued_msg(void) +__cold void ipc_send_queued_msg(void) { struct ipc *ipc = ipc_get(); struct ipc_msg *msg; @@ -175,7 +176,7 @@ static struct k_work_q ipc_send_wq; static K_THREAD_STACK_DEFINE(ipc_send_wq_stack, CONFIG_STACK_SIZE_IPC_TX); #endif -static void schedule_ipc_worker(void) +__cold static void schedule_ipc_worker(void) { /* * note: in XTOS builds, this is handled in @@ -188,7 +189,7 @@ static void schedule_ipc_worker(void) #endif } -void ipc_msg_send_direct(struct ipc_msg *msg, void *data) +__cold void ipc_msg_send_direct(struct ipc_msg *msg, void *data) { struct ipc *ipc = ipc_get(); k_spinlock_key_t key; @@ -208,7 +209,7 @@ void ipc_msg_send_direct(struct ipc_msg *msg, void *data) k_spin_unlock(&ipc->lock, key); } -void ipc_msg_send(struct ipc_msg *msg, void *data, bool high_priority) +__cold void ipc_msg_send(struct ipc_msg *msg, void *data, bool high_priority) { struct ipc *ipc = ipc_get(); k_spinlock_key_t key; @@ -255,7 +256,7 @@ void ipc_msg_send(struct ipc_msg *msg, void *data, bool high_priority) EXPORT_SYMBOL(ipc_msg_send); #ifdef __ZEPHYR__ -static void ipc_work_handler(struct k_work *work) +__cold static void ipc_work_handler(struct k_work *work) { struct ipc *ipc = ipc_get(); k_spinlock_key_t key; @@ -271,12 +272,12 @@ static void ipc_work_handler(struct k_work *work) } #endif -void ipc_schedule_process(struct ipc *ipc) +__cold void ipc_schedule_process(struct ipc *ipc) { schedule_task(&ipc->ipc_task, 0, IPC_PERIOD_USEC); } -int ipc_init(struct sof *sof) +__cold int ipc_init(struct sof *sof) { tr_dbg(&ipc_tr, "ipc_init()"); @@ -323,7 +324,7 @@ int ipc_init(struct sof *sof) } /* Locking: call with ipc->lock held and interrupts disabled */ -void ipc_complete_cmd(struct ipc *ipc) +__cold void ipc_complete_cmd(struct ipc *ipc) { /* * We have up to three contexts, attempting to complete IPC processing: @@ -343,7 +344,7 @@ void ipc_complete_cmd(struct ipc *ipc) ipc_platform_complete_cmd(ipc); } -static void ipc_complete_task(void *data) +__cold static void ipc_complete_task(void *data) { struct ipc *ipc = data; k_spinlock_key_t key; @@ -354,7 +355,7 @@ static void ipc_complete_task(void *data) k_spin_unlock(&ipc->lock, key); } -static enum task_state ipc_do_cmd(void *data) +__cold static enum task_state ipc_do_cmd(void *data) { struct ipc *ipc = data; diff --git a/src/ipc/ipc-helper.c b/src/ipc/ipc-helper.c index 1e27c701899f..5df812bae749 100644 --- a/src/ipc/ipc-helper.c +++ b/src/ipc/ipc-helper.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -37,7 +38,7 @@ LOG_MODULE_DECLARE(ipc, CONFIG_SOF_LOG_LEVEL); -static bool valid_ipc_buffer_desc(const struct sof_ipc_buffer *desc) +__cold static bool valid_ipc_buffer_desc(const struct sof_ipc_buffer *desc) { if (desc->caps >= SOF_MEM_CAPS_LOWEST_INVALID) return false; @@ -47,7 +48,7 @@ static bool valid_ipc_buffer_desc(const struct sof_ipc_buffer *desc) } /* create a new component in the pipeline */ -struct comp_buffer *buffer_new(const struct sof_ipc_buffer *desc, bool is_shared) +__cold struct comp_buffer *buffer_new(const struct sof_ipc_buffer *desc, bool is_shared) { struct comp_buffer *buffer; @@ -75,7 +76,7 @@ struct comp_buffer *buffer_new(const struct sof_ipc_buffer *desc, bool is_shared return buffer; } -int32_t ipc_comp_pipe_id(const struct ipc_comp_dev *icd) +__cold int32_t ipc_comp_pipe_id(const struct ipc_comp_dev *icd) { switch (icd->type) { case COMP_TYPE_COMPONENT: @@ -95,9 +96,9 @@ int32_t ipc_comp_pipe_id(const struct ipc_comp_dev *icd) /* Function overwrites PCM parameters (frame_fmt, buffer_fmt, channels, rate) * with buffer parameters when specific flag is set. */ -static void comp_update_params(uint32_t flag, - struct sof_ipc_stream_params *params, - struct comp_buffer *buffer) +__cold static void comp_update_params(uint32_t flag, + struct sof_ipc_stream_params *params, + struct comp_buffer *buffer) { if (flag & BUFF_PARAMS_FRAME_FMT) params->frame_fmt = audio_stream_get_frm_fmt(&buffer->stream); @@ -112,8 +113,8 @@ static void comp_update_params(uint32_t flag, params->rate = audio_stream_get_rate(&buffer->stream); } -int comp_verify_params(struct comp_dev *dev, uint32_t flag, - struct sof_ipc_stream_params *params) +__cold int comp_verify_params(struct comp_dev *dev, uint32_t flag, + struct sof_ipc_stream_params *params) { struct list_item *buffer_list; struct list_item *source_list; @@ -179,8 +180,8 @@ int comp_verify_params(struct comp_dev *dev, uint32_t flag, } EXPORT_SYMBOL(comp_verify_params); -int comp_buffer_connect(struct comp_dev *comp, uint32_t comp_core, - struct comp_buffer *buffer, uint32_t dir) +__cold int comp_buffer_connect(struct comp_dev *comp, uint32_t comp_core, + struct comp_buffer *buffer, uint32_t dir) { /* check if it's a connection between cores */ if (buffer->core != comp_core) { @@ -197,7 +198,7 @@ int comp_buffer_connect(struct comp_dev *comp, uint32_t comp_core, return pipeline_connect(comp, buffer, dir); } -int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id) +__cold int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id) { struct ipc_comp_dev *ipc_pipe; struct ipc_comp_dev *icd; @@ -260,7 +261,7 @@ int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id) ipc_ppl_sink->cd); } -int ipc_comp_free(struct ipc *ipc, uint32_t comp_id) +__cold int ipc_comp_free(struct ipc *ipc, uint32_t comp_id) { struct ipc_comp_dev *icd; struct list_item *clist, *tmp; diff --git a/src/ipc/ipc4/handler.c b/src/ipc/ipc4/handler.c index 3fb49696f343..9313f3d1096a 100644 --- a/src/ipc/ipc4/handler.c +++ b/src/ipc/ipc4/handler.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -131,14 +132,14 @@ static inline const struct ipc4_pipeline_set_state_data *ipc4_get_pipeline_data( /* * Global IPC Operations. */ -static int ipc4_new_pipeline(struct ipc4_message_request *ipc4) +__cold static int ipc4_new_pipeline(struct ipc4_message_request *ipc4) { struct ipc *ipc = ipc_get(); return ipc_pipeline_new(ipc, (ipc_pipe_new *)ipc4); } -static int ipc4_delete_pipeline(struct ipc4_message_request *ipc4) +__cold static int ipc4_delete_pipeline(struct ipc4_message_request *ipc4) { struct ipc4_pipeline_delete *pipe; struct ipc *ipc = ipc_get(); @@ -149,7 +150,7 @@ static int ipc4_delete_pipeline(struct ipc4_message_request *ipc4) return ipc_pipeline_free(ipc, pipe->primary.r.instance_id); } -static int ipc4_comp_params(struct comp_dev *current, +__cold static int ipc4_comp_params(struct comp_dev *current, struct comp_buffer *calling_buf, struct pipeline_walk_context *ctx, int dir) { @@ -171,7 +172,7 @@ static int ipc4_comp_params(struct comp_dev *current, return pipeline_for_each_comp(current, ctx, dir); } -static int ipc4_pipeline_params(struct pipeline *p, struct comp_dev *host) +__cold static int ipc4_pipeline_params(struct pipeline *p, struct comp_dev *host) { struct sof_ipc_pcm_params hw_params = {{ 0 }}; struct pipeline_data data = { @@ -189,7 +190,7 @@ static int ipc4_pipeline_params(struct pipeline *p, struct comp_dev *host) return param_ctx.comp_func(host, NULL, ¶m_ctx, host->direction); } -static int ipc4_pcm_params(struct ipc_comp_dev *pcm_dev) +__cold static int ipc4_pcm_params(struct ipc_comp_dev *pcm_dev) { int err, reset_err; @@ -229,7 +230,7 @@ static int ipc4_pcm_params(struct ipc_comp_dev *pcm_dev) return err; } -static bool is_any_ppl_active(void) +__cold static bool is_any_ppl_active(void) { struct ipc_comp_dev *icd; struct list_item *clist; @@ -246,7 +247,7 @@ static bool is_any_ppl_active(void) return false; } -static struct ipc_comp_dev *pipeline_get_host_dev(struct ipc_comp_dev *ppl_icd) +__cold static struct ipc_comp_dev *pipeline_get_host_dev(struct ipc_comp_dev *ppl_icd) { struct ipc_comp_dev *host_dev; struct ipc *ipc = ipc_get(); @@ -315,7 +316,7 @@ static struct ipc_comp_dev *pipeline_get_host_dev(struct ipc_comp_dev *ppl_icd) * / */ -int ipc4_pipeline_prepare(struct ipc_comp_dev *ppl_icd, uint32_t cmd) +__cold int ipc4_pipeline_prepare(struct ipc_comp_dev *ppl_icd, uint32_t cmd) { struct ipc_comp_dev *host = NULL; struct ipc *ipc = ipc_get(); @@ -404,7 +405,7 @@ int ipc4_pipeline_prepare(struct ipc_comp_dev *ppl_icd, uint32_t cmd) return ret; } -int ipc4_pipeline_trigger(struct ipc_comp_dev *ppl_icd, uint32_t cmd, bool *delayed) +__cold int ipc4_pipeline_trigger(struct ipc_comp_dev *ppl_icd, uint32_t cmd, bool *delayed) { struct ipc_comp_dev *host; int status; @@ -496,7 +497,7 @@ int ipc4_pipeline_trigger(struct ipc_comp_dev *ppl_icd, uint32_t cmd, bool *dela return ret; } -static void ipc_compound_pre_start(int msg_id) +__cold static void ipc_compound_pre_start(int msg_id) { /* ipc thread will wait for all scheduled tasks to be complete * Use a reference count to check status of these tasks. @@ -504,7 +505,7 @@ static void ipc_compound_pre_start(int msg_id) atomic_add(&msg_data.delayed_reply, 1); } -static void ipc_compound_post_start(uint32_t msg_id, int ret, bool delayed) +__cold static void ipc_compound_post_start(uint32_t msg_id, int ret, bool delayed) { if (ret) { ipc_cmd_err(&ipc_tr, "failed to process msg %d status %d", msg_id, ret); @@ -517,7 +518,7 @@ static void ipc_compound_post_start(uint32_t msg_id, int ret, bool delayed) atomic_sub(&msg_data.delayed_reply, 1); } -static void ipc_compound_msg_done(uint32_t msg_id, int error) +__cold static void ipc_compound_msg_done(uint32_t msg_id, int error) { if (!atomic_read(&msg_data.delayed_reply)) { ipc_cmd_err(&ipc_tr, "unexpected delayed reply"); @@ -544,7 +545,7 @@ static int ipc_wait_for_compound_msg(void) return IPC4_SUCCESS; } #else -static int ipc_wait_for_compound_msg(void) +__cold static int ipc_wait_for_compound_msg(void) { int try_count = 30; @@ -562,7 +563,7 @@ static int ipc_wait_for_compound_msg(void) } #endif -const struct ipc4_pipeline_set_state_data *ipc4_get_pipeline_data_wrapper(void) +__cold const struct ipc4_pipeline_set_state_data *ipc4_get_pipeline_data_wrapper(void) { const struct ipc4_pipeline_set_state_data *ppl_data; @@ -571,7 +572,7 @@ const struct ipc4_pipeline_set_state_data *ipc4_get_pipeline_data_wrapper(void) return ppl_data; } -static int ipc4_set_pipeline_state(struct ipc4_message_request *ipc4) +__cold static int ipc4_set_pipeline_state(struct ipc4_message_request *ipc4) { const struct ipc4_pipeline_set_state_data *ppl_data; struct ipc4_pipeline_set_state state; @@ -700,7 +701,7 @@ static int ipc4_set_pipeline_state(struct ipc4_message_request *ipc4) } #if CONFIG_LIBRARY_MANAGER -static int ipc4_load_library(struct ipc4_message_request *ipc4) +__cold static int ipc4_load_library(struct ipc4_message_request *ipc4) { struct ipc4_module_load_library library; int ret; @@ -716,7 +717,7 @@ static int ipc4_load_library(struct ipc4_message_request *ipc4) } #endif -static int ipc4_process_chain_dma(struct ipc4_message_request *ipc4) +__cold static int ipc4_process_chain_dma(struct ipc4_message_request *ipc4) { #if CONFIG_COMP_CHAIN_DMA struct ipc_comp_dev *cdma_comp; @@ -771,7 +772,7 @@ static int ipc4_process_chain_dma(struct ipc4_message_request *ipc4) #endif } -static int ipc4_process_ipcgtw_cmd(struct ipc4_message_request *ipc4) +__cold static int ipc4_process_ipcgtw_cmd(struct ipc4_message_request *ipc4) { #if CONFIG_IPC4_GATEWAY struct ipc *ipc = ipc_get(); @@ -795,7 +796,7 @@ static int ipc4_process_ipcgtw_cmd(struct ipc4_message_request *ipc4) #endif } -static int ipc4_process_glb_message(struct ipc4_message_request *ipc4) +__cold static int ipc4_process_glb_message(struct ipc4_message_request *ipc4) { uint32_t type; int ret; @@ -906,7 +907,7 @@ __cold static int ipc4_init_module_instance(struct ipc4_message_request *ipc4) return 0; } -static int ipc4_bind_module_instance(struct ipc4_message_request *ipc4) +__cold static int ipc4_bind_module_instance(struct ipc4_message_request *ipc4) { struct ipc4_module_bind_unbind bu; struct ipc *ipc = ipc_get(); @@ -922,7 +923,7 @@ static int ipc4_bind_module_instance(struct ipc4_message_request *ipc4) return ipc_comp_connect(ipc, (ipc_pipe_comp_connect *)&bu); } -static int ipc4_unbind_module_instance(struct ipc4_message_request *ipc4) +__cold static int ipc4_unbind_module_instance(struct ipc4_message_request *ipc4) { struct ipc4_module_bind_unbind bu; struct ipc *ipc = ipc_get(); @@ -938,7 +939,7 @@ static int ipc4_unbind_module_instance(struct ipc4_message_request *ipc4) return ipc_comp_disconnect(ipc, (ipc_pipe_comp_connect *)&bu); } -static int ipc4_get_vendor_config_module_instance(struct comp_dev *dev, +__cold static int ipc4_get_vendor_config_module_instance(struct comp_dev *dev, const struct comp_driver *drv, bool init_block, bool final_block, @@ -1031,7 +1032,7 @@ static int ipc4_get_vendor_config_module_instance(struct comp_dev *dev, return IPC4_SUCCESS; } -static int ipc4_get_large_config_module_instance(struct ipc4_message_request *ipc4) +__cold static int ipc4_get_large_config_module_instance(struct ipc4_message_request *ipc4) { struct ipc4_module_large_config_reply reply; struct ipc4_module_large_config config; @@ -1069,7 +1070,7 @@ static int ipc4_get_large_config_module_instance(struct ipc4_message_request *ip } if (!drv) - return IPC4_MOD_INVALID_ID; + return IPC4_MOD_INVALID_ID + (config.primary.r.module_id ? 7 : 8); if (!drv->ops.get_large_config) return IPC4_INVALID_REQUEST; @@ -1123,7 +1124,7 @@ static int ipc4_get_large_config_module_instance(struct ipc4_message_request *ip return ret; } -static int ipc4_set_vendor_config_module_instance(struct comp_dev *dev, +__cold static int ipc4_set_vendor_config_module_instance(struct comp_dev *dev, const struct comp_driver *drv, uint32_t module_id, uint32_t instance_id, @@ -1186,7 +1187,7 @@ static int ipc4_set_vendor_config_module_instance(struct comp_dev *dev, data_off_size, data); } -static int ipc4_set_large_config_module_instance(struct ipc4_message_request *ipc4) +__cold static int ipc4_set_large_config_module_instance(struct ipc4_message_request *ipc4) { struct ipc4_module_large_config config; struct comp_dev *dev = NULL; @@ -1254,7 +1255,7 @@ static int ipc4_set_large_config_module_instance(struct ipc4_message_request *ip return ret; } -static int ipc4_delete_module_instance(struct ipc4_message_request *ipc4) +__cold static int ipc4_delete_module_instance(struct ipc4_message_request *ipc4) { struct ipc4_module_delete_instance module; struct ipc *ipc = ipc_get(); @@ -1280,7 +1281,7 @@ static int ipc4_delete_module_instance(struct ipc4_message_request *ipc4) } /* disable power gating on core 0 */ -static int ipc4_module_process_d0ix(struct ipc4_message_request *ipc4) +__cold static int ipc4_module_process_d0ix(struct ipc4_message_request *ipc4) { struct ipc4_module_set_d0ix d0ix; uint32_t module_id, instance_id; @@ -1309,7 +1310,7 @@ static int ipc4_module_process_d0ix(struct ipc4_message_request *ipc4) } /* enable/disable cores according to the state mask */ -static int ipc4_module_process_dx(struct ipc4_message_request *ipc4) +__cold static int ipc4_module_process_dx(struct ipc4_message_request *ipc4) { struct ipc4_module_set_dx dx; struct ipc4_dx_state_info dx_info; @@ -1400,7 +1401,7 @@ static int ipc4_module_process_dx(struct ipc4_message_request *ipc4) return IPC4_SUCCESS; } -static int ipc4_process_module_message(struct ipc4_message_request *ipc4) +__cold static int ipc4_process_module_message(struct ipc4_message_request *ipc4) { uint32_t type; int ret; @@ -1449,13 +1450,13 @@ static int ipc4_process_module_message(struct ipc4_message_request *ipc4) return ret; } -struct ipc_cmd_hdr *mailbox_validate(void) +__cold struct ipc_cmd_hdr *mailbox_validate(void) { struct ipc_cmd_hdr *hdr = ipc_get()->comp_data; return hdr; } -struct ipc_cmd_hdr *ipc_compact_read_msg(void) +__cold struct ipc_cmd_hdr *ipc_compact_read_msg(void) { int words; @@ -1466,7 +1467,7 @@ struct ipc_cmd_hdr *ipc_compact_read_msg(void) return &msg_data.msg_in; } -struct ipc_cmd_hdr *ipc_prepare_to_send(const struct ipc_msg *msg) +__cold struct ipc_cmd_hdr *ipc_prepare_to_send(const struct ipc_msg *msg) { msg_data.msg_out.pri = msg->header; msg_data.msg_out.ext = msg->extension; @@ -1477,14 +1478,14 @@ struct ipc_cmd_hdr *ipc_prepare_to_send(const struct ipc_msg *msg) return &msg_data.msg_out; } -void ipc_boot_complete_msg(struct ipc_cmd_hdr *header, uint32_t data) +__cold void ipc_boot_complete_msg(struct ipc_cmd_hdr *header, uint32_t data) { header->pri = SOF_IPC4_FW_READY; header->ext = 0; } #if defined(CONFIG_PM_DEVICE) && defined(CONFIG_INTEL_ADSP_IPC) -void ipc_send_failed_power_transition_response(void) +__cold void ipc_send_failed_power_transition_response(void) { struct ipc4_message_request *request = ipc_from_hdr(&msg_data.msg_in); struct ipc4_message_reply response; @@ -1501,7 +1502,7 @@ void ipc_send_failed_power_transition_response(void) } #endif /* defined(CONFIG_PM_DEVICE) && defined(CONFIG_INTEL_ADSP_IPC) */ -void ipc_send_panic_notification(void) +__cold void ipc_send_panic_notification(void) { msg_notify.header = SOF_IPC4_NOTIF_HEADER(SOF_IPC4_EXCEPTION_CAUGHT); msg_notify.extension = cpu_get_id(); @@ -1514,7 +1515,7 @@ void ipc_send_panic_notification(void) #ifdef CONFIG_LOG_BACKEND_ADSP_MTRACE -static bool is_notification_queued(struct ipc_msg *msg) +__cold static bool is_notification_queued(struct ipc_msg *msg) { struct ipc *ipc = ipc_get(); k_spinlock_key_t key; @@ -1528,7 +1529,7 @@ static bool is_notification_queued(struct ipc_msg *msg) return queued; } -void ipc_send_buffer_status_notify(void) +__cold void ipc_send_buffer_status_notify(void) { /* a single msg_notify object is used */ if (is_notification_queued(&msg_notify)) @@ -1544,7 +1545,7 @@ void ipc_send_buffer_status_notify(void) } #endif -void ipc_msg_reply(struct sof_ipc_reply *reply) +__cold void ipc_msg_reply(struct sof_ipc_reply *reply) { struct ipc4_message_request in; @@ -1552,7 +1553,7 @@ void ipc_msg_reply(struct sof_ipc_reply *reply) ipc_compound_msg_done(in.primary.r.type, reply->error); } -void ipc_cmd(struct ipc_cmd_hdr *_hdr) +__cold void ipc_cmd(struct ipc_cmd_hdr *_hdr) { struct ipc4_message_request *in = ipc4_get_message_request(); enum ipc4_message_target target; diff --git a/src/ipc/ipc4/helper.c b/src/ipc/ipc4/helper.c index 3e8cfdcf5815..5973a1537055 100644 --- a/src/ipc/ipc4/helper.c +++ b/src/ipc/ipc4/helper.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -60,23 +61,23 @@ LOG_MODULE_DECLARE(ipc, CONFIG_SOF_LOG_LEVEL); extern struct tr_ctx comp_tr; -void ipc_build_stream_posn(struct sof_ipc_stream_posn *posn, uint32_t type, - uint32_t id) +__cold void ipc_build_stream_posn(struct sof_ipc_stream_posn *posn, uint32_t type, + uint32_t id) { memset(posn, 0, sizeof(*posn)); } -void ipc_build_comp_event(struct sof_ipc_comp_event *event, uint32_t type, - uint32_t id) +__cold void ipc_build_comp_event(struct sof_ipc_comp_event *event, uint32_t type, + uint32_t id) { } -bool ipc_trigger_trace_xfer(uint32_t avail) +__cold bool ipc_trigger_trace_xfer(uint32_t avail) { return avail >= DMA_TRACE_LOCAL_SIZE / 2; } -void ipc_build_trace_posn(struct sof_ipc_dma_trace_posn *posn) +__cold void ipc_build_trace_posn(struct sof_ipc_dma_trace_posn *posn) { posn->rhdr.hdr.cmd = SOF_IPC4_NOTIF_HEADER(SOF_IPC4_NOTIFY_LOG_BUFFER_STATUS); posn->rhdr.hdr.size = 0; @@ -96,7 +97,7 @@ static const struct comp_driver *ipc4_library_get_comp_drv(char *data) return ipc4_get_drv(data); } #else -static inline char *ipc4_get_comp_new_data(void) +__cold static inline char *ipc4_get_comp_new_data(void) { return (char *)MAILBOX_HOSTBOX_BASE; } @@ -190,9 +191,9 @@ __cold struct comp_dev *comp_new_ipc4(struct ipc4_module_init_instance *module_i return dev; } -struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type, - uint32_t ppl_id, - uint32_t ignore_remote) +__cold struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type, + uint32_t ppl_id, + uint32_t ignore_remote) { struct ipc_comp_dev *icd; struct list_item *clist; @@ -218,7 +219,7 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type, return NULL; } -static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc) +__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc) { struct ipc_comp_dev *ipc_pipe; struct pipeline *pipe; @@ -267,7 +268,7 @@ static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc) return IPC4_SUCCESS; } -int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc) +__cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc) { struct ipc4_pipeline_create *pipe_desc = ipc_from_pipe_new(_pipe_desc); @@ -280,7 +281,7 @@ int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc) return ipc4_create_pipeline(pipe_desc); } -static inline int ipc_comp_free_remote(struct comp_dev *dev) +__cold static inline int ipc_comp_free_remote(struct comp_dev *dev) { struct idc_msg msg = { IDC_MSG_FREE, IDC_MSG_FREE_EXT(dev->ipc_config.id), dev->ipc_config.core,}; @@ -288,7 +289,7 @@ static inline int ipc_comp_free_remote(struct comp_dev *dev) return idc_send_msg(&msg, IDC_BLOCKING); } -static int ipc_pipeline_module_free(uint32_t pipeline_id) +__cold static int ipc_pipeline_module_free(uint32_t pipeline_id) { struct ipc *ipc = ipc_get(); struct ipc_comp_dev *icd; @@ -339,7 +340,7 @@ static int ipc_pipeline_module_free(uint32_t pipeline_id) return IPC4_SUCCESS; } -int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id) +__cold int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id) { struct ipc_comp_dev *ipc_pipe; int ret; @@ -373,9 +374,9 @@ int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id) return IPC4_SUCCESS; } -static struct comp_buffer *ipc4_create_buffer(struct comp_dev *src, bool is_shared, - uint32_t buf_size, uint32_t src_queue, - uint32_t dst_queue) +__cold static struct comp_buffer *ipc4_create_buffer(struct comp_dev *src, bool is_shared, + uint32_t buf_size, uint32_t src_queue, + uint32_t dst_queue) { struct sof_ipc_buffer ipc_buf; @@ -455,7 +456,7 @@ static int ll_wait_finished_on_core(struct comp_dev *dev) #endif -int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) +__cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) { struct ipc4_module_bind_unbind *bu; struct comp_buffer *buffer; @@ -673,7 +674,7 @@ int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) * during run-time. The only way to change pipeline topology is to delete the whole * pipeline and create it in modified form. */ -int ipc_comp_disconnect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) +__cold int ipc_comp_disconnect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) { struct ipc4_module_bind_unbind *bu; struct comp_buffer *buffer = NULL; @@ -766,7 +767,7 @@ int ipc_comp_disconnect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) } #if CONFIG_COMP_CHAIN_DMA -int ipc4_chain_manager_create(struct ipc4_chain_dma *cdma) +__cold int ipc4_chain_manager_create(struct ipc4_chain_dma *cdma) { const struct sof_uuid uuid = {0x6a0a274f, 0x27cc, 0x4afb, {0xa3, 0xe7, 0x34, 0x44, 0x72, 0x3f, 0x43, 0x2e}}; @@ -791,7 +792,7 @@ int ipc4_chain_manager_create(struct ipc4_chain_dma *cdma) return ipc4_add_comp_dev(dev); } -int ipc4_chain_dma_state(struct comp_dev *dev, struct ipc4_chain_dma *cdma) +__cold int ipc4_chain_dma_state(struct comp_dev *dev, struct ipc4_chain_dma *cdma) { const bool allocate = cdma->primary.r.allocate; const bool enable = cdma->primary.r.enable; @@ -831,7 +832,7 @@ int ipc4_chain_dma_state(struct comp_dev *dev, struct ipc4_chain_dma *cdma) } #endif -static int ipc4_update_comps_direction(struct ipc *ipc, uint32_t ppl_id) +__cold static int ipc4_update_comps_direction(struct ipc *ipc, uint32_t ppl_id) { struct ipc_comp_dev *icd; struct list_item *clist; @@ -863,7 +864,7 @@ static int ipc4_update_comps_direction(struct ipc *ipc, uint32_t ppl_id) return 0; } -int ipc4_pipeline_complete(struct ipc *ipc, uint32_t comp_id, uint32_t cmd) +__cold int ipc4_pipeline_complete(struct ipc *ipc, uint32_t comp_id, uint32_t cmd) { struct ipc_comp_dev *ipc_pipe; int ret; @@ -891,7 +892,7 @@ int ipc4_pipeline_complete(struct ipc *ipc, uint32_t comp_id, uint32_t cmd) return ipc_pipeline_complete(ipc, comp_id); } -int ipc4_process_on_core(uint32_t core, bool blocking) +__cold int ipc4_process_on_core(uint32_t core, bool blocking) { int ret; @@ -912,7 +913,7 @@ int ipc4_process_on_core(uint32_t core, bool blocking) return IPC4_SUCCESS; } -const struct comp_driver *ipc4_get_drv(const void *uuid) +__cold const struct comp_driver *ipc4_get_drv(const void *uuid) { const struct sof_uuid *const sof_uuid = (const struct sof_uuid *)uuid; struct comp_driver_list *drivers = comp_drivers_get(); @@ -948,7 +949,7 @@ const struct comp_driver *ipc4_get_drv(const void *uuid) return drv; } -const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id) +__cold const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id) { const struct sof_man_fw_desc *desc = NULL; const struct comp_driver *drv; @@ -1012,7 +1013,7 @@ const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id) return drv; } -struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id) +__cold struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id) { struct ipc_comp_dev *icd = ipc_get_comp_by_id(ipc_get(), comp_id); @@ -1020,7 +1021,7 @@ struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id) } EXPORT_SYMBOL(ipc4_get_comp_dev); -int ipc4_add_comp_dev(struct comp_dev *dev) +__cold int ipc4_add_comp_dev(struct comp_dev *dev) { struct ipc *ipc = ipc_get(); struct ipc_comp_dev *icd; @@ -1053,7 +1054,7 @@ int ipc4_add_comp_dev(struct comp_dev *dev) return IPC4_SUCCESS; }; -int ipc4_find_dma_config(struct ipc_config_dai *dai, uint8_t *data_buffer, uint32_t size) +__cold int ipc4_find_dma_config(struct ipc_config_dai *dai, uint8_t *data_buffer, uint32_t size) { #if ACE_VERSION > ACE_VERSION_1_5 uint32_t *dma_config_id = GET_IPC_DMA_CONFIG_ID(data_buffer, size); @@ -1066,8 +1067,8 @@ int ipc4_find_dma_config(struct ipc_config_dai *dai, uint8_t *data_buffer, uint3 return IPC4_SUCCESS; } -int ipc4_find_dma_config_multiple(struct ipc_config_dai *dai, uint8_t *data_buffer, - uint32_t size, uint32_t device_id, int dma_cfg_idx) +__cold int ipc4_find_dma_config_multiple(struct ipc_config_dai *dai, uint8_t *data_buffer, + uint32_t size, uint32_t device_id, int dma_cfg_idx) { uint32_t end_addr = (uint32_t)data_buffer + size; struct ipc_dma_config *dma_cfg; @@ -1095,8 +1096,8 @@ int ipc4_find_dma_config_multiple(struct ipc_config_dai *dai, uint8_t *data_buff return IPC4_INVALID_REQUEST; } -void ipc4_base_module_cfg_to_stream_params(const struct ipc4_base_module_cfg *base_cfg, - struct sof_ipc_stream_params *params) +__cold void ipc4_base_module_cfg_to_stream_params(const struct ipc4_base_module_cfg *base_cfg, + struct sof_ipc_stream_params *params) { enum sof_ipc_frame frame_fmt, valid_fmt; int i; @@ -1120,7 +1121,7 @@ void ipc4_base_module_cfg_to_stream_params(const struct ipc4_base_module_cfg *ba } EXPORT_SYMBOL(ipc4_base_module_cfg_to_stream_params); -void ipc4_update_buffer_format(struct comp_buffer *buf_c, +__cold void ipc4_update_buffer_format(struct comp_buffer *buf_c, const struct ipc4_audio_format *fmt) { enum sof_ipc_frame valid_fmt, frame_fmt; @@ -1143,8 +1144,8 @@ void ipc4_update_buffer_format(struct comp_buffer *buf_c, audio_buffer_set_hw_params_configured(&buf_c->audio_buffer); } -void ipc4_update_source_format(struct sof_source *source, - const struct ipc4_audio_format *fmt) +__cold void ipc4_update_source_format(struct sof_source *source, + const struct ipc4_audio_format *fmt) { enum sof_ipc_frame valid_fmt, frame_fmt; @@ -1160,8 +1161,8 @@ void ipc4_update_source_format(struct sof_source *source, source_set_buffer_fmt(source, fmt->interleaving_style); } -void ipc4_update_sink_format(struct sof_sink *sink, - const struct ipc4_audio_format *fmt) +__cold void ipc4_update_sink_format(struct sof_sink *sink, + const struct ipc4_audio_format *fmt) { enum sof_ipc_frame valid_fmt, frame_fmt; diff --git a/src/platform/intel/ace/platform.c b/src/platform/intel/ace/platform.c index 9e88861d9a97..bc74f60625cb 100644 --- a/src/platform/intel/ace/platform.c +++ b/src/platform/intel/ace/platform.c @@ -58,7 +58,7 @@ static const struct sof_ipc_fw_ready ready .flags = DEBUG_SET_FW_READY_FLAGS, }; -int platform_boot_complete(uint32_t boot_message) +__cold int platform_boot_complete(uint32_t boot_message) { struct ipc_cmd_hdr header; @@ -84,7 +84,7 @@ static struct pm_notifier pm_state_notifier = { #endif /* Runs on the primary core only */ -int platform_init(struct sof *sof) +__cold int platform_init(struct sof *sof) { int ret;