aboutsummaryrefslogtreecommitdiff
path: root/applications/trustzone_inference/nonsecure/main_nonsecure.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'applications/trustzone_inference/nonsecure/main_nonsecure.cpp')
-rw-r--r--applications/trustzone_inference/nonsecure/main_nonsecure.cpp90
1 files changed, 90 insertions, 0 deletions
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;
+}