From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Thompson Date: Mon, 26 Oct 2009 16:02:53 +0000 Subject: [U-Boot] [PATCH v2] davinci timer.c: Remove volatiles and memory mapped structures In-Reply-To: <0554BEF07D437848AF01B9C9B5F0BC5D93807C71@dlee01.ent.ti.com> References: <4AE5C2FE.9040001@gefanuc.com> <0554BEF07D437848AF01B9C9B5F0BC5D93807C71@dlee01.ent.ti.com> Message-ID: <4AE5C82D.1030701@gefanuc.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Paulraj, Sandeep wrote: > >> Remove volatiles and memory mapped structure accesses and replace with >> readl and writel macro usage. >> >> Signed-off-by: Nick Thompson >> --- >> This patch was originally part of the da830 support patch, but this >> effort is now being integrated into davinci. As a result, these >> changes would be have been lost, as no change is required for da830. >> The changes where request to be kept available however, so here they >> are. >> >> cpu/arm926ejs/davinci/timer.c | 29 +++++++++++++++++------------ >> 1 files changed, 17 insertions(+), 12 deletions(-) > > I started the process of integrating into my branch and doing some quick tests on other DM parts. > But, I got 2 checkpatch warnings while running checkpatch. > One of them I believe is unavoidable because U-boot does not have a linux/io.h > > The other deals with using a typedef. I only get one warning with 0.09 of checkpatch. It warns about not adding new typedefs. The typedef is already there though - I only removed the volatile. No excuse really. In this case I expect it is fine to just to use a struct instead. Do you want me to make that change? > > >> diff --git a/cpu/arm926ejs/davinci/timer.c b/cpu/arm926ejs/davinci/timer.c >> index 80751ad..f705a6e 100644 >> --- a/cpu/arm926ejs/davinci/timer.c >> +++ b/cpu/arm926ejs/davinci/timer.c >> @@ -38,8 +38,9 @@ >> */ >> >> #include >> +#include >> >> -typedef volatile struct { >> +typedef struct { >> u_int32_t pid12; >> u_int32_t emumgt; >> u_int32_t na1; >> @@ -53,7 +54,7 @@ typedef volatile struct { >> u_int32_t wdtcr; >> } davinci_timer; >> >> -davinci_timer *timer = (davinci_timer *)CONFIG_SYS_TIMERBASE; >> +static davinci_timer * const timer = (davinci_timer >> *)CONFIG_SYS_TIMERBASE; >> >> #define TIMER_LOAD_VAL (CONFIG_SYS_HZ_CLOCK / CONFIG_SYS_HZ) >> #define TIM_CLK_DIV 16 >> @@ -64,30 +65,30 @@ static ulong lastinc; >> int timer_init(void) >> { >> /* We are using timer34 in unchained 32-bit mode, full speed */ >> - timer->tcr = 0x0; >> - timer->tgcr = 0x0; >> - timer->tgcr = 0x06 | ((TIM_CLK_DIV - 1) << 8); >> - timer->tim34 = 0x0; >> - timer->prd34 = TIMER_LOAD_VAL; >> + writel(0x0, &timer->tcr); >> + writel(0x0, &timer->tgcr); >> + writel(0x06 | ((TIM_CLK_DIV - 1) << 8), &timer->tgcr); >> + writel(0x0, &timer->tim34); >> + writel(TIMER_LOAD_VAL, &timer->prd34); >> lastinc = 0; >> timestamp = 0; >> - timer->tcr = 2 << 22; >> + writel(2 << 22, &timer->tcr); >> >> return(0); >> } >> >> void reset_timer(void) >> { >> - timer->tcr = 0x0; >> - timer->tim34 = 0; >> + writel(0x0, &timer->tcr); >> + writel(0x0, &timer->tim34); >> lastinc = 0; >> timestamp = 0; >> - timer->tcr = 2 << 22; >> + writel(2 << 22, &timer->tcr); >> } >> >> static ulong get_timer_raw(void) >> { >> - ulong now = timer->tim34; >> + ulong now = readl(&timer->tim34); >> >> if (now >= lastinc) { >> /* normal mode */ >