diff --git a/include/lib/psci/psci.h b/include/lib/psci/psci.h
index b56e98b..da2efcc 100644
--- a/include/lib/psci/psci.h
+++ b/include/lib/psci/psci.h
@@ -196,17 +196,6 @@
 }
 
 /*
- * These are the states reported by the PSCI_AFFINITY_INFO API for the specified
- * CPU. The definitions of these states can be found in Section 5.7.1 in the
- * PSCI specification (ARM DEN 0022C).
- */
-typedef enum {
-	AFF_STATE_ON = U(0),
-	AFF_STATE_OFF = U(1),
-	AFF_STATE_ON_PENDING = U(2)
-} aff_info_state_t;
-
-/*
  * These are the power states reported by PSCI_NODE_HW_STATE API for the
  * specified CPU. The definitions of these states can be found in Section 5.15.3
  * of PSCI specification (ARM DEN 0022C).
diff --git a/include/lib/psci/psci_lib.h b/include/lib/psci/psci_lib.h
index 1ac45ad..d135a51 100644
--- a/include/lib/psci/psci_lib.h
+++ b/include/lib/psci/psci_lib.h
@@ -38,6 +38,17 @@
  */
 typedef void (*mailbox_entrypoint_t)(void);
 
+/*
+ * These are the states reported by the PSCI_AFFINITY_INFO API for the specified
+ * CPU. The definitions of these states can be found in Section 5.7.1 in the
+ * PSCI specification (ARM DEN 0022C).  Available for psci_lib clients.
+ */
+typedef enum {
+	AFF_STATE_ON = U(0),
+	AFF_STATE_OFF = U(1),
+	AFF_STATE_ON_PENDING = U(2)
+} aff_info_state_t;
+
 /******************************************************************************
  * Structure to pass PSCI Library arguments.
  *****************************************************************************/
@@ -91,6 +102,8 @@
 			  entry_point_info_t *next_image_info);
 int psci_stop_other_cores(unsigned int wait_ms,
 			  void (*stop_func)(u_register_t mpidr));
+unsigned int psci_is_last_on_core_safe(void);
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* PSCI_LIB_H */
diff --git a/include/lib/tpm/tpm.h b/include/lib/tpm/tpm.h
new file mode 100644
index 0000000..ac17c0b
--- /dev/null
+++ b/include/lib/tpm/tpm.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2021 Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ *
+ */
+#ifndef TPM_H
+#define TPM_H
+
+#include <lib/utils_def.h>
+
+/*
+ * TPM_ALG_ID constants.
+ * Ref. Table 9 - Definition of (UINT16) TPM_ALG_ID Constants
+ * Trusted Platform Module Library. Part 2: Structures,
+ * Family "2.0", Level 00 Revision 01.38, September 29 2016.
+ */
+enum tpm_hash_alg {
+	TPM_ALG_NONE   = 0x0,
+	TPM_ALG_SHA256 = 0x000B,
+	TPM_ALG_SHA384 = 0x000C,
+	TPM_ALG_SHA512 = 0x000D,
+};
+static inline bool tpm_alg_is_valid(enum tpm_hash_alg alg)
+{
+	switch (alg) {
+	case TPM_ALG_SHA256:
+	case TPM_ALG_SHA384:
+	case TPM_ALG_SHA512:
+		return true;
+
+	default:
+		return false;
+	}
+}
+
+enum tpm_hash_alg_dsize {
+	TPM_ALG_SHA256_DSIZE = 32,
+	TPM_ALG_SHA384_DSIZE = 48,
+	TPM_ALG_SHA512_DSIZE = 64,
+
+	TPM_ALG_MAX_DSIZE = TPM_ALG_SHA512_DSIZE
+};
+static inline size_t tpm_alg_dsize(enum tpm_hash_alg alg)
+{
+	switch (alg) {
+	case TPM_ALG_SHA256:
+		return TPM_ALG_SHA256_DSIZE;
+
+	case TPM_ALG_SHA384:
+		return TPM_ALG_SHA384_DSIZE;
+
+	case TPM_ALG_SHA512:
+		return TPM_ALG_SHA512_DSIZE;
+
+	default:
+		return 0;
+	}
+}
+
+enum tpm_pcr_idx {
+	/*
+	 * SRTM, BIOS, Host Platform Extensions, Embedded
+	 * Option ROMs and PI Drivers
+	 */
+	TPM_PCR_0 = 0,
+	/* Host Platform Configuration */
+	TPM_PCR_1,
+	/* UEFI driver and application Code */
+	TPM_PCR_2,
+	/* UEFI driver and application Configuration and Data */
+	TPM_PCR_3,
+	/* UEFI Boot Manager Code (usually the MBR) and Boot Attempts */
+	TPM_PCR_4,
+	/*
+	 * Boot Manager Code Configuration and Data (for use
+	 * by the Boot Manager Code) and GPT/Partition Table
+	 */
+	TPM_PCR_5,
+	/* Host Platform Manufacturer Specific */
+	TPM_PCR_6,
+	/* Secure Boot Policy */
+	TPM_PCR_7,
+	/* 8-15: Defined for use by the Static OS */
+	TPM_PCR_8,
+	/* Debug */
+	TPM_PCR_16 = 16,
+
+	/* DRTM (1) */
+	TPM_PCR_17 = 17,
+	/* DRTM (2) */
+	TPM_PCR_18 = 18,
+};
+static bool inline tpm_pcr_idx_is_valid(enum tpm_pcr_idx pcr_idx)
+{
+	switch (pcr_idx) {
+	case TPM_PCR_0:
+	case TPM_PCR_1:
+	case TPM_PCR_2:
+	case TPM_PCR_3:
+	case TPM_PCR_4:
+	case TPM_PCR_5:
+	case TPM_PCR_6:
+	case TPM_PCR_7:
+	case TPM_PCR_8:
+	case TPM_PCR_16:
+	case TPM_PCR_17:
+	case TPM_PCR_18:
+		return true;
+
+	default:
+		return false;
+	}
+}
+
+#endif /* TPM_H */
diff --git a/include/lib/tpm/tpm_log.h b/include/lib/tpm/tpm_log.h
new file mode 100644
index 0000000..a9f8d3b
--- /dev/null
+++ b/include/lib/tpm/tpm_log.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2021 Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier:    BSD-3-Clause
+ *
+ */
+#ifndef TPM_LOG_H
+#define TPM_LOG_H
+
+#include <stddef.h>
+
+#include <lib/tpm/tpm.h>
+#include <export/lib/utils_def_exp.h>
+
+/*
+ * Event types
+ * Ref. Table 9 Events
+ * TCG PC Client Platform Firmware Profile Specification,
+ * Family "2.0", Level 00 Revision 1.04, June 3 2019.
+ */
+#define TPM_LOG_EV_PREBOOT_CERT				U(0x00000000)
+#define TPM_LOG_EV_POST_CODE				U(0x00000001)
+#define TPM_LOG_EV_UNUSED				U(0x00000002)
+#define TPM_LOG_EV_NO_ACTION				U(0x00000003)
+#define TPM_LOG_EV_SEPARATOR				U(0x00000004)
+#define TPM_LOG_EV_ACTION				U(0x00000005)
+#define TPM_LOG_EV_EVENT_TAG				U(0x00000006)
+#define TPM_LOG_EV_S_CRTM_CONTENTS			U(0x00000007)
+#define TPM_LOG_EV_S_CRTM_VERSION			U(0x00000008)
+#define TPM_LOG_EV_CPU_MICROCODE			U(0x00000009)
+#define TPM_LOG_EV_PLATFORM_CONFIG_FLAGS		U(0x0000000A)
+#define TPM_LOG_EV_TABLE_OF_DEVICES			U(0x0000000B)
+#define TPM_LOG_EV_COMPACT_HASH				U(0x0000000C)
+#define TPM_LOG_EV_IPL					U(0x0000000D)
+#define TPM_LOG_EV_IPL_PARTITION_DATA			U(0x0000000E)
+#define TPM_LOG_EV_NONHOST_CODE				U(0x0000000F)
+#define TPM_LOG_EV_NONHOST_CONFIG			U(0x00000010)
+#define TPM_LOG_EV_NONHOST_INFO				U(0x00000011)
+#define TPM_LOG_EV_OMIT_BOOT_DEVICE_EVENTS		U(0x00000012)
+#define TPM_LOG_EV_EFI_EVENT_BASE			U(0x80000000)
+#define TPM_LOG_EV_EFI_VARIABLE_DRIVER_CONFIG		U(0x80000001)
+#define TPM_LOG_EV_EFI_VARIABLE_BOOT			U(0x80000002)
+#define TPM_LOG_EV_EFI_BOOT_SERVICES_APPLICATION	U(0x80000003)
+#define TPM_LOG_EV_EFI_BOOT_SERVICES_DRIVER		U(0x80000004)
+#define TPM_LOG_EV_EFI_RUNTIME_SERVICES_DRIVER		U(0x80000005)
+#define TPM_LOG_EV_EFI_GPT_EVENT			U(0x80000006)
+#define TPM_LOG_EV_EFI_ACTION				U(0x80000007)
+#define TPM_LOG_EV_EFI_PLATFORM_FIRMWARE_BLOB		U(0x80000008)
+#define TPM_LOG_EV_EFI_HANDOFF_TABLES			U(0x80000009)
+#define TPM_LOG_EV_EFI_HCRTM_EVENT			U(0x80000010)
+#define TPM_LOG_EV_EFI_VARIABLE_AUTHORITY		U(0x800000E0)
+
+
+struct tpm_log_digest {
+	enum tpm_hash_alg h_alg;
+	size_t buf_bytes;
+	char buf[];
+};
+
+struct tpm_log_digests {
+	size_t count;
+	struct tpm_log_digest d[];
+};
+
+struct tpm_log_info {
+	char *buf;
+	size_t buf_bytes;
+
+	/* Running cursor, into the buffer. */
+	char *cursor;
+
+	/* */
+	char *startup_locality_event_data;
+};
+/* Opaque / encapsulated type */
+typedef struct tpm_log_info tpm_log_info_t;
+
+
+int tpm_log_init(uint32_t *const tpm_log_buf, size_t tpm_log_buf_bytes,
+                 enum tpm_hash_alg alg[], size_t num_algs,
+                 tpm_log_info_t *log_info_out);
+int tpm_log_add_event(tpm_log_info_t *tpm_log_info,
+                      uint32_t event_type, enum tpm_pcr_idx pcr,
+                      struct tpm_log_digests *digests,
+                      const unsigned char *event_data, size_t event_data_bytes);
+void tpm_log_serialise(char *dst, const tpm_log_info_t *tpm_log,
+                       size_t *tpm_log_size_out);
+
+
+#endif /* TPM_LOG_H */
diff --git a/include/lib/utils.h b/include/lib/utils.h
index 17ee9369..cd402c1 100644
--- a/include/lib/utils.h
+++ b/include/lib/utils.h
@@ -21,6 +21,11 @@
 	size_t nbytes;
 } mem_region_t;
 
+typedef struct p_mem_region {
+	unsigned long long base;
+	unsigned long long nbytes;
+} p_mem_region_t;
+
 /*
  * zero_normalmem all the regions defined in tbl.
  */
