[U-Boot] [[PATCH V2 1/1] console: Improve TFTP booting performance

TFTP booting is observed a little bit slow, especially when a USB keyboard is installed. The fix is to check whether Ctrl-C key is pressed every CONFIG_CTRLC_POLL_S second.
Signed-off-by: Jim Lin jilin@nvidia.com --- Changes in V2: 1. Change configuration name from CONFIG_CTRLC_POLL_MS to CONFIG_CTRLC_POLL_S. 2. New code will be executed only when CONFIG_CTRLC_POLL_S is defined in configuration header file. 3. Add description in README.console.
common/console.c | 16 ++++++++++++++++ doc/README.console | 10 ++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/common/console.c b/common/console.c index bf73178..b09e129 100644 --- a/common/console.c +++ b/common/console.c @@ -521,12 +521,28 @@ int vprintf(const char *fmt, va_list args) return i; }
+#ifdef CONFIG_CTRLC_POLL_S +/* + * Process Ctrl-C every CONFIG_CTRLC_POLL_S second(s) to improve performance + * (like TFTP boot) when interlaced with other tasks like USB KB + * polling. + */ +static unsigned long ctrlc_ts = (CONFIG_CTRLC_POLL_S * CONFIG_SYS_HZ); +#endif + /* test if ctrl-c was pressed */ static int ctrlc_disabled = 0; /* see disable_ctrl() */ static int ctrlc_was_pressed = 0; int ctrlc(void) { if (!ctrlc_disabled && gd->have_console) { +#ifdef CONFIG_CTRLC_POLL_S + if (get_timer(ctrlc_ts) < (CONFIG_CTRLC_POLL_S + * CONFIG_SYS_HZ)) + return 0; + else + ctrlc_ts = get_timer(0); +#endif if (tstc()) { switch (getc()) { case 0x03: /* ^C - Control C */ diff --git a/doc/README.console b/doc/README.console index b353f9f..6b38b8c 100644 --- a/doc/README.console +++ b/doc/README.console @@ -116,3 +116,13 @@ CREDITS for other contact informations):
- MPC823FADS with AD7176 on a PAL TV (YCbYCr) - arsenio@tin.it - GENIETV with AD7177 on a PAL TV (YCbYCr) - arsenio@tin.it + +Config Switches: +---------------- +CONFIG_CTRLC_POLL_S define a value to check whether Ctrl-C is pressed + every defined second(s). This is to improve TFTP + booting if USB KB is installed and polling is used. + For example: + Define the following in configuration header file + #define CONFIG_CTRLC_POLL_S 1 + for console to check Ctrl-C every second.

Dear Jim Lin,
In message 1363861408-21042-1-git-send-email-jilin@nvidia.com you wrote:
TFTP booting is observed a little bit slow, especially when a USB keyboard is installed. The fix is to check whether Ctrl-C key is pressed every CONFIG_CTRLC_POLL_S second.
Signed-off-by: Jim Lin jilin@nvidia.com
Changes in V2:
- Change configuration name from CONFIG_CTRLC_POLL_MS to CONFIG_CTRLC_POLL_S.
- New code will be executed only when CONFIG_CTRLC_POLL_S is defined in configuration header file.
- Add description in README.console.
common/console.c | 16 ++++++++++++++++ doc/README.console | 10 ++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-)
NAK.
You modify not only the TFTP related code, but the general behaviour everywhere. For you, and for TFTP operation, it might be sufficient to check for ^C only every few seconds, but in general this is not the case.
You write your problem comes from using a USB keyboard, where tstc() appears to be a slow operation.
In this case it would be best to fix the problem at the root, i. e. improve the performance of tstc() so it doesn't hurt any more.
What you are doing here is just paperingover a problem which may (and will) hit you in other places as well. Do not do that. Fix the root problem.
Best regards,
Wolfgang Denk
participants (2)
-
Jim Lin
-
Wolfgang Denk