[U-Boot-Users] [PATCH] CFI: fix timeout calculations

This patch fixes two problems with the cfi_flash timeout handling: 1) Correctly handle the cases where CFG_HZ != 1000 (several XScale-based boards) 2) Fix the timeout calculation of buffered writes (off by a factor of 1000)
Additionally, the patch trivially removes a redundant call of getenv()
Signed-off-by: Anders Larsen al@alarsen.net
---
drivers/cfi_flash.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/cfi_flash.c b/drivers/cfi_flash.c index a989d34..c7c9983 100644 --- a/drivers/cfi_flash.c +++ b/drivers/cfi_flash.c @@ -360,7 +360,7 @@ #ifdef CFG_FLASH_PROTECTION else { char *s = getenv("unlock");
- if (((s = getenv("unlock")) != NULL) && (strcmp(s, "yes") == 0)) { + if ((s != NULL) && (strcmp(s, "yes") == 0)) { /* * Only the U-Boot image and it's environment is protected, * all other sectors are unprotected (unlocked) if flash @@ -746,6 +746,10 @@ static int flash_status_check (flash_inf { ulong start;
+#if CFG_HZ != 1000 + tout *= CFG_HZ/1000; +#endif + /* Wait for command completion */ start = get_timer (0); while (flash_is_busy (info, sector)) { @@ -1160,8 +1164,9 @@ #endif info->buffer_size = (1 << flash_read_ushort (info, 0, FLASH_OFFSET_BUFFER_SIZE)); tmp = 1 << flash_read_uchar (info, FLASH_OFFSET_ETOUT); info->erase_blk_tout = (tmp * (1 << flash_read_uchar (info, FLASH_OFFSET_EMAX_TOUT))); - tmp = 1 << flash_read_uchar (info, FLASH_OFFSET_WBTOUT); - info->buffer_write_tout = (tmp * (1 << flash_read_uchar (info, FLASH_OFFSET_WBMAX_TOUT))); + tmp = (1 << flash_read_uchar (info, FLASH_OFFSET_WBTOUT)) * + (1 << flash_read_uchar (info, FLASH_OFFSET_WBMAX_TOUT)); + info->buffer_write_tout = tmp / 1000 + (tmp % 1000 ? 1 : 0); /* round up when converting to ms */ tmp = (1 << flash_read_uchar (info, FLASH_OFFSET_WTOUT)) * (1 << flash_read_uchar (info, FLASH_OFFSET_WMAX_TOUT)); info->write_tout = tmp / 1000 + (tmp % 1000 ? 1 : 0); /* round up when converting to ms */
participants (1)
-
Anders Larsen