Issue Summary
We are unable to successfully initialize the Mailbox channel for DSP Inter-Processor Communication (IPC) on a custom AM571x board. The driver probe fails when calling mbox_request_channel() with a persistent -EPROBE_DEFER (-517) error, indicating that a fundamental dependency for the Mailbox Controller is not ready, despite extensive Device Tree (DT) and kernel configuration checks.
Hardware & Configuration Context
-
SoC: TI AM571x (OMAP2+ Architecture).
-
Communication: Mailbox 5 controller, used for Linux (ARM) to DSP IPC.
-
Kernel Config:
CONFIG_OMAP2PLUS_MBOX=y(Built-in TI Mailbox Controller driver). -
Driver: Custom Mailbox Client Platform Driver (C code provided below).
Device Tree (DTS) Configuration (Verified as status = "okay" on Target)
The following overrides and definitions were made to address initial setup failures:
| DT Node | Fixes Applied | Purpose & Current Status |
&mailbox5 |
status = "okay"; \#mbox-cells = <2>; (No clocks property) |
Controller is enabled; uses HWMOD framework for clocking. Confirmed status = okay on target. |
&mbox_dsp1_ipc3x |
status = "okay"; \#mbox-cells = <2>; |
Channel is enabled and explicitly satisfies the kernel's cell size requirement. Confirmed status = okay on target. |
my_dsp_client |
status = "okay"; mbox-names = "dsp_tx", "dsp_rx"; mboxes = <&mbox_dsp1_ipc3x 0 0>, <&mbox_dsp1_ipc3x 0 1>; |
Defines the client device and channel names used by the C driver. |
&dsp1 (RPROC) |
status = "okay"; mboxes = <&mailbox5 5 0>, <&mailbox5 1 0>; |
Enabled the DSP core using the standard RPROC/Mailbox linking style. |
Troubleshooting Steps & Results
-
Initial Failure (
-ENODEV, -19): This was traced to missingstatus = "okay";and\#mbox-cells = <2>;on the Mailbox nodes. Fixes applied. -
Code Change: Switched driver code to request the channel by index
0to rule outmbox-namesparsing issues. -
Current Failure (
-EPROBE_DEFER, -517): After all DT fixes, the error changed to probe deferral. -
Test 1: Disable RPROC: Set
&dsp1 { status = "disabled"; };. Result: The error persisted (-517). (This rules out a conflict with the Remoteproc driver's mailbox initialization.) -
Conclusion: The probe deferral is caused by the
omap2plus-mailboxdriver failing to initialize because a dependency (likely the L4 Interconnect or PRCM Power Domain) is not ready or enabled in the DT.
Sample Driver Code (Client Logic)
The failure occurs on the first mbox_request_channel call.
// Inside dsp_client_probe(struct platform_device *pdev)
// ... setup and devm_kzalloc ...
// Failure occurs here, returning -517
ipc->tx_channel = mbox_request_channel(&ipc->cl, 0); // Requesting channel by index 0
if (IS_ERR(ipc->tx_channel)) {
int ret = PTR_ERR(ipc->tx_channel);
// Log shows: Failed to get TX channel by index 0: -517
dev_err(&pdev->dev, "Failed to get TX channel by index 0: %d\n", ret);
return ret;
}
// ... rest of the probe ...

