Hi, On Mon, Jan 05, 2015 at 04:49:08PM -0600, Dave Gerlach wrote: > >> + /* > >> + * Write a dummy message to the mailbox in order to trigger the RX > >> + * interrupt to alert the M3 that data is available in the IPC > >> + * registers. We must enable the IRQ here and disable it after in > >> + * the RX callback to avoid multiple interrupts being received > >> + * by the CM3. > >> + */ > >> + omap_mbox_enable_irq(m3_ipc_state.mbox, IRQ_RX); > >> + ret = mbox_send_message(m3_ipc_state.mbox, (void *)dummy_msg); > > > > unnecessary cast. > > I get a compiler warning without this one, may need it.
right, try with:
ret = mbox_send_mesage(m3->mbox, &dummy_msg);
Another option is to just get rid of mbox_msg_t altogether since that's
just a u32 anyway. Then fix omap-mailbox.c::omap_mbox_chan_send_data()
so it knows it's receiving a void *, then it could:
u32 data = *(u32 *)mssg;
but as Tony said, better not to add more dependencies to this series.
> >> + m3_rproc = rproc_get_by_phandle(rproc_phandle);
> >> + if (!m3_rproc) {
> >> + dev_err(&pdev->dev, "could not get rproc handle\n");
> >> + ret = -EPROBE_DEFER;
> >> + goto err;
> >> + }
> >> +
> >> + m3_ipc_state.rproc = m3_rproc;
> >> + m3_ipc_state.dev = dev;
> >> + m3_ipc_state.state = M3_STATE_RESET;
> >> +
> >> + /*
> >> + * Wait for firmware loading completion in a thread so we
> >> + * can boot the wkup_m3 as soon as it's ready without holding
> >> + * up kernel boot
> >> + */
> >> + task = kthread_run((void *)wkup_m3_rproc_boot_thread, m3_rproc,
> >> + "wkup_m3_rproc_loader");
> >
> > I wonder two things:
> >
> > 1) This thread will only be used during boot up. Do we really need a
> > thread or would request_firmware_nowait() be enough ?
> >
> > 2) what's the size of the firmware ? Is it really so large that we must
> > run this as a separate thread ? Meaning, why isn't request_firmware()
> > enough ? How much time would we be waiting ?
>
> The issue here comes from the case where you attempt to load a firmware stored
> in the rootfs which is the typical use case for this. Remoteproc core requests
> the firmware twice, first with _nowait to load the resource table and then
> again
sounds like a bug to me. Or am I missing something ?
> without nowait to boot the rproc. rproc_boot requires the resource table to be
> loaded. The thread is really to wait for the firmware loaded completion, which
> gets set after the resource table has been loaded, to let boot proceed. System
> boot will get stuck otherwise as this driver can probe before rootfs is
> available.
IMO, that should be fixed in remoteproc, but it probably goes towards
"let's not add more dependencies".
--
balbi
signature.asc
Description: Digital signature

