
Hi,
Many System on Chip(SoC) solutions are complex with multiple processors on the same die dedicated to either general purpose of specialized functions. Many examples do exist in today's SoCs from various vendors. Typical examples are micro controllers such as an ARM M3/M0 doing a offload of specific function such as event integration or power management or controlling camera etc.
Traditionally, the responsibility of loading up such a processor with a firmware and communication has been with a High Level Operating System(HLOS) such as Linux. However, there exists classes of products where Linux would need to expect services from such a processor or the delay of Linux and operating system being able to load up such a firmware is unacceptable.
The intent here is to introduce a simplified remoteproc framework which can then be used to provide basic services to these remote processors.
Nishanth Menon (3): drivers: Introduce a simplified remoteproc framework remoteproc: Introduce a sandbox dummy driver sandbox: Introduce dummy remoteproc nodes
arch/sandbox/dts/test.dts | 13 + common/Kconfig | 5 + common/Makefile | 1 + common/cmd_remoteproc.c | 224 ++++++++++++ configs/sandbox_defconfig | 2 + doc/device-tree-bindings/remoteproc/remoteproc.txt | 14 + doc/driver-model/remoteproc-framework.txt | 163 +++++++++ drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/remoteproc/Kconfig | 24 ++ drivers/remoteproc/Makefile | 10 + drivers/remoteproc/rproc-uclass.c | 406 +++++++++++++++++++++ drivers/remoteproc/sandbox_testproc.c | 243 ++++++++++++ include/dm/uclass-id.h | 1 + include/remoteproc.h | 81 ++++ 15 files changed, 1190 insertions(+) create mode 100644 common/cmd_remoteproc.c create mode 100644 doc/device-tree-bindings/remoteproc/remoteproc.txt create mode 100644 doc/driver-model/remoteproc-framework.txt create mode 100644 drivers/remoteproc/Kconfig create mode 100644 drivers/remoteproc/Makefile create mode 100644 drivers/remoteproc/rproc-uclass.c create mode 100644 drivers/remoteproc/sandbox_testproc.c create mode 100644 include/remoteproc.h
Simple test with test.dtb: u-boot$ ./u-boot -d ./arch/sandbox/dts/test.dtb
U-Boot 2015.10-rc2-00067-g05997426fef2 (Aug 24 2015 - 17:23:58 +0000)
DRAM: 128 MiB Using default environment
In: serial Out: lcd Err: lcd Net: Net Initialization Skipped eth0: eth@10002000, eth5: eth@10003000, eth1: eth@10004000 => help rproc rproc - Control operation of remote processors in an SoC
Usage: rproc [init|list|load|start|stop|reset|ping] Where: [addr] is a memory address <id> is a numerical identifier for the remote processor provided by 'list' command. Note: Remote processors must be initalized prior to usage Note: Services are dependent on the driver capability 'list' command shows the capability of each device
Subcommands: init - Enumerate and initalize the remote processors list - list available remote processors load <id> [addr] [size]- Load the remote processor with binary image stored at address [addr] in memory start <id> - Start the remote processor(must be loaded) stop <id> - Stop the remote processor reset <id> - Reset the remote processor is_running <id> - Reports if the remote processor is running ping <id> - Ping the remote processor for communication
=> rproc init => rproc list 0 - Name:'proc_3_legacy' type:'internal memory mapped' supports: load start stop reset is_running ping 1 - Name:'remoteproc-test-dev1' type:'internal memory mapped' supports: load start stop reset is_running ping 2 - Name:'remoteproc-test-dev2' type:'internal memory mapped' supports: load start stop reset is_running ping => rproc load 0 1 2 Loading to 'proc_3_legacy' from address 0x00000001 size of 2 bytes => rproc ping 0 Pinging proc_3_legacy... proc_3_legacy: No response.(Not started?) => rproc start 0 Starting proc_3_legacy... => rproc is_running 0 Checking if running: proc_3_legacy... Remote processor is Running => rproc ping 0 Pinging proc_3_legacy... Remote processor responds 'Pong' => rproc ping 1 Pinging remoteproc-test-dev1... remoteproc-test-dev1: No response.(Not started?) => rproc is_running 1 Checking if running: remoteproc-test-dev1... Remote processor is NOT Running =>