@@ -17,7 +17,7 @@
#elif defined(CONFIG_FSL_LSCH2)
#include <asm/arch/immap_lsch2.h>
#endif
-#include <asm/arch/ppa.h>
+#include <asm/armv8/sec_firmware.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -161,6 +161,31 @@ static int ppa_copy_image(const char *title,
return 0;
}
+int sec_firmware_validate(void)
+{
+ void *ppa_addr;
+
+#ifdef CONFIG_SYS_LS_PPA_FW_IN_NOR
+ ppa_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
+#else
+#error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
+#endif
+
+ return ppa_firmware_validate(ppa_addr);
+}
+
+#ifdef CONFIG_ARMV8_PSCI
+unsigned int sec_firmware_support_psci_version(void)
+{
+ unsigned int psci_ver = 0;
+
+ if (!sec_firmware_validate())
+ psci_ver = ppa_support_psci_version();
+
+ return psci_ver;
+}
+#endif
+
int ppa_init_pre(u64 *entry)
{
u64 ppa_ram_addr;
@@ -40,3 +40,14 @@ ENTRY(ppa_init)
mov x0, #0
ret
ENDPROC(ppa_init)
+
+#ifdef CONFIG_ARMV8_PSCI
+ENTRY(ppa_support_psci_version)
+ mov x0, 0x84000000
+ mov x1, 0x0
+ mov x2, 0x0
+ mov x3, 0x0
+ smc #0
+ ret
+ENDPROC(ppa_support_psci_version)
+#endif
@@ -11,5 +11,6 @@ int ppa_init_pre(u64 *);
int ppa_init_entry(void *);
int ppa_init(void *, u32*, u32*);
unsigned long ppa_get_dram_block_size(void);
+unsigned int ppa_support_psci_version(void);
#endif
new file mode 100644
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __SEC_FIRMWARE_H_
+#define __SEC_FIRMWARE_H_
+
+#ifdef CONFIG_FSL_LS_PPA
+#include <asm/arch/ppa.h>
+#endif
+
+#ifdef CONFIG_ARMV8_PSCI
+unsigned int sec_firmware_support_psci_version(void);
+#endif
+int sec_firmware_validate(void);
+
+#endif /* __SEC_FIRMWARE_H_ */