mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00
Merge "feat(plat/imx8m): add SiP call for secondary boot" into integration
This commit is contained in:
commit
2512d0480f
5 changed files with 50 additions and 0 deletions
|
@ -14,6 +14,7 @@
|
|||
#include <common/runtime_svc.h>
|
||||
#include <imx_sip_svc.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/mmio.h>
|
||||
#include <sci/sci.h>
|
||||
|
||||
#if defined(PLAT_imx8qm) || defined(PLAT_imx8qx)
|
||||
|
@ -145,6 +146,37 @@ int imx_misc_set_temp_handler(uint32_t smc_fid,
|
|||
|
||||
#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,
|
||||
u_register_t x3,
|
||||
u_register_t x4)
|
||||
|
|
|
@ -47,6 +47,11 @@ static uintptr_t imx_sip_handler(unsigned int smc_fid,
|
|||
return imx_otp_handler(smc_fid, handle, x1, x2);
|
||||
case IMX_SIP_MISC_SET_TEMP:
|
||||
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
|
||||
case IMX_SIP_BUILDINFO:
|
||||
SMC_RET1(handle, imx_buildinfo_handler(smc_fid, x1, x2, x3, x4));
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
#define IMX_SIP_BUILDINFO 0xC2000003
|
||||
#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_WAKEUP_SRC 0xC2000009
|
||||
|
@ -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);
|
||||
#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))
|
||||
int imx_cpufreq_handler(uint32_t smc_fid, u_register_t x1,
|
||||
u_register_t x2, u_register_t x3);
|
||||
|
|
|
@ -124,6 +124,8 @@
|
|||
#define SRC_OTG1PHY_SCR U(0x20)
|
||||
#define SRC_OTG2PHY_SCR U(0x24)
|
||||
#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_SRTC_ENV BIT(0)
|
||||
|
|
|
@ -103,6 +103,8 @@
|
|||
#define SRC_OTG1PHY_SCR U(0x20)
|
||||
#define SRC_OTG2PHY_SCR U(0x24)
|
||||
#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_SRTC_ENV BIT(0)
|
||||
|
|
Loading…
Add table
Reference in a new issue