blob: efa9803fe3775feae1d08787b5fd76211a3a8279 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# Linux driver stack for Arm Ethos-U
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.
## Licenses
The kernel drivers are provided under a GPL v2 license. All other software
componantes are provided under an Apache 2.0 license.
## Building
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
```
## DTB
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";
};
};
```
|