27 Jul, 2012
1 commit
-
Pull remoteproc update from Ohad Ben-Cohen:
- custom binary format support from Sjur Brændeland
- groundwork for recovery and runtime pm support
- some cleanups and API simplificationsFix up conflicts in drivers/remoteproc/remoteproc_core.c due to clashes
with earlier cleanups by Sjur Brændeland (with part of the cleanups
moved into the new remoteproc_elf_loader.c file).* tag 'remoteproc-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc:
MAINTAINERS: add remoteproc's git
remoteproc: Support custom firmware handlers
remoteproc: Move Elf related functions to separate file
remoteproc: Add function rproc_get_boot_addr
remoteproc: Pass struct fw to load_segments and find_rsc_table.
remoteproc: adopt the driver core's alloc/add/del/put naming
remoteproc: remove the get_by_name/put API
remoteproc: support non-iommu carveout assignment
remoteproc: simplify unregister/free interfaces
remoteproc: remove the now-redundant kref
remoteproc: maintain a generic child device for each rproc
remoteproc: allocate vrings on demand, free when not needed
17 Jul, 2012
1 commit
-
When rpmsg drivers are built into the kernel, they must not initialize
before the rpmsg bus does, otherwise they'd trigger a BUG() in
drivers/base/driver.c line 169 (driver_register()).To fix that, and to stop depending on arbitrary linkage ordering of
those built-in rpmsg drivers, we make the rpmsg bus initialize at
subsys_initcall.Cc: stable
Signed-off-by: Federico Fuga
[ohad: rewrite the commit log]
Signed-off-by: Ohad Ben-Cohen
06 Jul, 2012
1 commit
-
For each registered rproc, maintain a generic remoteproc device whose
parent is the low level platform-specific device (commonly a pdev, but
it may certainly be any other type of device too).With this in hand, the resulting device hierarchy might then look like:
omap-rproc.0
|
- remoteproc0 for suggesting and
discussing these ideas in one of the remoteproc review threads and
to Fernando Guzman Lugo for trying them out
with the (upcoming) runtime PM support for remoteproc.Cc: Fernando Guzman Lugo
Reviewed-by: Stephen Boyd
Signed-off-by: Ohad Ben-Cohen
04 Jul, 2012
2 commits
-
When inbound messages arrive, rpmsg core looks up their associated
endpoint (by destination address) and then invokes their callback.We've made sure that endpoints will never be de-allocated after they
were found by rpmsg core, but we also need to protect against the
(rare) scenario where the rpmsg driver was just removed, and its
callback function isn't available anymore.This is achieved by introducing a callback mutex, which must be taken
before the callback is invoked, and, obviously, before it is removed.Cc: stable
Reported-by: Fernando Guzman Lugo
Signed-off-by: Ohad Ben-Cohen -
When an inbound message arrives, the rpmsg core looks up its
associated endpoint and invokes the registered callback.If a message arrives while its endpoint is being removed (because
the rpmsg driver was removed, or a recovery of a remote processor
has kicked in) we must ensure atomicity, i.e.:- Either the ept is removed before it is found
or
- The ept is found but will not be freed until the callback returns
This is achieved by maintaining a per-ept reference count, which,
when drops to zero, will trigger deallocation of the ept.With this in hand, it is now forbidden to directly deallocate
epts once they have been added to the endpoints idr.Cc: stable
Reported-by: Fernando Guzman Lugo
Signed-off-by: Ohad Ben-Cohen
04 Mar, 2012
1 commit
-
dev_dbg() in rpmsg_probe() made use of the %x formatting that
expects an 'unsigned int' which dma_addr_t is not in cases where
dma_addr_t is 64-bit (CONFIG_ARCH_DMA_ADDR_T_64BIT). Casting to
a 'unsigned long long' and using %llx will avoid this.Signed-off-by: Mark Asselstine
CC: Ohad Ben-Cohen
CC: Arnd Bergmann
Signed-off-by: Ohad Ben-Cohen
29 Feb, 2012
3 commits
-
After processing an incoming message, always publish the real size
of its containing buffer when putting it back on the available rx ring.Using any different value might erroneously limit the remote processor
(leading it to think the buffer is smaller than it really is).Signed-off-by: Ohad Ben-Cohen
Cc: Grant Likely
Cc: Arnd Bergmann
Cc: Mark Grosen
Cc: Suman Anna
Cc: Fernando Guzman Lugo
Cc: Rob Clark
Cc: Ludovic BARRE
Cc: Loic PALLARDY
Cc: Omar Ramirez Luna -
When an inbound message arrives, validate its reported length before
propagating it, otherwise buggy (or malicious) remote processors might
trick us into accessing memory which we really shouldn't.Signed-off-by: Ohad Ben-Cohen
Cc: Grant Likely
Cc: Arnd Bergmann
Cc: Mark Grosen
Cc: Suman Anna
Cc: Fernando Guzman Lugo
Cc: Rob Clark
Cc: Ludovic BARRE
Cc: Loic PALLARDY
Cc: Omar Ramirez Luna -
The name service endpoint wasn't destroyed, so fix it.
This is achieved by introducing an internal __rpmsg_destroy_ept
function which doesn't assume the given ept is bound to an rpmsg
channel (much like the existing __rpmsg_create_ept).This is needed because the name service ept belongs to the rpmsg bus,
and is never bound with a specific rpdev.Reported-by: Omar Ramirez Luna
Signed-off-by: Ohad Ben-Cohen
Cc: Grant Likely
Cc: Arnd Bergmann
Cc: Mark Grosen
Cc: Suman Anna
Cc: Fernando Guzman Lugo
Cc: Rob Clark
Cc: Ludovic BARRE
Cc: Loic PALLARDY
Cc: Omar Ramirez Luna
23 Feb, 2012
2 commits
-
Since commit 7bb7aef2 "virtio: rename virtqueue_add_buf_gfp to virtqueue_add_buf",
virtqueue_add_buf_gfp is already rename to virtqueue_add_buf now.This patch fixes below build error:
CC [M] drivers/rpmsg/virtio_rpmsg_bus.o
drivers/rpmsg/virtio_rpmsg_bus.c: In function 'rpmsg_send_offchannel_raw':
drivers/rpmsg/virtio_rpmsg_bus.c:723: error: implicit declaration of function 'virtqueue_add_buf_gfp'
make[2]: *** [drivers/rpmsg/virtio_rpmsg_bus.o] Error 1
make[1]: *** [drivers/rpmsg] Error 2
make: *** [drivers] Error 2Signed-off-by: Axel Lin
Signed-off-by: Ohad Ben-Cohen -
There isn't any binary change in sight or evidence of any stability
issue, but as we just begin to get traction we can't rule them out
completely.To be on the safe side, let's mark rpmsg as EXPERIMENTAL, and remove
it later on after we have several happy users.Signed-off-by: Ohad Ben-Cohen
Cc: Stephen Boyd
Cc: Rob Clark
Cc: Mark Grosen
Cc: Ludovic BARRE
09 Feb, 2012
2 commits
-
Add a dedicated Kconfig menu for the rpmsg drivers, so they
don't show up in the main driver menu.Signed-off-by: Ohad Ben-Cohen
-
Add a virtio-based inter-processor communication bus, which enables
kernel drivers to communicate with entities, running on remote
processors, over shared memory using a simple messaging protocol.Every pair of AMP processors share two vrings, which are used to send
and receive the messages over shared memory.The header of every message sent on the rpmsg bus contains src and dst
addresses, which make it possible to multiplex several rpmsg channels on
the same vring.Every rpmsg channel is a device on this bus. When a channel is added,
and an appropriate rpmsg driver is found and probed, it is also assigned
a local rpmsg address, which is then bound to the driver's callback.When inbound messages carry the local address of a bound driver,
its callback is invoked by the bus.This patch provides a kernel interface only; user space interfaces
will be later exposed by kernel users of this rpmsg bus.Designed with Brian Swetland .
Signed-off-by: Ohad Ben-Cohen
Acked-by: Rusty Russell (virtio_ids.h)
Cc: Brian Swetland
Cc: Arnd Bergmann
Cc: Grant Likely
Cc: Tony Lindgren
Cc: Russell King
Cc: Andrew Morton
Cc: Greg KH
Cc: Stephen Boyd