Core: Add lifecycle API

Add the lifecycle related macros and APIs and only return
PSA_LIFECYCLE_UNKNOWN to the caller. It will be implemented in the
future.

Change-Id: Ia3e327f88c559ac6611ddabf2fb9e8c5150619eb
Signed-off-by: Shawn Shan <shawn.shan@arm.com>
diff --git a/interface/include/psa/lifecycle.h b/interface/include/psa/lifecycle.h
new file mode 100644
index 0000000..a892c49
--- /dev/null
+++ b/interface/include/psa/lifecycle.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __PSA_LIFECYCLE_H__
+#define __PSA_LIFECYCLE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PSA_LIFECYCLE_PSA_STATE_MASK            (0xff00u)
+#define PSA_LIFECYCLE_IMP_STATE_MASK            (0x00ffu)
+#define PSA_LIFECYCLE_UNKNOWN                   (0x0000u)
+#define PSA_LIFECYCLE_ASSEMBLY_AND_TEST         (0x1000u)
+#define PSA_LIFECYCLE_PSA_ROT_PROVISIONING      (0x2000u)
+#define PSA_LIFECYCLE_SECURED                   (0x3000u)
+#define PSA_LIFECYCLE_NON_PSA_ROT_DEBUG         (0x4000u)
+#define PSA_LIFECYCLE_RECOVERABLE_PSA_ROT_DEBUG (0x5000u)
+#define PSA_LIFECYCLE_DECOMMISSIONED            (0x6000u)
+
+/*
+ * \brief This function retrieves the current PSA RoT lifecycle state.
+ *
+ * \return state                The current security lifecycle state of the PSA
+ *                              RoT. The PSA state and implementation state are
+ *                              encoded as follows:
+ * \arg                           state[15:8] – PSA lifecycle state
+ * \arg                           state[7:0] – IMPLEMENTATION DEFINED state
+ */
+uint32_t psa_rot_lifecycle_state(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PSA_LIFECYCLE_H__ */
diff --git a/interface/src/psa/psa_lifecycle.c b/interface/src/psa/psa_lifecycle.c
new file mode 100644
index 0000000..928a000
--- /dev/null
+++ b/interface/src/psa/psa_lifecycle.c
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+#include <inttypes.h>
+#include "psa/lifecycle.h"
+#include "core/tfm_core_svc.h"
+
+__attribute__((naked))
+uint32_t psa_rot_lifecycle_state(void)
+{
+    __ASM volatile("SVC %0           \n"
+                   "BX LR            \n"
+                   : : "I" (TFM_SVC_PSA_LIFECYCLE));
+}