imx: initialize and use generic timer on i.MX 6UL/ULL
authorStefan Agner <stefan.agner@toradex.com>
Fri, 5 Jan 2018 14:08:19 +0000 (15:08 +0100)
committerStefano Babic <sbabic@denx.de>
Mon, 8 Jan 2018 16:33:06 +0000 (17:33 +0100)
The i.MX 6UL/ULL feature a Cortex-A7 CPU which suppor the ARM
generic timer. This change makes use of the ARM generic timer in
U-Boot.

This is crucial to make the ARM generic timers usable in Linux since
timer_init() initalizes the system counter module, which is necessary
to use the generic timers CP15 registers.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
arch/arm/include/asm/arch-mx6/imx-regs.h
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/mx6/Kconfig
include/configs/mx6_common.h

index 4be7aab18a9376cb47f0d130b0697c54731f57a3..48ce0edd0625b7ed3534debab3a652f521609567 100644 (file)
 #endif
 #define IP2APB_TZASC1_BASE_ADDR     (AIPS2_OFF_BASE_ADDR + 0x50000)
 #if (defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL))
+#define SCTR_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x5C000)
 #define QSPI0_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x60000)
 #define UART6_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x7C000)
 #elif defined(CONFIG_MX6SX)
index 9322c1ce83502cffacba1b57e9dfb83bc1af70fa..d7966cfd4ad15c80f6809a89671bf426ab98d28b 100644 (file)
@@ -22,7 +22,6 @@ endif
 ifeq ($(SOC),$(filter $(SOC),mx7))
 obj-y  += cpu.o
 obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
-obj-$(CONFIG_SYSCOUNTER_TIMER) += syscounter.o
 endif
 ifeq ($(SOC),$(filter $(SOC),mx6 mx7))
 obj-y  += cache.o init.o
@@ -31,6 +30,7 @@ obj-$(CONFIG_IMX_VIDEO_SKIP) += video.o
 obj-$(CONFIG_IMX_RDC) += rdc-sema.o
 obj-$(CONFIG_IMX_BOOTAUX) += imx_bootaux.o
 obj-$(CONFIG_SECURE_BOOT)    += hab.o
+obj-$(CONFIG_SYSCOUNTER_TIMER) += syscounter.o
 endif
 ifeq ($(SOC),$(filter $(SOC),mx7ulp))
 obj-y  += cache.o
index 894443204479da7cf3a9865070af362a7568cca9..567a6a6bf56bdd94fde6685a60d3e41224c1b282 100644 (file)
@@ -9,7 +9,7 @@ config MX6_SMP
 
 config MX6
        select ARM_ERRATA_743622 if !MX6UL && !MX6ULL
-       select GPT_TIMER
+       select GPT_TIMER if !MX6UL && !MX6ULL
        bool
        default y
        imply CMD_FUSE
@@ -54,6 +54,7 @@ config MX6UL
        select HAS_CAAM
        select SYS_L2CACHE_OFF
        select ROM_UNIFIED_SECTIONS
+       select SYSCOUNTER_TIMER
        bool
 
 config MX6UL_LITESOM
@@ -76,6 +77,7 @@ config MX6UL_OPOS6UL
 config MX6ULL
        select SYS_L2CACHE_OFF
        select ROM_UNIFIED_SECTIONS
+       select SYSCOUNTER_TIMER
        bool
 
 config MX6_DDRCAL
index 59e6daea621570a8b5a1587fce2035cf7b6c2d8b..ddc645c136500650abab7b7695f0928a60e0d282 100644 (file)
@@ -7,7 +7,10 @@
 #ifndef __MX6_COMMON_H
 #define __MX6_COMMON_H
 
-#if !(defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL))
+#if (defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL))
+#define CONFIG_SC_TIMER_CLK 8000000 /* 8Mhz */
+#define COUNTER_FREQUENCY CONFIG_SC_TIMER_CLK
+#else
 #ifndef CONFIG_SYS_L2CACHE_OFF
 #define CONFIG_SYS_L2_PL310
 #define CONFIG_SYS_PL310_BASE  L2_PL310_BASE