aboutsummaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
10 daysAdd initial support for Ethos-U85HEAD24.05-rc1mainJonny Svärd
Change-Id: I28d7cb72c149a636a4f1d8ca6931316486b1829a Signed-off-by: Jonny Svärd <jonny.svaerd@arm.com>
2024-04-19Add missing mutex/semaphore prototypes to headerJonny Svärd
Add missing ethosu_semaphore_destroy and ethosu_mutex_destroy function prototypes to the driver header. Change-Id: I16f71637b624964bbd9281ce8ad984304fedb406 Signed-off-by: Jonny Svärd <jonny.svaerd@arm.com>
2023-12-19Support timeout for interrupt semaphore24.02-rc124.02Jonny Svärd
Introduce ETHOSU_INFERENCE_TIMEOUT CMake variable to set an arbitrary timeout value that will be sent as argument to ethosu_semaphore_take() for the interrupt semaphore. Adding the ability to have a timeout for an inference. (Defaults to no timeout/wait forever.) Implement a placeholder mutex for the baremetal example and add error checks for mutex_create() call. Change-Id: Ia74391620340a27c23dc3d15f9ba742c674c8bfa Signed-off-by: Jonny Svärd <jonny.svaerd@arm.com>
2023-02-16Fix (part of) SEI CERT coding standard warning23.02-rc223.02Ledion Daja
Change-Id: Ic370f071eb4f3ed83cd9e5a6b587d7d527c37825
2022-11-14Update header file documentation22.11-rc222.11Kristofer Jonsson
Update documentation in driver header file. Some functions were inconsistently returning boolean status. These functions have been updated to return integer status, with 0 on success and negative error code on failure. Change-Id: Ie044bf5b4f2daaff348e698fa6147472dbc582a9
2022-11-14Remapping command stream and base pointersKristofer Jonsson
Add new weak function ethosu_address_remap() that allows the addresses for QBASE and BASEP to be remapped. Change-Id: I36b0d71c57bfd293672b10c7b85f3b2415e9c839
2022-10-03Reading QREAD and STATUS register22.11-rc1Kristofer Jonsson
Allow the QREAD and STATUS registers to be read using the PMU interface. Change-Id: I7e349a0938404011588c1d5eb82b4a5dbc7c27e4
2022-05-05Refactor power handling22.05-rc1Jonny Svärd
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
2022-04-20Change mutex and semaphore handling weak functions prototypeLedion Daja
Changed mutex lock/unlock and semaphore take/give functions to return an int value instead of void. Change-Id: I619327b9e14a3c37697617cbe0cba358102bd6a0
2022-03-31Add driver async APIJonny Svärd
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
2022-01-28Inference begin and end user argumentKristofer Jonsson
Adding user argument parameter to invoke() which is passed on to the inference_begin() and inference_end() callbacks. Change-Id: I1372767c3a0dbd963aa395911bda7625bc6d6ee4
2021-12-22Add func to get nbr of PMU event countersJonny Svärd
Small bugfix to a print in driver Change-Id: I277a441a9f65c647c338b92af5a908176929102c
2021-11-18Fix PMU event order to comply with interface filesJonny Svärd
Change-Id: I9e460e25e4c8ea4a86b460dbf4c634afb912b4de
2021-11-01Autumn clean/refactor of NPU driverJonny Svärd
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
2021-06-28Revert "Remove static inline v2 function"Kristofer Jonsson
This reverts commit 49a81c148e3c55cf97d7eb79e22a1d1f5504a97d. Reason for revert: Dependency on other modules. Change-Id: Iac8e63144dce92c4fc07caffcb74b1ce9f26800c
2021-06-14Remove static inline v2 functionAnton Moberg
Updated tensorflow to use default entrypoint and so this static inline function is no longer necessary. Change-Id: I2cd4e9cc87a4e8cffd2f67e27149782ea9519c05
2021-06-14Add ethosu_deinit()Anton Moberg
Added ethosu_deinit method which calls ethosu_deregister_driver(). Change-Id: I12cb1b07169c06c011a80f66d26451431db3948a
2021-06-08Spring clean/refactor of NPU driverJonny Svärd
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
2021-05-26Optimizations21.05-rc3Kristofer Jonsson
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
2021-05-24[Core Driver] Update and remove pmu "v2"-functionsAnton Moberg
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
2021-05-03[Core driver] Update to support removal of "_v"-functions21.05-rc221.05-rc1Anton Moberg
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
2021-04-13MLBEDSW-4301 - Verification check custom_dmaAnton Moberg
Added: custom_dma bit to config structs Added: hardware verification check for custom_dma Change-Id: I31dca56063b3ca773d02f0adf30d21facfd0b80d
2021-04-12Clock request disabled when PMU enabledAnton Moberg
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
2021-03-23Multi NPU update APIsAnton Moberg
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
2021-03-16Use event enum for configuring cycle counterPer Åstrand
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
2021-02-19MLBEDSW-3868 - Driver multiNPU lockingAnton Moberg
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
2021-01-27MLBEDSW-3796 Ethos-U driver interface multiple NPUs21.02-rc221.02-rc1Anton Moberg
---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
2021-01-18Added simplified driver setupAnton Moberg
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
2020-11-24Update handling of soft reset20.11Kristofer Jonsson
Change-Id: Ia22b2934b4c85e3c480931c8b92608365351a877
2020-11-24Restore default init values as init_v2Per Åstrand
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
2020-11-20Add API to set secure and privilege level of NPU20.11-rc2Per Åstrand
Change-Id: I8ca309ea4e5885865d5c9cf848500f45f83e08a2
2020-10-20PMU counter shadowKristofer Jonsson
Storing PMU counters in shadow variables, in case the PMU was powered off or soft reset. Change-Id: I64ccf3fb6195f9be2d8315891ec612bb75404885
2020-10-16MLBEDSW-3094 Improve soft reset of ETHOSU when running jobsBhavik Patel
The ETHOSU is soft-reset only if the previous job failed or if the current privilege level is not user or if the current security level is not secure. Change-Id: Id10b96058d67805d179ac693537606d55e10379b
2020-09-04Move fast memory area to core driverKristofer Jonsson
Change-Id: Ie4186f5ab881d5c13021299404322ff582180d26
2020-08-26Save and restore PMU settings and counters20.08-rc220.08Kristofer Jonsson
Change-Id: I54a1927fef998bc97f5507f2de9faf7d4a7960f5
2020-08-19Update to HI 1.0.620.08-rc1Stefan Nannesson
Change-Id: I0f127f7460be2a5d2eda5be2868c91f58cac03c0
2020-08-05Header cleanupKristofer Jonsson
Change-Id: I84754f316ce940917516cb7f5c59189f523d4095
2020-07-22MLBEDSW-2594 Initialize the Ethos-U before every jobBhavik Patel
This includes resetting the Ethos-U and restoring the previosuly saved PMU configuration (if any). Change-Id: Id952fb6fef513468952b6a469e857510f8c0214c
2020-07-03MLBEDSW-2378 Set NPU base address in ethosu_initBhavik Patel
Change-Id: I1145834000ff81d6e497a8fa77bf997478a80372
2020-07-02Move PMU functions from pmu_ethosu.h to ethosu_pmu.cBhavik Patel
This change is done as a prerequisite to be able to set base address for NPU through ethosu_init(). So instead of using a mamory mapped struct we use the same functions to read/write PMU registers as the rest of the ethos-u driver. Change-Id: Ie1f6e6af4627cbe9375e2b2d079ba8017b6294d3
2020-06-22Update arch to 1.0.120.07-rc120.07Douglas Troha
* Includes npu_active event Signed-off-by: Douglas Troha <douglas.troha@arm.com> Change-Id: I2346707c26b7c3709bb844c7b21365d714e9a089
2020-06-17MLBEDSW-2373 Add APIs to configure PMCCNTR_CFG registerBhavik Patel
Change-Id: I73c612746ca678d32d3dec3e1c5619ee1077c012
2020-05-13Update to HI 1.0Douglas Troha
* Includes updates for 0.179 Change-Id: I8ab8e9d67ed5dabf9684ed7576d302a0831c1647 Signed-off-by: Douglas Troha <douglas.troha@arm.com>
2020-05-11MLBEDSW-1796 Refactor IRQ initializationPer Åstrand
Turn the IRQ initialization around, to have the application define the interrupt handler and expose the driver routine that is to be called when that happens. Change-Id: Idbfba1b1d1a1eaf6678ee16e9583c496eb2287ed
2020-05-08MLBEDSW-2194 Updating PMU filesKristofer Jonsson
Moving PMU files from ethosu_pmu to include and src. Adding extern "C" to PMU header. Removing CMake generated file. Updating default path to CMSIS. Removing timing adapter. Change-Id: I4834c5361c14efe629c5cb36a17013d02cc765c8
2020-04-27Update to HI 0.1690.1.0Diqing Zhong
Change-Id: If2e6ff0b6876380c597cdbc12a666a9cf1bf9dc4
2020-04-27Update to HI 0.162Diqing Zhong
Change-Id: Ieff4a4b66dcc8da09a2f959dfa6bc717cc816f5a
2020-04-16Add Ethos-u core driverKristofer Jonsson
Change-Id: I541862775031c21e6483f26446a29dfe452382ab