From 3208edcdfe5046333bd9d7e39d26e72de44fdf28 Mon Sep 17 00:00:00 2001
From: Soby Mathew <soby.mathew@arm.com>
Date: Mon, 11 Jun 2018 16:40:36 +0100
Subject: [PATCH] ARM platforms: Initialize cntfrq for BL1 Firmware update

Currenly the CNTFRQ register and system timer is initialized in BL31 for
use by the normal world. During firmware update, the NS-BL1 or NS-BL2U
may need to access the system timer. Hence this patch duplicates the
CNTFRQ and system timer initialization in BL1 as well.

Signed-off-by: Soby Mathew <soby.mathew@arm.com>
Change-Id: I1ede78b4ae64080fb418cb93f3e48b26d7b724dc
---
 docs/firmware-design.rst        | 2 ++
 plat/arm/common/arm_bl1_setup.c | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/docs/firmware-design.rst b/docs/firmware-design.rst
index e3500c27b..8aa762278 100644
--- a/docs/firmware-design.rst
+++ b/docs/firmware-design.rst
@@ -306,6 +306,8 @@ On Arm platforms, BL1 performs the following platform initializations:
 -  If the BL1 dynamic configuration file, ``TB_FW_CONFIG``, is available, then
    load it to the platform defined address and make it available to BL2 via
    ``arg0``.
+-  Configure the system timer and program the `CNTFRQ_EL0` for use by NS-BL1U
+   and NS-BL2U firmware update images.
 
 Firmware Update detection and execution
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/plat/arm/common/arm_bl1_setup.c b/plat/arm/common/arm_bl1_setup.c
index e5e730417..d141f647e 100644
--- a/plat/arm/common/arm_bl1_setup.c
+++ b/plat/arm/common/arm_bl1_setup.c
@@ -118,6 +118,12 @@ void arm_bl1_platform_setup(void)
 #if LOAD_IMAGE_V2
 	arm_load_tb_fw_config();
 #endif
+	/*
+	 * Allow access to the System counter timer module and program
+	 * counter frequency for non secure images during FWU
+	 */
+	arm_configure_sys_timer();
+	write_cntfrq_el0(plat_get_syscnt_freq2());
 }
 
 void bl1_platform_setup(void)
-- 
GitLab