From patchwork Thu Jun 27 09:45:22 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Lin X-Patchwork-Id: 255028 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id C658A2C0096 for ; Thu, 27 Jun 2013 19:46:34 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D51CF4A03C; Thu, 27 Jun 2013 11:46:11 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kMap19HOX+dj; Thu, 27 Jun 2013 11:46:11 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 892BE4A02F; Thu, 27 Jun 2013 11:45:59 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0F5BE4A027 for ; Thu, 27 Jun 2013 11:45:50 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nOyawkfH6Ir2 for ; Thu, 27 Jun 2013 11:45:42 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from hqemgate04.nvidia.com (hqemgate04.nvidia.com [216.228.121.35]) by theia.denx.de (Postfix) with ESMTPS id A9A754A026 for ; Thu, 27 Jun 2013 11:45:33 +0200 (CEST) Received: from hqnvupgp08.nvidia.com (Not Verified[216.228.121.13]) by hqemgate04.nvidia.com id ; Thu, 27 Jun 2013 02:45:43 -0700 Received: from hqemhub03.nvidia.com ([172.20.12.94]) by hqnvupgp08.nvidia.com (PGP Universal service); Thu, 27 Jun 2013 02:45:23 -0700 X-PGP-Universal: processed; by hqnvupgp08.nvidia.com on Thu, 27 Jun 2013 02:45:23 -0700 Received: from localhost.localdomain (172.20.144.16) by hqemhub03.nvidia.com (172.20.150.15) with Microsoft SMTP Server (TLS) id 8.3.298.1; Thu, 27 Jun 2013 02:45:26 -0700 From: Jim Lin To: Date: Thu, 27 Jun 2013 17:45:22 +0800 Message-ID: <1372326323-8661-1-git-send-email-jilin@nvidia.com> X-Mailer: git-send-email 1.7.7 X-NVConfidentiality: public MIME-Version: 1.0 Cc: twarren@nvidia.com Subject: [U-Boot] [PATCH v3 1/2] console: usbkbd: Improve TFTP booting performance X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de TFTP booting is observed a little bit slow, especially when a USB keyboard is installed. The fix is to move polling to every second if we sense that other task like TFTP boot is running. Signed-off-by: Jim Lin --- 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. common/usb_kbd.c | 20 ++++++++++++++++++++ doc/README.usb | 15 ++++++++++++++- 2 files changed, 34 insertions(+), 1 deletions(-) diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 3174b5e..25bf677 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -121,6 +121,11 @@ struct usb_kbd_pdata { uint8_t flags; }; +#ifdef CONFIG_USBKB_TESTC_PERIOD +/* The period of time between two calls of usb_kbd_testc(). */ +static unsigned long kbd_testc_tms; +#endif + /* Generic keyboard event polling. */ void usb_kbd_generic_poll(void) { @@ -366,6 +371,21 @@ static int usb_kbd_testc(void) struct usb_device *usb_kbd_dev; struct usb_kbd_pdata *data; +#ifdef CONFIG_USBKB_TESTC_PERIOD + /* + * T is the time between two calls of usb_kbd_testc(). + * If CONFIG_USBKB_TESTC_PERIOD ms < T < 1000 ms, + * it implies other task like TFTP boot is running, + * then we reduce polling to every second + * to improve TFTP booting performance. + */ + if ((get_timer(kbd_testc_tms) >= + (CONFIG_USBKB_TESTC_PERIOD * CONFIG_SYS_HZ / 1000)) && + (get_timer(kbd_testc_tms) < CONFIG_SYS_HZ)) + return 0; + else + 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/doc/README.usb b/doc/README.usb index b4c3ef5..ff4ee6f 100644 --- a/doc/README.usb +++ b/doc/README.usb @@ -80,7 +80,20 @@ CONFIG_USB_UHCI defines the lowlevel part.A lowlevel part must be defined CONFIG_USB_KEYBOARD enables the USB Keyboard CONFIG_USB_STORAGE enables the USB storage devices CONFIG_USB_HOST_ETHER enables USB ethernet adapter support - +CONFIG_USBKB_TESTC_PERIOD defines the average time (in ms) between two calls + of usb_kbd_testc() when TFTP boot is not running + In u-boot console, usb_kbd_testc() will be called + periodically. + When this configuration is defined and other task like + TFTP boot is running, USB keyboard will be polled less + frequently and will be polled every second. + This is to improve TFTP booting performance when USB + keyboard is installed. + In u-boot console, no impact on keyboard input if TFTP + boot is not running. + Example: + Define the following in configuration header file + #define CONFIG_USBKB_TESTC_PERIOD 100 USB Host Networking ===================