From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Sat, 14 Jan 2012 16:47:28 -0800 Subject: [U-Boot] [PATCH 16/17] lcd: Add CONSOLE_SCROLL_LINES option to speed console In-Reply-To: <1326588449-1794-1-git-send-email-sjg@chromium.org> References: <1326588449-1794-1-git-send-email-sjg@chromium.org> Message-ID: <1326588449-1794-17-git-send-email-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de When the cursor position gets to the end of the LCD console we normally scroll by one line. This adds an option to increase that value. Console scrolling is often slow, and if a large amount of output is being sent, increasing this option to 10 or so will speed things up considerably. Signed-off-by: Simon Glass --- README | 6 ++++++ common/lcd.c | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/README b/README index d0b891f..c2f6699 100644 --- a/README +++ b/README @@ -1389,6 +1389,12 @@ The following options need to be configured: to change data cache settings on a per-section basis (such as ARM). Only enabled on ARM at present. + CONSOLE_SCROLL_LINES + + When the console need to be scrolled, this is the number of + lines to scroll by. It defaults to 1. Increasing this makes + the console jump but can help speed up operation when scrolling + is slow. - Splash Screen Support: CONFIG_SPLASH_SCREEN diff --git a/common/lcd.c b/common/lcd.c index 707f785..b6da10e 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -130,12 +130,23 @@ void lcd_set_flush_dcache(int flush) static void console_scrollup (void) { + int rows = 1; + +#ifdef CONSOLE_SCROLL_LINES + rows = CONSOLE_SCROLL_LINES; +#endif /* Copy up rows ignoring the first one */ - memcpy (CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, CONSOLE_SCROLL_SIZE); + memcpy(CONSOLE_ROW_FIRST, + lcd_console_address + CONSOLE_ROW_SIZE * rows, + CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows); /* Clear the last one */ - memset (CONSOLE_ROW_LAST, COLOR_MASK(lcd_color_bg), CONSOLE_ROW_SIZE); + memset(lcd_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows, + COLOR_MASK(lcd_color_bg), + CONSOLE_ROW_SIZE * rows); + lcd_sync(); + console_row -= rows; } /*----------------------------------------------------------------------*/ @@ -165,7 +176,6 @@ static inline void console_newline (void) if (console_row >= CONSOLE_ROWS) { /* Scroll everything up */ console_scrollup () ; - --console_row; } } -- 1.7.7.3