Commit 2512d048 authored by Madhukar Pappireddy's avatar Madhukar Pappireddy Committed by TrustedFirmware Code Review
Browse files

Merge "feat(plat/imx8m): add SiP call for secondary boot" into integration

parents 203d48ad 9ce232fe
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <common/runtime_svc.h> #include <common/runtime_svc.h>
#include <imx_sip_svc.h> #include <imx_sip_svc.h>
#include <lib/el3_runtime/context_mgmt.h> #include <lib/el3_runtime/context_mgmt.h>
#include <lib/mmio.h>
#include <sci/sci.h> #include <sci/sci.h>
#if defined(PLAT_imx8qm) || defined(PLAT_imx8qx) #if defined(PLAT_imx8qm) || defined(PLAT_imx8qx)
...@@ -145,6 +146,37 @@ int imx_misc_set_temp_handler(uint32_t smc_fid, ...@@ -145,6 +146,37 @@ int imx_misc_set_temp_handler(uint32_t smc_fid,
#endif /* defined(PLAT_imx8qm) || defined(PLAT_imx8qx) */ #endif /* defined(PLAT_imx8qm) || defined(PLAT_imx8qx) */
#if defined(PLAT_imx8mm) || defined(PLAT_imx8mq)
int imx_src_handler(uint32_t smc_fid,
u_register_t x1,
u_register_t x2,
u_register_t x3,
void *handle)
{
uint32_t val;
switch (x1) {
case IMX_SIP_SRC_SET_SECONDARY_BOOT:
if (x2 != 0U) {
mmio_setbits_32(IMX_SRC_BASE + SRC_GPR10_OFFSET,
SRC_GPR10_PERSIST_SECONDARY_BOOT);
} else {
mmio_clrbits_32(IMX_SRC_BASE + SRC_GPR10_OFFSET,
SRC_GPR10_PERSIST_SECONDARY_BOOT);
}
break;
case IMX_SIP_SRC_IS_SECONDARY_BOOT:
val = mmio_read_32(IMX_SRC_BASE + SRC_GPR10_OFFSET);
return !!(val & SRC_GPR10_PERSIST_SECONDARY_BOOT);
default:
return SMC_UNK;
};
return 0;
}
#endif /* defined(PLAT_imx8mm) || defined(PLAT_imx8mq) */
static uint64_t imx_get_commit_hash(u_register_t x2, static uint64_t imx_get_commit_hash(u_register_t x2,
u_register_t x3, u_register_t x3,
u_register_t x4) u_register_t x4)
......
...@@ -47,6 +47,11 @@ static uintptr_t imx_sip_handler(unsigned int smc_fid, ...@@ -47,6 +47,11 @@ static uintptr_t imx_sip_handler(unsigned int smc_fid,
return imx_otp_handler(smc_fid, handle, x1, x2); return imx_otp_handler(smc_fid, handle, x1, x2);
case IMX_SIP_MISC_SET_TEMP: case IMX_SIP_MISC_SET_TEMP:
SMC_RET1(handle, imx_misc_set_temp_handler(smc_fid, x1, x2, x3, x4)); SMC_RET1(handle, imx_misc_set_temp_handler(smc_fid, x1, x2, x3, x4));
#endif
#if defined(PLAT_imx8mm) || defined(PLAT_imx8mq)
case IMX_SIP_SRC:
SMC_RET1(handle, imx_src_handler(smc_fid, x1, x2, x3, handle));
break;
#endif #endif
case IMX_SIP_BUILDINFO: case IMX_SIP_BUILDINFO:
SMC_RET1(handle, imx_buildinfo_handler(smc_fid, x1, x2, x3, x4)); SMC_RET1(handle, imx_buildinfo_handler(smc_fid, x1, x2, x3, x4));
......
...@@ -17,6 +17,10 @@ ...@@ -17,6 +17,10 @@
#define IMX_SIP_BUILDINFO 0xC2000003 #define IMX_SIP_BUILDINFO 0xC2000003
#define IMX_SIP_BUILDINFO_GET_COMMITHASH 0x00 #define IMX_SIP_BUILDINFO_GET_COMMITHASH 0x00
#define IMX_SIP_SRC 0xC2000005
#define IMX_SIP_SRC_SET_SECONDARY_BOOT 0x10
#define IMX_SIP_SRC_IS_SECONDARY_BOOT 0x11
#define IMX_SIP_GET_SOC_INFO 0xC2000006 #define IMX_SIP_GET_SOC_INFO 0xC2000006
#define IMX_SIP_WAKEUP_SRC 0xC2000009 #define IMX_SIP_WAKEUP_SRC 0xC2000009
...@@ -38,6 +42,11 @@ int imx_soc_info_handler(uint32_t smc_fid, u_register_t x1, ...@@ -38,6 +42,11 @@ int imx_soc_info_handler(uint32_t smc_fid, u_register_t x1,
u_register_t x2, u_register_t x3); u_register_t x2, u_register_t x3);
#endif #endif
#if defined(PLAT_imx8mm) || defined(PLAT_imx8mq)
int imx_src_handler(uint32_t smc_fid, u_register_t x1,
u_register_t x2, u_register_t x3, void *handle);
#endif
#if (defined(PLAT_imx8qm) || defined(PLAT_imx8qx)) #if (defined(PLAT_imx8qm) || defined(PLAT_imx8qx))
int imx_cpufreq_handler(uint32_t smc_fid, u_register_t x1, int imx_cpufreq_handler(uint32_t smc_fid, u_register_t x1,
u_register_t x2, u_register_t x3); u_register_t x2, u_register_t x3);
......
...@@ -124,6 +124,8 @@ ...@@ -124,6 +124,8 @@
#define SRC_OTG1PHY_SCR U(0x20) #define SRC_OTG1PHY_SCR U(0x20)
#define SRC_OTG2PHY_SCR U(0x24) #define SRC_OTG2PHY_SCR U(0x24)
#define SRC_GPR1_OFFSET U(0x74) #define SRC_GPR1_OFFSET U(0x74)
#define SRC_GPR10_OFFSET U(0x98)
#define SRC_GPR10_PERSIST_SECONDARY_BOOT BIT(30)
#define SNVS_LPCR U(0x38) #define SNVS_LPCR U(0x38)
#define SNVS_LPCR_SRTC_ENV BIT(0) #define SNVS_LPCR_SRTC_ENV BIT(0)
......
...@@ -103,6 +103,8 @@ ...@@ -103,6 +103,8 @@
#define SRC_OTG1PHY_SCR U(0x20) #define SRC_OTG1PHY_SCR U(0x20)
#define SRC_OTG2PHY_SCR U(0x24) #define SRC_OTG2PHY_SCR U(0x24)
#define SRC_GPR1_OFFSET U(0x74) #define SRC_GPR1_OFFSET U(0x74)
#define SRC_GPR10_OFFSET U(0x98)
#define SRC_GPR10_PERSIST_SECONDARY_BOOT BIT(30)
#define SNVS_LPCR U(0x38) #define SNVS_LPCR U(0x38)
#define SNVS_LPCR_SRTC_ENV BIT(0) #define SNVS_LPCR_SRTC_ENV BIT(0)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment