summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bl31/aarch64/bl31_entrypoint.S39
-rw-r--r--plat/imx/imx8qm/imx8qm_psci.c8
2 files changed, 43 insertions, 4 deletions
diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S
index 1ad26e4f..5ee7a840 100644
--- a/bl31/aarch64/bl31_entrypoint.S
+++ b/bl31/aarch64/bl31_entrypoint.S
@@ -23,6 +23,41 @@
*/
func bl31_entrypoint
+#ifdef PLAT_imx8qm
+ ldr x21, stm
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21] /* 16 */
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21]
+ str w20, [x21] /* 32 */
+#endif
/* ---------------------------------------------------------------
* Stash the previous bootloader arguments x0 - x3 for later use.
* ---------------------------------------------------------------
@@ -132,6 +167,10 @@ func bl31_entrypoint
b el3_exit
endfunc bl31_entrypoint
+.ltorg
+stm:
+ .quad 0x5D1B0020
+
/* --------------------------------------------------------------------
* This CPU has been physically powered up. It is either resuming from
* suspend or has simply been turned on. In both cases, call the BL31
diff --git a/plat/imx/imx8qm/imx8qm_psci.c b/plat/imx/imx8qm/imx8qm_psci.c
index bdba37c6..e5e5576f 100644
--- a/plat/imx/imx8qm/imx8qm_psci.c
+++ b/plat/imx/imx8qm/imx8qm_psci.c
@@ -80,8 +80,8 @@ int imx_pwr_domain_on(u_register_t mpidr)
sc_pm_set_resource_power_mode(ipc_handle, cluster_id == 0 ?
SC_R_A53 : SC_R_A72, SC_PM_PW_MODE_ON);
- if (cluster_id == 1)
- sc_pm_req_low_power_mode(ipc_handle, SC_R_A72, SC_PM_PW_MODE_ON);
+ sc_pm_req_low_power_mode(ipc_handle, cluster_id == 0 ?
+ SC_R_A53 : SC_R_A72, SC_PM_PW_MODE_ON);
if (sc_pm_set_resource_power_mode(ipc_handle,
ap_core_index[cpu_id + PLATFORM_CLUSTER0_CORE_COUNT * cluster_id],
@@ -124,8 +124,8 @@ void imx_pwr_domain_off(const psci_power_state_t *target_state)
if (is_local_state_off(CLUSTER_PWR_STATE(target_state))) {
cci_disable_snoop_dvm_reqs(cluster_id);
- if (cluster_id == 1)
- sc_pm_req_low_power_mode(ipc_handle, SC_R_A72, SC_PM_PW_MODE_OFF);
+ sc_pm_req_low_power_mode(ipc_handle, cluster_id == 0 ?
+ SC_R_A53 : SC_R_A72, SC_PM_PW_MODE_OFF);
}
printf("turn off cluster:%d core:%d\n", cluster_id, cpu_id);
}