Age | Commit message (Collapse) | Author |
|
Currently TARGET_CPU should be used to set CPU+features, if
using core_platform provided toolchain files.
Change-Id: I053cc25de12501a2773238820daa150f9ea20fa7
|
|
Base address 1 points at the TFLM arena and is by default routed
over AXI 0. For the spilling use case with both model and arena in
DRAM it would make more sense to route base addresses 0 and 1
over AXI 1.
For Ethos-U65 the default settings should correspond to the spilling
use case.
The AXI limits should have different max values depending on the NPU
architecture.
Change-Id: Icd317097e2cfdbfb39886e13c2cb2202651e5357
|
|
Add reference counted ethosu_request_power(),
ethosu_release_power() functions. While there are
active requests, disable the Q-channel power gating
of the Ethos-U device, leaving the device powered on.
Note that clock gating is implemented to follow the
state of the power gating.
Add ethosu_soft_reset() function. Restore power-
and clock gating state after reset.
Refactor and simplify driver code to use the new
functions.
Change-Id: I9756572c5c3e51b2be244bcea856d88e890e2d40
|
|
Changed mutex lock/unlock and semaphore take/give functions to return
an int value instead of void.
Change-Id: I619327b9e14a3c37697617cbe0cba358102bd6a0
|
|
- Improve build section by describing new build options
- Add a section about driver APIs and basic usage examples
- Add a section about mutexes and semaphores
- Add a section about begin/end inference callbacks
- Add a brief section about driver implementation design
- Fix markdown title/subtitles structure
- Small fixing of typos and rewording
Also add .gitignore
Change-Id: I7216a2b72b0dfaa605620f4344da205235339ddb
|
|
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
|
|
Change-Id: I155d79a87f9a9a0dc26c145415cc7cdd19533639
|
|
Change-Id: If1bf2aa428bc906f8ba36a011fa3401151ce6b92
|
|
Adding user argument parameter to invoke() which is passed on to
the inference_begin() and inference_end() callbacks.
Change-Id: I1372767c3a0dbd963aa395911bda7625bc6d6ee4
|
|
Remove redundant shram_size check as its a function of
product type and number of macs
Change-Id: Ia3bac0cf38da51d0894c3f1f94b02c59823e6034
|
|
Small bugfix to a print in driver
Change-Id: I277a441a9f65c647c338b92af5a908176929102c
|
|
Change error message to LOG_ERR from LOG_DEBUG and simplify
error checks
Remove redundant code in driver
Disable the PMU before enabling power/clock gating
Change-Id: I3092113250c1b165d985194ca2da213622629488
|
|
Change-Id: I287eef0cff78109a66d132fad283cb910be67f63
|
|
move the zephyr basic files to zephyr/modules/ethos-u-core-driver and
update the module name in module.yml to ethos-u-core-driver
move relevant cmake configuration to the CMakeLists.txt (from the
applications CMakeLists.txt).
Change-Id: I5b801ed06ffcfeb618fdb375c0c81b59b8ee4b1e
|
|
Remove new line from log messages to allow the log makros to format
the output.
Change-Id: Idc07d0ef1fb77530fa07279ae92b2c964ebb6287
|
|
Change-Id: I9e460e25e4c8ea4a86b460dbf4c634afb912b4de
|
|
Change-Id: I33bb705ae0be282c071977d5077cdaf3093e90fe
|
|
No functional change as they both evaluate to the same
numerical value.
Change-Id: Ia84c19e08defa63067755389857c967698127d8c
|
|
A continuation of the spring clean/refactor work. Create a
better separation between driver and device(s).
A short summary of what this commit contains:
- Split device and driver
- Simplify and hide the internal device interface
- Remove (broken) abort inference functionality
- Refactoring of structure
- Optimizations and bugfixes
Change-Id: I8988bc5f163f9ea62add2a933e4f100a82cc8d35
|
|
Change-Id: I16de9223e59e46ad9fb25bd280a175cd50af913d
|
|
1. Update init.c:
- Create a new flow using DT_INST_FOREACH_STATUS_OKAY() macro.
This macro will:
- parse each node in dtb file for each npu
- run "init" function with dts params
- run ethosu_init()
- enable irq
Change-Id: Iaf370d258e0521a133ae38f2df66f93c249754f9
|
|
Made a separate header file for logging specific content.
Cleaned up logging messages.
Change-Id: Id329b40977156ca5b954b3a222effaedbc6b2a2c
|
|
This reverts commit 49a81c148e3c55cf97d7eb79e22a1d1f5504a97d.
Reason for revert: Dependency on other modules.
Change-Id: Iac8e63144dce92c4fc07caffcb74b1ce9f26800c
|
|
Updated tensorflow to use default entrypoint and so this static inline
function is no longer necessary.
Change-Id: I2cd4e9cc87a4e8cffd2f67e27149782ea9519c05
|
|
Added ethosu_deinit method which calls ethosu_deregister_driver().
Change-Id: I12cb1b07169c06c011a80f66d26451431db3948a
|
|
These changes mostly focus on creating a better structure
for the driver. Creating a better separation between driver
and device(s).
A short summary of what this commit contains:
- Move driver specific defines from device to driver
- Prefix device functions with ethosu_dev
- Remove device specific register access' from driver
- Remove device specific debug/dump functions
- Add function prototypes for weak functions
- Remove legacy ARM_NPU_STUB support
- Rename ethosu_device.c to ethosu_device_u55.c
- Remove redundant irq handler prototype
- Remove (deprecated) hardcoded instance ethosu_drv
- Simplify versioning API
Split driver version and hardware version/information so
that driver version can be queried without a driver instance.
- Improve and simplify logging
Make warning the new default severity level to print and
reduce severity levels to:
err
warning
info
debug
- Add severity prefix to log lines. Error messages print file
and line number, debug messages print function by default.
- Clarify some log messages
- Small optimizations and bugfixes
Change-Id: I2dfbfc3a40d7eca133c82f187f422325e1e6d314
|
|
Change-Id: I5b7be2481c577b04f1e6b2804cd5147fcdfbaf92
|
|
Removing the ASSERT() makro using assert() instead. assert() is better
controlled with the NDEBUG define.
Using uintptr_t instead of uint32_t * for the NPU base address. This
saves a division by 4 in the register read and write functions.
Change-Id: I65a91fe35dc63666e50bdf7a756ad15b56dc66e9
|
|
NPU PMU interface currently have functions that have been stepped
each time a compatibilty breaking changed has been introduced. Old
entrypoints have been redefined with macro to use the latest version
for backwards compatibility. This series of patches will remove any
such functions and macro to unify the interface.
Update: Remove all "_v2"-functions and make the latest version the base
entrypoint
Update: Remove all redefine macros to only allow base entrypoint
Change-Id: Ie125e2428a0336fe797c7455014d269a981f6f92
|
|
The weak linked symbol ethosu_mutex_create() should in the default case
return NULL.
Change-Id: Ia92ba8fb85137dc6d676b4d4ea050c9c14085472
|
|
Add ethosu_inference_begin/end calls to ethosu_invoke_v3.
Change-Id: I52f08ab3e3524d4d8f73d8bca7dc9559438d4857
|
|
NPU driver interface currently have functions which have been stepped
each time a compatibilty breaking changed has been introduced. Old
entrypoints have been redefined with macro to use the latest version
for backwards compatibility. This series of patches will remove any
such functions and macro to unify the interface.
Update: Remove all "_v"-functions and make the latest version the base
entrypoint
Update: Remove all redefine macros to only allow base entrypoint
Note: static inline ethosu_invoke_v2() is kept as it is needed for
tensorflow backwards compatibility. Will be removed in later patches.
Change-Id: Ifa331daab35af24dc29e0d0007096902b8efc319
|
|
Change-Id: I947f52a83cc9352caf45a7b242e5a15fbdedf6e3
|
|
Changed so that power_request bit will be set if ETHOSU_POWER_Q_DISABLE
instead of ETHOSU_CLOCK_Q_DISABLE.
Change-Id: I571ab165f8856ed71f6e932be401312d43e9cca8
|
|
Added: custom_dma bit to config structs
Added: hardware verification check for custom_dma
Change-Id: I31dca56063b3ca773d02f0adf30d21facfd0b80d
|
|
Currently clock request is enabled, which means NPU will
only request clock when working. When NPU is going into idle it will no
longer request clock and thus PMU won't be clocked either, and thus
affect the cycle counter.
Added: enum for request clients (PMU or INFERENCE).
Added: clock_request added to driver struct (bit 0: PMU, bit 1:
INFERENCE) which keeps track of which client requests clock.
Added: power_request added to driver struct (bit 0: PMU, bit 1:
INFERENCE) which keeps track of which client requests power.
Added set_clock_and_power_request(...) updates clock_request and
power_request depending on which client calls it. Sets clock and power
if both PMU and INFERENCE requests it.
Added: Call set_clock_and_power_request(...) from PMU.
Changed: replace ethosu_set_clock_and_power(...) with
set_clock_and_power_request(...) in ethosu_init and ethosu_invoke
Change-Id: Ie7d8aee639d4abbf879b05e9a82035d7c0d40d40
|
|
Modifying mutex and semaphore APIs allowing the driver to create
any number of mutexes and semaphores.
Using semaphore when waiting for interrupt.
Making irq_triggered a member of the driver struct.
Change-Id: Ib0645c9c7c0c029795269ac4b18e6ec29159d0f8
|
|
Allow the IRQ handler to be overridden for test cases that operate
directly on top of the device driver.
Change-Id: Iddf7aec041a3183583e6e4d8521d5a637c379689
|
|
The pmu configuration API expects the internal configuration values,
and not the exported enum. Update the API to instead use the enums to be
able to configure them correctly.
Change-Id: I038b1841f2459baec4a62a6a4389ea4b5f4822f2
|
|
Updating readme files with trademark information.
Change-Id: Id5313510777b771231f42701faff1da93765deda
|
|
Added: Weak linked symbols for locking if RTOS overrides
Added: Semaphore Producer (release a reserved driver)
Added: Semaphore Consumer (all drivers reserved and waiting for returned driver)
Added: Mutex protect thread sensitive driver access
Added: Weak linked symbols for yielding & resuming thread/task while waiting for IRQ
Added: static inline function of ethosu_invoke_v2(...) for backwards compatibility
Change-Id: If415a73b01b2357b31bb6da86f3038344c4245c6
|
|
---ethosu_driver---
Modified: Declarations for the driver interfaces to support multiNPU (takes *drv)
Added: ethosu_register_driver(...) to allow for a specific NPU driver to be instantiated
Added: ethosu_deregister_Driver(...) to allow for a specific NPU driver to be de-registered
Added: ethosu_reserve_driver(...) to reserve & return the first NPU driver instance available
Added: ethosu_release_driver(...) to release a specific NPU driver instance and make it available again
Added: *registered_drivers - A static linked list of drivers ready be used
---ethosu_pmu---
Modified: Declarations for pmu interfaces to support multiNPU (takes *drv)
---ethosu_device---
Modified: Resolved a circular include dependency (Remove include and add ETHOSU_PMU_NCOUNTERS macro)
Change-Id: Iede41cd41bb0d5d483bd9d929d1b6c9ca5d3c48e
|
|
* Allow driver to run cmdstreams that are compiled
for older arch versions
Change-Id: Ia49fc6c34b118bd91ce24bd0c34d95abc4c25d6a
Signed-off-by: Douglas Troha <douglas.troha@arm.com>
|
|
If NPU power is guaranteed always on parts of driver setup can be omitted to reduce the number of cycles required to setup the NPU drivers.
By enabling dev_power_always_on, the setup cycles are reduced by approx. ~50%. (4462->2238 in prologue, 1167->642 in epilogue)
Change-Id: I56d380c2571fedbc8888fb7c00fce0e4320f7fb7
|
|
Change-Id: I3a8b88fb63aee8a4741ab1ca47bc49c663479e21
|
|
Using a cpu without proper interrupt handling is not really usefull in
this context, so remove that option.
Change-Id: Ie94fd9025c918eef72272e14ad5b0a95ea7dc4a4
|
|
Change-Id: Ia22b2934b4c85e3c480931c8b92608365351a877
|
|
The addition of init_v3 accidentely changed default values for soft
resetting Ethos-U. Restore the default parameters to non-secure, user
mode for init_v1 and init_v2 and also make sure to check return value
from ethosu_soft_reset.
Change-Id: If7377f11ad1db7ff988fdcba03320a54e6e0c0c1
|
|
Change-Id: I8ca309ea4e5885865d5c9cf848500f45f83e08a2
|
|
Implement a weak linked function to handle the data cache.
If the specific device is implementing a data cache the function should
be overriden with device specific implementation of the flush/invalidate
functions to make sure that the cache is properly maintained with
regards to the NPU DMA transaction.
Change-Id: I175644ef37bee62cc77d789d2b7bc3073e72ea5a
|