summaryrefslogtreecommitdiff
path: root/bsp/lpc55sxx
diff options
context:
space:
mode:
authorKevin Peng <[email protected]>2020-01-10 22:53:35 +0800
committerKarl Zhang <[email protected]>2020-01-15 08:43:02 +0800
commitcd95e4cd59601034954870a42484dbc9ce533c40 (patch)
treeb523f810530a000f50b8c92eb976c7a712391074 /bsp/lpc55sxx
parent2479d7de4a7db40f57f2f217a1fcb635a19caf17 (diff)
LPC55S69: Add Protected Storage demo
This demo shows how protected storage works in RTT. It tests by write and read data over PSA APIs, then check the integrity. The test will run repeatedly, each time with different data. The TFM package does not support LPC55S69 board officially yet. Change-Id: Ib1cd4fc8166b21e3f774f092c95d2811d51123fe Signed-off-by: Kevin Peng <[email protected]> Signed-off-by: Karl Zhang <[email protected]>
Diffstat (limited to 'bsp/lpc55sxx')
-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>