* [U-Boot] [PATCH] cfi_flash: reset timer in flash status check
@ 2010-04-01 3:11 Thomas Chou
2010-04-01 3:15 ` [U-Boot] [PATCH v2] " Thomas Chou
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Chou @ 2010-04-01 3:11 UTC (permalink / raw)
To: u-boot
This patch adds reset_timer() before the flash status check
waiting loop.
Since the timer is basically running asynchronous to the cfi
code, it is possible to call get_timer(0), then only a few
_SYSCLK_ cycles later an interrupt is generated. This causes
timeout even though much less time has elapsed. So the timer
period registers should be reset before get_timer(0) is
called.
There is similar usage in nand_base.c.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
drivers/mtd/cfi_flash.c | 2 ++
include/configs/EP3C120.h | 10 +++++-----
include/configs/NEEK.h | 10 +++++-----
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index aae93bd..99300ba 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -544,6 +544,7 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer (0);
while (flash_is_busy (info, sector)) {
if (get_timer (start) > tout) {
@@ -630,6 +631,7 @@ static int flash_status_poll(flash_info_t *info, void *src, void *dst,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer(0);
while (1) {
switch (info->portwidth) {
diff --git a/include/configs/EP3C120.h b/include/configs/EP3C120.h
index cfd5569..6734a65 100644
--- a/include/configs/EP3C120.h
+++ b/include/configs/EP3C120.h
@@ -152,10 +152,10 @@
*/
#define CONFIG_SYS_NIOS_TMRBASE (LINUX_TIMER_1MS_BASE | IO_REGION_BASE)
#define CONFIG_SYS_NIOS_TMRIRQ LINUX_TIMER_1MS_IRQ
-#define CONFIG_SYS_NIOS_TMRCNT ((LINUX_TIMER_1MS_FREQ / \
- CONFIG_SYS_HZ) - 1)
-#define CONFIG_SYS_NIOS_TMRMS 1 /* Must be one */
-#define CONFIG_SYS_HZ 1000
+#define CONFIG_SYS_HZ 1000 /* Always 1000 */
+#define CONFIG_SYS_NIOS_TMRMS 10 /* Desired period (msec)*/
+#define CONFIG_SYS_NIOS_TMRCNT \
+ (CONFIG_SYS_NIOS_TMRMS * (LINUX_TIMER_1MS_FREQ / 1000) - 1)
/*
* STATUS LED
@@ -167,7 +167,7 @@
#define STATUS_LED_BIT 1 /* Bit-0 on PIO */
#define STATUS_LED_STATE 1 /* Blinking */
-#define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 2) /* 500 mS */
+#define STATUS_LED_PERIOD (500 / CONFIG_SYS_NIOS_TMRMS) /* 500 msec */
/*
* IDE support
diff --git a/include/configs/NEEK.h b/include/configs/NEEK.h
index f42701e..432a582 100644
--- a/include/configs/NEEK.h
+++ b/include/configs/NEEK.h
@@ -149,10 +149,10 @@
*/
#define CONFIG_SYS_NIOS_TMRBASE (SYS_CLK_TIMER_BASE | IO_REGION_BASE)
#define CONFIG_SYS_NIOS_TMRIRQ SYS_CLK_TIMER_IRQ
-#define CONFIG_SYS_NIOS_TMRCNT ((SYS_CLK_TIMER_FREQ / \
- CONFIG_SYS_HZ) - 1)
-#define CONFIG_SYS_NIOS_TMRMS 1 /* Must be one */
-#define CONFIG_SYS_HZ 1000
+#define CONFIG_SYS_HZ 1000 /* Always 1000 */
+#define CONFIG_SYS_NIOS_TMRMS 10 /* Desired period (msec)*/
+#define CONFIG_SYS_NIOS_TMRCNT \
+ (CONFIG_SYS_NIOS_TMRMS * (SYS_CLK_TIMER_FREQ / 1000) - 1)
/*
* STATUS LED
@@ -162,7 +162,7 @@
#define STATUS_LED_BIT CONFIG_SYS_GPIO_HBT
#define STATUS_LED_STATE 1 /* Blinking */
-#define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 2) /* 500 mS */
+#define STATUS_LED_PERIOD (500 / CONFIG_SYS_NIOS_TMRMS) /* 500 msec */
/*
* IDE support
--
1.6.6.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH v2] cfi_flash: reset timer in flash status check
2010-04-01 3:11 [U-Boot] [PATCH] cfi_flash: reset timer in flash status check Thomas Chou
@ 2010-04-01 3:15 ` Thomas Chou
2010-04-07 9:32 ` Stefan Roese
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Chou @ 2010-04-01 3:15 UTC (permalink / raw)
To: u-boot
This patch adds reset_timer() before the flash status check
waiting loop.
Since the timer is basically running asynchronous to the cfi
code, it is possible to call get_timer(0), then only a few
_SYSCLK_ cycles later an interrupt is generated. This causes
timeout even though much less time has elapsed. So the timer
period registers should be reset before get_timer(0) is
called.
There is similar usage in nand_base.c.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
Please ignore the earlier patch, which messed up when I added comments.
drivers/mtd/cfi_flash.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index aae93bd..99300ba 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -544,6 +544,7 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer (0);
while (flash_is_busy (info, sector)) {
if (get_timer (start) > tout) {
@@ -630,6 +631,7 @@ static int flash_status_poll(flash_info_t *info, void *src, void *dst,
#endif
/* Wait for command completion */
+ reset_timer();
start = get_timer(0);
while (1) {
switch (info->portwidth) {
--
1.6.6.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH v2] cfi_flash: reset timer in flash status check
2010-04-01 3:15 ` [U-Boot] [PATCH v2] " Thomas Chou
@ 2010-04-07 9:32 ` Stefan Roese
0 siblings, 0 replies; 3+ messages in thread
From: Stefan Roese @ 2010-04-07 9:32 UTC (permalink / raw)
To: u-boot
On Thursday 01 April 2010 05:15:05 Thomas Chou wrote:
> This patch adds reset_timer() before the flash status check
> waiting loop.
>
> Since the timer is basically running asynchronous to the cfi
> code, it is possible to call get_timer(0), then only a few
> _SYSCLK_ cycles later an interrupt is generated. This causes
> timeout even though much less time has elapsed. So the timer
> period registers should be reset before get_timer(0) is
> called.
>
> There is similar usage in nand_base.c.
Applied to u-boot-cfi-flash/master. Thanks.
Cheers,
Stefan
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-04-07 9:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-01 3:11 [U-Boot] [PATCH] cfi_flash: reset timer in flash status check Thomas Chou
2010-04-01 3:15 ` [U-Boot] [PATCH v2] " Thomas Chou
2010-04-07 9:32 ` Stefan Roese
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox