Core: Add IPC Client and Service Secure Partition
Add Secure Partition for IPC Client and Service. Generate new partition
information by executing tfm_parse_manifest_list.py.
Change-Id: I8a0fe54113f9c5c2a32dd5d651a9722f0057dd2b
Signed-off-by: Summer Qin <summer.qin@arm.com>
diff --git a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
index e1b8f84..ee8ff7b 100644
--- a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
+++ b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2018 ARM Limited
+; * Copyright (c) 2018-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
@@ -126,6 +126,16 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_DATA))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_DATA))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA))
+#endif /* TFM_PSA_API */
__copy_table_end__ = .;
} > FLASH
@@ -180,6 +190,18 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK))
+#endif /* TFM_PSA_API */
LONG (ADDR(.TFM_UNPRIV_SCRATCH))
LONG (SIZEOF(.TFM_UNPRIV_SCRATCH))
__zero_table_end__ = .;
@@ -339,6 +361,34 @@
Image$$TFM_SP_SECURE_TEST_PARTITION$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST : ALIGN(32)
+ {
+ *ipc_service_test*:*(.text*)
+ *ipc_service_test*:*(.rodata*)
+ *(TFM_SP_IPC_SERVICE_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST : ALIGN(32)
+ {
+ *ipc_client_test*:*(.text*)
+ *ipc_client_test*:*(.rodata*)
+ *(TFM_SP_IPC_CLIENT_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+
+#endif /* TFM_PSA_API */
.ARM.extab :
{
@@ -713,6 +763,58 @@
Image$$TFM_SP_SECURE_TEST_PARTITION_STACK$$ZI$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST_DATA : ALIGN(32)
+ {
+ *ipc_service_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA);
+
+ .TFM_SP_IPC_SERVICE_TEST_BSS : ALIGN(32)
+ {
+ *ipc_service_test*:*(.bss*)
+ *ipc_service_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS);
+
+ .TFM_SP_IPC_SERVICE_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK);
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST_DATA : ALIGN(32)
+ {
+ *ipc_client_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA);
+
+ .TFM_SP_IPC_CLIENT_TEST_BSS : ALIGN(32)
+ {
+ *ipc_client_test*:*(.bss*)
+ *ipc_client_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS);
+
+ .TFM_SP_IPC_CLIENT_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK);
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK);
+
+#endif /* TFM_PSA_API */
.TFM_SP_SECURE_TEST_PARTITION_DATA : ALIGN(32)
{
diff --git a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
index 9a971a2..1eb1e65 100644
--- a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
+++ b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2018 ARM Limited
+; * Copyright (c) 2018-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
diff --git a/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct b/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
index eaa08b1..9943733 100644
--- a/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
+++ b/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
@@ -1,7 +1,7 @@
#! armclang --target=arm-arm-none-eabi -march=armv8-m.main -E -xc
/*
- * Copyright (c) 2017-2018 ARM Limited
+ * Copyright (c) 2017-2019 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -124,6 +124,15 @@
}
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ TFM_SP_IPC_CLIENT_TEST +0 ALIGN 32 {
+ *ipc_client_test.* (+RO)
+ }
+ TFM_SP_IPC_SERVICE_TEST +0 ALIGN 32 {
+ *ipc_service_test.* (+RO)
+ }
+#endif /* TFM_PSA_API */
+
/* Shared area between BL2 and runtime to exchange data */
TFM_SHARED_DATA S_DATA_START ALIGN 32 OVERLAY EMPTY BOOT_TFM_SHARED_DATA_SIZE {
}
@@ -230,6 +239,22 @@
}
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ TFM_SP_IPC_CLIENT_TEST_DATA +0 ALIGN 32 {
+ ipc_client_test.o (+RW +ZI)
+ }
+
+ TFM_SP_IPC_CLIENT_TEST_STACK +0 ALIGN 128 EMPTY 0x1000 {
+ }
+
+ TFM_SP_IPC_SERVICE_TEST_DATA +0 ALIGN 32 {
+ ipc_service_test.o (+RW +ZI)
+ }
+
+ TFM_SP_IPC_SERVICE_TEST_STACK +0 ALIGN 128 EMPTY 0x1000 {
+ }
+#endif /* TFM_PSA_API */
+
#endif /* TFM_LVL == 1 */
/* This empty, zero long execution region is here to mark the limit address
diff --git a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
index 8855246..b6c5628 100644
--- a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
+++ b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2017-2018 ARM Limited
+; * Copyright (c) 2017-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
@@ -126,6 +126,16 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_DATA))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_DATA))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA))
+#endif /* TFM_PSA_API */
__copy_table_end__ = .;
} > FLASH
@@ -180,6 +190,18 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK))
+#endif /* TFM_PSA_API */
LONG (ADDR(.TFM_UNPRIV_SCRATCH))
LONG (SIZEOF(.TFM_UNPRIV_SCRATCH))
__zero_table_end__ = .;
@@ -339,6 +361,34 @@
Image$$TFM_SP_SECURE_TEST_PARTITION$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST : ALIGN(32)
+ {
+ *ipc_service_test*:*(.text*)
+ *ipc_service_test*:*(.rodata*)
+ *(TFM_SP_IPC_SERVICE_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST : ALIGN(32)
+ {
+ *ipc_client_test*:*(.text*)
+ *ipc_client_test*:*(.rodata*)
+ *(TFM_SP_IPC_CLIENT_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+
+#endif /* TFM_PSA_API */
.ARM.extab :
{
@@ -713,6 +763,58 @@
Image$$TFM_SP_SECURE_TEST_PARTITION_STACK$$ZI$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST_DATA : ALIGN(32)
+ {
+ *ipc_service_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA);
+
+ .TFM_SP_IPC_SERVICE_TEST_BSS : ALIGN(32)
+ {
+ *ipc_service_test*:*(.bss*)
+ *ipc_service_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS);
+
+ .TFM_SP_IPC_SERVICE_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK);
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST_DATA : ALIGN(32)
+ {
+ *ipc_client_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA);
+
+ .TFM_SP_IPC_CLIENT_TEST_BSS : ALIGN(32)
+ {
+ *ipc_client_test*:*(.bss*)
+ *ipc_client_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS);
+
+ .TFM_SP_IPC_CLIENT_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK);
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK);
+
+#endif /* TFM_PSA_API */
.TFM_SP_SECURE_TEST_PARTITION_DATA : ALIGN(32)
{
diff --git a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
index c749aa3..c971c6d 100644
--- a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
+++ b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2017-2018 ARM Limited
+; * Copyright (c) 2017-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
diff --git a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
index e1b8f84..ee8ff7b 100644
--- a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
+++ b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2018 ARM Limited
+; * Copyright (c) 2018-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
@@ -126,6 +126,16 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_DATA))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_DATA))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA))
+#endif /* TFM_PSA_API */
__copy_table_end__ = .;
} > FLASH
@@ -180,6 +190,18 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK))
+#endif /* TFM_PSA_API */
LONG (ADDR(.TFM_UNPRIV_SCRATCH))
LONG (SIZEOF(.TFM_UNPRIV_SCRATCH))
__zero_table_end__ = .;
@@ -339,6 +361,34 @@
Image$$TFM_SP_SECURE_TEST_PARTITION$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST : ALIGN(32)
+ {
+ *ipc_service_test*:*(.text*)
+ *ipc_service_test*:*(.rodata*)
+ *(TFM_SP_IPC_SERVICE_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST : ALIGN(32)
+ {
+ *ipc_client_test*:*(.text*)
+ *ipc_client_test*:*(.rodata*)
+ *(TFM_SP_IPC_CLIENT_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+
+#endif /* TFM_PSA_API */
.ARM.extab :
{
@@ -713,6 +763,58 @@
Image$$TFM_SP_SECURE_TEST_PARTITION_STACK$$ZI$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST_DATA : ALIGN(32)
+ {
+ *ipc_service_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA);
+
+ .TFM_SP_IPC_SERVICE_TEST_BSS : ALIGN(32)
+ {
+ *ipc_service_test*:*(.bss*)
+ *ipc_service_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS);
+
+ .TFM_SP_IPC_SERVICE_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK);
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST_DATA : ALIGN(32)
+ {
+ *ipc_client_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA);
+
+ .TFM_SP_IPC_CLIENT_TEST_BSS : ALIGN(32)
+ {
+ *ipc_client_test*:*(.bss*)
+ *ipc_client_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS);
+
+ .TFM_SP_IPC_CLIENT_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK);
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK);
+
+#endif /* TFM_PSA_API */
.TFM_SP_SECURE_TEST_PARTITION_DATA : ALIGN(32)
{
diff --git a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
index 9a971a2..1eb1e65 100644
--- a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
+++ b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2018 ARM Limited
+; * Copyright (c) 2018-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
diff --git a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
index dfaf83b..9cce586 100644
--- a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
+++ b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2009-2018 ARM Limited
+; * Copyright (c) 2009-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
@@ -126,6 +126,16 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_DATA))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_DATA))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (LOADADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA))
+#endif /* TFM_PSA_API */
__copy_table_end__ = .;
} > FLASH
@@ -180,6 +190,18 @@
LONG (ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK))
LONG (SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK))
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK))
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS))
+ LONG (ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK))
+ LONG (SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK))
+#endif /* TFM_PSA_API */
LONG (ADDR(.TFM_UNPRIV_SCRATCH))
LONG (SIZEOF(.TFM_UNPRIV_SCRATCH))
__zero_table_end__ = .;
@@ -339,6 +361,34 @@
Image$$TFM_SP_SECURE_TEST_PARTITION$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST : ALIGN(32)
+ {
+ *ipc_service_test*:*(.text*)
+ *ipc_service_test*:*(.rodata*)
+ *(TFM_SP_IPC_SERVICE_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST);
+ Image$$TFM_SP_IPC_SERVICE_TEST$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST : ALIGN(32)
+ {
+ *ipc_client_test*:*(.text*)
+ *ipc_client_test*:*(.rodata*)
+ *(TFM_SP_IPC_CLIENT_TEST_ATTR_FN)
+ . = ALIGN(32);
+ } > FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$RO$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST);
+ Image$$TFM_SP_IPC_CLIENT_TEST$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST);
+
+#endif /* TFM_PSA_API */
.ARM.extab :
{
@@ -713,6 +763,58 @@
Image$$TFM_SP_SECURE_TEST_PARTITION_STACK$$ZI$$Limit = ADDR(.TFM_SP_SECURE_TEST_PARTITION_STACK) + SIZEOF(.TFM_SP_SECURE_TEST_PARTITION_STACK);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_SERVICE_TEST_DATA : ALIGN(32)
+ {
+ *ipc_service_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_DATA) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_DATA);
+
+ .TFM_SP_IPC_SERVICE_TEST_BSS : ALIGN(32)
+ {
+ *ipc_service_test*:*(.bss*)
+ *ipc_service_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS);
+ Image$$TFM_SP_IPC_SERVICE_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_BSS) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_BSS);
+
+ .TFM_SP_IPC_SERVICE_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK);
+ Image$$TFM_SP_IPC_SERVICE_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_SERVICE_TEST_STACK) + SIZEOF(.TFM_SP_IPC_SERVICE_TEST_STACK);
+
+#endif /* TFM_PSA_API */
+#ifdef TFM_PSA_API
+ .TFM_SP_IPC_CLIENT_TEST_DATA : ALIGN(32)
+ {
+ *ipc_client_test*:*(.data*)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$RW$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_DATA) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_DATA);
+
+ .TFM_SP_IPC_CLIENT_TEST_BSS : ALIGN(32)
+ {
+ *ipc_client_test*:*(.bss*)
+ *ipc_client_test*:*(COMMON)
+ . = ALIGN(32);
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS);
+ Image$$TFM_SP_IPC_CLIENT_TEST_DATA$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_BSS) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_BSS);
+
+ .TFM_SP_IPC_CLIENT_TEST_STACK : ALIGN(128)
+ {
+ . += 0x1000;
+ } > RAM AT> FLASH
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Base = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK);
+ Image$$TFM_SP_IPC_CLIENT_TEST_STACK$$ZI$$Limit = ADDR(.TFM_SP_IPC_CLIENT_TEST_STACK) + SIZEOF(.TFM_SP_IPC_CLIENT_TEST_STACK);
+
+#endif /* TFM_PSA_API */
.TFM_SP_SECURE_TEST_PARTITION_DATA : ALIGN(32)
{
diff --git a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
index ccf5556..1a6b8bb 100644
--- a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
+++ b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
@@ -1,5 +1,5 @@
;/*
-; * Copyright (c) 2009-2018 ARM Limited
+; * Copyright (c) 2009-2019 ARM Limited
; *
; * Licensed under the Apache License, Version 2.0 (the "License");
; * you may not use this file except in compliance with the License.
diff --git a/secure_fw/CMakeLists.txt b/secure_fw/CMakeLists.txt
index 1f99ad1..cd8399d 100644
--- a/secure_fw/CMakeLists.txt
+++ b/secure_fw/CMakeLists.txt
@@ -199,6 +199,12 @@
embedded_set_target_link_defines(TARGET ${EXE_NAME} DEFINES "BL2")
endif()
+ if (NOT DEFINED TFM_PSA_API)
+ message(FATAL_ERROR "Incomplete build configuration: TFM_PSA_API is undefined. ")
+ elseif (TFM_PSA_API)
+ embedded_set_target_link_defines(TARGET ${PROJECT_NAME} DEFINES "TFM_PSA_API")
+ endif()
+
if(CORE_TEST)
set(SECURE_AXF_DIR_PREFIX "${CMAKE_BINARY_DIR}/unit_test/")
set_target_properties(${EXE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SECURE_AXF_DIR_PREFIX})
diff --git a/secure_fw/services/tfm_partition_defs.inc b/secure_fw/services/tfm_partition_defs.inc
index a84c54b..b713839 100644
--- a/secure_fw/services/tfm_partition_defs.inc
+++ b/secure_fw/services/tfm_partition_defs.inc
@@ -36,6 +36,14 @@
#define TFM_SP_SECURE_TEST_PARTITION_ID (TFM_SP_BASE + 8)
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
-#define TFM_MAX_USER_PARTITIONS (9)
+#ifdef TFM_PSA_API
+#define TFM_SP_IPC_SERVICE_TEST_ID (TFM_SP_BASE + 9)
+#endif /* TFM_PSA_API */
+
+#ifdef TFM_PSA_API
+#define TFM_SP_IPC_CLIENT_TEST_ID (TFM_SP_BASE + 10)
+#endif /* TFM_PSA_API */
+
+#define TFM_MAX_USER_PARTITIONS (11)
#endif /* __TFM_PARTITION_DEFS_INC__ */
diff --git a/secure_fw/services/tfm_partition_list.inc b/secure_fw/services/tfm_partition_list.inc
index 57dd18f..f903edd 100644
--- a/secure_fw/services/tfm_partition_list.inc
+++ b/secure_fw/services/tfm_partition_list.inc
@@ -59,4 +59,16 @@
PARTITION_ADD_PERIPHERAL(TFM_SP_SECURE_TEST_PARTITION, TFM_PERIPHERAL_STD_UART);
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+/******** TFM_SP_IPC_SERVICE_TEST ********/
+PARTITION_DECLARE(TFM_SP_IPC_SERVICE_TEST, SPM_PART_FLAG_SECURE);
+PARTITION_ADD_INIT_FUNC(TFM_SP_IPC_SERVICE_TEST, ipc_service_test_main);
+#endif /* TFM_PSA_API */
+
+#ifdef TFM_PSA_API
+/******** TFM_SP_IPC_CLIENT_TEST ********/
+PARTITION_DECLARE(TFM_SP_IPC_CLIENT_TEST, SPM_PART_FLAG_SECURE);
+PARTITION_ADD_INIT_FUNC(TFM_SP_IPC_CLIENT_TEST, ipc_client_init);
+#endif /* TFM_PSA_API */
+
#endif /* __TFM_PARTITION_LIST_INC__ */
diff --git a/secure_fw/services/tfm_sfid_list.inc b/secure_fw/services/tfm_sfid_list.inc
index e224dce..4681697 100644
--- a/secure_fw/services/tfm_sfid_list.inc
+++ b/secure_fw/services/tfm_sfid_list.inc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -79,4 +79,14 @@
{tfm_secure_client_service_sfn_run_tests, TFM_SECURE_CLIENT_SFN_RUN_TESTS_SFID},
#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+#ifdef TFM_PSA_API
+ /******** TFM_SP_IPC_SERVICE_TEST ********/
+ {ipc_service_call, IPC_SERVICE_CALL_SFID},
+#endif /* TFM_PSA_API */
+
+#ifdef TFM_PSA_API
+ /******** TFM_SP_IPC_CLIENT_TEST ********/
+ {False, False},
+#endif /* TFM_PSA_API */
+
#endif /* __TFM_SFID_LIST_INC__ */
diff --git a/secure_fw/services/tfm_sfid_list.inc.template b/secure_fw/services/tfm_sfid_list.inc.template
index 08e5918..7f9bb92 100644
--- a/secure_fw/services/tfm_sfid_list.inc.template
+++ b/secure_fw/services/tfm_sfid_list.inc.template
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
diff --git a/test/test_services/CMakeLists.inc b/test/test_services/CMakeLists.inc
index 85eda32..5ac6602 100644
--- a/test/test_services/CMakeLists.inc
+++ b/test/test_services/CMakeLists.inc
@@ -65,7 +65,8 @@
if (NOT DEFINED CORE_TEST_IPC)
message(FATAL_ERROR "Incomplete build configuration: CORE_TEST_IPC is undefined. ")
elseif (CORE_TEST_IPC)
- list(APPEND ALL_SRC_C_S "${CORE_TEST_DIR}/tfm_ipc_test/ipc_test_service.c"
+ list(APPEND ALL_SRC_C_S "${CORE_TEST_DIR}/tfm_ipc_service/ipc_service_test.c"
+ "${CORE_TEST_DIR}/tfm_ipc_client/ipc_client_test.c"
)
endif()
diff --git a/test/test_services/tfm_ipc_client/ipc_client_test.c b/test/test_services/tfm_ipc_client/ipc_client_test.c
new file mode 100644
index 0000000..6c449eb
--- /dev/null
+++ b/test/test_services/tfm_ipc_client/ipc_client_test.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <stdio.h>
+#include "psa_client.h"
+#include "secure_utilities.h"
+
+/*
+ * FixMe: These SID should come from manifest.
+ * Temporarily adds them here for test.
+ */
+#define IPC_TEST_SERVICE1_SID (01)
+#define IPC_TEST_SERVICE1_MIN_VER (0x0001)
+
+int ipc_client_init(void)
+{
+ psa_handle_t handle;
+ psa_status_t status;
+ char str1[] = "123";
+ char str2[] = "456";
+ char str3[64], str4[64];
+ struct psa_invec invecs[2] = {{str1, sizeof(str1)/sizeof(char)},
+ {str2, sizeof(str2)/sizeof(char)}};
+ struct psa_outvec outvecs[2] = {{str3, sizeof(str3)/sizeof(char)},
+ {str4, sizeof(str4)/sizeof(char)}};
+
+
+ LOG_MSG("hello! this is ipc client test sp!");
+
+ handle = psa_connect(IPC_TEST_SERVICE1_SID, IPC_TEST_SERVICE1_MIN_VER);
+ if (handle > 0) {
+ LOG_MSG("Connect success!");
+ } else {
+ LOG_MSG("The RoT Service has refused the connection!");
+ }
+
+ status = psa_call(handle, invecs, 2, outvecs, 2);
+ if (status >= 0) {
+ LOG_MSG("Call success!");
+ } else {
+ LOG_MSG("Call failed!");
+ }
+
+ psa_close(handle);
+ return 0;
+}
diff --git a/test/test_services/tfm_ipc_client/manifest.yaml b/test/test_services/tfm_ipc_client/manifest.yaml
new file mode 100644
index 0000000..8c8ccdb
--- /dev/null
+++ b/test/test_services/tfm_ipc_client/manifest.yaml
@@ -0,0 +1,26 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+{
+ "name": "IPC_CLIENT",
+ "type": "SECURE",
+ "tfm_partition_name": "TFM_SP_IPC_CLIENT_TEST",
+ "priority": "NORMAL",
+ "id": "0x00000006",
+ "entry_point": "main",
+ "stack_size": "0x1000",
+ "heap_size": "0x0400",
+ "tfm_init_symbol": "ipc_client_init",
+ "source_files": [
+ "ipc_client_test.c",
+ ],
+ "tfm_linker_pattern": {
+ "library_list": [
+ "*ipc_client_test*"
+ ]
+ }
+}
diff --git a/test/test_services/tfm_ipc_test/ipc_test_service.c b/test/test_services/tfm_ipc_service/ipc_service_test.c
similarity index 64%
rename from test/test_services/tfm_ipc_test/ipc_test_service.c
rename to test/test_services/tfm_ipc_service/ipc_service_test.c
index 85ca0fb..279d1b1 100644
--- a/test/test_services/tfm_ipc_test/ipc_test_service.c
+++ b/test/test_services/tfm_ipc_service/ipc_service_test.c
@@ -13,30 +13,11 @@
#include "secure_fw/core/tfm_secure_api.h"
#include "tfm_api.h"
-#define IPC_SERVICE_BUFFER_LEN 256
-#define PSA_IPC_SIGNAL 1
+#define IPC_SERVICE_BUFFER_LEN 64
+#define IPC_BASIC_SIGNAL 1
static int inuse = 0;
-static psa_status_t ipc_service_connect(psa_msg_t *msg)
-{
- uint32_t minor_version;
-
- if (msg->in_size[0] == 0) {
- return PSA_CONNECTION_REFUSED;
- }
-
- psa_read(msg->handle, 0, &minor_version, sizeof(minor_version));
- printf("Requested minor version for service1 connect: %d.\r\n",
- minor_version);
-
- /* notify client if accepted or refused */
- if (minor_version == 0) {
- return PSA_CONNECTION_REFUSED;
- }
- return PSA_SUCCESS;
-}
-
static psa_status_t ipc_service_call(psa_msg_t *msg)
{
int i;
@@ -46,8 +27,6 @@
for (i = 0; i < PSA_MAX_IOVEC; i++) {
if (msg->in_size[i] != 0) {
psa_read(msg->handle, i, rec_buf, IPC_SERVICE_BUFFER_LEN);
- printf("receive buffer index is %d, data is %s.\r\n", i,
- (char *)rec_buf);
}
if (msg->out_size[i] != 0) {
psa_write(msg->handle, i, send_buf, IPC_SERVICE_BUFFER_LEN);
@@ -57,7 +36,7 @@
}
/* Test thread */
-void *ipc_test_partition_main(void *param)
+void ipc_service_test_main(void *param)
{
uint32_t signals = 0;
psa_msg_t msg;
@@ -65,18 +44,15 @@
while (1) {
signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK);
-
- printf("ipc get signals 0x%x\r\n", signals);
-
- if (signals & PSA_IPC_SIGNAL) {
- psa_get(PSA_IPC_SIGNAL, &msg);
+ if (signals & IPC_BASIC_SIGNAL) {
+ psa_get(IPC_BASIC_SIGNAL, &msg);
switch (msg.type) {
case PSA_IPC_CONNECT:
if (inuse) {
r = PSA_CONNECTION_REFUSED;
} else {
inuse = 1;
- r = ipc_service_connect(&msg);
+ r = PSA_SUCCESS;
}
psa_reply(msg.handle, r);
break;
@@ -95,5 +71,5 @@
}
}
- return NULL;
+ return;
}
diff --git a/test/test_services/tfm_ipc_service/manifest.yaml b/test/test_services/tfm_ipc_service/manifest.yaml
new file mode 100644
index 0000000..8594f04
--- /dev/null
+++ b/test/test_services/tfm_ipc_service/manifest.yaml
@@ -0,0 +1,36 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+{
+ "name": "IPC_SERVICE_TEST",
+ "tfm_partition_name": "TFM_SP_IPC_SERVICE_TEST",
+ "type": "SECURE", "IPC",
+ "priority": "NORMAL",
+ "id": "0x00000007",
+ "entry_point": "main",
+ "stack_size": "0x1000",
+ "heap_size": "0x0400",
+ "tfm_init_symbol": "ipc_service_test_main",
+ "secure_functions": [
+ {
+ "sfid": "IPC_SERVICE_CALL_SFID",
+ "signal": "IPC_SERVICE_CALL",
+ "tfm_symbol": "ipc_service_call",
+ "non_secure_clients": true,
+ "minor_version": 1,
+ "minor_policy": "strict"
+ }
+ ],
+ "source_files": [
+ "./ipc_service_test.c",
+ ],
+ "tfm_linker_pattern": {
+ "library_list": [
+ "*ipc_service_test*"
+ ]
+ }
+}
diff --git a/tools/tfm_manifest_list.yaml b/tools/tfm_manifest_list.yaml
index c06a13e..9edbd32 100644
--- a/tools/tfm_manifest_list.yaml
+++ b/tools/tfm_manifest_list.yaml
@@ -86,6 +86,24 @@
"conditional": "TFM_PARTITION_TEST_SECURE_SERVICES",
"version_major": 0,
"version_minor": 1
+ },
+ {
+ "name": "TFM IPC Service Test",
+ "short_name": "TFM_IPC_Service",
+ "manifest": "test/test_services/tfm_ipc_service/manifest.yaml",
+ "tfm_extensions": true,
+ "conditional": "TFM_PSA_API",
+ "version_major": 0,
+ "version_minor": 1
+ },
+ {
+ "name": "TFM IPC Client Service",
+ "short_name": "TFM_IPC_Client",
+ "manifest": "test/test_services/tfm_ipc_client/manifest.yaml",
+ "tfm_extensions": true,
+ "conditional": "TFM_PSA_API",
+ "version_major": 0,
+ "version_minor": 1
}
]
}