]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
timer: mtk_timer: initialize the timer before use
authorWeijie Gao <weijie.gao@mediatek.com>
Tue, 12 Jan 2021 05:44:02 +0000 (13:44 +0800)
committerTom Rini <trini@konsulko.com>
Mon, 18 Jan 2021 20:23:06 +0000 (15:23 -0500)
The timer being used by this driver may have already been used by first
stage bootloader (e.g. ATF/preloader), and it's settings may differ from
what this driver is going to use.

This may cause issues, such as inaccurate timer frequency due to
incorrect clock divider.

This patch adds the initialization code to avoid them.

Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
drivers/timer/mtk_timer.c

index 448a76a7e1f4ff78a1bf724dbe0308de2e56d2e3..f6b97f868c7dfd6c687f31ae8ee81d42621ab774 100644 (file)
@@ -61,6 +61,16 @@ static int mtk_timer_probe(struct udevice *dev)
        if (!uc_priv->clock_rate)
                return -EINVAL;
 
+       /*
+        * Initialize the timer:
+        * 1. set clock source to system clock with clock divider setting to 1
+        * 2. set timer mode to free running
+        * 3. reset timer counter to 0 then enable the timer
+        */
+       writel(GPT4_CLK_SYS | GPT4_CLK_DIV1, priv->base + MTK_GPT4_CLK);
+       writel(GPT4_FREERUN | GPT4_CLEAR | GPT4_ENABLE,
+              priv->base + MTK_GPT4_CTRL);
+
        return 0;
 }