summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/cpu_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx/cpu_init.c')
-rw-r--r--arch/arm/mach-imx/cpu_init.c51
1 files changed, 47 insertions, 4 deletions
diff --git a/arch/arm/mach-imx/cpu_init.c b/arch/arm/mach-imx/cpu_init.c
index ea36215419..c5a47d9b91 100644
--- a/arch/arm/mach-imx/cpu_init.c
+++ b/arch/arm/mach-imx/cpu_init.c
@@ -6,10 +6,12 @@
#include <asm/errata.h>
#include <linux/types.h>
#include <linux/bitops.h>
-#include <mach/generic.h>
-#include <mach/imx7-regs.h>
-#include <mach/imx8mq-regs.h>
-#include <mach/imx8m-ccm-regs.h>
+#include <mach/imx/generic.h>
+#include <mach/imx/imx7-regs.h>
+#include <mach/imx/imx8mq-regs.h>
+#include <mach/imx/imx8m-ccm-regs.h>
+#include <mach/imx/imx9-regs.h>
+#include <mach/imx/trdc.h>
#include <io.h>
#include <asm/syscounter.h>
#include <asm/system.h>
@@ -49,6 +51,7 @@ void imx6ul_cpu_lowlevel_init(void)
void imx7_cpu_lowlevel_init(void)
{
+ cortex_a7_lowlevel_init();
arm_cpu_lowlevel_init();
imx_cpu_timer_init(IOMEM(MX7_SYSCNT_CTRL_BASE_ADDR));
}
@@ -84,4 +87,44 @@ void imx8mq_cpu_lowlevel_init(void)
{
imx8m_cpu_lowlevel_init();
}
+
+#define CCM_AUTHEN_TZ_NS BIT(9)
+
+#define OSCPLLa_AUTHEN(n) (0x5030 + (n) * 0x40) /* 0..18 */
+#define CLOCK_ROOT_AUTHEN(n) (0x30 + (n) * 0x80) /* 0..94 */
+#define LPCGa_AUTHEN(n) (0x8030 + (n) * 0x40) /* 0..126 */
+#define GPR_SHARED0_AUTHEN(n) (0x4810 + (n) * 0x10) /* 0..3 */
+#define SET 4
+
+#define SRC_SP_ISO_CTRL 0x10c
+
+void imx93_cpu_lowlevel_init(void)
+{
+ void __iomem *ccm = IOMEM(MX9_CCM_BASE_ADDR);
+ void __iomem *src = IOMEM(MX9_SRC_BASE_ADDR);
+ int i;
+
+ arm_cpu_lowlevel_init();
+
+ if (current_el() != 3)
+ return;
+
+ imx9_trdc_init();
+
+ imx_cpu_timer_init(IOMEM(MX9_SYSCNT_CTRL_BASE_ADDR));
+
+ for (i = 0; i <= 18; i++)
+ writel(CCM_AUTHEN_TZ_NS, ccm + OSCPLLa_AUTHEN(i) + SET);
+ for (i = 0; i <= 94; i++)
+ writel(CCM_AUTHEN_TZ_NS, ccm + CLOCK_ROOT_AUTHEN(i) + SET);
+ for (i = 0; i <= 126 ; i++)
+ writel(CCM_AUTHEN_TZ_NS, ccm + LPCGa_AUTHEN(i) + SET);
+ for (i = 0; i <= 3 ; i++)
+ writel(CCM_AUTHEN_TZ_NS, ccm + GPR_SHARED0_AUTHEN(i) + SET);
+
+ /* clear isolation for usbphy, dsi, csi*/
+ writel(0x0, src + SRC_SP_ISO_CTRL);
+
+}
+
#endif