SPM: Enable FP usage in NSPE for gnu arm embedded toolchain

1. Enable FP usage in SPE and NSPE by same parameter: CONFIG_TFM_FP
   (soft and hard ABI types) for IPC model.
   It doesn't support LIBRARY or SFN model at current stage.
2. Enable lazy stacking by CONFIG_TFM_LAZY_STACKING (OFF, ON).

Note: Same FP ABI type shall be used for SPE and NSPE at the same
      time, for FP design in Armv8.0-M architecture requires consistent
      FP ABI types between SPE and NSPE.

Signed-off-by: Feder Liang <Feder.Liang@arm.com>
Change-Id: I186d55d0a9d47b8d49693c919a6fcd1e061dc36d
diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt
index 126e69d..c39585e 100755
--- a/platform/CMakeLists.txt
+++ b/platform/CMakeLists.txt
@@ -83,8 +83,10 @@
         TFM_SPM_LOG_LEVEL=${TFM_SPM_LOG_LEVEL}
         $<$<BOOL:${TFM_SPM_LOG_RAW_ENABLED}>:TFM_SPM_LOG_RAW_ENABLED>
         $<$<BOOL:${OTP_NV_COUNTERS_RAM_EMULATION}>:OTP_NV_COUNTERS_RAM_EMULATION>
-        CONFIG_TFM_SPE_FP=${CONFIG_TFM_SPE_FP}
-        $<$<BOOL:${CONFIG_TFM_LAZY_STACKING_SPE}>:CONFIG_TFM_LAZY_STACKING_SPE>
+        # CONFIG_TFM_FP
+        $<$<STREQUAL:${CONFIG_TFM_FP},hard>:CONFIG_TFM_FP=2>
+        $<$<STREQUAL:${CONFIG_TFM_FP},soft>:CONFIG_TFM_FP=0>
+        $<$<BOOL:${CONFIG_TFM_LAZY_STACKING}>:CONFIG_TFM_LAZY_STACKING>
     PRIVATE
         $<$<BOOL:${SYMMETRIC_INITIAL_ATTESTATION}>:SYMMETRIC_INITIAL_ATTESTATION>
         $<$<OR:$<VERSION_GREATER:${TFM_ISOLATION_LEVEL},1>,$<STREQUAL:"${TEST_PSA_API}","IPC">>:CONFIG_TFM_ENABLE_MEMORY_PROTECT>
@@ -118,10 +120,19 @@
 )
 
 target_compile_definitions(platform_ns
+    PUBLIC
+        # CONFIG_TFM_FP
+        $<$<STREQUAL:${CONFIG_TFM_FP},hard>:CONFIG_TFM_FP=2>
+        $<$<STREQUAL:${CONFIG_TFM_FP},soft>:CONFIG_TFM_FP=0>
     PRIVATE
         $<$<BOOL:${TEST_NS_SLIH_IRQ}>:TEST_NS_SLIH_IRQ>
 )
 
+target_compile_options(platform_ns
+    PUBLIC
+        ${COMPILER_CP_FLAG}
+)
+
 #========================= Platform BL2 =======================================#
 if(BL2)
     #TODO import policy
diff --git a/platform/ext/target/arm/musca_s1/CMakeLists.txt b/platform/ext/target/arm/musca_s1/CMakeLists.txt
index dde378e..4602e9e 100644
--- a/platform/ext/target/arm/musca_s1/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_s1/CMakeLists.txt
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
+# Copyright (c) 2020-2022, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -44,7 +44,16 @@
     )
     target_link_libraries(CMSIS_5_tfm_ns
         INTERFACE
-            CMSIS_5_RTX_V8MMN
+            $<$<STREQUAL:${CONFIG_TFM_FP},hard>:CMSIS_5_RTX_V8MMFN>
+            $<$<STREQUAL:${CONFIG_TFM_FP},soft>:CMSIS_5_RTX_V8MMN>
+    )
+    target_compile_options(tfm_ns
+        PUBLIC
+            ${COMPILER_CP_FLAG}
+    )
+    target_link_options(tfm_ns
+        PUBLIC
+            ${LINKER_CP_OPTION}
     )
 endif()
 
diff --git a/platform/include/tfm_plat_ns.h b/platform/include/tfm_plat_ns.h
index 3b689b4..1e35894 100644
--- a/platform/include/tfm_plat_ns.h
+++ b/platform/include/tfm_plat_ns.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -16,4 +16,11 @@
 
 int32_t tfm_ns_platform_init(void);
 
+/**
+ * \brief Coprocessor initialization.
+ *
+ * \return  ARM_DRIVER_OK if the initialization succeeds
+*/
+int32_t tfm_ns_cp_init(void);
+
 #endif /* __TFM_PLAT_NS_H__ */