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:
pgpz3PRy2RLf8.pgp
Description: PGP signature