Hopefully this works for you. Thanks, Mathieu [2]. https://elixir.bootlin.com/linux/v6.14-rc5/source/drivers/rpmsg/virtio_rpmsg_bus.c#L1054 [3]. https://elixir.bootlin.com/linux/v6.14-rc5/source/drivers/remoteproc/remoteproc_core.c#L1044 > + } > + } > + > + /* > + * By default, wait for the FW_READY > + * unless a vdev entry disables it > + */ > + return true; > +} > + > /* > * Start function for rproc_ops > * > - * There is a handshake for start procedure: when DSP starts, it > - * will send a doorbell message to this driver, then the > - * REMOTE_IS_READY flags is set, then driver will kick > - * a message to DSP. > + * The start procedure involves a handshake: when the DSP starts, it > + * sends a doorbell message to this driver, which sets the > + * REMOTE_IS_READY flag. The driver then sends a message to the DSP. > + * > + * Before proceeding, the driver checks if it needs to wait for a > + * firmware ready reply using imx_dsp_rproc_wait_fw_ready(). > + * If waiting is required, it calls imx_dsp_rproc_ready() to complete > + * the initialization. > + * If waiting is not required, the start function returns. > */ > static int imx_dsp_rproc_start(struct rproc *rproc) > { > @@ -335,8 +405,8 @@ static int imx_dsp_rproc_start(struct rproc *rproc) > > if (ret) > dev_err(dev, "Failed to enable remote core!\n"); > - else > - ret = imx_dsp_rproc_ready(rproc); > + else if (imx_dsp_rproc_wait_fw_ready(rproc)) > + return imx_dsp_rproc_ready(rproc); > > return ret; > } > -- > 2.25.1 >