[U-Boot-Users] [PATCH 1/2] Flash programming progress countdown.
Jerry Van Baren
gvb.uboot at gmail.com
Sat Mar 8 19:48:01 CET 2008
Signed-off-by: Gerald Van Baren <vanbaren at cideas.com>
---
OK, that was a fun way to waste way too much time. :-)
The resulting implementation counts down from n/5 to 1 (9..1, normally):
Copy to Flash... 9....8....7....6....5....4....3....2....1....done
I made it configurable by CONFIG_FLASH_SHOW_PROGRESS which is expected to
be an integer. When jdl completes his mission and we have a kernel-style
Kconfig, I envision an integer configuration with a recommended value
of 45.
I added a description to the README in what seemed to be the logical
place, at the end of the flash configs. If my logic doesn't match your
logic, holler and I'll move it.
Patch 2/2 will be enabling on the MPC8360EMDS board. I don't know how
the community would like to address this, I'm assuming it is best to
let the board maintainers pick this up rather than slamming it into
the boards that have CFI flash (grep says 407 boards).
README | 5 +++++
drivers/mtd/cfi_flash.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 1 deletions(-)
diff --git a/README b/README
index 491397a..a237829 100644
--- a/README
+++ b/README
@@ -1945,6 +1945,11 @@ Configuration Settings:
is useful, if some of the configured banks are only
optionally available.
+- CONFIG_FLASH_SHOW_PROGRESS
+ If defined (must be an integer), print out countdown
+ digits and dots. Recommended value: 45 (9..1) for 80
+ column displays, 15 (3..1) for 40 column displays.
+
- CFG_RX_ETH_BUFFER:
Defines the number of ethernet receive buffers. On some
ethernet controllers it is recommended to set this value
diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index 439c950..9347c35 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -1180,6 +1180,22 @@ void flash_print_info (flash_info_t * info)
}
/*-----------------------------------------------------------------------
+ * This is used in a few places in write_buf() to show programming
+ * progress. Making it a function is nasty because it needs to do side
+ * effect updates to digit and dots. Repeated code is nasty too, so
+ * we define it once here.
+ */
+#define FLASH_SHOW_PROGRESS(scale, dots, digit) \
+ if ((scale > 0) && (dots <= 0)) { \
+ if ((digit % 5) == 0) \
+ printf ("%d", digit / 5); \
+ else \
+ putc ('.'); \
+ digit--; \
+ dots += scale; \
+ }
+
+/*-----------------------------------------------------------------------
* Copy memory to flash, returns:
* 0 - OK
* 1 - write timeout
@@ -1192,10 +1208,23 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
int aln;
cfiword_t cword;
int i, rc;
-
#ifdef CFG_FLASH_USE_BUFFER_WRITE
int buffered_size;
#endif
+#ifdef CONFIG_FLASH_SHOW_PROGRESS
+ int digit = CONFIG_FLASH_SHOW_PROGRESS;
+ int scale = 0;
+ int dots = 0;
+
+ /*
+ * Suppress if there are fewer than CONFIG_FLASH_SHOW_PROGRESS writes.
+ */
+ if (cnt >= CONFIG_FLASH_SHOW_PROGRESS) {
+ scale = (int)((cnt + CONFIG_FLASH_SHOW_PROGRESS - 1) /
+ CONFIG_FLASH_SHOW_PROGRESS);
+ }
+#endif
+
/* get lower aligned address */
wp = (addr & ~(info->portwidth - 1));
@@ -1219,6 +1248,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
return rc;
wp += i;
+#ifdef CONFIG_FLASH_SHOW_PROGRESS
+ dots -= i;
+ FLASH_SHOW_PROGRESS(scale, dots, digit);
+#endif
}
/* handle the aligned part */
@@ -1248,6 +1281,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
wp += i;
src += i;
cnt -= i;
+#ifdef CONFIG_FLASH_SHOW_PROGRESS
+ dots -= i;
+ FLASH_SHOW_PROGRESS(scale, dots, digit);
+#endif
}
#else
while (cnt >= info->portwidth) {
@@ -1259,8 +1296,13 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
return rc;
wp += info->portwidth;
cnt -= info->portwidth;
+#ifdef CONFIG_FLASH_SHOW_PROGRESS
+ dots -= info->portwidth;
+ FLASH_SHOW_PROGRESS(scale, dots, digit);
+#endif
}
#endif /* CFG_FLASH_USE_BUFFER_WRITE */
+
if (cnt == 0) {
return (0);
}
--
1.5.4.1
More information about the U-Boot
mailing list