git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11339 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
isiora 2018-01-19 08:18:31 +00:00
parent 58dbc1e30b
commit 562c022511
2 changed files with 47 additions and 7 deletions

View File

@ -55,7 +55,7 @@
* @brief Enables the cryptographic subsystem. * @brief Enables the cryptographic subsystem.
*/ */
#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) #if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
#define HAL_USE_CRY TRUE #define HAL_USE_CRY FALSE
#endif #endif
/** /**

View File

@ -18,9 +18,8 @@
#include "hal.h" #include "hal.h"
#include "rt_test_root.h" #include "rt_test_root.h"
#include "oslib_test_root.h" #include "oslib_test_root.h"
#include "ccportab.h"
#include "chprintf.h" #include "chprintf.h"
#include "string.h" #include "chsmc.h"
/* /*
* LED blinker thread, times are in milliseconds. * LED blinker thread, times are in milliseconds.
@ -53,7 +52,38 @@ static const SerialConfig sdcfg = {
UART_MR_PAR_NO 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. * Application entry point.
@ -69,6 +99,7 @@ int main(void) {
*/ */
halInit(); halInit();
chSysInit(); chSysInit();
smcInit();
/* /*
* Activates the serial driver 0 using the driver default configuration. * Activates the serial driver 0 using the driver default configuration.
@ -82,10 +113,17 @@ int main(void) {
* Creates the blinker thread. * Creates the blinker thread.
*/ */
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO-64, Thread1, NULL); 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 * The DDR memory is divided in 4 regions. Each region is 2MB large.
* configured as non secure READ and WRITE. * 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_PORT0, MATRIX_AREA_SIZE_2M, REGION_0_MSK);
mtxSetSlaveRegionSize(MATRIX0, H64MX_SLAVE_DDR_PORT1, 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_1, NOT_SECURE_WRITE) |
mtxRegionWrnsech(REGION_2, NOT_SECURE_WRITE) | mtxRegionWrnsech(REGION_2, NOT_SECURE_WRITE) |
mtxRegionWrnsech(REGION_3, NOT_SECURE_WRITE)); mtxRegionWrnsech(REGION_3, NOT_SECURE_WRITE));
/* /*
* Jump in the NON SECURE world * Jump in the NON SECURE world
* This 'main' thread become the non secure environment as view by * This 'main' thread become the non secure environment as view by
* the secure world. * the secure world.
*/ */
chThdSleepMilliseconds(1000);
chprintf((BaseSequentialStream*)&SD1, "Jumping in the non secure world\n\r"); chprintf((BaseSequentialStream*)&SD1, "Jumping in the non secure world\n\r");
_ns_trampoline(0x20000000); _ns_trampoline(0x20000000);
/* /*
* Never it goes here * It never goes here
*/ */
} }