From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/2] mx35 timer: Switch to 32-kHz source
Date: Wed, 22 Aug 2012 09:32:44 +0200 [thread overview]
Message-ID: <50348B1C.9040804@denx.de> (raw)
In-Reply-To: <1047994630.2662908.1345583274952.JavaMail.root@advansee.com>
On 21/08/2012 23:07, Beno?t Th?baudeau wrote:
> Switch the mx35 timer driver to the 32-kHz clock source to avoid calling
> mxc_get_clock() again and again, and to be consistent with the timer drivers of
> other i.MX SoCs.
>
> Signed-off-by: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
> Changes for v2:
> - Fix multiline comment style.
> - Use default SoC input clock frequency definitions instead of duplicating
> frequency definitions in all board files.
>
> .../arch/arm/cpu/arm1136/mx35/timer.c | 44 ++++++++++++--------
> 1 file changed, 27 insertions(+), 17 deletions(-)
>
> diff --git u-boot-imx-88e73dd.orig/arch/arm/cpu/arm1136/mx35/timer.c u-boot-imx-88e73dd/arch/arm/cpu/arm1136/mx35/timer.c
> index 6000042..9680b7f 100644
> --- u-boot-imx-88e73dd.orig/arch/arm/cpu/arm1136/mx35/timer.c
> +++ u-boot-imx-88e73dd/arch/arm/cpu/arm1136/mx35/timer.c
> @@ -27,6 +27,7 @@
> #include <asm/io.h>
> #include <div64.h>
> #include <asm/arch/imx-regs.h>
> +#include <asm/arch/crm_regs.h>
> #include <asm/arch/clock.h>
>
> DECLARE_GLOBAL_DATA_PTR;
> @@ -37,43 +38,52 @@ DECLARE_GLOBAL_DATA_PTR;
> /* General purpose timers bitfields */
> #define GPTCR_SWR (1<<15) /* Software reset */
> #define GPTCR_FRR (1<<9) /* Freerun / restart */
> -#define GPTCR_CLKSOURCE_32 (0x100<<6) /* Clock source */
> -#define GPTCR_CLKSOURCE_IPG (0x001<<6) /* Clock source */
> +#define GPTCR_CLKSOURCE_32 (4<<6) /* Clock source */
> #define GPTCR_TEN (1) /* Timer enable */
>
> -#define TIMER_FREQ_HZ mxc_get_clock(MXC_IPG_CLK)
> -
> +/*
> + * "time" is measured in 1 / CONFIG_SYS_HZ seconds,
> + * "tick" is internal timer period
> + */
> +/* ~0.4% error - measured with stop-watch on 100s boot-delay */
> static inline unsigned long long tick_to_time(unsigned long long tick)
> {
> tick *= CONFIG_SYS_HZ;
> - do_div(tick, TIMER_FREQ_HZ);
> + do_div(tick, MXC_CLK32);
>
> return tick;
> }
>
> -static inline unsigned long long us_to_tick(unsigned long long usec)
> +static inline unsigned long long us_to_tick(unsigned long long us)
> {
> - usec *= TIMER_FREQ_HZ;
> - do_div(usec, 1000000);
> + us = us * MXC_CLK32 + 999999;
> + do_div(us, 1000000);
>
> - return usec;
> + return us;
> }
>
> +/*
> + * nothing really to do with interrupts, just starts up a counter.
> + * The 32KHz 32-bit timer overruns in 134217 seconds
> + */
> int timer_init(void)
> {
> int i;
> struct gpt_regs *gpt = (struct gpt_regs *)GPT1_BASE_ADDR;
> + struct ccm_regs *ccm = (struct ccm_regs *)CCM_BASE_ADDR;
>
> /* setup GP Timer 1 */
> writel(GPTCR_SWR, &gpt->ctrl);
> - for (i = 0; i < 100; i++)
> - writel(0, &gpt->ctrl); /* We have no udelay by now */
>
> - writel(0, &gpt->pre);
> - /* Freerun Mode, PERCLK1 input */
> - writel(readl(&gpt->ctrl) |
> - GPTCR_CLKSOURCE_IPG | GPTCR_TEN,
> - &gpt->ctrl);
> + writel(readl(&ccm->cgr1) | 3 << MXC_CCM_CGR1_GPT_OFFSET, &ccm->cgr1);
> +
> + for (i = 0; i < 100; i++)
> + writel(0, &gpt->ctrl); /* We have no udelay by now */
> + writel(0, &gpt->pre); /* prescaler = 1 */
> + /* Freerun Mode, 32KHz input */
> + writel(readl(&gpt->ctrl) | GPTCR_CLKSOURCE_32 | GPTCR_FRR,
> + &gpt->ctrl);
> + writel(readl(&gpt->ctrl) | GPTCR_TEN, &gpt->ctrl);
>
> return 0;
> }
> @@ -132,5 +142,5 @@ void __udelay(unsigned long usec)
> */
> ulong get_tbclk(void)
> {
> - return TIMER_FREQ_HZ;
> + return MXC_CLK32;
> }
>
Acked-by: Stefano Babic <sbabic@denx.de>
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
next prev parent reply other threads:[~2012-08-22 7:32 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-14 19:53 [U-Boot] [PATCH] mx35 timer: Switch to 32-kHz source Benoît Thébaudeau
2012-08-17 19:51 ` Stefano Babic
2012-08-21 21:07 ` [U-Boot] [PATCH v2 1/2] mx35: Define default SoC input clock frequencies Benoît Thébaudeau
2012-08-21 21:07 ` [U-Boot] [PATCH v2 2/2] mx35 timer: Switch to 32-kHz source Benoît Thébaudeau
2012-08-22 7:32 ` Stefano Babic [this message]
2012-08-22 7:32 ` [U-Boot] [PATCH v2 1/2] mx35: Define default SoC input clock frequencies Stefano Babic
2012-08-27 6:34 ` Stefano Babic
2012-08-27 13:26 ` Benoît Thébaudeau
2012-08-27 14:39 ` Stefano Babic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50348B1C.9040804@denx.de \
--to=sbabic@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.