diff --git a/EdgeImpulse.EI-SDK.pdsc b/EdgeImpulse.EI-SDK.pdsc
index 848b935..5af40ef 100644
--- a/EdgeImpulse.EI-SDK.pdsc
+++ b/EdgeImpulse.EI-SDK.pdsc
@@ -5,13 +5,16 @@
EI-SDK
LICENSE-apache-2.0.txt
Edge Impulse SDK
- https://github.com/edgeimpulse/edge-impulse-sdk-pack/releases/download/v1.57.11/
+ https://github.com/edgeimpulse/edge-impulse-sdk-pack/releases/download/v1.57.18/
hello@edgeimpulse.com
https://github.com/edgeimpulse/edge-impulse-sdk-pack.git
-
+
EI-SDK
+
+ EI-SDK
+
EI-SDK
@@ -98,9 +101,6 @@
EI-SDK
-
-
- EI-SDK
@@ -146,7 +146,7 @@
-
+
Edge Impulse SDK
@@ -353,7 +353,6 @@
-
@@ -634,7 +633,6 @@
-
@@ -672,7 +670,6 @@
-
diff --git a/EdgeImpulse.pidx b/EdgeImpulse.pidx
index fd6b363..aa7ebc3 100644
--- a/EdgeImpulse.pidx
+++ b/EdgeImpulse.pidx
@@ -2,8 +2,8 @@
EdgeImpulse
https://raw.githubusercontent.com/edgeimpulse/edge-impulse-sdk-pack/main/
- 2024-09-12 14:30:49
+ 2024-09-18 09:32:58
-
+
diff --git a/edgeimpulse/edge-impulse-sdk/classifier/inferencing_engines/ethos_linux.h b/edgeimpulse/edge-impulse-sdk/classifier/inferencing_engines/ethos_linux.h
index 5c70c33..db3fd1b 100644
--- a/edgeimpulse/edge-impulse-sdk/classifier/inferencing_engines/ethos_linux.h
+++ b/edgeimpulse/edge-impulse-sdk/classifier/inferencing_engines/ethos_linux.h
@@ -28,8 +28,8 @@
#include
#include "edge-impulse-sdk/classifier/ei_fill_result_struct.h"
#include "edge-impulse-sdk/classifier/ei_model_types.h"
-#include "edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/include/ethosu.hpp"
-#include "edge-impulse-sdk/porting/ethos-u-driver-stack-imx/kernel_driver/include/uapi/ethosu.h"
+#include "ethos-u-driver-stack-imx/driver_library/include/ethosu.hpp"
+#include "ethos-u-driver-stack-imx/kernel_driver/include/uapi/ethosu.h"
std::shared_ptr network;
// by default Device uses /dev/ethosu0
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE-GPL-2.0.txt b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE-GPL-2.0.txt
deleted file mode 100644
index d159169..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE-GPL-2.0.txt
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE.txt b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE.txt
deleted file mode 100644
index 8dada3e..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/LICENSE.txt
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/Linux-syscall-note b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/Linux-syscall-note
deleted file mode 100644
index adbe756..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/Linux-syscall-note
+++ /dev/null
@@ -1,24 +0,0 @@
-SPDX-Exception-Identifier: Linux-syscall-note
-SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html
-SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+, GPL-2.0-only, GPL-2.0-or-later
-Usage-Guide:
- This exception is used together with one of the above SPDX-Licenses
- to mark user space API (uapi) header files so they can be included
- into non GPL compliant user space application code.
- To use this exception add it with the keyword WITH to one of the
- identifiers in the SPDX-Licenses tag:
- SPDX-License-Identifier: WITH Linux-syscall-note
-License-Text:
-
- NOTE! This copyright does *not* cover user programs that use kernel
- services by normal system calls - this is merely considered normal use
- of the kernel, and does *not* fall under the heading of "derived work".
- Also note that the GPL below is copyrighted by the Free Software
- Foundation, but the instance of code that it refers to (the Linux
- kernel) is copyrighted by me and others who actually wrote it.
-
- Also note that the only valid version of the GPL as far as the kernel
- is concerned is _this_ particular version of the license (ie v2, not
- v2.2 or v3.x or whatever), unless explicitly otherwise stated.
-
- Linus Torvalds
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/README.md b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/README.md
deleted file mode 100644
index d062431..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Linux driver stack for Arm(R) Ethos(TM)-U
-
-The driver was imported from [The Ethos-U Driver Stack iMX](https://github.com/nxp-imx/ethos-u-driver-stack-imx/tree/2acb7e2626fe3ff8764019e385829105a6e210bb)
-
-The [most recent version](https://github.com/nxp-imx/ethos-u-driver-stack-imx/tree/lf-6.6.3_1.0.0)
-
-# Licenses
-
-The kernel drivers are provided under a GPL v2 license. All other software
-componantes are provided under an Apache 2.0 license.
-
-Please see [LICENSE-APACHE-2.0.txt](LICENSE-APACHE-2.0.txt),
-[LICENSE-GPL-2.0.txt](LICENSE-GPL-2.0.txt) and [Linux-syscall-note](Linux-syscall-note)
-for more information.
-
-# Security
-
-Please see [Security](SECURITY.md).
-
-# Trademark notice
-
-Arm, Cortex and Ethos are registered trademarks of Arm Limited (or its
-subsidiaries) in the US and/or elsewhere.
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SCR.txt b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SCR.txt
deleted file mode 100644
index 4f2e390..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SCR.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-NXP Software Content Register
-
-Package: ethos-u-driver-stack-imx.git
-Outgoing License: Apache-2.0
-License File: LICENSE.txt
-Type of Content: source
-Description and comments: ethos-u-driver-stack is the user space driver library for ethos-u NPU on iMX93 platform
-Release Location: https://github.com/nxp-imx/ethos-u-driver-stack-imx
-Origin: NXP (BSD-3-Clause)
- ARM Limited ethos-u-linux-driver-stack v23.08 (Apache-2.0) - https://git.mlplatform.org/ml/ethos-u/ethos-u-linux-driver-stack.git
-
-
---------------------------------------------
-Included kernel header file
---------------------------------------------
-Component: kernel_driver inteface header file
-Outgoing License: GPL-2.0-only WITH Linux-syscall-note
-License File: LICENSE-GPL-2.0.txt and Linux-syscall-note
-Package Category: Ethos-u Linux kernel driver header file
-Type of Content: header file
-Description and comments: Linux kernel driver header file, the driver stack will include this header
- file to use linux kernel syscall.
-Origin: ARM ethos-u-linux-driver-stack v23.08 (Apache-2.0) - https://git.mlplatform.org/ml/ethos-u/ethos-u-linux-driver-stack.git
-File location: kernel_driver/include/ethos-u.h
-
---------------------------------------------
-Auto generated header file by flatbuffers
---------------------------------------------
-Component: flatbuffers header file
-Outgoing License: Apache-2.0
-License File: LICENSE.txt
-Package Category: Auto generated header file by flatbuffers
-Type of Content: header file
-Description and comments: FlatBuffers is a cross platform serialization library architected for maximum memory efficiency
-Origin: Google flatbuffers 1.12.0 (Apache-2.0) - https://github.com/google/flatbuffers
-File location: driver_library/src/autogen/tflite_schema.hpp
-
-
-
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SECURITY.md b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SECURITY.md
deleted file mode 100644
index 29c6ce4..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/SECURITY.md
+++ /dev/null
@@ -1,85 +0,0 @@
-# Security
-
-If you believe you have identified a security related issue or vulnerability,
-then we encourage you to responsibly disclose it to us as soon as possible.
-
-## Reporting vulnerabilities
-
-Arm takes security issues seriously and welcomes feedback from researchers and
-the security community in order to improve the security of its products and
-services. We operate a coordinated disclosure policy for disclosing
-vulnerabilities and other security issues.
-
-Security issues can be complex and one single timescale doesn't fit all
-circumstances. We will make best endeavours to inform you when we expect
-security notifications and fixes to be available and facilitate coordinated
-disclosure when notifications and patches/mitigations are available.
-
-### Report
-
-For all security issues, contact Arm by email at
-[arm-security@arm.com](mailto:arm-security@arm.com). In the body of the email
-include as much information as possible about the issue or vulnerability and any
-additional contact details.
-
-### Secure submission using PGP
-
-We support and encourage secure submission of vulnerability reports using PGP,
-using the key below. If you would like replies to be encrypted, please provide
-your own public key through a secure mechanism.
-
-~~~none
------BEGIN PGP PUBLIC KEY BLOCK-----
-mQINBFr7/RMBEACjHR5QZL/z1t2aLCRNXLE4KJiQmCo7edU5Be+7MTjIJDzZNu68
-lNEUYRoLexeayif8eC4T19bUsSbGpxHiYsFFjV8ewLXDyDJRRuaBGPfQ5rn/mE6X
-Nvu+9Pputr+mB1R3CXcvrNkhmzPkK7zVM15oeyBMhogqPssuT4OeMduQdip8smfK
-xTMk91RrJTLb+G3eE1tf+81kXBYvzp2e24Sn0/VeYe0IWnBobjVBZk3TmcYxDvz5
-Y47fU9V6cNj3Zq4VYrgxuLoFCA2VtetyiFQm5IYa3Bt3SWcAwihr8nbR2HoNdWyA
-u8wJYYVzSq3hvT5l/IjTHxEcY+6RBq8poDSsftzvX386u9hmw7sJQFlTw6/pUjdr
-gbsZ2ZzRBzKtU17ercpn4kU6VgVP3WRB5HiTFFkEpZuqAznOYaHbMq4dfd/g7Quq
-C0VTbWiJnhku2i+g4BdHHRDtIF6U3aVQAfbrDb1LjVTa65p5ULOeY3HRAWtMNtu/
-Cj8cD98JDanzXtcnisds8vMQ8LZ6iMFChEnF8K4V0eLw9Ju6CMNiFYY7SEBndD/H
-M4KcU4li7mROSbJcshgEbe1SYkxdMuI9eY4DNYxl3VjxoPUGzeqXo/ADFKE9bHsi
-GTyEoij4ku0HspLVKnYHXn/LqHGwEcwjF8zphS+w5cn/e01akYwz5EVSQwARAQAB
-tB1Bcm0gU3VwcG9ydCA8c3VwcG9ydEBhcm0uY29tPokCTgQTAQgAOBYhBN9zqDwZ
-RL/vF0ihcdfNKdz4bBRiBQJa+/0TAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA
-AAoJENfNKdz4bBRibK0P/jLlJR/QYypcjb+8BnHT9tCDgcV2KFYXS15VpbSNviN9
-Xs/UOnSadoGUMGCXDyb1PRNn98yUn7JlNR9rtsqPRmkpbo5cuw46ehgxjVlfcHnk
-CttaE8Davx6zo0fyrBib2+oVVW8usi9+uRK4vhhPUicO3oXwzldsVFz+RbpubZxc
-Bg/CZ+dQ2jMKOv1zDtInOG6OBnbQZRAeiWXgGhcIoPZ4zBQOi8nr0+bLcfvMeZi2
-uz6uKnylpXwZbl4ijcG8MKV/ei+7du+SzA9NY0WOT2g3FXDREWUhjKs8bmEZgIx4
-QgvDNpxAUThF+TqQ7zrsA8nT8POvDD0MhN/Z+A3QdPTdcaZFaXzIdxbDg+0FKmzu
-OgtQBH4C01RWrkmZlhO5w7/Qjt0vLlhfyQIL9BW/HeEPtjnH2Hnq8xYnZhlVqJEh
-FJU7F9sMvyiJiKviobFTd6AmpVkhxhcJ3k2L2C03imTsmUwAoejQCXwiYcOhyQ2t
-Z9Nk8YIZTEw2urGFi4HSQPwPq2j/2j7ABJ4rlzJvO6vs5ppGkumvzIIP9JnpVXbp
-wcbK6Ev6KdkX4s14Mzd6Hsd8LpL8t5nHhxUey6G0xKe2eSlHVm5Mlfhoete9UmIZ
-dzIOZkgTgWXlYXRIxwGQ2Pss7pURtofykvLklq4jcobQuHxurl9cteodETfbWk/J
-uQINBFr7/RMBEADWZG8eqt5D22g3T7ehnH/T3fuTX8LPUBnODMWGAEUY8uv64To8
-46odvrXFgWBgCf0sROEyJchc3SGLyR9S4lJsVJRde3QLN3WZkHlB4pSn4IQHFyQd
-wsLQi+S9uggHMPlQ6MNvc5n0P3k5bT9fLUmtJWJ3QVjW7k963ZXpzf1zbQJqs30w
-rlqGUZllfRoYQTfcYxFEaUFhwRJ//skNImWH8Vz+PTnqg2zRtFn3usrBV4GpNvsM
-6jy+YEsSvUa7IY8k4wpPzEhIfqDjGbZxFSQ1H1G+mLUL+DD7oGffej/ZoC86TIdM
-p6ew1rGhJdQBLh9nx+1ADOLWjNo2R0h60u7VR5q/K6V4fwWmeGFipPXZCD92I+nR
-t/cjznwNyD/6J9YrBMF7mbGrS1TyfLaLt4tpdcBnsgqDTodd5OmG65mroXsg/lNO
-7YZdecLZ34krfaLrWTtKkqULXbppB+uQvbVj8p8ONRImn6bZ+iAhnNaH9wJ06ico
-b1F0imJ2SJWnFr6PzPRr0gPStLgu9wrRKheaORwF/H/HxSyPZxNVxFqu81q518A/
-plhub9INQLaxHf/TTjXpqZCcfdNTYUAW8rwbQfW9doSIT4lHY8bJXktb6BsVjkFj
-PzDeYpXeOoTWetQqsEuTdg/F+qg041QBLtNj9Lr3Vy3StgMciRUIP8m0XwARAQAB
-iQI2BBgBCAAgFiEE33OoPBlEv+8XSKFx180p3PhsFGIFAlr7/RMCGwwACgkQ180p
-3PhsFGLWMA//V/XKrnI2YBh/SptUrgg7knPXva45bb7tGSH1fJg8f/wqycOSFFCY
-ES45boA5jlQ3z8uw6BYCz5KeOucGhxAMw+x5EDdxZ33ksY5zqXB35WaMXzEwGYYb
-E113/yhOsTbzu4bBKABSXbJO98MdAWvWpyCpp2MHIR3S9+ycM7/FMZ5xi3czZNRg
-9+WZP+7W4qWhJptQ0kBh5C3N/tiltju5WQ2Y7XIn+5dMOJdtseFS7CNerxXZGAtH
-nfRxaD/4ENdbWOwaVJiVW7+ioUJz09OWgy0gLYSDW+hciDnW1QAaJLpdAbniGZ0S
-JsTmaZla8JnUKqZPgbFfA2OcnH9H+DWc0pHv17c5tJzTMP7rgirgGRX/U2LOzmFZ
-1UxjQj5nn3Oa5frXbIAzb8xKiR0VDaquCM/3sti1AesYiS0Gw0Sqnw8qpFypgFXN
-CKVgYXppIT+TmbDbNJDOB2UycxeI4vbiBwU8fI4qSpW12WsGdAJt/rx3UsyhZ+02
-4aSqDHzhJmtDPQ6lnaKe1fUkC90tgp8loVGmriWQx82jAQMqATVjIklTpE4vm00f
-ocQIWOKEE90mKNEoV6rNbfl5QevmapTVdV/pmrRBzhbsa1uAUS4HZdH0Nf/OXEyv
-yYCr2gCFPymkkRYhPr2w5EgbWyzLaBIwqjyIbXaveuB3DYi2Lhbf64I=
-=EaN7
------END PGP PUBLIC KEY BLOCK-----
-~~~
-
-For more information visit
-
\ No newline at end of file
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/include/ethosu.hpp b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/include/ethosu.hpp
deleted file mode 100644
index c361db4..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/include/ethosu.hpp
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Copyright (c) 2020-2022 Arm Limited.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed under the Apache License, Version 2.0 (the License); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include
-#include
-#include
-#include
-#include
-
-#define DEFAULT_ARENA_SIZE_OF_MB 16
-#define ETHOSU_PMU_EVENT_MAX 4
-
-/*
- *The following undef are necessary to avoid clash with macros in GNU C Library
- * if removed the following warning/error are produced:
- *
- * In the GNU C Library, "major" ("minor") is defined
- * by . For historical compatibility, it is
- * currently defined by as well, but we plan to
- * remove this soon. To use "major" ("minor"), include
- * directly. If you did not intend to use a system-defined macro
- * "major" ("minor"), you should undefine it after including .
- */
-#undef major
-#undef minor
-
-namespace EthosU {
-
-class Exception : public std::exception {
-public:
- Exception(const char *msg);
- virtual ~Exception() throw();
- virtual const char *what() const throw();
-
-private:
- std::string msg;
-};
-
-/**
- * Sematic Version : major.minor.patch
- */
-class SemanticVersion {
-public:
- SemanticVersion(uint32_t _major = 0, uint32_t _minor = 0, uint32_t _patch = 0) :
- major(_major), minor(_minor), patch(_patch){};
-
- bool operator==(const SemanticVersion &other);
- bool operator<(const SemanticVersion &other);
- bool operator<=(const SemanticVersion &other);
- bool operator!=(const SemanticVersion &other);
- bool operator>(const SemanticVersion &other);
- bool operator>=(const SemanticVersion &other);
-
- uint32_t major;
- uint32_t minor;
- uint32_t patch;
-};
-
-std::ostream &operator<<(std::ostream &out, const SemanticVersion &v);
-
-/*
- * Hardware Identifier
- * @versionStatus: Version status
- * @version: Version revision
- * @product: Product revision
- * @architecture: Architecture revison
- */
-struct HardwareId {
-public:
- HardwareId(uint32_t _versionStatus,
- const SemanticVersion &_version,
- const SemanticVersion &_product,
- const SemanticVersion &_architecture) :
- versionStatus(_versionStatus),
- version(_version), product(_product), architecture(_architecture) {}
-
- uint32_t versionStatus;
- SemanticVersion version;
- SemanticVersion product;
- SemanticVersion architecture;
-};
-
-/*
- * Hardware Configuration
- * @macsPerClockCycle: MACs per clock cycle
- * @cmdStreamVersion: NPU command stream version
- * @customDma: Custom DMA enabled
- */
-struct HardwareConfiguration {
-public:
- HardwareConfiguration(uint32_t _macsPerClockCycle, uint32_t _cmdStreamVersion, bool _customDma) :
- macsPerClockCycle(_macsPerClockCycle), cmdStreamVersion(_cmdStreamVersion), customDma(_customDma) {}
-
- uint32_t macsPerClockCycle;
- uint32_t cmdStreamVersion;
- bool customDma;
-};
-
-/**
- * Device capabilities
- * @hwId: Hardware
- * @driver: Driver revision
- * @hwCfg Hardware configuration
- */
-class Capabilities {
-public:
- Capabilities(const HardwareId &_hwId, const HardwareConfiguration &_hwCfg, const SemanticVersion &_driver) :
- hwId(_hwId), hwCfg(_hwCfg), driver(_driver) {}
-
- HardwareId hwId;
- HardwareConfiguration hwCfg;
- SemanticVersion driver;
-};
-
-class Device {
-public:
- Device(const char *device = "/dev/ethosu0");
- virtual ~Device() noexcept(false);
-
- int ioctl(unsigned long cmd, void *data = nullptr) const;
- Capabilities capabilities() const;
-
-private:
- int fd;
-};
-
-class Buffer {
-public:
- Buffer(const Device &device, const size_t capacity);
- virtual ~Buffer() noexcept(false);
-
- size_t capacity() const;
- void clear() const;
- char *data() const;
- void resize(size_t size, size_t offset = 0) const;
- size_t offset() const;
- size_t size() const;
-
- int getFd() const;
-
-private:
- int fd;
- char *dataPtr;
- const size_t dataCapacity;
-};
-
-class Network {
-public:
- Network(const Device &device, std::shared_ptr &buffer);
- Network(const Device &device, const unsigned index);
- virtual ~Network() noexcept(false);
-
- int ioctl(unsigned long cmd, void *data = nullptr);
- std::shared_ptr getBuffer();
- const std::vector &getIfmDims() const;
- size_t getIfmSize() const;
- const std::vector &getOfmDims() const;
- size_t getOfmSize() const;
-
- size_t getInputCount() const;
- size_t getOutputCount() const;
- int32_t getInputDataOffset(int index);
- int32_t getOutputDataOffset(int index);
- const std::vector> &getIfmShapes() const;
- const std::vector> &getOfmShapes() const;
- const std::vector &getIfmTypes() const;
- const std::vector &getOfmTypes() const;
- const Device &getDevice() const;
- bool isVelaModel() const;
-
-private:
- void collectNetworkInfo();
-
- int fd;
- std::shared_ptr buffer;
- std::vector ifmDims;
- std::vector ofmDims;
- std::vector ifmDataOffset;
- std::vector ofmDataOffset;
- std::vector> ifmShapes;
- std::vector> ofmShapes;
- std::vector ifmTypes;
- std::vector ofmTypes;
- const Device &device;
- bool _isVelaModel;
-};
-
-enum class InferenceStatus {
- OK,
- ERROR,
- RUNNING,
- REJECTED,
- ABORTED,
- ABORTING,
-};
-
-std::ostream &operator<<(std::ostream &out, const InferenceStatus &v);
-
-class Inference {
-public:
- template
- Inference(const std::shared_ptr &network,
- const T &ifmBegin,
- const T &ifmEnd,
- const T &ofmBegin,
- const T &ofmEnd) :
- network(network) {
- std::copy(ifmBegin, ifmEnd, std::back_inserter(ifmBuffers));
- std::copy(ofmBegin, ofmEnd, std::back_inserter(ofmBuffers));
- std::vector counterConfigs = initializeCounterConfig();
-
- // Init tensor arena buffer
- size_t arena_buffer_size = DEFAULT_ARENA_SIZE_OF_MB << 20;
- arenaBuffer = std::make_shared(network->getDevice(), arena_buffer_size);
- arenaBuffer->resize(arena_buffer_size);
-
- create(counterConfigs, false);
- }
- template
- Inference(const std::shared_ptr &network,
- const T &ifmBegin,
- const T &ifmEnd,
- const T &ofmBegin,
- const T &ofmEnd,
- const U &counters,
- bool enableCycleCounter) :
- network(network) {
- std::copy(ifmBegin, ifmEnd, std::back_inserter(ifmBuffers));
- std::copy(ofmBegin, ofmEnd, std::back_inserter(ofmBuffers));
- std::vector counterConfigs = initializeCounterConfig();
-
- if (counters.size() > counterConfigs.size())
- throw EthosU::Exception("PMU Counters argument to large.");
-
- // Init tensor arena buffer
- size_t arena_buffer_size = DEFAULT_ARENA_SIZE_OF_MB << 20;
- arenaBuffer = std::make_shared(network->getDevice(), arena_buffer_size);
- arenaBuffer->resize(arena_buffer_size);
-
- std::copy(counters.begin(), counters.end(), counterConfigs.begin());
- create(counterConfigs, enableCycleCounter);
- }
-
- template
- Inference(const std::shared_ptr &network,
- const T &arenaBuffer,
- const U &counters,
- bool enableCycleCounter) :
- network(network), arenaBuffer(arenaBuffer) {
-
- std::vector counterConfigs = initializeCounterConfig();
-
- if (counters.size() > counterConfigs.size())
- throw EthosU::Exception("PMU Counters argument to large.");
-
- std::copy(counters.begin(), counters.end(), counterConfigs.begin());
- create(counterConfigs, enableCycleCounter);
- }
-
-
- virtual ~Inference() noexcept(false);
-
- bool wait(int64_t timeoutNanos = -1) const;
- const std::vector getPmuCounters() const;
- uint64_t getCycleCounter() const;
- bool cancel() const;
- InferenceStatus status() const;
- int getFd() const;
- const std::shared_ptr getNetwork() const;
- std::vector> &getIfmBuffers();
- std::vector> &getOfmBuffers();
-
- static uint32_t getMaxPmuEventCounters();
-
- char* getInputData(int index = 0);
- char* getOutputData(int index = 0);
-
-private:
- void create(std::vector &counterConfigs, bool enableCycleCounter);
- std::vector initializeCounterConfig();
-
- int fd;
- const std::shared_ptr network;
- std::vector> ifmBuffers;
- std::vector> ofmBuffers;
- std::shared_ptr arenaBuffer;
-};
-
-struct TensorInfo{
- int type;
- std::vector shape;
-};
-
-//Define tflite::TensorType here
-enum TensorType{
- TensorType_FLOAT32 = 0,
- TensorType_FLOAT16 = 1,
- TensorType_INT32 = 2,
- TensorType_UINT8 = 3,
- TensorType_INT64 = 4,
- TensorType_STRING = 5,
- TensorType_BOOL = 6,
- TensorType_INT16 = 7,
- TensorType_COMPLEX64 = 8,
- TensorType_INT8 = 9,
- TensorType_FLOAT64 = 10,
- TensorType_MIN = TensorType_FLOAT32,
- TensorType_MAX = TensorType_FLOAT64
-
-};
-
-class Interpreter {
-public:
- Interpreter(const char *model, const char *device = "/dev/ethosu0",
- int64_t arenaSizeOfMB = DEFAULT_ARENA_SIZE_OF_MB);
- Interpreter(const std::string &model) : Interpreter(model.c_str()) {}
-
- void SetPmuCycleCounters(std::vector counters, bool enableCycleCounter = true);
- std::vector GetPmuCounters();
- uint64_t GetCycleCounter();
-
- void Invoke(int64_t timeoutNanos = 60000000000);
-
- template
- T* typed_input_buffer(int index) {
- int32_t offset = network->getInputDataOffset(index);
- return (T*)(arenaBuffer->data() + offset);
- }
-
- template
- T* typed_output_buffer(int index) {
- int32_t offset = network->getOutputDataOffset(index);
- return (T*)(arenaBuffer->data() + offset);
- }
-
- std::vector GetInputInfo();
- std::vector GetOutputInfo();
-
-private:
- Device device;
- std::shared_ptr networkBuffer;
- std::shared_ptr arenaBuffer;
- std::shared_ptr network;
- std::shared_ptr inference;
-
- int64_t arenaSizeOfMB;
- std::vector pmuCounters;
- bool enableCycleCounter;
-};
-
-} // namespace EthosU
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/src/ethosu.cpp b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/src/ethosu.cpp
deleted file mode 100644
index 0393a05..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/driver_library/src/ethosu.cpp
+++ /dev/null
@@ -1,732 +0,0 @@
-/*
- * Copyright (c) 2020-2022 Arm Limited.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed under the Apache License, Version 2.0 (the License); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef EI_ETHOS_LINUX
-#include "../include/ethosu.hpp"
-#include "../../kernel_driver/include/uapi/ethosu.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-using namespace std;
-
-namespace {
-
-enum class Severity { Error, Warning, Info, Debug };
-
-class Log {
-public:
- Log(const Severity _severity = Severity::Error) : severity(_severity) {}
-
- ~Log() = default;
-
- template
- const Log &operator<<(const T &d) const {
- if (level >= severity) {
- cout << d;
- }
-
- return *this;
- }
-
- const Log &operator<<(ostream &(*manip)(ostream &)) const {
- if (level >= severity) {
- manip(cout);
- }
-
- return *this;
- }
-
-private:
- static Severity getLogLevel() {
- if (const char *e = getenv("ETHOSU_LOG_LEVEL")) {
- const string env(e);
-
- if (env == "Error") {
- return Severity::Error;
- } else if (env == "Warning") {
- return Severity::Warning;
- } else if (env == "Info") {
- return Severity::Info;
- } else if (env == "Debug") {
- return Severity::Debug;
- } else {
- cerr << "Unsupported log level '" << env << "'" << endl;
- }
- }
-
- return Severity::Warning;
- }
-
- static const Severity level;
- const Severity severity;
-};
-
-const Severity Log::level = Log::getLogLevel();
-
-} // namespace
-
-namespace EthosU {
-__attribute__((weak)) int eioctl(int fd, unsigned long cmd, void *data = nullptr) {
- int ret = ::ioctl(fd, cmd, data);
- if (ret < 0) {
- throw EthosU::Exception("IOCTL failed");
- }
-
- Log(Severity::Debug) << "ioctl. fd=" << fd << ", cmd=" << setw(8) << setfill('0') << hex << cmd << ", ret=" << ret
- << endl;
-
- return ret;
-}
-
-__attribute__((weak)) int eopen(const char *pathname, int flags) {
- int fd = ::open(pathname, flags);
- if (fd < 0) {
- throw Exception("Failed to open device");
- }
-
- Log(Severity::Debug) << "open. fd=" << fd << ", path='" << pathname << "', flags=" << flags << endl;
-
- return fd;
-}
-
-__attribute__((weak)) int
-eppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p, const sigset_t *sigmask) {
- int result = ::ppoll(fds, nfds, tmo_p, sigmask);
- if (result < 0) {
- throw Exception("Failed to wait for ppoll event or signal");
- }
-
- return result;
-}
-
-__attribute__((weak)) int eclose(int fd) {
- Log(Severity::Debug) << "close. fd=" << fd << endl;
-
- int result = ::close(fd);
- if (result < 0) {
- throw Exception("Failed to close file");
- }
-
- return result;
-}
-__attribute((weak)) void *emmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
- void *ptr = ::mmap(addr, length, prot, flags, fd, offset);
- if (ptr == MAP_FAILED) {
- throw Exception("Failed to mmap file");
- }
-
- Log(Severity::Debug) << "map. fd=" << fd << ", addr=" << setfill('0') << addr << ", length=" << dec << length
- << ", ptr=" << hex << ptr << endl;
-
- return ptr;
-}
-
-__attribute__((weak)) int emunmap(void *addr, size_t length) {
- Log(Severity::Debug) << "unmap. addr=" << setfill('0') << addr << ", length=" << dec << length << endl;
-
- int result = ::munmap(addr, length);
- if (result < 0) {
- throw Exception("Failed to munmap file");
- }
-
- return result;
-}
-
-} // namespace EthosU
-
-namespace EthosU {
-
-/****************************************************************************
- * Exception
- ****************************************************************************/
-
-Exception::Exception(const char *msg) : msg(msg) {}
-
-Exception::~Exception() throw() {}
-
-const char *Exception::what() const throw() {
- return msg.c_str();
-}
-
-/****************************************************************************
- * Semantic Version
- ****************************************************************************/
-
-bool SemanticVersion::operator==(const SemanticVersion &other) {
- return other.major == major && other.minor == minor && other.patch == patch;
-}
-
-bool SemanticVersion::operator<(const SemanticVersion &other) {
- if (other.major > major)
- return true;
- if (other.minor > minor)
- return true;
- return other.patch > patch;
-}
-
-bool SemanticVersion::operator<=(const SemanticVersion &other) {
- return *this < other || *this == other;
-}
-
-bool SemanticVersion::operator!=(const SemanticVersion &other) {
- return !(*this == other);
-}
-
-bool SemanticVersion::operator>(const SemanticVersion &other) {
- return !(*this <= other);
-}
-
-bool SemanticVersion::operator>=(const SemanticVersion &other) {
- return !(*this < other);
-}
-
-ostream &operator<<(ostream &out, const SemanticVersion &v) {
- return out << "{ major=" << unsigned(v.major) << ", minor=" << unsigned(v.minor) << ", patch=" << unsigned(v.patch)
- << " }";
-}
-
-/****************************************************************************
- * Device
- ****************************************************************************/
-Device::Device(const char *device) {
- fd = eopen(device, O_RDWR | O_NONBLOCK);
- Log(Severity::Info) << "Device(\"" << device << "\"). this=" << this << ", fd=" << fd << endl;
-}
-
-Device::~Device() noexcept(false) {
- eclose(fd);
- Log(Severity::Info) << "~Device(). this=" << this << endl;
-}
-
-int Device::ioctl(unsigned long cmd, void *data) const {
- return eioctl(fd, cmd, data);
-}
-
-Capabilities Device::capabilities() const {
- ethosu_uapi_device_capabilities uapi;
- (void)eioctl(fd, ETHOSU_IOCTL_CAPABILITIES_REQ, static_cast(&uapi));
-
- Capabilities capabilities(
- HardwareId(uapi.hw_id.version_status,
- SemanticVersion(uapi.hw_id.version_major, uapi.hw_id.version_minor),
- SemanticVersion(uapi.hw_id.product_major),
- SemanticVersion(uapi.hw_id.arch_major_rev, uapi.hw_id.arch_minor_rev, uapi.hw_id.arch_patch_rev)),
- HardwareConfiguration(uapi.hw_cfg.macs_per_cc, uapi.hw_cfg.cmd_stream_version, bool(uapi.hw_cfg.custom_dma)),
- SemanticVersion(uapi.driver_major_rev, uapi.driver_minor_rev, uapi.driver_patch_rev));
- return capabilities;
-}
-
-/****************************************************************************
- * Buffer
- ****************************************************************************/
-
-Buffer::Buffer(const Device &device, const size_t capacity) : fd(-1), dataPtr(nullptr), dataCapacity(capacity) {
- ethosu_uapi_buffer_create uapi = {static_cast(dataCapacity)};
- fd = device.ioctl(ETHOSU_IOCTL_BUFFER_CREATE, static_cast(&uapi));
-
- void *d;
- try {
- d = emmap(nullptr, dataCapacity, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- } catch (std::exception &e) {
- try {
- eclose(fd);
- } catch (...) { std::throw_with_nested(e); }
- throw;
- }
-
- dataPtr = reinterpret_cast(d);
-
- Log(Severity::Info) << "Buffer(" << &device << ", " << dec << capacity << "), this=" << this << ", fd=" << fd
- << ", dataPtr=" << static_cast(dataPtr) << endl;
-}
-
-Buffer::~Buffer() noexcept(false) {
- try {
- emunmap(dataPtr, dataCapacity);
- } catch (std::exception &e) {
- try {
- eclose(fd);
- } catch (...) { std::throw_with_nested(e); }
- throw;
- }
-
- eclose(fd);
-
- Log(Severity::Info) << "~Buffer(). this=" << this << endl;
-}
-
-size_t Buffer::capacity() const {
- return dataCapacity;
-}
-
-void Buffer::clear() const {
- resize(0, 0);
-}
-
-char *Buffer::data() const {
- return dataPtr + offset();
-}
-
-void Buffer::resize(size_t size, size_t offset) const {
- ethosu_uapi_buffer uapi;
- uapi.offset = offset;
- uapi.size = size;
- eioctl(fd, ETHOSU_IOCTL_BUFFER_SET, static_cast(&uapi));
-}
-
-size_t Buffer::offset() const {
- ethosu_uapi_buffer uapi;
- eioctl(fd, ETHOSU_IOCTL_BUFFER_GET, static_cast(&uapi));
- return uapi.offset;
-}
-
-size_t Buffer::size() const {
- ethosu_uapi_buffer uapi;
- eioctl(fd, ETHOSU_IOCTL_BUFFER_GET, static_cast(&uapi));
- return uapi.size;
-}
-
-int Buffer::getFd() const {
- return fd;
-}
-
-/****************************************************************************
- * Network
- ****************************************************************************/
-
-Network::Network(const Device &device, shared_ptr &buffer) : device(device), fd(-1), buffer(buffer) {
- // Create buffer handle
- ethosu_uapi_network_create uapi;
- uapi.type = ETHOSU_UAPI_NETWORK_BUFFER;
- uapi.fd = buffer->getFd();
- fd = device.ioctl(ETHOSU_IOCTL_NETWORK_CREATE, static_cast(&uapi));
- try {
- collectNetworkInfo();
- } catch (std::exception &e) {
- try {
- eclose(fd);
- } catch (...) { std::throw_with_nested(e); }
- throw;
- }
-
- Log(Severity::Info) << "Network(" << &device << ", " << &*buffer << "), this=" << this << ", fd=" << fd << endl;
-}
-
-Network::Network(const Device &device, const unsigned index) : device(device), fd(-1) {
- // Create buffer handle
- ethosu_uapi_network_create uapi;
- uapi.type = ETHOSU_UAPI_NETWORK_INDEX;
- uapi.index = index;
- fd = device.ioctl(ETHOSU_IOCTL_NETWORK_CREATE, static_cast(&uapi));
- try {
- collectNetworkInfo();
- } catch (std::exception &e) {
- try {
- eclose(fd);
- } catch (...) { std::throw_with_nested(e); }
- throw;
- }
-
- Log(Severity::Info) << "Network(" << &device << ", " << index << "), this=" << this << ", fd=" << fd << endl;
-}
-
-void Network::collectNetworkInfo() {
- ethosu_uapi_network_info info;
- ioctl(ETHOSU_IOCTL_NETWORK_INFO, static_cast(&info));
-
- _isVelaModel = info.is_vela;
-
- for (uint32_t i = 0; i < info.ifm_count; i++) {
- ifmDims.push_back(info.ifm_size[i]);
- ifmTypes.push_back(info.ifm_types[i]);
- ifmDataOffset.push_back(info.ifm_offset[i]);
-
- std::vector shape;
- for (uint32_t j = 0; j < info.ifm_dims[i]; j++) {
- shape.push_back(info.ifm_shapes[i][j]);
- }
- ifmShapes.push_back(shape);
- }
-
- for (uint32_t i = 0; i < info.ofm_count; i++) {
- ofmDims.push_back(info.ofm_size[i]);
- ofmTypes.push_back(info.ofm_types[i]);
- ofmDataOffset.push_back(info.ofm_offset[i]);
-
- std::vector shape;
- for (uint32_t j = 0; j < info.ofm_dims[i]; j++) {
- shape.push_back(info.ofm_shapes[i][j]);
- }
- ofmShapes.push_back(shape);
- }
-}
-
-Network::~Network() noexcept(false) {
- eclose(fd);
- Log(Severity::Info) << "~Network(). this=" << this << endl;
-}
-
-int Network::ioctl(unsigned long cmd, void *data) {
- return eioctl(fd, cmd, data);
-}
-
-shared_ptr Network::getBuffer() {
- return buffer;
-}
-
-const std::vector &Network::getIfmDims() const {
- return ifmDims;
-}
-
-size_t Network::getIfmSize() const {
- size_t size = 0;
-
- for (auto s : ifmDims) {
- size += s;
- }
-
- return size;
-}
-
-const std::vector &Network::getOfmDims() const {
- return ofmDims;
-}
-
-size_t Network::getOfmSize() const {
- size_t size = 0;
-
- for (auto s : ofmDims) {
- size += s;
- }
-
- return size;
-}
-
-size_t Network::getInputCount() const {
- return ifmTypes.size();
-}
-
-size_t Network::getOutputCount() const {
- return ofmTypes.size();
-}
-
-int32_t Network::getInputDataOffset(int index){
- if (index >= ifmDataOffset.size()){
- throw Exception("Invalid input index or non vela model");
- }
- return ifmDataOffset[index];
-}
-
-int32_t Network::getOutputDataOffset(int index){
- if (index >= ofmDataOffset.size()){
- throw Exception("Invalid output index or non vela model");
- }
- return ofmDataOffset[index];
-}
-
-const std::vector> &Network::getIfmShapes() const {
- return ifmShapes;
-}
-
-const std::vector> &Network::getOfmShapes() const {
- return ofmShapes;
-}
-
-const std::vector &Network::getIfmTypes() const {
- return ifmTypes;
-}
-
-const std::vector &Network::getOfmTypes() const {
- return ofmTypes;
-}
-
-const Device &Network::getDevice() const {
- return device;
-}
-
-bool Network::isVelaModel() const {
- return _isVelaModel;
-}
-
-/****************************************************************************
- * Inference
- ****************************************************************************/
-
-ostream &operator<<(ostream &out, const InferenceStatus &status) {
- switch (status) {
- case InferenceStatus::OK:
- return out << "ok";
- case InferenceStatus::ERROR:
- return out << "error";
- case InferenceStatus::RUNNING:
- return out << "running";
- case InferenceStatus::REJECTED:
- return out << "rejected";
- case InferenceStatus::ABORTED:
- return out << "aborted";
- case InferenceStatus::ABORTING:
- return out << "aborting";
- }
- throw Exception("Unknown inference status");
-}
-
-Inference::~Inference() noexcept(false) {
- eclose(fd);
- Log(Severity::Info) << "~Inference(). this=" << this << endl;
-}
-
-void Inference::create(std::vector &counterConfigs, bool cycleCounterEnable = false) {
- ethosu_uapi_inference_create uapi;
-
- if (ifmBuffers.size() > ETHOSU_FD_MAX) {
- throw Exception("IFM buffer overflow");
- }
-
- if (ofmBuffers.size() > ETHOSU_FD_MAX) {
- throw Exception("OFM buffer overflow");
- }
-
- if (counterConfigs.size() != ETHOSU_PMU_EVENT_MAX) {
- throw Exception("Wrong size of counter configurations");
- }
-
- uapi.ifm_count = 0;
- uapi.ifm_fd[uapi.ifm_count++] = arenaBuffer->getFd();
- for (auto it : ifmBuffers) {
- uapi.ifm_fd[uapi.ifm_count++] = it->getFd();
- }
-
- uapi.ofm_count = 0;
- for (auto it : ofmBuffers) {
- uapi.ofm_fd[uapi.ofm_count++] = it->getFd();
- }
-
- for (int i = 0; i < ETHOSU_PMU_EVENT_MAX; i++) {
- uapi.pmu_config.events[i] = counterConfigs[i];
- }
-
- uapi.pmu_config.cycle_count = cycleCounterEnable;
-
- fd = network->ioctl(ETHOSU_IOCTL_INFERENCE_CREATE, static_cast(&uapi));
-
- Log(Severity::Info) << "Inference(" << &*network << "), this=" << this << ", fd=" << fd << endl;
-}
-
-std::vector Inference::initializeCounterConfig() {
- return std::vector(ETHOSU_PMU_EVENT_MAX, 0);
-}
-
-uint32_t Inference::getMaxPmuEventCounters() {
- return ETHOSU_PMU_EVENT_MAX;
-}
-
-bool Inference::wait(int64_t timeoutNanos) const {
- struct pollfd pfd;
- pfd.fd = fd;
- pfd.events = POLLIN | POLLERR;
- pfd.revents = 0;
-
- // if timeout negative wait forever
- if (timeoutNanos < 0) {
- return eppoll(&pfd, 1, NULL, NULL);
- }
-
- struct timespec tmo_p;
- int64_t nanosec = 1000000000;
- tmo_p.tv_sec = timeoutNanos / nanosec;
- tmo_p.tv_nsec = timeoutNanos % nanosec;
-
- return eppoll(&pfd, 1, &tmo_p, NULL) == 0;
-}
-
-bool Inference::cancel() const {
- ethosu_uapi_cancel_inference_status uapi;
- eioctl(fd, ETHOSU_IOCTL_INFERENCE_CANCEL, static_cast(&uapi));
- return uapi.status == ETHOSU_UAPI_STATUS_OK;
-}
-
-InferenceStatus Inference::status() const {
- ethosu_uapi_result_status uapi;
-
- eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast(&uapi));
-
- switch (uapi.status) {
- case ETHOSU_UAPI_STATUS_OK:
- return InferenceStatus::OK;
- case ETHOSU_UAPI_STATUS_ERROR:
- return InferenceStatus::ERROR;
- case ETHOSU_UAPI_STATUS_RUNNING:
- return InferenceStatus::RUNNING;
- case ETHOSU_UAPI_STATUS_REJECTED:
- return InferenceStatus::REJECTED;
- case ETHOSU_UAPI_STATUS_ABORTED:
- return InferenceStatus::ABORTED;
- case ETHOSU_UAPI_STATUS_ABORTING:
- return InferenceStatus::ABORTING;
- }
-
- throw Exception("Unknown inference status");
-}
-
-const std::vector Inference::getPmuCounters() const {
- ethosu_uapi_result_status uapi;
- std::vector counterValues = std::vector(ETHOSU_PMU_EVENT_MAX, 0);
-
- eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast(&uapi));
-
- for (int i = 0; i < ETHOSU_PMU_EVENT_MAX; i++) {
- if (uapi.pmu_config.events[i]) {
- counterValues.at(i) = uapi.pmu_count.events[i];
- }
- }
-
- return counterValues;
-}
-
-uint64_t Inference::getCycleCounter() const {
- ethosu_uapi_result_status uapi;
-
- eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast(&uapi));
-
- return uapi.pmu_count.cycle_count;
-}
-
-int Inference::getFd() const {
- return fd;
-}
-
-const shared_ptr Inference::getNetwork() const {
- return network;
-}
-
-vector> &Inference::getIfmBuffers() {
- return ifmBuffers;
-}
-
-vector> &Inference::getOfmBuffers() {
- return ofmBuffers;
-}
-
-/****************************************************************************
- * Interpreter
- ****************************************************************************/
-Interpreter::Interpreter(const char *model, const char *_device, int64_t _arenaSizeOfMB):
- device(_device), arenaSizeOfMB(_arenaSizeOfMB){
- //Send capabilities request
- Capabilities capabilities = device.capabilities();
-
- cout << "Capabilities:" << endl
- << "\tversion_status:" << unsigned(capabilities.hwId.versionStatus) << endl
- << "\tversion:" << capabilities.hwId.version << endl
- << "\tproduct:" << capabilities.hwId.product << endl
- << "\tarchitecture:" << capabilities.hwId.architecture << endl
- << "\tdriver:" << capabilities.driver << endl
- << "\tmacs_per_cc:" << unsigned(capabilities.hwCfg.macsPerClockCycle) << endl
- << "\tcmd_stream_version:" << unsigned(capabilities.hwCfg.cmdStreamVersion) << endl
- << "\tcustom_dma:" << std::boolalpha << capabilities.hwCfg.customDma << endl;
-
- // Init network
- ifstream stream(model, ios::binary);
- if (!stream.is_open()) {
- throw Exception("Failed to open model file");
- }
-
- stream.seekg(0, ios_base::end);
- size_t size = stream.tellg();
- stream.seekg(0, ios_base::beg);
-
- networkBuffer = make_shared(device, size);
- networkBuffer->resize(size);
- stream.read(networkBuffer->data(), size);
- network = make_shared(device, networkBuffer);
- if (!network->isVelaModel()) {
- throw Exception("Only support models compiled by vela.");
- }
-
- // Init tensor arena buffer
- size_t arena_buffer_size = arenaSizeOfMB << 20;
- arenaBuffer = make_shared(device, arena_buffer_size);
- arenaBuffer->resize(arena_buffer_size);
-}
-
-void Interpreter::SetPmuCycleCounters(vector counters, bool cycleCounter) {
- if (counters.size() != ETHOSU_PMU_EVENT_MAX){
- throw Exception("PMU event count is invalid.");
- }
-
- pmuCounters = counters;
- enableCycleCounter = cycleCounter;
-}
-
-void Interpreter::Invoke(int64_t timeoutNanos) {
- inference = make_shared(network, arenaBuffer,
- pmuCounters, enableCycleCounter);
- inference->wait(timeoutNanos);
-
- if (inference->status() != InferenceStatus::OK) {
- throw Exception("Failed to invoke.");
- }
-}
-
-std::vector Interpreter::GetPmuCounters() {
- return inference->getPmuCounters();
-}
-
-uint64_t Interpreter::GetCycleCounter() {
- return inference->getCycleCounter();
-}
-
-std::vector Interpreter::GetInputInfo() {
- std::vector ret;
- auto types = network->getIfmTypes();
- auto shapes = network->getIfmShapes();
-
- for (int i = 0; i < network->getInputCount(); i ++) {
- ret.push_back(TensorInfo{types[i], shapes[i]});
- }
-
- return ret;
-}
-
-std::vector Interpreter::GetOutputInfo(){
- std::vector ret;
- auto types = network->getOfmTypes();
- auto shapes = network->getOfmShapes();
-
- for (int i = 0; i < network->getOutputCount(); i ++) {
- ret.push_back(TensorInfo{types[i], shapes[i]});
- }
-
- return ret;
-}
-
-} // namespace EthosU
-
-#endif // EI_ETHOS_LINUX
diff --git a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/kernel_driver/include/uapi/ethosu.h b/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/kernel_driver/include/uapi/ethosu.h
deleted file mode 100644
index ae3efbc..0000000
--- a/edgeimpulse/edge-impulse-sdk/porting/ethos-u-driver-stack-imx/kernel_driver/include/uapi/ethosu.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (c) 2020-2023 Arm Limited.
- *
- * This program is free software and is provided to you under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation, and any use by you of this program is subject to the terms
- * of such GNU licence.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, you can access it online at
- * http://www.gnu.org/licenses/gpl-2.0.html.
- *
- * SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note
- */
-
-#ifndef ETHOSU_H
-#define ETHOSU_H
-
-/****************************************************************************
- * Includes
- ****************************************************************************/
-
-#include
-#include
-#include
-
-#ifdef __cplusplus
-namespace EthosU {
-#endif
-
-/****************************************************************************
- * Defines
- ****************************************************************************/
-
-#define ETHOSU_IOCTL_BASE 0x01
-#define ETHOSU_IO(nr) _IO(ETHOSU_IOCTL_BASE, nr)
-#define ETHOSU_IOR(nr, type) _IOR(ETHOSU_IOCTL_BASE, nr, type)
-#define ETHOSU_IOW(nr, type) _IOW(ETHOSU_IOCTL_BASE, nr, type)
-#define ETHOSU_IOWR(nr, type) _IOWR(ETHOSU_IOCTL_BASE, nr, type)
-
-#define ETHOSU_IOCTL_PING ETHOSU_IO(0x00)
-#define ETHOSU_IOCTL_VERSION_REQ ETHOSU_IO(0x01)
-#define ETHOSU_IOCTL_CAPABILITIES_REQ ETHOSU_IOR(0x02, \
- struct ethosu_uapi_device_capabilities)
-#define ETHOSU_IOCTL_BUFFER_CREATE ETHOSU_IOR(0x10, \
- struct ethosu_uapi_buffer_create)
-#define ETHOSU_IOCTL_BUFFER_SET ETHOSU_IOR(0x11, \
- struct ethosu_uapi_buffer)
-#define ETHOSU_IOCTL_BUFFER_GET ETHOSU_IOW(0x12, \
- struct ethosu_uapi_buffer)
-#define ETHOSU_IOCTL_NETWORK_CREATE ETHOSU_IOR(0x20, \
- struct ethosu_uapi_network_create)
-#define ETHOSU_IOCTL_NETWORK_INFO ETHOSU_IOR(0x21, \
- struct ethosu_uapi_network_info)
-#define ETHOSU_IOCTL_INFERENCE_CREATE ETHOSU_IOR(0x30, \
- struct ethosu_uapi_inference_create)
-#define ETHOSU_IOCTL_INFERENCE_STATUS ETHOSU_IOR(0x31, \
- struct ethosu_uapi_result_status)
-#define ETHOSU_IOCTL_INFERENCE_CANCEL ETHOSU_IOR(0x32, \
- struct ethosu_uapi_cancel_inference_status)
-
-/* Maximum number of IFM/OFM file descriptors per network */
-#define ETHOSU_FD_MAX 16
-/* Maximum number of dimensions for input and output */
-#define ETHOSU_DIM_MAX 8
-
-/* Maximum number of PMUs available */
-#define ETHOSU_PMU_EVENT_MAX 4
-
-/****************************************************************************
- * Types
- ****************************************************************************/
-
-/**
- * enum ethosu_uapi_status - Status
- */
-enum ethosu_uapi_status {
- ETHOSU_UAPI_STATUS_OK,
- ETHOSU_UAPI_STATUS_ERROR,
- ETHOSU_UAPI_STATUS_RUNNING,
- ETHOSU_UAPI_STATUS_REJECTED,
- ETHOSU_UAPI_STATUS_ABORTED,
- ETHOSU_UAPI_STATUS_ABORTING,
-};
-
-/**
- * struct ethosu_uapi_buffer_create - Create buffer request
- * @capacity: Maximum capacity of the buffer
- */
-struct ethosu_uapi_buffer_create {
- __u32 capacity;
-};
-
-/**
- * struct ethosu_uapi_buffer - Buffer descriptor
- * @offset: Offset to where the data starts
- * @size: Size of the data
- *
- * 'offset + size' must not exceed the capacity of the buffer.
- */
-struct ethosu_uapi_buffer {
- __u32 offset;
- __u32 size;
-};
-
-/**
- * enum ethosu_uapi_network_create - Network buffer type.
- * @ETHOSU_UAPI_NETWORK_BUFFER: Network is stored in a buffer handle.
- * @ETHOSU_UAPI_NETWORK_INDEX: Network is built into firmware and referenced by
- * index.
- */
-enum ethosu_uapi_network_type {
- ETHOSU_UAPI_NETWORK_BUFFER = 1,
- ETHOSU_UAPI_NETWORK_INDEX
-};
-
-/**
- * struct ethosu_uapi_network_create - Create network request
- * @type: Buffer type. See @ethosu_uapi_network_type.
- * @fd: Buffer file descriptor
- * @index: Buffer index compiled into firmware binary.
- */
-struct ethosu_uapi_network_create {
- uint32_t type;
- union {
- __u32 fd;
- __u32 index;
- };
-};
-
-/**
- * struct ethosu_uapi_network_info - Network info
- * @desc: Network description
- * @ifm_count: Number of IFM buffers
- * @ifm_size: IFM buffer sizes
- * @ifm_types: IFM data types
- * @ifm_offset: IFM data offset in arena
- * @ifm_dims: IFM buffer dimensions
- * @ifm_shapes: IFM buffer shapes
- * @ofm_count: Number of OFM buffers
- * @ofm_size: OFM buffer sizes
- * @ofm_offset: OFM data offset in arena
- * @ofm_dims: OFM buffer dimensions
- * @ofm_shapes: OFM buffer shapes
- */
-struct ethosu_uapi_network_info {
- char desc[32];
- __u32 is_vela;
- __u32 ifm_count;
- __u32 ifm_size[ETHOSU_FD_MAX];
- __u32 ifm_types[ETHOSU_FD_MAX];
- __u32 ifm_offset[ETHOSU_FD_MAX];
- __u32 ifm_dims[ETHOSU_FD_MAX];
- __u32 ifm_shapes[ETHOSU_FD_MAX][ETHOSU_DIM_MAX];
- __u32 ofm_count;
- __u32 ofm_size[ETHOSU_FD_MAX];
- __u32 ofm_types[ETHOSU_FD_MAX];
- __u32 ofm_offset[ETHOSU_FD_MAX];
- __u32 ofm_dims[ETHOSU_FD_MAX];
- __u32 ofm_shapes[ETHOSU_FD_MAX][ETHOSU_DIM_MAX];
-};
-
-/**
- * struct ethosu_uapi_pmu_config - Configure performance counters
- * @events: Array of counters to configure, set to non-zero for
- * each counter to enable corresponding event.
- * @cycle_count: Set to enable the cycle counter.
- */
-struct ethosu_uapi_pmu_config {
- __u32 events[ETHOSU_PMU_EVENT_MAX];
- __u32 cycle_count;
-};
-
-/**
- * struct ethosu_uapi_pmu_counts - Status of performance counters
- * @events: Count for respective configured events.
- * @cycle_count: Count for cycle counter.
- */
-struct ethosu_uapi_pmu_counts {
- __u32 events[ETHOSU_PMU_EVENT_MAX];
- __u64 cycle_count;
-};
-
-/**
- * struct ethosu_uapi_device_hw_id - Device hardware identification
- * @version_status: Version status
- * @version_minor: Version minor
- * @version_major: Version major
- * @product_major: Product major
- * @arch_patch_rev: Architecture version patch
- * @arch_minor_rev: Architecture version minor
- * @arch_major_rev: Architecture version major
- */
-struct ethosu_uapi_device_hw_id {
- __u32 version_status;
- __u32 version_minor;
- __u32 version_major;
- __u32 product_major;
- __u32 arch_patch_rev;
- __u32 arch_minor_rev;
- __u32 arch_major_rev;
-};
-
-/**
- * struct ethosu_uapi_device_hw_cfg - Device hardware configuration
- * @macs_per_cc: MACs per clock cycle
- * @cmd_stream_version: NPU command stream version
- * @custom_dma: Custom DMA enabled
- */
-struct ethosu_uapi_device_hw_cfg {
- __u32 macs_per_cc;
- __u32 cmd_stream_version;
- __u32 custom_dma;
-};
-
-/**
- * struct ethosu_uapi_device_capabilities - Device capabilities
- * @hw_id: Hardware identification
- * @hw_cfg: Hardware configuration
- * @driver_patch_rev: Driver version patch
- * @driver_minor_rev: Driver version minor
- * @driver_major_rev: Driver version major
- */
-struct ethosu_uapi_device_capabilities {
- struct ethosu_uapi_device_hw_id hw_id;
- struct ethosu_uapi_device_hw_cfg hw_cfg;
- __u32 driver_patch_rev;
- __u32 driver_minor_rev;
- __u32 driver_major_rev;
-};
-
-/**
- * enum ethosu_uapi_inference_type - Inference type
- */
-enum ethosu_uapi_inference_type {
- ETHOSU_UAPI_INFERENCE_MODEL = 0,
- ETHOSU_UAPI_INFERENCE_OP
-};
-
-/**
- * struct ethosu_uapi_inference_create - Create network request
- * @ifm_count: Number of IFM file descriptors
- * @ifm_fd: IFM buffer file descriptors
- * @ofm_count: Number of OFM file descriptors
- * @ofm_fd: OFM buffer file descriptors
- */
-struct ethosu_uapi_inference_create {
- __u32 ifm_count;
- __u32 ifm_fd[ETHOSU_FD_MAX];
- __u32 ofm_count;
- __u32 ofm_fd[ETHOSU_FD_MAX];
- enum ethosu_uapi_inference_type inference_type;
- struct ethosu_uapi_pmu_config pmu_config;
-};
-
-/**
- * struct ethosu_uapi_result_status - Status of inference
- * @status Status of run inference.
- * @pmu_config Configured performance counters.
- * @pmu_count Perfomance counters values, when status is
- * ETHOSU_UAPI_STATUS_OK.
- */
-struct ethosu_uapi_result_status {
- enum ethosu_uapi_status status;
- struct ethosu_uapi_pmu_config pmu_config;
- struct ethosu_uapi_pmu_counts pmu_count;
-};
-
-/**
- * struct ethosu_uapi_cancel_status - Status of inference cancellation.
- * @status OK if inference cancellation was performed, ERROR otherwise.
- */
-struct ethosu_uapi_cancel_inference_status {
- enum ethosu_uapi_status status;
-};
-
-#ifdef __cplusplus
-} /* namespace EthosU */
-#endif
-#endif