mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
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 <sjg@chromium.org> Signed-off-by: Tom Warren <twarren@nvidia.com>
This commit is contained in:
parent
0dde7f5379
commit
676d319ef5
10
README
10
README
@ -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
|
||||||
|
21
common/lcd.c
21
common/lcd.c
@ -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)
|
|||||||
/* ** 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)
|
|||||||
|
|
||||||
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)
|
|||||||
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);
|
|||||||
/* 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 */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user