summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
Diffstat (limited to 'bsp')
-rw-r--r--bsp/lpc55sxx/lpc55s69_nxp_evk/applications/main.c16
-rw-r--r--bsp/lpc55sxx/lpc55s69_nxp_evk/applications/tfm_ps.c110
-rw-r--r--bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvoptx12
-rw-r--r--bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvprojx5
4 files changed, 142 insertions, 1 deletions
diff --git a/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/main.c b/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/main.c
index e03a8c6336..e0a2e3171f 100644
--- a/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/main.c
+++ b/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/main.c
@@ -1,11 +1,13 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2019-10-24 Magicoe first version
+ * 2020-01-10 Kevin/Karl Add PS demo
*
*/
@@ -16,8 +18,12 @@
/* GPIO1_4 is Blue LED */
#define LEDB_PIN GET_PINS(1, 4)
+extern void protected_storage_demo_thread(void * parameters);
+
int main(void)
{
+ rt_thread_t t_psa_ps_demo;
+
#if defined(__CC_ARM)
rt_kprintf("using armcc, version: %d\n", __ARMCC_VERSION);
#elif defined(__CLANG_ARM)
@@ -27,7 +33,15 @@ int main(void)
#elif defined(__GNUC__)
rt_kprintf("using gcc, version: %d.%d\n", __GNUC__, __GNUC_MINOR__);
#endif
-
+
+ t_psa_ps_demo = rt_thread_create("psa_ps_demo",
+ protected_storage_demo_thread,
+ RT_NULL,
+ 512,
+ ( RT_MAIN_THREAD_PRIORITY - 1),
+ 50);
+ if (t_psa_ps_demo != RT_NULL) rt_thread_startup(t_psa_ps_demo);
+
rt_pin_mode(LEDB_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
while (1)
{
diff --git a/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/tfm_ps.c b/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/tfm_ps.c
new file mode 100644
index 0000000000..2c99e47402
--- /dev/null
+++ b/bsp/lpc55sxx/lpc55s69_nxp_evk/applications/tfm_ps.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-01-10 Kevin/Karl Add PS demo
+ *
+ */
+
+#include <rtdevice.h>
+#include <string.h>
+#include "tfm_ns_lock.h"
+#include "psa_protected_storage.h"
+
+#define TEST_UID_A 2U
+#define ASSET_A "THEQUICKBROWNFOXJUMPSOVERALAZYDOG"
+#define ASSET_A_SIZE (sizeof( ASSET_A ) - 1)
+#define RESETDATA "THISIS"
+#define RESETDATA_SIZE (sizeof( RESETDATA ) - 1)
+#define READ_LENGTH (ASSET_A_SIZE > RESETDATA_SIZE ? \
+ ASSET_A_SIZE : RESETDATA_SIZE)
+
+void protected_storage_demo_thread(void * parameters)
+{
+ psa_ps_status_t status;
+ const psa_ps_uid_t uid = TEST_UID_A;
+ const psa_ps_create_flags_t flags = PSA_PS_FLAG_NONE;
+ uint8_t write_data[] = ASSET_A;
+ const uint32_t data_length = ASSET_A_SIZE;
+ uint8_t rewrite_data[] = RESETDATA;
+ const uint32_t reset_data_length = RESETDATA_SIZE;
+ uint8_t get_data[READ_LENGTH];
+ uint32_t counter = 0;
+
+ tfm_ns_lock_init();
+
+ for ( ; ; )
+ {
+ /* Call TF-M protected storage service and set the asset. */
+ status = psa_ps_set(uid, data_length, write_data, flags);
+ if (status != PSA_PS_SUCCESS)
+ {
+ rt_kprintf("[Protected Storage Asset A Set Round %ld] Fail\r\n", counter);
+ for( ; ; );
+ }
+
+ rt_kprintf("[Protected Storage Asset A Set Round %ld] Success\r\n", counter);
+
+ /* Read the asset. */
+ status = psa_ps_get(uid, 0, data_length, get_data);
+ if (status != PSA_PS_SUCCESS)
+ {
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Fail\r\n", counter);
+ for ( ; ; );
+ }
+
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Success\r\n", counter);
+
+ /* Check the read data. */
+ if (memcmp(write_data, get_data, sizeof(write_data) - 1) != 0)
+ {
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Get the wrong data\r\n", counter);
+ for ( ; ; );
+ }
+
+ /* Change the asset. */
+ status = psa_ps_set(uid, reset_data_length, rewrite_data, flags);
+ if (status != PSA_PS_SUCCESS)
+ {
+ rt_kprintf("[Protected Storage Asset A Reset Round %ld] Fail\r\n", counter);
+ }
+
+ rt_kprintf("[Protected Storage Asset A Reset Round %ld] Success\r\n", counter);
+
+ /* Read the asset. */
+ status = psa_ps_get(uid, 0, reset_data_length, get_data);
+ if (status != PSA_PS_SUCCESS)
+ {
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Fail\r\n", counter);
+ for ( ; ; );
+ }
+
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Success\r\n", counter);
+
+ /* Check the read data. */
+ if (memcmp(rewrite_data, get_data, sizeof(rewrite_data) - 1) != 0)
+ {
+ rt_kprintf("[Protected Storage Asset A Get Round %ld] Get the wrong data\r\n", counter);
+ for ( ; ; );
+ }
+
+ /* Remove the asset. */
+ status = psa_ps_remove(uid);
+ if (status != PSA_PS_SUCCESS)
+ {
+ rt_kprintf("[Protected Storage Asset A Remove Round %ld] Fail\r\n", counter);
+ for ( ; ; );
+ }
+
+ rt_kprintf("[Protected Storage Asset A Remove Round %ld] Success\r\n\n", counter);
+
+ /* Wait for a second. */
+ rt_thread_mdelay(1000);
+ counter++;
+ }
+}
+
+// end file
diff --git a/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvoptx b/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvoptx
index 9459d78b20..b6a39c92b3 100644
--- a/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvoptx
+++ b/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvoptx
@@ -370,6 +370,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\applications\tfm_ps.c</PathWithFileName>
+ <FilenameWithoutPath>tfm_ps.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
</Group>
<Group>
diff --git a/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvprojx b/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvprojx
index a149a896ff..26e8530af6 100644
--- a/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvprojx
+++ b/bsp/lpc55sxx/lpc55s69_nxp_evk/project_ns.uvprojx
@@ -463,6 +463,11 @@
<FileType>1</FileType>
<FilePath>applications\main.c</FilePath>
</File>
+ <File>
+ <FileName>tfm_ps.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>.\applications\tfm_ps.c</FilePath>
+ </File>
</Files>
</Group>
<Group>