commit | 1a3bb928b3820b089198afb99bbf410b1f210700 | [log] [tgz] |
---|---|---|
author | Jonny Svärd <jonny.svaerd@arm.com> | Fri Feb 25 16:28:21 2022 +0100 |
committer | Jonny Svärd <jonny.svaerd@arm.com> | Thu Mar 31 14:39:19 2022 +0200 |
tree | d4de9fe62c20bf92116a9dfccdb26b4780d7224a | |
parent | 24455eedb9e8939f8a28ca0101a6f2d171e1b2f9 [diff] |
Add driver async API Add an asynchronous API to the driver. The current synchronous API is now using the new async API internally. The main new functions are ethosu_invoke_async() and ethosu_wait(). Every successfull call to ethosu_invoke_async() must be followed by a call to ethosu_wait() to get the status of the inference. The wait function can be called in a blocking or non-blocking mode by specifying the `block` argument to true/false. The regular synchronous invoke function is implemented as a invoke_async followed by a wait(block=true) call. Short sommary of changes: - Add an internal ethosu_job struct to keep track of inference data and job state. - Use async API in blocking mode for normal flow - Change default semaphore implementation to binary type - Move error prints out of interrupt context - Move ethosu_inference_begin() callback to right before HW invoke - Always call ethosu_inference_end() callback, even in case of errors - On NPU error, do not keep NPU powered after being reset Change-Id: If4c3c46e3c6732a669e17251bd848dea5765a490
This repository contains a device driver for the Arm(R) Ethos(TM)-U NPU.
The source code comes with a CMake based build system. The driver is expeced to be cross compiled for any of the supported Arm Cortex(R)-M CPUs, which will require the user to setup a custom toolchain file.
The user is also required to define CMAKE_SYSTEM_PROCESSOR
for the target CPU, for example cortex-m55+nodsp+nofp. This can be done either in the toolchain file or on the command line.
$ mkdir build $ cd build $ cmake .. -DCMAKE_TOOLCHAIN_FILE=<toolchain> -DCMAKE_SYSTEM_PROCESSOR=cortex-m<nr><features> $ make
For running the driver on Arm CPUs which are configured with datacache, the cache maintenance functions in the driver are exported with weakly linked symbols that should be overriden. An example implementation using the CMSIS primitives found in cachel1_armv7.h could be as below:
extern "C" { void ethosu_flush_dcache(uint32_t *p, size_t bytes) { if (p) SCB_CleanDCache_by_Addr(p, bytes); else SCB_CleanDCache(); } void ethosu_invalidate_dcache(uint32_t *p, size_t bytes) { if (p) SCB_InvalidateDCache_by_Addr(p, bytes); else SCB_InvalidateDCache(); } }
The Arm Ethos-U core driver is provided under an Apache-2.0 license. Please see LICENSE.txt for more information.
The Arm Ethos-U project welcomes contributions under the Apache-2.0 license.
Before we can accept your contribution, you need to certify its origin and give us your permission. For this process we use the Developer Certificate of Origin (DCO) V1.1 (https://developercertificate.org).
To indicate that you agree to the terms of the DCO, you "sign off" your contribution by adding a line with your name and e-mail address to every git commit message. You must use your real name, no pseudonyms or anonymous contributions are accepted. If there are more than one contributor, everyone adds their name and e-mail to the commit message.
Author: John Doe \<john.doe@example.org\> Date: Mon Feb 29 12:12:12 2016 +0000 Title of the commit Short description of the change. Signed-off-by: John Doe john.doe@example.org Signed-off-by: Foo Bar foo.bar@example.org
The contributions will be code reviewed by Arm before they can be accepted into the repository.
Please see Security.
Arm, Cortex and Ethos are registered trademarks of Arm Limited (or its subsidiaries) in the US and/or elsewhere.