summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2018-06-07 06:00:36 -0700
committerSascha Hauer <s.hauer@pengutronix.de>2018-06-11 08:54:10 +0200
commit52a1cadf11d40ec0b8fed08b98b25a8a0c9b4f57 (patch)
tree65a5fd4ede4e4312c41aacfc1b87db01738ae100
parent758b6304c598a574c4aba8fe7cd9b7a15719057c (diff)
downloadbarebox-52a1cadf11d40ec0b8fed08b98b25a8a0c9b4f57.tar.gz
barebox-52a1cadf11d40ec0b8fed08b98b25a8a0c9b4f57.tar.xz
ARM: i.MX8: Initialize system counter
Add code to properly initialize system counter, so it would be posible to get accurate time delays. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-imx/imx8mq.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx8mq.c b/arch/arm/mach-imx/imx8mq.c
index 74fa8aca7a..f3246e4373 100644
--- a/arch/arm/mach-imx/imx8mq.c
+++ b/arch/arm/mach-imx/imx8mq.c
@@ -14,6 +14,8 @@
#include <init.h>
#include <common.h>
#include <io.h>
+#include <asm/syscounter.h>
+#include <asm/system.h>
#include <mach/generic.h>
#include <mach/revision.h>
#include <mach/imx8mq-regs.h>
@@ -58,6 +60,23 @@ static void imx8mq_silicon_revision(void)
imx_set_silicon_revision(cputypestr, reg);
}
+static int imx8mq_init_syscnt_frequency(void)
+{
+ void __iomem *syscnt = IOMEM(MX8MQ_SYSCNT_CTRL_BASE_ADDR);
+ /*
+ * Update with accurate clock frequency
+ */
+ set_cntfrq(syscnt_get_cntfrq(syscnt));
+ syscnt_enable(syscnt);
+
+ return 0;
+}
+/*
+ * This call needs to happen before timer driver gets probed and
+ * requests its update frequency via cntfrq_el0
+ */
+core_initcall(imx8mq_init_syscnt_frequency);
+
int imx8mq_init(void)
{
imx8mq_silicon_revision();