[RFC PATCH 0/7] remoteproc: restructure the remoteproc VirtIO device

From: Arnaud Pouliquen
Date: Fri Oct 01 2021 - 06:12:55 EST


This series is a part of the work initiate a long time ago in
the series "remoteproc: Decorelate virtio from core"[1]


Objective of the work:
- Update the remoteproc VirtIO device creation (use platform device)
- Allow to declare remoteproc VirtIO device in DT
- declare resources associated to a remote proc VirtIO
- declare a list of VirtIO supported by the platform.
- Prepare the enhancement to more VirtIO devices (e.g audio, video, ...)
- Keep the legacy working!
- Try to improve the picture about concerns reported by Christoph Hellwing [2][3]

[1] https://lkml.org/lkml/2020/4/16/1817
[2] https://lkml.org/lkml/2021/6/23/607
[3] https://patchwork.kernel.org/project/linux-remoteproc/patch/AOKowLclCbOCKxyiJ71WeNyuAAj2q8EUtxrXbyky5E@xxxxxxxxxxxxxxxxxxxx/

In term of device tree this would result in such hiearchy (stm32mp1 example with 2 virtio RPMSG):

m4_rproc: m4@10000000 {
compatible = "st,stm32mp1-m4";
reg = <0x10000000 0x40000>,
<0x30000000 0x40000>,
<0x38000000 0x10000>;
memory-region = <&retram>, <&mcuram>,<&mcuram2>;
mboxes = <&ipcc 2>, <&ipcc 3>;
mbox-names = "shutdown", "detach";
status = "okay";

#address-cells = <1>;
#size-cells = <0>;

vdev@0 {
compatible = "rproc-virtio";
reg = <0>;
virtio,id = <7>; /* RPMSG */
memory-region = <&vdev0vring0>, <&vdev0vring1>, <&vdev0buffer>;
mboxes = <&ipcc 0>, <&ipcc 1>;
mbox-names = "vq0", "vq1";
status = "okay";
};

vdev@1 {
compatible = "rproc-virtio";
reg = <1>;
virtio,id = <7>; /*RPMSG */
memory-region = <&vdev1vring0>, <&vdev1vring1>, <&vdev1buffer>;
mboxes = <&ipcc 4>, <&ipcc 5>;
mbox-names = "vq0", "vq1";
status = "okay";
};
};

I have divided the work in 4 steps to simplify the review, This series implements only
the step 1:
step 1: redefine the remoteproc VirtIO device as a platform device
- migrate rvdev management in remoteproc virtio.c,
- create a remotproc virtio config ( can be disabled for platform that not use VirtIO IPC.
step 2: add possibility to declare and prob a VirtIO sub node
- VirtIO bindings declaration,
- multi DT VirtIO devices support,
- introduction of a remote proc virtio bind device mechanism ,
=> https://github.com/arnopo/linux/commits/step2-virtio-in-DT
step 3: Add memory declaration in VirtIO subnode
=> https://github.com/arnopo/linux/commits/step3-virtio-memories
step 4: Add mailbox declaration in VirtIO subnode
=> https://github.com/arnopo/linux/commits/step4-virtio-mailboxes

Arnaud Pouliquen (7):
remoteproc: core: Introduce virtio device add/remove functions
remoteproc: Move rvdev management in rproc_virtio
remoteproc: Remove vdev_to_rvdev and vdev_to_rproc from remoteproc API
remoteproc: create the REMOTEPROC_VIRTIO config
remoteproc: virtio: Create platform device for the remoteproc_virtio
remoteproc: virtio: Add helper to create platform device
remoteproc: Instantiate the new remoteproc virtio platform device

drivers/remoteproc/Kconfig | 11 +-
drivers/remoteproc/Makefile | 2 +-
drivers/remoteproc/remoteproc_core.c | 142 +++-------------
drivers/remoteproc/remoteproc_internal.h | 52 +++++-
drivers/remoteproc/remoteproc_virtio.c | 207 +++++++++++++++++++++--
include/linux/remoteproc.h | 18 +-
6 files changed, 282 insertions(+), 150 deletions(-)

--
2.17.1