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

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(-)
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(®s->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

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,

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.

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,

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?

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,
participants (2)
-
Albert ARIBAUD
-
Stephen Warren