feat(imx8ulp): add the initial XRDC support
Add the initial xRDC support on i.MX8ULP.
Signed-off-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Change-Id: I93ea8e2cebb049e6f20e71cfe50c7583a3228f38
diff --git a/plat/imx/common/imx_sip_handler.c b/plat/imx/common/imx_sip_handler.c
index f830b64..5d29186 100644
--- a/plat/imx/common/imx_sip_handler.c
+++ b/plat/imx/common/imx_sip_handler.c
@@ -332,3 +332,16 @@
return 0;
}
+
+#if defined(PLAT_imx8ulp)
+int imx_hifi_xrdc(uint32_t smc_fid)
+{
+ mmio_setbits_32(IMX_SIM2_BASE + 0x8, BIT_32(19) | BIT_32(17) | BIT_32(18));
+ mmio_clrbits_32(IMX_SIM2_BASE + 0x8, BIT_32(16));
+
+ extern int xrdc_apply_hifi_config(void);
+ xrdc_apply_hifi_config();
+
+ return 0;
+}
+#endif
diff --git a/plat/imx/common/imx_sip_svc.c b/plat/imx/common/imx_sip_svc.c
index 42d400e..b6b8ff8 100644
--- a/plat/imx/common/imx_sip_svc.c
+++ b/plat/imx/common/imx_sip_svc.c
@@ -37,6 +37,9 @@
scmi_smt_fastcall_smc_entry(0);
SMC_RET1(handle, 0);
break;
+ case IMX_SIP_HIFI_XRDC:
+ SMC_RET1(handle, imx_hifi_xrdc(smc_fid));
+ break;
#endif
#if defined(PLAT_imx8mq)
case IMX_SIP_GET_SOC_INFO:
diff --git a/plat/imx/common/include/imx_sip_svc.h b/plat/imx/common/include/imx_sip_svc.h
index 5bea0d1..86523da 100644
--- a/plat/imx/common/include/imx_sip_svc.h
+++ b/plat/imx/common/include/imx_sip_svc.h
@@ -55,6 +55,8 @@
#define IMX_SIP_SCMI 0xC20000FE
+#define IMX_SIP_HIFI_XRDC 0xC200000E
+
#if defined(PLAT_imx8mq)
int imx_soc_info_handler(uint32_t smc_fid, u_register_t x1,
u_register_t x2, u_register_t x3);
@@ -100,5 +102,6 @@
u_register_t x2, u_register_t x3,
u_register_t x4);
int scmi_handler(uint32_t smc_fid, u_register_t x1, u_register_t x2, u_register_t x3);
+int imx_hifi_xrdc(uint32_t smc_fid);
#endif /* __IMX_SIP_SVC_H__ */