summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-04-09 12:24:44 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-04-09 12:24:44 +0200
commit731cc538f3bdce594095d31af9bc288dcd511ab9 (patch)
treec3e406d96834fc83b9fa605ee7c4088e48111649 /arch/arm/mach-imx
parenteed5f701ba73310020dc3ef2530944cb601f256c (diff)
parentf4634187cfda8db89121a5fbc88992ad79882db2 (diff)
downloadbarebox-731cc538f3bdce594095d31af9bc288dcd511ab9.tar.gz
barebox-731cc538f3bdce594095d31af9bc288dcd511ab9.tar.xz
Merge branch 'for-next/stm32'
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/cpu_init.c22
-rw-r--r--arch/arm/mach-imx/imx7.c35
-rw-r--r--arch/arm/mach-imx/imx8mq.c22
-rw-r--r--arch/arm/mach-imx/include/mach/generic.h1
4 files changed, 23 insertions, 57 deletions
diff --git a/arch/arm/mach-imx/cpu_init.c b/arch/arm/mach-imx/cpu_init.c
index f0d009dfd2..7a980cf912 100644
--- a/arch/arm/mach-imx/cpu_init.c
+++ b/arch/arm/mach-imx/cpu_init.c
@@ -15,7 +15,20 @@
#include <asm/barebox-arm-head.h>
#include <asm/errata.h>
#include <linux/types.h>
+#include <linux/bitops.h>
#include <mach/generic.h>
+#include <mach/imx7-regs.h>
+#include <mach/imx8mq-regs.h>
+#include <common.h>
+#include <io.h>
+#include <asm/syscounter.h>
+#include <asm/system.h>
+
+static inline void imx_cpu_timer_init(void __iomem *syscnt)
+{
+ set_cntfrq(syscnt_get_cntfrq(syscnt));
+ syscnt_enable(syscnt);
+}
#ifdef CONFIG_CPU_32
void imx5_cpu_lowlevel_init(void)
@@ -47,10 +60,19 @@ void imx6ul_cpu_lowlevel_init(void)
void imx7_cpu_lowlevel_init(void)
{
arm_cpu_lowlevel_init();
+ imx_cpu_timer_init(IOMEM(MX7_SYSCNT_CTRL_BASE_ADDR));
}
void vf610_cpu_lowlevel_init(void)
{
arm_cpu_lowlevel_init();
}
+#else
+void imx8mq_cpu_lowlevel_init(void)
+{
+ arm_cpu_lowlevel_init();
+
+ if (current_el() == 3)
+ imx_cpu_timer_init(IOMEM(MX8MQ_SYSCNT_CTRL_BASE_ADDR));
+}
#endif
diff --git a/arch/arm/mach-imx/imx7.c b/arch/arm/mach-imx/imx7.c
index ff2a828c7d..d875bf44f1 100644
--- a/arch/arm/mach-imx/imx7.c
+++ b/arch/arm/mach-imx/imx7.c
@@ -57,39 +57,6 @@ void imx7_init_lowlevel(void)
writel(0, aips3 + 0x50);
}
-#define SC_CNTCR 0x0
-#define SC_CNTSR 0x4
-#define SC_CNTCV1 0x8
-#define SC_CNTCV2 0xc
-#define SC_CNTFID0 0x20
-#define SC_CNTFID1 0x24
-#define SC_CNTFID2 0x28
-#define SC_counterid 0xfcc
-
-#define SC_CNTCR_ENABLE (1 << 0)
-#define SC_CNTCR_HDBG (1 << 1)
-#define SC_CNTCR_FREQ0 (1 << 8)
-#define SC_CNTCR_FREQ1 (1 << 9)
-
-static int imx7_timer_init(void)
-{
- void __iomem *sctr = IOMEM(MX7_SYSCNT_CTRL_BASE_ADDR);
- unsigned long val, freq;
-
- freq = 8000000;
- asm("mcr p15, 0, %0, c14, c0, 0" : : "r" (freq));
-
- writel(freq, sctr + SC_CNTFID0);
-
- /* Enable system counter */
- val = readl(sctr + SC_CNTCR);
- val &= ~(SC_CNTCR_FREQ0 | SC_CNTCR_FREQ1);
- val |= SC_CNTCR_FREQ0 | SC_CNTCR_ENABLE | SC_CNTCR_HDBG;
- writel(val, sctr + SC_CNTCR);
-
- return 0;
-}
-
#define CSU_NUM_REGS 64
#define CSU_INIT_SEC_LEVEL0 0x00FF00FF
@@ -186,8 +153,6 @@ int imx7_init(void)
imx7_init_csu();
- imx7_timer_init();
-
imx7_boot_save_loc();
psci_set_ops(&imx7_psci_ops);
diff --git a/arch/arm/mach-imx/imx8mq.c b/arch/arm/mach-imx/imx8mq.c
index 3f6b433a57..089344528d 100644
--- a/arch/arm/mach-imx/imx8mq.c
+++ b/arch/arm/mach-imx/imx8mq.c
@@ -27,28 +27,6 @@
#define FSL_SIP_BUILDINFO 0xC2000003
#define FSL_SIP_BUILDINFO_GET_COMMITHASH 0x00
-static int imx8mq_init_syscnt_frequency(void)
-{
- if (!cpu_is_mx8mq())
- return 0;
-
- if (current_el() == 3) {
- 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)
{
void __iomem *anatop = IOMEM(MX8MQ_ANATOP_BASE_ADDR);
diff --git a/arch/arm/mach-imx/include/mach/generic.h b/arch/arm/mach-imx/include/mach/generic.h
index be58da4da2..ac066e3f17 100644
--- a/arch/arm/mach-imx/include/mach/generic.h
+++ b/arch/arm/mach-imx/include/mach/generic.h
@@ -58,6 +58,7 @@ void imx6_cpu_lowlevel_init(void);
void imx6ul_cpu_lowlevel_init(void);
void imx7_cpu_lowlevel_init(void);
void vf610_cpu_lowlevel_init(void);
+void imx8mq_cpu_lowlevel_init(void);
/* There's a off-by-one betweem the gpio bank number and the gpiochip */
/* range e.g. GPIO_1_5 is gpio 5 under linux */