Skip to content
Snippets Groups Projects
Commit 9a042e9c authored by Jerry Van Baren's avatar Jerry Van Baren Committed by Stefan Roese
Browse files

Flash programming progress countdown.

parent 23e20aa6
No related branches found
No related tags found
No related merge requests found
...@@ -1946,6 +1946,11 @@ Configuration Settings: ...@@ -1946,6 +1946,11 @@ Configuration Settings:
is useful, if some of the configured banks are only is useful, if some of the configured banks are only
optionally available. 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: - CFG_RX_ETH_BUFFER:
Defines the number of ethernet receive buffers. On some Defines the number of ethernet receive buffers. On some
ethernet controllers it is recommended to set this value ethernet controllers it is recommended to set this value
......
...@@ -1179,6 +1179,22 @@ void flash_print_info (flash_info_t * info) ...@@ -1179,6 +1179,22 @@ void flash_print_info (flash_info_t * info)
return; return;
} }
/*-----------------------------------------------------------------------
* 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: * Copy memory to flash, returns:
* 0 - OK * 0 - OK
...@@ -1192,10 +1208,23 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) ...@@ -1192,10 +1208,23 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
int aln; int aln;
cfiword_t cword; cfiword_t cword;
int i, rc; int i, rc;
#ifdef CFG_FLASH_USE_BUFFER_WRITE #ifdef CFG_FLASH_USE_BUFFER_WRITE
int buffered_size; int buffered_size;
#endif #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 */ /* get lower aligned address */
wp = (addr & ~(info->portwidth - 1)); wp = (addr & ~(info->portwidth - 1));
...@@ -1219,6 +1248,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) ...@@ -1219,6 +1248,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
return rc; return rc;
wp += i; wp += i;
#ifdef CONFIG_FLASH_SHOW_PROGRESS
dots -= i;
FLASH_SHOW_PROGRESS(scale, dots, digit);
#endif
} }
/* handle the aligned part */ /* handle the aligned part */
...@@ -1248,6 +1281,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) ...@@ -1248,6 +1281,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
wp += i; wp += i;
src += i; src += i;
cnt -= i; cnt -= i;
#ifdef CONFIG_FLASH_SHOW_PROGRESS
dots -= i;
FLASH_SHOW_PROGRESS(scale, dots, digit);
#endif
} }
#else #else
while (cnt >= info->portwidth) { while (cnt >= info->portwidth) {
...@@ -1259,8 +1296,13 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) ...@@ -1259,8 +1296,13 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
return rc; return rc;
wp += info->portwidth; wp += info->portwidth;
cnt -= 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 */ #endif /* CFG_FLASH_USE_BUFFER_WRITE */
if (cnt == 0) { if (cnt == 0) {
return (0); return (0);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment