FWU: Add Firmware Update partition

Firmware Update(FWU) partition provides the functionality
of updating firmware images. This patch implemented the
partition in Library mode.

Change-Id: I736477549b055c64cd8106ad57c3ad7b1b2007ee
Signed-off-by: Sherry Zhang <sherry.zhang2@arm.com>
diff --git a/secure_fw/spm/ffm/tfm_boot_data.c b/secure_fw/spm/ffm/tfm_boot_data.c
index f05e0e3..b2115f5 100644
--- a/secure_fw/spm/ffm/tfm_boot_data.c
+++ b/secure_fw/spm/ffm/tfm_boot_data.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -68,6 +68,7 @@
  */
 static const struct boot_data_access_policy access_policy_table[] = {
     {TFM_SP_INITIAL_ATTESTATION, TLV_MAJOR_IAS},
+    {TFM_SP_FWU, TLV_MAJOR_FWU},
 };
 
 /*!
diff --git a/secure_fw/spm/include/tfm_boot_status.h b/secure_fw/spm/include/tfm_boot_status.h
index 27ce6cb..597a6fe 100644
--- a/secure_fw/spm/include/tfm_boot_status.h
+++ b/secure_fw/spm/include/tfm_boot_status.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -21,6 +21,7 @@
  */
 #define TLV_MAJOR_CORE     0x0
 #define TLV_MAJOR_IAS      0x1
+#define TLV_MAJOR_FWU      0x2
 
 /**
  * The shared data between boot loader and runtime SW is TLV encoded. The
@@ -149,17 +150,25 @@
 #define GET_MAJOR(tlv_type) ((tlv_type) >> MAJOR_POS)
 #define GET_MINOR(tlv_type) ((tlv_type) &  MINOR_MASK)
 
-/* Initial attestation specific macros */
+/* Initial attenstation and Firmware Update common macros */
 #define MODULE_POS 6               /* 6 bit */
+#define MODULE_MASK 0x3F           /* 6 bit */
 #define CLAIM_MASK 0x3F            /* 6 bit */
+
+/* Initial attestation specific macros */
 #define MEASUREMENT_CLAIM_POS 3    /* 3 bit */
 
 #define GET_IAS_MODULE(tlv_type) (GET_MINOR(tlv_type) >> MODULE_POS)
-#define GET_IAS_CLAIM(tlv_type)  (GET_MINOR(tlv_type)  & CLAIM_MASK)
+#define GET_IAS_CLAIM(tlv_type)  (GET_MINOR(tlv_type) & CLAIM_MASK)
 #define SET_IAS_MINOR(sw_module, claim) (((sw_module) << 6) | (claim))
-
 #define GET_IAS_MEASUREMENT_CLAIM(ias_claim) ((ias_claim) >> \
                                               MEASUREMENT_CLAIM_POS)
+/* Firmware Update specific macros */
+#define SET_FWU_MINOR(sw_module, claim)  \
+                 ((uint16_t)((sw_module & MODULE_MASK) << 6) | \
+                  (uint16_t)(claim & CLAIM_MASK))
+#define GET_FWU_CLAIM(tlv_type)  ((uint16_t)GET_MINOR(tlv_type) & CLAIM_MASK)
+#define GET_FWU_MODULE(tlv_type)  ((uint16_t)GET_MINOR(tlv_type) >> MODULE_POS)
 
 /* Magic value which marks the beginning of shared data area in memory */
 #define SHARED_DATA_TLV_INFO_MAGIC    0x2016