Message ID | 1376051599-7644-1-git-send-email-jilin@nvidia.com |
---|---|
State | Superseded |
Headers | show |
Dear Jim Lin, > TFTP booting is slow when a USB keyboard is installed and > stdin has usbkbd added. > This fix is to change Ctrl-C polling for USB keyboard to every second > when NET transfer is running. > > 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. > Changes in v3: > 1. Move changes to common/usb_kbd.c and doc/README.usb > 2. Rename config setting to CONFIG_USBKB_TESTC_PERIOD. > 3. Remove slow response on USB-keyboard input when TFTP boot is not > running. Changes in v4: > 1. Remove changes in doc/README.usb, common/usb_kbd.c and > CONFIG_USBKB_TESTC_PERIOD > 2. Modify net/net.c > Changes in v5: > 1. Change variable name to ctrlc_t_start. > 2. Use two calls of get_timer(0) to get time gap. > Changes in v6: > 1. In common/usb_kbd.c, check net_busy_flag to determine whether we poll > USB keyboard status. > 2. In include/usb.h, add external variable declaration net_busy_flag > Changes in v7: > 1. In common/usb_kbd.c and include/usb.h, add #ifdef CONFIG_CMD_NET. > 2. In common/usb_kbd.c, modify code to get correct time gap. > Changes in v8: > 1. Add __maybe_unused for variable kbd_testc_tms. > > common/usb_kbd.c | 13 +++++++++++++ > include/usb.h | 2 +- > 2 files changed, 14 insertions(+), 1 deletions(-) > > diff --git a/common/usb_kbd.c b/common/usb_kbd.c > index 3174b5e..4e7b304 100644 > --- a/common/usb_kbd.c > +++ b/common/usb_kbd.c > @@ -121,6 +121,9 @@ struct usb_kbd_pdata { > uint8_t flags; > }; > > +/* The period of time between two calls of usb_kbd_testc(). */ > +static unsigned long __maybe_unused kbd_testc_tms; > + > /* Generic keyboard event polling. */ > void usb_kbd_generic_poll(void) > { > @@ -366,6 +369,16 @@ static int usb_kbd_testc(void) > struct usb_device *usb_kbd_dev; > struct usb_kbd_pdata *data; > > +#ifdef CONFIG_CMD_NET > + /* > + * If net_busy_flag is 1, NET transfer is running, > + * then we check key-pressed every second (first check may be > + * less than 1 second) to improve TFTP booting performance. > + */ > + if (net_busy_flag && (get_timer(kbd_testc_tms) < CONFIG_SYS_HZ)) > + return 0; > + kbd_testc_tms = get_timer(0); > +#endif > dev = stdio_get_by_name(DEVNAME); > usb_kbd_dev = (struct usb_device *)dev->priv; > data = usb_kbd_dev->privptr; > diff --git a/include/usb.h b/include/usb.h > index d7b082d..5c95bf5 100644 > --- a/include/usb.h > +++ b/include/usb.h > @@ -206,7 +206,7 @@ int usb_host_eth_scan(int mode); > > int drv_usb_kbd_init(void); > int usb_kbd_deregister(void); > - > +extern int __maybe_unused net_busy_flag; I wonder what would happen if you declared it here as static int __maybe_unused Would it have some side-effects? > #endif > /* routines */ > int usb_init(void); /* initialize the USB Controller */ Othewise, Acked-by: Marek Vasut <marex@denx.de> Best regards, Marek Vasut
On 08/11/2013 12:08 PM, Marek Vasut wrote: > Dear Jim Lin, > >> TFTP booting is slow when a USB keyboard is installed and >> stdin has usbkbd added. >> This fix is to change Ctrl-C polling for USB keyboard to every second >> when NET transfer is running. >> diff --git a/include/usb.h b/include/usb.h >> +extern int __maybe_unused net_busy_flag; > > I wonder what would happen if you declared it here as > > static int __maybe_unused > > Would it have some side-effects? Then each file that includes this header will get a separate copy of the variable.
Dear Stephen Warren, > On 08/11/2013 12:08 PM, Marek Vasut wrote: > > Dear Jim Lin, > > > >> TFTP booting is slow when a USB keyboard is installed and > >> stdin has usbkbd added. > >> This fix is to change Ctrl-C polling for USB keyboard to every second > >> when NET transfer is running. > >> > >> diff --git a/include/usb.h b/include/usb.h > >> > >> +extern int __maybe_unused net_busy_flag; > > > > I wonder what would happen if you declared it here as > > > > static int __maybe_unused > > > > Would it have some side-effects? > > Then each file that includes this header will get a separate copy of the > variable. Ah, you're right. Best regards, Marek Vasut
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 3174b5e..4e7b304 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -121,6 +121,9 @@ struct usb_kbd_pdata { uint8_t flags; }; +/* The period of time between two calls of usb_kbd_testc(). */ +static unsigned long __maybe_unused kbd_testc_tms; + /* Generic keyboard event polling. */ void usb_kbd_generic_poll(void) { @@ -366,6 +369,16 @@ static int usb_kbd_testc(void) struct usb_device *usb_kbd_dev; struct usb_kbd_pdata *data; +#ifdef CONFIG_CMD_NET + /* + * If net_busy_flag is 1, NET transfer is running, + * then we check key-pressed every second (first check may be + * less than 1 second) to improve TFTP booting performance. + */ + if (net_busy_flag && (get_timer(kbd_testc_tms) < CONFIG_SYS_HZ)) + return 0; + kbd_testc_tms = get_timer(0); +#endif dev = stdio_get_by_name(DEVNAME); usb_kbd_dev = (struct usb_device *)dev->priv; data = usb_kbd_dev->privptr; diff --git a/include/usb.h b/include/usb.h index d7b082d..5c95bf5 100644 --- a/include/usb.h +++ b/include/usb.h @@ -206,7 +206,7 @@ int usb_host_eth_scan(int mode); int drv_usb_kbd_init(void); int usb_kbd_deregister(void); - +extern int __maybe_unused net_busy_flag; #endif /* routines */ int usb_init(void); /* initialize the USB Controller */
TFTP booting is slow when a USB keyboard is installed and stdin has usbkbd added. This fix is to change Ctrl-C polling for USB keyboard to every second when NET transfer is running. 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. Changes in v3: 1. Move changes to common/usb_kbd.c and doc/README.usb 2. Rename config setting to CONFIG_USBKB_TESTC_PERIOD. 3. Remove slow response on USB-keyboard input when TFTP boot is not running. Changes in v4: 1. Remove changes in doc/README.usb, common/usb_kbd.c and CONFIG_USBKB_TESTC_PERIOD 2. Modify net/net.c Changes in v5: 1. Change variable name to ctrlc_t_start. 2. Use two calls of get_timer(0) to get time gap. Changes in v6: 1. In common/usb_kbd.c, check net_busy_flag to determine whether we poll USB keyboard status. 2. In include/usb.h, add external variable declaration net_busy_flag Changes in v7: 1. In common/usb_kbd.c and include/usb.h, add #ifdef CONFIG_CMD_NET. 2. In common/usb_kbd.c, modify code to get correct time gap. Changes in v8: 1. Add __maybe_unused for variable kbd_testc_tms. common/usb_kbd.c | 13 +++++++++++++ include/usb.h | 2 +- 2 files changed, 14 insertions(+), 1 deletions(-)