From 37f240cc6a8087b093966f7c797651b2198a2b09 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Tue, 14 Jan 2025 18:17:28 +0100 Subject: [PATCH] ipc: Remove unnecessary cache manipulation The buffer containing the payload of the sent IPC message should always be placed in shared memory (non-cached). Remove the unnecessary is_shared field from the ipc_msg structure and the code responsible for performing cache memory operations. Signed-off-by: Adrian Warecki --- src/include/sof/ipc/msg.h | 3 +-- src/ipc/ipc-common.c | 9 --------- src/ipc/ipc4/handler.c | 18 +++--------------- src/library_manager/lib_notification.c | 1 - 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/src/include/sof/ipc/msg.h b/src/include/sof/ipc/msg.h index 20dfaf6eb519..7c36f323c232 100644 --- a/src/include/sof/ipc/msg.h +++ b/src/include/sof/ipc/msg.h @@ -34,8 +34,7 @@ struct ipc_msg { uint32_t header; /* specific to platform */ uint32_t extension; /* extension specific to platform */ uint32_t tx_size; /* payload size in bytes */ - void *tx_data; /* pointer to payload data */ - bool is_shared; /* the message is shared cross-core */ + void *tx_data; /* pointer to payload data, must be in a non-cached memory */ struct list_item list; }; diff --git a/src/ipc/ipc-common.c b/src/ipc/ipc-common.c index e9de1efdd2a0..7b88717049ec 100644 --- a/src/ipc/ipc-common.c +++ b/src/ipc/ipc-common.c @@ -216,15 +216,6 @@ void ipc_msg_send(struct ipc_msg *msg, void *data, bool high_priority) msg->tx_data != data) { ret = memcpy_s(msg->tx_data, msg->tx_size, data, msg->tx_size); assert(!ret); - if (!cpu_is_primary(cpu_get_id())) { - /* Write back data to memory to maintain coherence between cores. - * The response was prepared on a secondary core but will be sent - * to the host from the primary core. - */ - dcache_writeback_region((__sparse_force void __sparse_cache *)msg->tx_data, - msg->tx_size); - msg->is_shared = true; - } } /* diff --git a/src/ipc/ipc4/handler.c b/src/ipc/ipc4/handler.c index d61f2352496f..3fb49696f343 100644 --- a/src/ipc/ipc4/handler.c +++ b/src/ipc/ipc4/handler.c @@ -72,9 +72,9 @@ struct ipc4_msg_data { static struct ipc4_msg_data msg_data; /* fw sends a fw ipc message to send the status of the last host ipc message */ -static struct ipc_msg msg_reply = {0, 0, 0, 0, false, LIST_INIT(msg_reply.list)}; +static struct ipc_msg msg_reply = {0, 0, 0, 0, LIST_INIT(msg_reply.list)}; -static struct ipc_msg msg_notify = {0, 0, 0, 0, false, LIST_INIT(msg_notify.list)}; +static struct ipc_msg msg_notify = {0, 0, 0, 0, LIST_INIT(msg_notify.list)}; #if CONFIG_LIBRARY static inline struct ipc4_message_request *ipc4_get_message_request(void) @@ -1471,18 +1471,8 @@ 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; - if (msg->tx_size) { - /* Invalidate cache to ensure we read the latest data from memory. - * The response was prepared on a secondary core but will be sent - * to the host from the primary core. - */ - if (msg->is_shared) { - dcache_invalidate_region((__sparse_force void __sparse_cache *)msg->tx_data, - msg->tx_size); - } - + if (msg->tx_size) mailbox_dspbox_write(0, (uint32_t *)msg->tx_data, msg->tx_size); - } return &msg_data.msg_out; } @@ -1515,7 +1505,6 @@ void ipc_send_panic_notification(void) { msg_notify.header = SOF_IPC4_NOTIF_HEADER(SOF_IPC4_EXCEPTION_CAUGHT); msg_notify.extension = cpu_get_id(); - msg_notify.is_shared = !cpu_is_primary(cpu_get_id()); msg_notify.tx_size = 0; msg_notify.tx_data = NULL; list_init(&msg_notify.list); @@ -1548,7 +1537,6 @@ void ipc_send_buffer_status_notify(void) msg_notify.header = SOF_IPC4_NOTIF_HEADER(SOF_IPC4_NOTIFY_LOG_BUFFER_STATUS); msg_notify.extension = 0; msg_notify.tx_size = 0; - msg_notify.is_shared = false; tr_dbg(&ipc_tr, "tx-notify\t: %#x|%#x", msg_notify.header, msg_notify.extension); diff --git a/src/library_manager/lib_notification.c b/src/library_manager/lib_notification.c index 8c9b7f20367a..eb144ebaa398 100644 --- a/src/library_manager/lib_notification.c +++ b/src/library_manager/lib_notification.c @@ -73,7 +73,6 @@ struct ipc_msg *lib_notif_msg_init(uint32_t header, uint32_t size) /* Update header and size, since message handle can be reused */ msg->header = header; msg->tx_size = size; - msg->is_shared = !cpu_is_primary(cpu_get_id()); return msg; }