commit | 7c24c770be3b3e25822cf7c45619ee20ed61c172 | [log] [tgz] |
---|---|---|
author | Jonny Svärd <jonny.svaerd@arm.com> | Thu Jan 14 19:53:17 2021 +0100 |
committer | Jonny Svärd <jonny.svaerd@arm.com> | Tue Jan 26 15:42:49 2021 +0100 |
tree | 1d04dd3708100e444e3f8c1e19e61899d75a61f7 | |
parent | 9d8d92cc3ce5fd5ced815a7334b8d500eec42a27 [diff] |
Improve mailbox message handling Introduce a 32b magic for each message. Verify the magic for all incoming messages. Add reset function - in case of protocol error, effectively reset/empty the incoming queue. Add an error message type and message Add version request/response Verify payload length of responses (when applicable) Change-Id: I8aadd4012024492533d52e2cdb38630fce5c36e2
The Linux driver stack for Arm Ethos-U provides an example of how a rich operating system like Linux can dispatch inferences to an Arm Cortex-M subsystem, consisting of an Arm Cortex-M of choice and an Arm Ethos-U NPU.
The kernel drivers are provided under a GPL v2 license. All other software componantes are provided under an Apache 2.0 license.
The driver stack comes with a CMake based build system. Cross compile for an Arm CPU can for example be done with the provided toolchain file.
$ mkdir build $ cd build $ cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/aarch64-linux-gnu.cmake -DKDIR=<Kernel directory> $ make
The kernel driver uses the mailbox APIs as a doorbell mechanism.
/ { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; ethosu_msg: ethosu_msg@80000000 { compatible = "shared-dma-pool"; reg = <0 0x80000000 0 0x00040000>; no-map; }; ethosu_reserved: ethosu_reserved@80040000 { compatible = "shared-dma-pool"; reg = <0 0x80040000 0 0x00040000>; no-map; }; }; ethosu_mailbox: mhu@6ca00000 { compatible = "arm,mhu", "arm,primecell"; reg = <0x0 0x6ca00000 0x0 0x1000>; interrupts = <0 168 4>; interrupt-names = "npu_rx"; #mbox-cells = <1>; clocks = <&soc_refclk100mhz>; clock-names = "apb_pclk"; }; ethosu { #address-cells = <2>; #size-cells = <2>; compatible = "arm,ethosu"; reg = <0 0x80000000 0 0x00010000>, <0 0x80010000 0 0x00010000>; reg-names = "in_queue", "out_queue"; memory-region = <ðosu_reserved>; dma-ranges = <0 0x60000000 0 0x80000000 0 0x20000000>; mboxes= <ðosu_mailbox 0>, <ðosu_mailbox 0>; mbox-names = "tx", "rx"; }; };