Patchwork [U-Boot,V2] ARM: bcm2835: fix get_timer() to return ms

login
register
mail settings
Submitter Stephen Warren
Date March 28, 2013, 4:43 a.m.
Message ID <1364445803-22576-1-git-send-email-swarren@wwwdotorg.org>
Download mbox | patch
Permalink /patch/231874/
State Accepted
Delegated to: Albert ARIBAUD
Headers show

Comments

Stephen Warren - March 28, 2013, 4:43 a.m.
Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
driver to conform to this.

Have the timer implementation export a custom API get_timer_us() for use
by the BCM2835 MMC API, which needs us resolution for a HW workaround.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: Export custom API get_timer_us() to allow the MMC driver to maintain
    its current workaround implementation.
---
 arch/arm/cpu/arm1176/bcm2835/timer.c      |   14 +++++++++++---
 arch/arm/include/asm/arch-bcm2835/timer.h |    2 ++
 drivers/mmc/bcm2835_sdhci.c               |    5 +++--
 include/configs/rpi_b.h                   |    2 +-
 4 files changed, 17 insertions(+), 6 deletions(-)
Albert ARIBAUD - March 28, 2013, 11:15 a.m.
Hi Stephen,

On Wed, 27 Mar 2013 22:43:23 -0600, Stephen Warren
<swarren@wwwdotorg.org> wrote:

> Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
> driver to conform to this.
> 
> Have the timer implementation export a custom API get_timer_us() for use
> by the BCM2835 MMC API, which needs us resolution for a HW workaround.
> 
> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> ---
> v2: Export custom API get_timer_us() to allow the MMC driver to maintain
>     its current workaround implementation.
> ---

This patch and "mmc: bcm2835: fix delays in bug workaround" cannot be
both applied together. Can you do a V2 for the delays fix patch too?

Amicalement,
Stephen Warren - March 28, 2013, 2:59 p.m.
On 03/28/2013 05:15 AM, Albert ARIBAUD wrote:
> Hi Stephen,
> 
> On Wed, 27 Mar 2013 22:43:23 -0600, Stephen Warren
> <swarren@wwwdotorg.org> wrote:
> 
>> Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
>> driver to conform to this.
>>
>> Have the timer implementation export a custom API get_timer_us() for use
>> by the BCM2835 MMC API, which needs us resolution for a HW workaround.
>>
>> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
>> ---
>> v2: Export custom API get_timer_us() to allow the MMC driver to maintain
>>     its current workaround implementation.
>> ---
> 
> This patch and "mmc: bcm2835: fix delays in bug workaround" cannot be
> both applied together. Can you do a V2 for the delays fix patch too?

This patch replaces the two previous separate patches. Only this one
needs to be applied.
Albert ARIBAUD - March 28, 2013, 3:14 p.m.
Hi Stephen,

On Thu, 28 Mar 2013 08:59:05 -0600, Stephen Warren
<swarren@wwwdotorg.org> wrote:

> On 03/28/2013 05:15 AM, Albert ARIBAUD wrote:
> > Hi Stephen,
> > 
> > On Wed, 27 Mar 2013 22:43:23 -0600, Stephen Warren
> > <swarren@wwwdotorg.org> wrote:
> > 
> >> Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
> >> driver to conform to this.
> >>
> >> Have the timer implementation export a custom API get_timer_us() for use
> >> by the BCM2835 MMC API, which needs us resolution for a HW workaround.
> >>
> >> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> >> ---
> >> v2: Export custom API get_timer_us() to allow the MMC driver to maintain
> >>     its current workaround implementation.
> >> ---
> > 
> > This patch and "mmc: bcm2835: fix delays in bug workaround" cannot be
> > both applied together. Can you do a V2 for the delays fix patch too?
> 
> This patch replaces the two previous separate patches. Only this one
> needs to be applied.

Ok -- thanks. Will soon (i.e., in one hour at most) be available in
u-boot-arm/master.

Amicalement,
Stephen Warren - April 4, 2013, 3:22 a.m.
On 03/28/2013 09:14 AM, Albert ARIBAUD wrote:
> Hi Stephen,
> 
> On Thu, 28 Mar 2013 08:59:05 -0600, Stephen Warren
> <swarren@wwwdotorg.org> wrote:
> 
>> On 03/28/2013 05:15 AM, Albert ARIBAUD wrote:
>>> Hi Stephen,
>>>
>>> On Wed, 27 Mar 2013 22:43:23 -0600, Stephen Warren
>>> <swarren@wwwdotorg.org> wrote:
>>>
>>>> Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
>>>> driver to conform to this.
>>>>
>>>> Have the timer implementation export a custom API get_timer_us() for use
>>>> by the BCM2835 MMC API, which needs us resolution for a HW workaround.
>>>>
>>>> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
>>>> ---
>>>> v2: Export custom API get_timer_us() to allow the MMC driver to maintain
>>>>     its current workaround implementation.
>>>> ---
>>>
>>> This patch and "mmc: bcm2835: fix delays in bug workaround" cannot be
>>> both applied together. Can you do a V2 for the delays fix patch too?
>>
>> This patch replaces the two previous separate patches. Only this one
>> needs to be applied.
> 
> Ok -- thanks. Will soon (i.e., in one hour at most) be available in
> u-boot-arm/master.

I can't see it there yet. I assume this patch is targeted at the release?
Albert ARIBAUD - April 4, 2013, 7:09 a.m.
Hi Stephen,

On Wed, 03 Apr 2013 21:22:06 -0600, Stephen Warren
<swarren@wwwdotorg.org> wrote:

> On 03/28/2013 09:14 AM, Albert ARIBAUD wrote:
> > Hi Stephen,
> > 
> > On Thu, 28 Mar 2013 08:59:05 -0600, Stephen Warren
> > <swarren@wwwdotorg.org> wrote:
> > 
> >> On 03/28/2013 05:15 AM, Albert ARIBAUD wrote:
> >>> Hi Stephen,
> >>>
> >>> On Wed, 27 Mar 2013 22:43:23 -0600, Stephen Warren
> >>> <swarren@wwwdotorg.org> wrote:
> >>>
> >>>> Apparently, CONFIG_SYS_HZ must be 1000. Change this, and fix the timer
> >>>> driver to conform to this.
> >>>>
> >>>> Have the timer implementation export a custom API get_timer_us() for use
> >>>> by the BCM2835 MMC API, which needs us resolution for a HW workaround.
> >>>>
> >>>> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> >>>> ---
> >>>> v2: Export custom API get_timer_us() to allow the MMC driver to maintain
> >>>>     its current workaround implementation.
> >>>> ---
> >>>
> >>> This patch and "mmc: bcm2835: fix delays in bug workaround" cannot be
> >>> both applied together. Can you do a V2 for the delays fix patch too?
> >>
> >> This patch replaces the two previous separate patches. Only this one
> >> needs to be applied.
> > 
> > Ok -- thanks. Will soon (i.e., in one hour at most) be available in
> > u-boot-arm/master.
> 
> I can't see it there yet. I assume this patch is targeted at the release?

My fault. I'd applied it somewhere in my tree and marked it accepted in
patchwork (I can find trace of both actions) but for some reason, it
did not end on my master branch.

Error fixed now, commit 5eaa2156 at ARM ToT.

Amicalement,

Patch

diff --git a/arch/arm/cpu/arm1176/bcm2835/timer.c b/arch/arm/cpu/arm1176/bcm2835/timer.c
index d232d7e..2edd671 100644
--- a/arch/arm/cpu/arm1176/bcm2835/timer.c
+++ b/arch/arm/cpu/arm1176/bcm2835/timer.c
@@ -23,7 +23,7 @@  int timer_init(void)
 	return 0;
 }
 
-ulong get_timer(ulong base)
+ulong get_timer_us(ulong base)
 {
 	struct bcm2835_timer_regs *regs =
 		(struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR;
@@ -31,6 +31,14 @@  ulong get_timer(ulong base)
 	return readl(&regs->clo) - base;
 }
 
+ulong get_timer(ulong base)
+{
+	ulong us = get_timer_us(0);
+	us /= (1000000 / CONFIG_SYS_HZ);
+	us -= base;
+	return us;
+}
+
 unsigned long long get_ticks(void)
 {
 	return get_timer(0);
@@ -46,10 +54,10 @@  void __udelay(unsigned long usec)
 	ulong endtime;
 	signed long diff;
 
-	endtime = get_timer(0) + usec;
+	endtime = get_timer_us(0) + usec;
 
 	do {
-		ulong now = get_timer(0);
+		ulong now = get_timer_us(0);
 		diff = endtime - now;
 	} while (diff >= 0);
 }
diff --git a/arch/arm/include/asm/arch-bcm2835/timer.h b/arch/arm/include/asm/arch-bcm2835/timer.h
index 30c70e0..c2001b6 100644
--- a/arch/arm/include/asm/arch-bcm2835/timer.h
+++ b/arch/arm/include/asm/arch-bcm2835/timer.h
@@ -34,4 +34,6 @@  struct bcm2835_timer_regs {
 #define BCM2835_TIMER_CS_M1	(1 << 1)
 #define BCM2835_TIMER_CS_M0	(1 << 0)
 
+extern ulong get_timer_us(ulong base);
+
 #endif
diff --git a/drivers/mmc/bcm2835_sdhci.c b/drivers/mmc/bcm2835_sdhci.c
index b0afc3c..54cfabf 100644
--- a/drivers/mmc/bcm2835_sdhci.c
+++ b/drivers/mmc/bcm2835_sdhci.c
@@ -39,6 +39,7 @@ 
 #include <common.h>
 #include <malloc.h>
 #include <sdhci.h>
+#include <asm/arch/timer.h>
 
 /* 400KHz is max freq for card ID etc. Use that as min */
 #define MIN_FREQ 400000
@@ -67,11 +68,11 @@  static inline void bcm2835_sdhci_raw_writel(struct sdhci_host *host, u32 val,
 	 * (Which is just as well - otherwise we'd have to nobble the DMA engine
 	 * too)
 	 */
-	while (get_timer(bcm_host->last_write) < bcm_host->twoticks_delay)
+	while (get_timer_us(bcm_host->last_write) < bcm_host->twoticks_delay)
 		;
 
 	writel(val, host->ioaddr + reg);
-	bcm_host->last_write = get_timer(0);
+	bcm_host->last_write = get_timer_us(0);
 }
 
 static inline u32 bcm2835_sdhci_raw_readl(struct sdhci_host *host, int reg)
diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 3d55d36..c18b35b 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -31,7 +31,7 @@ 
 #define CONFIG_MACH_TYPE		MACH_TYPE_BCM2708
 
 /* Timer */
-#define CONFIG_SYS_HZ			1000000
+#define CONFIG_SYS_HZ			1000
 
 /* Memory layout */
 #define CONFIG_NR_DRAM_BANKS		1