aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/halconf.h2
-rwxr-xr-xdemos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/main.c52
2 files changed, 47 insertions, 7 deletions
diff --git a/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/halconf.h b/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/halconf.h
index 5f19391d4..b534118ae 100644
--- a/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/halconf.h
+++ b/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/halconf.h
@@ -55,7 +55,7 @@
* @brief Enables the cryptographic subsystem.
*/
#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
-#define HAL_USE_CRY TRUE
+#define HAL_USE_CRY FALSE
#endif
/**
diff --git a/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/main.c b/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/main.c
index 35293b161..9952b793d 100755
--- a/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/main.c
+++ b/demos/ATSAMA5D2/RT-SAMA5D2-XPLAINED-SEC/main.c
@@ -18,9 +18,8 @@
#include "hal.h"
#include "rt_test_root.h"
#include "oslib_test_root.h"
-#include "ccportab.h"
#include "chprintf.h"
-#include "string.h"
+#include "chsmc.h"
/*
* LED blinker thread, times are in milliseconds.
@@ -53,7 +52,38 @@ static const SerialConfig sdcfg = {
UART_MR_PAR_NO
};
-CC_NO_RETURN void _ns_trampoline(uint32_t addr);
+/*
+ * Dummy trust service thread.
+ */
+static THD_WORKING_AREA(waDummyTrustedService, 512);
+static THD_FUNCTION(DummyTrustedService, arg) {
+
+ (void)arg;
+ msg_t m;
+ chRegSetThreadName("DTS");
+
+ /*
+ * Register the trust service
+ */
+ registered_object_t *smc_hdl = smcRegisterMeAsService("DummyTrustedService");
+ if (smc_hdl == NULL) {
+ /*
+ * Error: the service is already registered
+ * or memory is exhausted.
+ */
+ return;
+ }
+ /*
+ * Wait and process requests
+ */
+ while (true) {
+ m = smcServiceWaitRequest((smc_service_t *)smc_hdl->objp);
+ if (m == MSG_OK)
+ chThdSleepMilliseconds(500);
+ else
+ chThdSleepMilliseconds(5000);
+ }
+}
/*
* Application entry point.
@@ -69,6 +99,7 @@ int main(void) {
*/
halInit();
chSysInit();
+ smcInit();
/*
* Activates the serial driver 0 using the driver default configuration.
@@ -82,10 +113,17 @@ int main(void) {
* Creates the blinker thread.
*/
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO-64, Thread1, NULL);
+ /*
+ * Creates the dummy service thread.
+ */
+ chThdCreateStatic(waDummyTrustedService, sizeof(waDummyTrustedService), NORMALPRIO-32,
+ DummyTrustedService, NULL);
/*
- * All DDR memory, also from AESB point of view is
- * configured as non secure READ and WRITE.
+ * The DDR memory is divided in 4 regions. Each region is 2MB large.
+ * The first region is split in two areas, each 1MB large.
+ * The lower area of this first region is non secure.
+ * All the rest of the regions space is secured.
*/
mtxSetSlaveRegionSize(MATRIX0, H64MX_SLAVE_DDR_PORT0, MATRIX_AREA_SIZE_2M, REGION_0_MSK);
mtxSetSlaveRegionSize(MATRIX0, H64MX_SLAVE_DDR_PORT1, MATRIX_AREA_SIZE_2M, REGION_0_MSK);
@@ -123,14 +161,16 @@ int main(void) {
mtxRegionWrnsech(REGION_1, NOT_SECURE_WRITE) |
mtxRegionWrnsech(REGION_2, NOT_SECURE_WRITE) |
mtxRegionWrnsech(REGION_3, NOT_SECURE_WRITE));
+
/*
* Jump in the NON SECURE world
* This 'main' thread become the non secure environment as view by
* the secure world.
*/
+ chThdSleepMilliseconds(1000);
chprintf((BaseSequentialStream*)&SD1, "Jumping in the non secure world\n\r");
_ns_trampoline(0x20000000);
/*
- * Never it goes here
+ * It never goes here
*/
}