Commit 676d319e authored by Simon Glass's avatar Simon Glass Committed by Tom Warren
Browse files

lcd: Add CONFIG_LCD_ALIGNMENT to select frame buffer alignment



The normal alignment is PAGE_SIZE, but if this is defined, we can support
other alignments.

The motivation for this change is to make the display section-aligned on
ARM so that we can easily turn off data caching for the frame buffer region
without resorting to level 2 page tables.
Signed-off-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
Signed-off-by: Tom Warren's avatarTom Warren <twarren@nvidia.com>
parent 0dde7f53
...@@ -1469,6 +1469,16 @@ CBFS (Coreboot Filesystem) support ...@@ -1469,6 +1469,16 @@ CBFS (Coreboot Filesystem) support
Normally display is black on white background; define Normally display is black on white background; define
CONFIG_SYS_WHITE_ON_BLACK to get it inverted. CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
CONFIG_LCD_ALIGNMENT
Normally the LCD is page-aligned (tyically 4KB). If this is
defined then the LCD will be aligned to this value instead.
For ARM it is sometimes useful to use MMU_SECTION_SIZE
here, since it is cheaper to change data cache settings on
a per-section basis.
- Splash Screen Support: CONFIG_SPLASH_SCREEN - Splash Screen Support: CONFIG_SPLASH_SCREEN
If this option is set, the environment is checked for If this option is set, the environment is checked for
......
...@@ -72,6 +72,10 @@ ...@@ -72,6 +72,10 @@
# endif # endif
#endif #endif
#ifndef CONFIG_LCD_ALIGNMENT
#define CONFIG_LCD_ALIGNMENT PAGE_SIZE
#endif
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
ulong lcd_setmem (ulong addr); ulong lcd_setmem (ulong addr);
...@@ -326,6 +330,12 @@ static void test_pattern(void) ...@@ -326,6 +330,12 @@ static void test_pattern(void)
/* ** GENERIC Initialization Routines */ /* ** GENERIC Initialization Routines */
/************************************************************************/ /************************************************************************/
int lcd_get_size(int *line_length)
{
*line_length = (panel_info.vl_col * NBITS(panel_info.vl_bpix)) / 8;
return *line_length * panel_info.vl_row;
}
int drv_lcd_init (void) int drv_lcd_init (void)
{ {
struct stdio_dev lcddev; struct stdio_dev lcddev;
...@@ -333,7 +343,7 @@ int drv_lcd_init (void) ...@@ -333,7 +343,7 @@ int drv_lcd_init (void)
lcd_base = (void *)(gd->fb_base); lcd_base = (void *)(gd->fb_base);
lcd_line_length = (panel_info.vl_col * NBITS (panel_info.vl_bpix)) / 8; lcd_get_size(&lcd_line_length);
lcd_init(lcd_base); /* LCD initialization */ lcd_init(lcd_base); /* LCD initialization */
...@@ -445,15 +455,16 @@ static int lcd_init(void *lcdbase) ...@@ -445,15 +455,16 @@ static int lcd_init(void *lcdbase)
ulong lcd_setmem(ulong addr) ulong lcd_setmem(ulong addr)
{ {
ulong size; ulong size;
int line_length = (panel_info.vl_col * NBITS(panel_info.vl_bpix)) / 8; int line_length;
debug("LCD panel info: %d x %d, %d bit/pix\n", panel_info.vl_col, debug("LCD panel info: %d x %d, %d bit/pix\n", panel_info.vl_col,
panel_info.vl_row, NBITS(panel_info.vl_bpix)); panel_info.vl_row, NBITS(panel_info.vl_bpix));
size = line_length * panel_info.vl_row; size = lcd_get_size(&line_length);
/* Round up to nearest full page */ /* Round up to nearest full page, or MMU section if defined */
size = (size + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); size = ALIGN(size, CONFIG_LCD_ALIGNMENT);
addr = ALIGN(addr - CONFIG_LCD_ALIGNMENT + 1, CONFIG_LCD_ALIGNMENT);
/* Allocate pages for the frame buffer. */ /* Allocate pages for the frame buffer. */
addr -= size; addr -= size;
......
...@@ -297,6 +297,9 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y); ...@@ -297,6 +297,9 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y);
/* Allow boards to customize the information displayed */ /* Allow boards to customize the information displayed */
void lcd_show_board_info(void); void lcd_show_board_info(void);
/* Return the size of the LCD frame buffer, and the line length */
int lcd_get_size(int *line_length);
/************************************************************************/ /************************************************************************/
/* ** BITMAP DISPLAY SUPPORT */ /* ** BITMAP DISPLAY SUPPORT */
/************************************************************************/ /************************************************************************/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment