summaryrefslogtreecommitdiff
path: root/plat/freescale
diff options
context:
space:
mode:
authorNitin Garg <nitin.garg@nxp.com>2017-06-07 15:47:04 -0500
committerAnson Huang <Anson.Huang@nxp.com>2017-07-12 23:32:36 +0800
commit2f45f6e5ef517fe5f201bcd5046368b854442749 (patch)
tree2e0cb0b884a74b56fa6a50bcadd5ee01f1cf8bc1 /plat/freescale
parent5978d97ebfc5246ba36d066d7a0f569c3c015679 (diff)
Enable CPU, FP, L2 retention counters to 64 cycles
Signed-off-by: Nitin Garg <nitin.garg@nxp.com>
Diffstat (limited to 'plat/freescale')
-rw-r--r--plat/freescale/common/imx8_helpers.S28
-rw-r--r--plat/freescale/imx8qm/platform.mk4
-rw-r--r--plat/freescale/imx8qxp/platform.mk4
3 files changed, 36 insertions, 0 deletions
diff --git a/plat/freescale/common/imx8_helpers.S b/plat/freescale/common/imx8_helpers.S
index f2da325d..ecc2481e 100644
--- a/plat/freescale/common/imx8_helpers.S
+++ b/plat/freescale/common/imx8_helpers.S
@@ -31,6 +31,7 @@
#include <asm_macros.S>
#include <platform_def.h>
#include <cortex_a72.h>
+#include <cortex_a35.h>
.globl plat_is_my_cpu_primary
.globl plat_my_core_pos
@@ -112,6 +113,33 @@ endfunc plat_calc_core_pos
* ----------------------------------------------
*/
func plat_reset_handler
+#if ENABLE_L2_DYNAMIC_RETENTION
+ /* ---------------------------
+ * Enable processor retention
+ * ---------------------------
+ */
+ mrs x0, L2ECTLR_EL1
+ mov x1, #RETENTION_ENTRY_TICKS_64 << L2ECTLR_RET_CTRL_SHIFT
+ bic x0, x0, #L2ECTLR_RET_CTRL_MASK
+ orr x0, x0, x1
+ msr L2ECTLR_EL1, x0
+ isb
+#endif
+
+#if ENABLE_CPU_DYNAMIC_RETENTION
+ mrs x1, CORTEX_A72_ECTLR_EL1
+ mov x2, #RETENTION_ENTRY_TICKS_64 << CPUECTLR_CPU_RET_CTRL_SHIFT
+ bic x1, x1, #CPUECTLR_CPU_RET_CTRL_MASK
+ orr x1, x1, x2
+ jump_if_cpu_midr CORTEX_A72_MIDR, SKIP_FP
+ mov x2, #RETENTION_ENTRY_TICKS_64 << CPUECTLR_FPU_RET_CTRL_SHIFT
+ bic x1, x1, #CPUECTLR_FPU_RET_CTRL_MASK
+ orr x1, x1, x2
+SKIP_FP:
+ msr CORTEX_A72_ECTLR_EL1, x1
+ isb
+#endif
+
/* enable EL2 cpuectlr RW access */
mov x0, #0x73
msr actlr_el3, x0
diff --git a/plat/freescale/imx8qm/platform.mk b/plat/freescale/imx8qm/platform.mk
index b3137932..c516c8df 100644
--- a/plat/freescale/imx8qm/platform.mk
+++ b/plat/freescale/imx8qm/platform.mk
@@ -58,3 +58,7 @@ USE_COHERENT_MEM := 0
RESET_TO_BL31 := 1
ERROR_DEPRECATED := 1
A53_DISABLE_NON_TEMPORAL_HINT := 0
+ENABLE_CPU_DYNAMIC_RETENTION := 1
+$(eval $(call add_define,ENABLE_CPU_DYNAMIC_RETENTION))
+ENABLE_L2_DYNAMIC_RETENTION := 1
+$(eval $(call add_define,ENABLE_L2_DYNAMIC_RETENTION))
diff --git a/plat/freescale/imx8qxp/platform.mk b/plat/freescale/imx8qxp/platform.mk
index 24a55236..50b695ef 100644
--- a/plat/freescale/imx8qxp/platform.mk
+++ b/plat/freescale/imx8qxp/platform.mk
@@ -57,3 +57,7 @@ RESET_TO_BL31 := 1
ERROR_DEPRECATED := 1
ARM_GIC_ARCH := 3
A53_DISABLE_NON_TEMPORAL_HINT := 0
+ENABLE_CPU_DYNAMIC_RETENTION := 1
+$(eval $(call add_define,ENABLE_CPU_DYNAMIC_RETENTION))
+ENABLE_L2_DYNAMIC_RETENTION := 1
+$(eval $(call add_define,ENABLE_L2_DYNAMIC_RETENTION))