From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Date: Sun, 28 Mar 2010 12:36:58 -0500 Subject: [U-Boot] [PATCH 4/8] nomadik_mtu: support configurable clock rates In-Reply-To: <1268888890-32301-1-git-send-email-rabin.vincent@stericsson.com> References: <1268886061-6382-1-git-send-email-rabin.vincent@stericsson.com> <1268888890-32301-1-git-send-email-rabin.vincent@stericsson.com> Message-ID: <4BAF93BA.2060609@windriver.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Rabin Vincent wrote: > Change the Nomadik MTU driver to get the clock rate and prescaler from > the config file. Also remove the hardcoded divisors and do the > calculations based on the configured rate. > > Acked-by: Alessandro Rubini > Acked-by: Michael Brandt > Signed-off-by: Rabin Vincent > --- > drivers/misc/nomadik_mtu.c | 22 +++++++++++++--------- > include/configs/nhk8815.h | 3 +++ > 2 files changed, 16 insertions(+), 9 deletions(-) > > diff --git a/drivers/misc/nomadik_mtu.c b/drivers/misc/nomadik_mtu.c > index b9c0fb1..4ec75ad 100644 > --- a/drivers/misc/nomadik_mtu.c > +++ b/drivers/misc/nomadik_mtu.c > @@ -22,25 +22,29 @@ > > #include > #include > +#include > #include > > -/* > - * The timer is a decrementer, we'll left it free running at 2.4MHz. > - * We have 2.4 ticks per microsecond and an overflow in almost 30min > - */ > -#define TIMER_CLOCK (24 * 100 * 1000) > -#define COUNT_TO_USEC(x) ((x) * 5 / 12) /* overflows at 6min */ > -#define USEC_TO_COUNT(x) ((x) * 12 / 5) /* overflows at 6min */ > +#define TIMER_CLOCK CONFIG_NOMADIK_MTU_CLOCK > #define TICKS_PER_HZ (TIMER_CLOCK / CONFIG_SYS_HZ) > #define TICKS_TO_HZ(x) ((x) / TICKS_PER_HZ) TICKS_TO_HZ is only used once. This macro should be expanded in get_timer() and removed TICKS_PER_HZ is only used in TICKS_PER_HZ, it should be expanded and removed TIMER_CLOCK is a remapping of CONFIG_NOMADIK_MTU_CLOCK. CONFIG_NOMADIK_MTU_CLOCK should just be used > > /* macro to read the decrementing 32 bit timer as an increasing count */ > #define READ_TIMER() (0 - readl(CONFIG_SYS_TIMERBASE + MTU_VAL(0))) > > +static unsigned long usec_to_count(unsigned long long usec) > +{ > + unsigned long long count = usec * TIMER_CLOCK; > + > + do_div(count, 1000000); > + > + return count; > +} > + > /* Configure a free-running, auto-wrap counter with no prescaler */ > int timer_init(void) > { > - writel(MTU_CRn_ENA | MTU_CRn_PRESCALE_1 | MTU_CRn_32BITS, > + writel(MTU_CRn_ENA | CONFIG_NOMADIK_MTU_PRESCALE | MTU_CRn_32BITS, > CONFIG_SYS_TIMERBASE + MTU_CR(0)); > reset_timer(); > return 0; > @@ -73,7 +77,7 @@ void __udelay(unsigned long usec) > ulong ini, end; > > ini = READ_TIMER(); > - end = ini + USEC_TO_COUNT(usec); > + end = ini + usec_to_count(usec); > while ((signed)(end - READ_TIMER()) > 0) > ; > } > diff --git a/include/configs/nhk8815.h b/include/configs/nhk8815.h > index 8ba1e5e..d52f50c 100644 > --- a/include/configs/nhk8815.h > +++ b/include/configs/nhk8815.h > @@ -98,6 +98,9 @@ > #define CONFIG_SYS_HZ 1000 /* Mandatory... */ > #define CONFIG_SYS_TIMERBASE 0x101E2000 > #define CONFIG_NOMADIK_MTU > +/* We have 2.4 ticks per microsecond and an overflow in almost 30min */ > +#define CONFIG_NOMADIK_MTU_CLOCK (24 * 100 * 1000) > +#define CONFIG_NOMADIK_MTU_PRESCALE MTU_CRn_PRESCALE_1 > > /* GPIO */ > #define CONFIG_NOMADIK_GPIO Tom