[GIT PULL] adding rpmsg and remoteproc to 3.3
Ohad Ben-Cohen
ohad at wizery.com
Thu Jan 12 14:01:15 EST 2012
Hi Linus,
Please pull:
git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc.git for-next-acked
To get the remoteproc and rpmsg frameworks, and a few fixes that were
collected after the frameworks were already merged into linux-next.
(I also tried to push this as a signed tag "rpmsg-for-3.3" but
am not sure how successful that feat really was)
All the patches have been sitting in linux-next for awhile now
(except the small last two which are there for only slightly more than a week,
because I waited a bit longer than usually needed after posting
and before committing).
The commit date of the entire patch-set is only a few days old,
because I felt it's worth rebasing that branch in order to add
Acks I've just received from Grant. Other than adding those Acks to
the commit logs there is virtually no other change (neither in the
code nor in the commit logs) from the original for-next branch (which
we have merged in linux-next today). I hope my decision was reasonable. If
not, and you prefer the non-rebased for-next branch, then it still exists in my
tree.
At some point we did briefly discuss whether this should perhaps go through the
arm-soc tree. Either way seemed fine, but eventually Arnd tended that
I do send it to you directly, because (unfortunately) Arnd didn't get to
do a detailed review of the last iteration of the patches. So we do
have Arnd's support, but (unfortunately) not his explicit Acked-by.
And now for some background on this (as I recently wrote in a side
thread with you, so sorry if you already read it):
Almost every SoC today have several extra cores (DSP or whatnot)
which usually employ some hardware multimedia accelerators and are
used to offload CPU-intensive tasks from the main application
processor. These other cores are used in an asymmetric multiprocessing
configurations, i.e. they run their own instance of operating system
(which can be some flavor of RTOS, or Linux, or whatnot. anything
goes).
Virtually every SoC vendor have this (lots of ARM vendors, but it's
definitely not limited to ARM), and they all have their own stack of drivers for
controlling, and communicating with, those remote cores. And it's
usually quite huge (tens of thousands loc) and very vendor-specific and
out-of-tree code.
So we're trying to fix this by introducing some generic code that'd
control those remote cores and let drivers talk to them, which all
vendors could then use.
Remoteproc is the framework for controlling those cores
(acquire/configure hardware resources, load firmware, power up/down),
and rpmsg is an inter-processor communication bus which allows drivers
to talk with remote services (simply by sending and receiving messages
over dedicated channels).
Rpmsg is using virtio (as suggested by Arnd) to avoid re-implementing
another shared memory "wire" protocol. And of course to be able to reuse all the
existing virtio drivers (e.g. net, block, console) with a remote core backend.
Much more details can be found in the commit logs, in the detailed
documentations and in the cover letter of the public submissions:
- https://lkml.org/lkml/2011/6/21/47 (first submission)
- https://lkml.org/lkml/2011/10/25/139 (second submission)
The general feedback is good and it looks like there's support across the
board for this, with no expressed objection. Ideally, though, I would prefer to
have more explicit Acks on the patches, so the support we received
would be explicitly reflected in the commit logs too. However, I do understand
this requires folks to carve out considerable time for review, which
isn't always possible...
This patch set only provides basic functionality (boot a remote core
and start talking with it, essentially). There's still more work to do
upstream until a real product can ship with mainline code (e.g.
runtime PM, error recovery, productive rpmsg drivers, ...), but as an
increasing number of parties (spanning several vendors) are now
starting to work with remoteproc/rpmsg, I feel it'd be beneficial to
merge it at this point in order to make collaboration easier. But If
you feel additional explicit Acks are required then by no means we can
wait another round and go harvest those Acks.
If you do decide to merge this then there are two simple merge-related
issues to expect with the 3.3 virtio changes:
1. adopt the recent s/virtqueue_add_buf_gfp/virtqueue_add_buf/ rename
2. tell vring_new_virtqueue() we're not interested in weak smp barriers
For reference, I already fixed those two issues on top of a rebased
branch called 'for-next-acked-merged'. Or if you prefer I can also
just send you the patches for this separately. I could have also
pulled Rusty's branch in and fixed the issues in my tree before
sending you the pull request, but I wasn't sure if that was
preferable.
After the initial rpmsg/remoteproc support will be merged, I expect to
start maintaining those two frameworks using two dedicated trees,
because their development is quite orthogonal.
Another small detail, which isn't very relevant to this pull request but
is still nice to know, is that the recently announced Galaxy Nexus
phone is already using remoteproc and rpmsg to control OMAP4's
two M3 cores and offload tasks to the hardware multimedia accelerators
which they employ. And I'm really happy we managed to submit the
patches to LKML much _before_ the phone was shipped :)
Last but not least: the homogeneous authorship of the patch set as
reflected below is somewhat misleading: this whole work is the result of
an effort done by many people, including (but not limited to) Mark Grosen,
Brian Swetland, Fernando Guzman Lugo, Suman Anna, Iliyan Malchev,
Anthony Gil and more. And also thanks to great review comments from
Grant Likely, Arnd Bergmann, Stephen Boyd and more. So thanks everyone!
The following changes since commit 5611cc4572e889b62a7b4c72a413536bf6a9c416:
Linux 3.2-rc4 (2011-12-01 14:56:01 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc.git
for-next-acked
Mark Grosen (2):
remoteproc: do not require an iommu
remoteproc: avoid registering a virtio device if not supported
Ohad Ben-Cohen (13):
remoteproc: add framework for controlling remote processors
remoteproc: add debugfs entries
remoteproc: create rpmsg virtio device
remoteproc/omap: add a remoteproc driver for OMAP4
rpmsg: add virtio-based remote processor messaging bus
samples/rpmsg: add an rpmsg driver sample
remoteproc: remove unused resource type
remoteproc/omap: utilize module_platform_driver
remoteproc: look for truncated firmware images
remoteproc: add Kconfig menu
rpmsg: add Kconfig menu
remoteproc: depends on EXPERIMENTAL
rpmsg: depends on EXPERIMENTAL
Documentation/ABI/testing/sysfs-bus-rpmsg | 75 ++
Documentation/remoteproc.txt | 324 ++++++
Documentation/rpmsg.txt | 293 ++++++
MAINTAINERS | 7 +
arch/arm/plat-omap/include/plat/remoteproc.h | 57 +
drivers/Kconfig | 4 +
drivers/Makefile | 2 +
drivers/remoteproc/Kconfig | 29 +
drivers/remoteproc/Makefile | 9 +
drivers/remoteproc/omap_remoteproc.c | 238 +++++
drivers/remoteproc/omap_remoteproc.h | 69 ++
drivers/remoteproc/remoteproc_core.c | 1438 ++++++++++++++++++++++++++
drivers/remoteproc/remoteproc_debugfs.c | 179 ++++
drivers/remoteproc/remoteproc_internal.h | 44 +
drivers/remoteproc/remoteproc_rpmsg.c | 295 ++++++
drivers/rpmsg/Kconfig | 10 +
drivers/rpmsg/Makefile | 1 +
drivers/rpmsg/virtio_rpmsg_bus.c | 1026 ++++++++++++++++++
include/linux/mod_devicetable.h | 9 +
include/linux/remoteproc.h | 264 +++++
include/linux/rpmsg.h | 326 ++++++
include/linux/virtio_ids.h | 1 +
samples/Kconfig | 8 +
samples/Makefile | 2 +-
samples/rpmsg/Makefile | 1 +
samples/rpmsg/rpmsg_client_sample.c | 100 ++
26 files changed, 4810 insertions(+), 1 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-bus-rpmsg
create mode 100644 Documentation/remoteproc.txt
create mode 100644 Documentation/rpmsg.txt
create mode 100644 arch/arm/plat-omap/include/plat/remoteproc.h
create mode 100644 drivers/remoteproc/Kconfig
create mode 100644 drivers/remoteproc/Makefile
create mode 100644 drivers/remoteproc/omap_remoteproc.c
create mode 100644 drivers/remoteproc/omap_remoteproc.h
create mode 100644 drivers/remoteproc/remoteproc_core.c
create mode 100644 drivers/remoteproc/remoteproc_debugfs.c
create mode 100644 drivers/remoteproc/remoteproc_internal.h
create mode 100644 drivers/remoteproc/remoteproc_rpmsg.c
create mode 100644 drivers/rpmsg/Kconfig
create mode 100644 drivers/rpmsg/Makefile
create mode 100644 drivers/rpmsg/virtio_rpmsg_bus.c
create mode 100644 include/linux/remoteproc.h
create mode 100644 include/linux/rpmsg.h
create mode 100644 samples/rpmsg/Makefile
create mode 100644 samples/rpmsg/rpmsg_client_sample.c
More information about the linux-arm-kernel
mailing list