aboutsummaryrefslogtreecommitdiff
path: root/applications/trustzone_inference/nonsecure
diff options
context:
space:
mode:
Diffstat (limited to 'applications/trustzone_inference/nonsecure')
-rw-r--r--applications/trustzone_inference/nonsecure/CMakeLists.txt61
-rw-r--r--applications/trustzone_inference/nonsecure/main_nonsecure.cpp90
2 files changed, 151 insertions, 0 deletions
diff --git a/applications/trustzone_inference/nonsecure/CMakeLists.txt b/applications/trustzone_inference/nonsecure/CMakeLists.txt
new file mode 100644
index 0000000..a4d95ad
--- /dev/null
+++ b/applications/trustzone_inference/nonsecure/CMakeLists.txt
@@ -0,0 +1,61 @@
+#
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+#
+# 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.
+#
+
+#############################################################################
+# Configuration
+#############################################################################
+
+set(TRUSTZONE_BUILD TRUE)
+set(TRUSTZONE_SIDE nonsecure)
+
+#############################################################################
+# TrustZone Nonsecure world
+#############################################################################
+
+add_library(nonsecure_target_startup INTERFACE)
+target_link_libraries(nonsecure_target_startup INTERFACE ethosu_target_link)
+target_link_libraries(nonsecure_target_startup INTERFACE cmsis_startup)
+
+ethosu_add_executable(trustzone_nonsecure PRIVATE
+ TARGET_LIBRARY nonsecure_target_startup
+ SOURCES main_nonsecure.cpp)
+
+target_compile_definitions(trustzone_nonsecure PUBLIC TRUSTZONE_BUILD)
+target_compile_definitions(trustzone_nonsecure PUBLIC TRUSTZONE_NONSECURE)
+
+# Silence warning on cmse attributes
+target_compile_options(trustzone_nonsecure PRIVATE -Wno-ignored-attributes)
+
+#############################################################################
+# linker configuration
+#############################################################################
+
+# Pick up the gateway object file from secure build
+target_link_options(trustzone_nonsecure PRIVATE ${SECURE_GATEWAY_LIB})
+
+target_link_options(trustzone_nonsecure
+ PRIVATE "--predefine=\"-I${CMAKE_CURRENT_SOURCE_DIR}/../${ETHOSU_TARGET}\"")
+
+#############################################################################
+# Helper target to extract non-secure binary
+#############################################################################
+
+add_custom_target(nonsecure_binary ALL COMMAND fromelf --bin
+ ${CMAKE_CURRENT_BINARY_DIR}/trustzone_nonsecure.elf
+ -o ${CMAKE_CURRENT_BINARY_DIR}/ns_bin
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/trustzone_nonsecure)
diff --git a/applications/trustzone_inference/nonsecure/main_nonsecure.cpp b/applications/trustzone_inference/nonsecure/main_nonsecure.cpp
new file mode 100644
index 0000000..72e91e0
--- /dev/null
+++ b/applications/trustzone_inference/nonsecure/main_nonsecure.cpp
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2019-2021 Arm Limited. All rights reserved.
+ *
+ * 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.
+ */
+
+/* to be able to print from nonsecure world since uart is mapped
+ * to secure world. */
+#include "../common/secure_entries.hpp"
+
+/* Disable semihosting */
+__asm(".global __use_no_semihosting\n");
+
+/* Target specific CMSIS Device header is included by compiler,
+ * see cmsis.cmake in core_software */
+
+using namespace std;
+
+extern "C" void SystemInit() {
+ /* secure world is doing the neccessary setup, since it has
+ * the privilege to do so, and non-secure doesn't
+ */
+ nonsecure_print("skipping system init from non-secure world");
+}
+
+/*
+ * Retargeting stubs for the non-secure world
+ */
+extern "C" {
+
+void _sys_exit(int code) {
+ (void) code;
+ nonsecure_print("Returning to secure world!");
+ /*
+ * Make sure we return to secure world when exit by
+ * setting LR to FNC_RETURN and branching to tell CPU
+ * we want to leave the non-secure world
+ */
+ asm("LDR r14, =0xFEFFFFFE\n");
+ asm("BX lr\n");
+}
+
+void _ttywrch(int ch) {
+ (void)ch;
+}
+
+char *_sys_command_string(char *cmd, int len) {
+ (void)len;
+
+ return cmd;
+}
+
+} // extern "C"
+
+int result = -1;
+
+int return_nonsecure_result(void) {
+ return result;
+}
+
+int main() {
+ nonsecure_print("Non-secure main starting up.");
+
+ set_result_function(return_nonsecure_result);
+
+ /* Execute inference in secure world with data not accessible from
+ * non-secure world
+ */
+ nonsecure_print("Starting secure inference.");
+ int inference_failed = run_secure_inference();
+
+ nonsecure_print("Inference returned: ");
+ nonsecure_print(inference_failed ? "failed" : "success");
+
+ result = inference_failed ? -1 : 0;
+
+ return 0;
+}