Remote Processor Messaging (RPMsg) framework is used to communicate with remote processor. RPMsg is a virtio-based messaging bus that allows U-Boot drivers to communicate with remote processors available on the system. This patch also introduces new virtio transport layer driver.
To keep things minimal for now hard-coded endpoint is used in U-Boot to communicate with remote processor using RPMsg protocol. This will be modified to use multiple endpoints in future.
U-Boot can't receive interrupts from remote processor as per design. Hence, user has to know when the data will be available from remote processor and call rpmsg_recv accordingly. Mostly it will be called to receive response of query done using rpmsg_send.
Some code is already available to allocate memory for RPMsg however, that framework is mostly TI platform specific and isn't used by any other platforms. This series makes sure it does not break previous code for other platforms. If platforms wants to use this new framework it is expected to set "support_rpmsg_virtio" flag in relative remoteproc device's platform data.
Also the framework introduced by this series is ported from the Linux kernel so other platforms which already support RPMsg in the Linux kernel can easily use this framework in U-Boot as well.
---
Tanmay Shah (10): remoteproc: move resource table definition firmware: zynqmp: move zynqmp_pm_request_node API remoteproc: add remoteproc virtio transport driver drivers: add RPMsg framework rpmsg: add sample client driver cmd: add rpmsg framework commands remoteproc: add attach/detach commands remoteproc: add zynqmp driver configs: zynqmp: enable remoteproc and rpmsg configs: sandbox: enable rpmsg
MAINTAINERS | 15 + arch/sandbox/dts/test.dts | 8 + cmd/Kconfig | 6 + cmd/Makefile | 1 + cmd/remoteproc.c | 14 +- cmd/rpmsg.c | 61 +++ configs/sandbox_defconfig | 4 + configs/xilinx_zynqmp_virt_defconfig | 6 + drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/firmware/firmware-zynqmp.c | 27 ++ drivers/power/domain/zynqmp-power-domain.c | 7 - drivers/remoteproc/Kconfig | 20 + drivers/remoteproc/Makefile | 2 + drivers/remoteproc/rproc-elf-loader.c | 33 -- drivers/remoteproc/rproc-uclass.c | 125 +++++- drivers/remoteproc/rproc_virtio.c | 422 +++++++++++++++++++++ drivers/remoteproc/xlnx_rproc.c | 411 ++++++++++++++++++++ drivers/rpmsg/Kconfig | 39 ++ drivers/rpmsg/Makefile | 13 + drivers/rpmsg/rpmsg-uclass.c | 156 ++++++++ drivers/rpmsg/rpmsg_internal.h | 52 +++ drivers/rpmsg/rpmsg_sample_client.c | 63 +++ drivers/rpmsg/sandbox_test_rpmsg.c | 88 +++++ drivers/rpmsg/virtio_rpmsg_bus.c | 384 +++++++++++++++++++ drivers/virtio/virtio-uclass.c | 1 + drivers/virtio/virtio_ring.c | 16 + include/dm/uclass-id.h | 1 + include/remoteproc.h | 130 ++++++- include/rpmsg.h | 145 +++++++ include/rproc_virtio.h | 33 ++ include/virtio.h | 7 +- include/virtio_ring.h | 32 ++ include/zynqmp_firmware.h | 30 +- test/dm/Makefile | 1 + test/dm/rpmsg.c | 41 ++ 36 files changed, 2321 insertions(+), 76 deletions(-) create mode 100644 cmd/rpmsg.c create mode 100644 drivers/remoteproc/rproc_virtio.c create mode 100644 drivers/remoteproc/xlnx_rproc.c create mode 100644 drivers/rpmsg/Kconfig create mode 100644 drivers/rpmsg/Makefile create mode 100644 drivers/rpmsg/rpmsg-uclass.c create mode 100644 drivers/rpmsg/rpmsg_internal.h create mode 100644 drivers/rpmsg/rpmsg_sample_client.c create mode 100644 drivers/rpmsg/sandbox_test_rpmsg.c create mode 100644 drivers/rpmsg/virtio_rpmsg_bus.c create mode 100644 include/rpmsg.h create mode 100644 include/rproc_virtio.h create mode 100644 test/dm/rpmsg.c
base-commit: 94e7cb181ad6bd25d36a11c58e0df64e9f815888