Re: permission to move definition of struct rpmsg_channel_info

From: Thierry Reding
Date: Mon Sep 09 2013 - 08:58:46 EST


On Sun, Sep 08, 2013 at 02:27:11PM +0200, Ohad Ben-Cohen wrote:
> Hi Arjun,
>
> On Fri, Aug 30, 2013 at 9:20 PM, Arjun Gopalan <agopalan@xxxxxxxxxx> wrote:
> >
> > Hi Ohad/Brian,
> >
> > I have been working on rpmsg and I need to be able to create static
> > rpmsg channels. Channel information needs to be specified by other
> > drivers and for this, the drivers need access to struct
> > rpmsg_channel_info.
>
> I'm not convinced how useful it is for other Linux drivers to create
> static rpmsg channels?
>
> Usually these channels reflect the existence of services running on
> the remote processor, and their creation (or lack thereof) should be
> specified in the remote image. This way an rpmsg channel is published
> iff there is a matching remote service.

If I understand correctly, the way that the services should be announced
is via RSC_VDEV entries in the resource table?

Looking at the remoteproc core and ELF loader, it seems like the way to
pass in the resource table is either via an extra ELF section or driver
specific. TI drivers seem to use ELF, but the STE modem driver seems to
employ some custom format.

From what I understand this resource table can also be processed by the
host to provide some of the resources such as carveout memory. So that
the normal way for this to work would be something like:

- load firmware image
- obtain pointer to resource table
- process resource table
- allocate resources
- update table
- upload firmware to remote processor

Upon which the remote processor probably needs to parse the resource
table to set itself up. Does that sound about right?

> The way we were planning to add static channels functionality (I
> should still have preliminary patches doing this somewhere but the
> entire work was put on hold since TI changed its focus) is by
> statically publishing them in the resource table, which is coupled
> with a specific remote image.

While I see that the format of all this is pretty well documented, are
there any standard tools that can be used to embed the resource table
into an ELF binary? I have a pretty good idea on how it could be done,
but I wonder if it might make sense to provide some kind of a standard
set of headers to make things easier so that not everyone has to
reinvent the wheel.

Looking at the remoteproc core, it seems that there's no direct way to
change the firmware running on a remoteproc at runtime. The firmware
image is bound to one specific struct rproc. Is there something
fundamental that would prevent us from adding some sort of hotplug
support so that we could reload the remote processor with a different
firmware using a different resource table at runtime? A remote processor
is only exposed via sysfs, so I assume that's probably where we'd need
to hook that up to?

Perhaps I should mention that I'm investigating on using remoteproc for
something semi-related to what Arjun is working on, so I expect most of
these questions to be relevant to his work as well.

Thierry

Attachment: pgp00000.pgp
Description: PGP signature