board.c: start_armboot()
1.lcd frame buffer的保留机理:
#ifdef CONFIG_LCD
# ifndef PAGE_SIZE
# define PAGE_SIZE 4096
# endif
/*
* reserve memory for LCD display (always full pages)
*/
/* bss_end is defined in the board-specific linker script */
addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1);
size = lcd_setmem (addr);
gd->fb_base = addr;
#endif /* CONFIG_LCD */
1)==> CONFIG_LCD in include/configs/smdk6410.h
==> PAGE_SIZE same as above
不同的芯片,不同的PAGE_SIZE,不同的LCD有无的配置
2)_bss_end
cpu/s3c64xx/start.S:
.globl _bss_start
_bss_start:
.word __bss_start
.globl _bss_end
_bss_end:
.word _end
3)boarc/samsung/smdk6410/u-boot.lds:
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
...
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}
4)common/lcd.c: lcd_setmem()
入口参数:addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); see above
/*
* This is called early in the system initialization to grab memory
* for the LCD controller.
* Returns new address for monitor, after reserving LCD buffer memory
*
* Note that this is running from ROM, so no write access to global data.
*/
ulong lcd_setmem (ulong addr)
{
ulong size;
int line_length = (panel_info.vl_col * NBITS (panel_info.vl_bpix)) / 8;
debug ("LCD panel info: %d x %d, %d bit/pix/n",
panel_info.vl_col, panel_info.vl_row, NBITS (panel_info.vl_bpix) );
size = line_length * panel_info.vl_row;
/* Round up to nearest full page */
size = (size + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1);
/* Allocate pages for the frame buffer. */
addr -= size;
debug ("Reserving %ldk for LCD Framebuffer at: %08lx/n", size>>10, addr);
return (addr);
}
===>这里没有支持6410的LCD,故,也无定义s3c6410的控制器的结构,也无初始化
===>panel_info
vidinfo_t panel_info;
===>vidinfo_t:
include/lcd.h
#if defined CONFIG_MPC823
/*
* LCD controller stucture for MPC823 CPU
*/
typedef struct vidinfo {
ushort vl_col; /* Number of columns (i.e. 640) */
ushort vl_row; /* Number of rows (i.e. 480) */
ushort vl_width; /* Width of display area in millimeters */
ushort vl_height; /* Height of display area in millimeters */
/* LCD configuration register */
u_char vl_c
uboot: lcd frame buffer的保留机理
最新推荐文章于 2023-04-05 23:09:42 发布
本文详细介绍了在UBoot中,针对LCD frame buffer的内存预留过程,包括通过配置选项CONFIG_LCD、PAGE_SIZE的定义,以及如何利用_bss_end进行内存地址计算。此外,还涉及到lcd_setmem()函数在早期系统初始化阶段的角色,该函数用于为LCD控制器分配内存,并返回新的监控内存地址。但文中提到对于SMDK6410平台,没有特定的LCD控制器结构和初始化设置。
摘要由CSDN通过智能技术生成