From 66eaf3d9cec2390d0c6036b90e9ea680ebafb30c Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Wed, 25 Aug 2010 22:29:55 +0000 Subject: 2010-08-25 Till Straumann PR 1689/bsps * shared/flash/intelFlash.c: Scale erase timeout by actual system clock rate rather than assuming a fixed value. --- c/src/lib/libbsp/powerpc/ChangeLog | 6 ++++++ c/src/lib/libbsp/powerpc/shared/flash/intelFlash.c | 21 +++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/c/src/lib/libbsp/powerpc/ChangeLog b/c/src/lib/libbsp/powerpc/ChangeLog index 8d847545ae..f0ef3a4fa1 100644 --- a/c/src/lib/libbsp/powerpc/ChangeLog +++ b/c/src/lib/libbsp/powerpc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-25 Till Straumann + + PR 1689/bsps + * shared/flash/intelFlash.c: Scale erase timeout by actual + system clock rate rather than assuming a fixed value. + 2010-02-01 Till Straumann PR 1492/bsps diff --git a/c/src/lib/libbsp/powerpc/shared/flash/intelFlash.c b/c/src/lib/libbsp/powerpc/shared/flash/intelFlash.c index c0685b32f0..3238cb7e97 100644 --- a/c/src/lib/libbsp/powerpc/shared/flash/intelFlash.c +++ b/c/src/lib/libbsp/powerpc/shared/flash/intelFlash.c @@ -56,16 +56,20 @@ */ #ifdef TESTING -#define TIMEOUT_US 100000 -#define rtems_task_wake_after(args...) do {} while (0) +#define TIMEOUT_US 100000 +#define rtems_task_wake_after(t) sleep(t) +#define CLOCKRATE_GET(p) (*(p)=1) #else #include -#define TIMEOUT_US 1000 +#define TIMEOUT_US 1000 +#define CLOCKRATE_GET(p) rtems_clock_get( RTEMS_CLOCK_GET_TICKS_PER_SECOND, p ) #endif +#define ERASE_TIMEOUT_S 2 + #include #include #include @@ -321,14 +325,19 @@ uint32_t sta; STATIC int flash_erase_block_intel(struct bankdesc *b, uint32_t addr) { -uint32_t sta; -int i; +uint32_t sta; +int i; +rtems_interval p; + if ( (sta = flash_check_ready_intel(b, addr)) ) return sta; (void)BSP_flashReadRaw(F_CMD_WR_ERA, addr); (void)BSP_flashReadRaw(F_CMD_WR_CMD, addr); - i = 50; + + CLOCKRATE_GET( &p ); + i = p * ERASE_TIMEOUT_S; + while ( STA_RDYRDY != (STA_RDYRDY & (sta = BSP_flashReadRaw(F_CMD_RD_STA, addr))) && --i > 0 ) { rtems_task_wake_after(1); } -- cgit v1.2.3