-
Notifications
You must be signed in to change notification settings - Fork 349
[WIP] sof: ipc: switch platform IPC to Zephyr service #10422
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[WIP] sof: ipc: switch platform IPC to Zephyr service #10422
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR migrates SOF's platform IPC implementation from the Intel-specific ADSP IPC driver to the generic Zephyr ipc_service API, enabling better integration with Zephyr and easier vendor customization.
Key Changes:
- Replaced direct
intel_adsp_ipc_*()calls withipc_service_*()API calls throughout the IPC path - Introduced
sof_ipc_receive_cb()as the new IPC service endpoint callback handler - Added compile-time assertion to validate IPC header format assumptions
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| west.yml | Updates Zephyr dependency to a PR branch containing the required IPC service changes |
| src/ipc/ipc-zephyr.c | Replaces Intel ADSP IPC driver calls with generic Zephyr IPC service API, registers endpoint, and updates message handling callbacks |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| struct ipc_cmd_hdr *hdr = ipc_prepare_to_send(msg); | ||
|
|
||
| intel_adsp_ipc_send_message_emergency(INTEL_ADSP_IPC_HOST_DEV, hdr->pri, hdr->ext); | ||
| (void)ipc_service_send_critical(&sof_ipc_ept, hdr, sizeof(*hdr)); |
Copilot
AI
Dec 9, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The return value of ipc_service_send_critical() is silently discarded with a void cast. If this function can fail, the caller has no way to detect or handle the failure. Consider logging an error or adding an assertion to catch failures in this critical path.
| (void)ipc_service_send_critical(&sof_ipc_ept, hdr, sizeof(*hdr)); | |
| int ret = ipc_service_send_critical(&sof_ipc_ept, hdr, sizeof(*hdr)); | |
| if (ret != 0) { | |
| tr_err(&ipc_tr, "ipc_service_send_critical() failed: %d", ret); | |
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should check/report this failure (since its likely time critical).
| ret = ipc_service_register_endpoint(INTEL_ADSP_IPC_HOST_DEV, | ||
| &sof_ipc_ept, &sof_ipc_ept_cfg); |
Copilot
AI
Dec 9, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code still references INTEL_ADSP_IPC_HOST_DEV macro directly. While migrating to the generic ipc_service API, this hardcoded Intel-specific device reference limits portability. Consider abstracting this behind a platform-agnostic macro or devicetree reference to fully achieve the stated goal of allowing other vendors to integrate their own IPC backends.
d085bfa to
a2b58ca
Compare
PR with changes in IPC backend. Signed-off-by: Tomasz Leman <tomasz.m.leman@intel.com>
This patch reworks the SOF IPC platform integration to use the generic Zephyr ipc_service instead of the Intel audio DSP specific driver. Before this change SOF was talking directly to the Intel ADSP IPC driver, which made the IPC path tightly coupled to that particular backend. All commands were sent and completed via intel_adsp_ipc_*() functions. The code now sends and receives IPC commands through a Zephyr ipc_service endpoint registered on the Intel ADSP host IPC instance, using sof_ipc_receive_cb() as the receive handler. Incoming messages are processed as before using the existing compact IPC path to process commands. Each IPC command is treated as a compact two-word ipc_cmd_hdr and a BUILD_ASSERT guarantees that the header size remains aligned with the transport format assumptions. This change is part of ongoing work to better integrate SOF with Zephyr and will allow other vendors to more easily integrate their own IPC backends. Signed-off-by: Tomasz Leman <tomasz.m.leman@intel.com>
a2b58ca to
96221b4
Compare
|
@tmleman Jenkins results are good atm. |
This patch reworks the SOF IPC platform integration to use the generic Zephyr ipc_service instead of the Intel audio DSP specific driver.
Before this change SOF was talking directly to the Intel ADSP IPC driver, which made the IPC path tightly coupled to that particular backend. All commands were sent and completed via intel_adsp_ipc_*() functions.
The code now sends and receives IPC commands through a Zephyr ipc_service endpoint registered on the Intel ADSP host IPC instance, using sof_ipc_receive_cb() as the receive handler. Incoming messages are processed as before using the existing compact IPC path to process commands.
Each IPC command is treated as a compact two-word ipc_cmd_hdr and a BUILD_ASSERT guarantees that the header size remains aligned with the transport format assumptions.
This change is part of ongoing work to better integrate SOF with Zephyr and will allow other vendors to more easily integrate their own IPC backends.