Am Donnerstag, den 27.09.2012, 17:44 -0700 schrieb Simon Glass: > 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 <s...@chromium.org> > --- > Changes in v3: > - Fix tiny bug in mult-line lcd scrolling > > Changes in v4: > - Use CONFIG_CONSOLE_SCROLL_LINES instead of CONSOLE_SCROLL_LINES > - Put default CONFIG_CONSOLE_SCROLL_LINES at top of file > > README | 6 ++++++ > common/lcd.c | 18 +++++++++++++++--- > 2 files changed, 21 insertions(+), 3 deletions(-) > > diff --git a/README b/README > index 1d0ce50..14b1f83 100644 > --- a/README > +++ b/README > @@ -1449,6 +1449,12 @@ The following options need to be configured: > here, since it is cheaper to change data cache settings on > a per-section basis. > > + CONFIG_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 74fa3f9..460f0ca 100644 > --- a/common/lcd.c > +++ b/common/lcd.c > @@ -76,6 +76,11 @@ > #define CONFIG_LCD_ALIGNMENT PAGE_SIZE > #endif > > +/* By default we scroll by a single line */ > +#ifndef CONFIG_CONSOLE_SCROLL_LINES > +#define CONFIG_CONSOLE_SCROLL_LINES 1 > +#endif > + > DECLARE_GLOBAL_DATA_PTR; > > ulong lcd_setmem (ulong addr); > @@ -131,12 +136,20 @@ void lcd_set_flush_dcache(int flush) > > static void console_scrollup(void) > { > + const int rows = CONFIG_CONSOLE_SCROLL_LINES; > + > /* Copy up rows ignoring the first one */ Comment is inaccurate as you possibly ignore more than the first line.
> - 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 */ Same as above. > - 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 +178,6 @@ static inline void console_newline(void) > if (console_row >= CONSOLE_ROWS) { > /* Scroll everything up */ > console_scrollup(); > - --console_row; > } else { > lcd_sync(); > } _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot