diff options
| -rw-r--r-- | README | 6 | ||||
| -rw-r--r-- | common/lcd.c | 22 | 
2 files changed, 23 insertions, 5 deletions
@@ -1478,6 +1478,12 @@ CBFS (Coreboot Filesystem) support  		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 d2a3e9103..301760473 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)  { -	/* Copy up rows ignoring the first one */ -	memcpy(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, CONSOLE_SCROLL_SIZE); +	const int rows = CONFIG_CONSOLE_SCROLL_LINES; + +	/* Copy up rows ignoring those that will be overwritten */ +	memcpy(CONSOLE_ROW_FIRST, +	       lcd_console_address + CONSOLE_ROW_SIZE * rows, +	       CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows); + +	/* Clear the last rows */ +	memset(lcd_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows, +		COLOR_MASK(lcd_color_bg), +	       CONSOLE_ROW_SIZE * rows); -	/* Clear the last one */ -	memset(CONSOLE_ROW_LAST, COLOR_MASK(lcd_color_bg), CONSOLE_ROW_SIZE);  	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();  	}  |