mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-25 14:25:44 +00:00

Add the basic boot support for i.MX93. Signed-off-by: Jacky Bai <ping.bai@nxp.com> Change-Id: I48bac2fd8bf2145133edf101a315908266c3f50a
63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
/*
|
|
* Copyright 2023 NXP
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
#include <stdbool.h>
|
|
|
|
#include <platform_def.h>
|
|
#include <pwr_ctrl.h>
|
|
|
|
/*Do the necessary GPC, SRC, BLK_CTRL_S init */
|
|
void pwr_sys_init(void)
|
|
{
|
|
unsigned int cpu;
|
|
|
|
/*
|
|
* Assigned A55 cluster to 3, m33 to 2, A55 CORE0 & CORE1 to 0/1.
|
|
* domain0/1 only used for trigger LPM of themselves. A55 cluster & M33's
|
|
* domain assignment should be align with the TRDC DID.
|
|
*/
|
|
gpc_assign_domains(0x3102);
|
|
|
|
/* CA55 core0/1 config */
|
|
for (cpu = CPU_A55C0; cpu <= CPU_A55_PLAT; cpu++) {
|
|
/* clear the cpu sleep hold */
|
|
gpc_clear_cpu_sleep_hold(cpu);
|
|
/* use gic wakeup source by default */
|
|
gpc_select_wakeup_gic(cpu);
|
|
/*
|
|
* Ignore A55 core0/1's LPM trigger for system sleep.
|
|
* normally, for A55 side, only the A55 cluster(plat)
|
|
* domain will be used to trigger the system wide low
|
|
* power mode transition.
|
|
*/
|
|
if (cpu != CPU_A55_PLAT) {
|
|
gpc_force_cpu_suspend(cpu);
|
|
}
|
|
}
|
|
|
|
/* boot core(A55C0) */
|
|
src_mem_lpm_en(SRC_A55P0_MEM, MEM_OFF);
|
|
/* For A55 core, only need to be on in RUN mode */
|
|
src_mix_set_lpm(SRC_A55C0, 0x0, CM_MODE_WAIT);
|
|
/* whitelist: 0x1 for domain 0 only */
|
|
src_authen_config(SRC_A55C0, 0x1, 0x1);
|
|
|
|
/* A55 cluster */
|
|
gpc_select_wakeup_gic(CPU_A55_PLAT);
|
|
gpc_clear_cpu_sleep_hold(CPU_A55_PLAT);
|
|
|
|
/* SCU MEM must be OFF when A55 PLAT OFF */
|
|
src_mem_lpm_en(SRC_A55_SCU_MEM, MEM_OFF);
|
|
/* L3 memory in retention by default */
|
|
src_mem_lpm_en(SRC_A55_L3_MEM, MEM_RETN);
|
|
|
|
src_mix_set_lpm(SRC_A55P, 0x3, 0x1);
|
|
/* whitelist: 0x8 for domain 3 only */
|
|
src_authen_config(SRC_A55P, 0x8, 0x1);
|
|
|
|
/* enable the HW LP handshake between S401 & A55 cluster */
|
|
mmio_setbits_32(BLK_CTRL_S_BASE + HW_LP_HANDHSK, BIT(5));
|
|
}
|
|
|