经过两个星期的努力,终于初步搞定了位开发板的uboot增加开机logo,此中酸甜苦辣,最终转化为调通那一刻的巨大喜悦,废话不多少,转入正题。
uboot增加开机logo的思路其实很简单,写好lcd控制器的底层代码,然后填充一个叫GraphicDevice的结构体,并在/include/configs/am3517_evm.h中增加与显示logo相关的宏。
在/drivers/video目录下增加两个文件:omap3Lcd.h和omap3Lcd.c,并在该层Makefile加上编译该文件。文件内容分别如下:
/******************omap3Lcd.c*******************/
#include <common.h>
#include <asm/io.h>
#include <asm/arch/mem.h>
#include <asm/arch/mux.h>
#include <asm/arch/sys_proto.h>
#include <asm/mach-types.h>
#include <video_fb.h>
#include "omap3Lcd.h"
GraphicDevice glcd_dev;
static int lcd_static_mem[640*480];
int lcd_ctrl_init(void )
{
u32 l = clkctrl_read_reg(CM_CLKSEL2_PLL);
printf("CLKSEL2_PLL is %d\n",l);
u32 m = clkctrl_read_reg(CM_CLKEN_PLL);
printf("CM_CLLEN_PLL is %d\n",m);
m &= 0xffffff;
m |= (0x7 << 16);//|(0x0f<<20);
clkctrl_write_reg(CM_CLKEN_PLL,m);
// printf("CM_CLLEN_PLL is %d\n",m);
dss_clk_write_reg(CM_CLKSEL_DSS,0x10009);
dss_clk_write_reg(CM_FCLKEN_DSS, 5);
dss_clk_write_reg(CM_ICLKEN_DSS, 1);
dss_clk_write_reg(CM_AUTOIDLE_DSS, 0);
dss_clk_write_reg(CM_SLEEPDEP_DSS,0);
dss_clk_write_reg(CM_CLKSTCTRL_DSS,0);
dss_write_reg(DSS_SYSCONFIG,0x0002);
while(! dss_read_reg(DSS_SYSSTATUS));
dispc_write_reg(DISPC_CONTROL, 0x00018108 );//change 18309 to 18109 for 16bit per pix
dispc_write_reg(DISPC_SIZE_LCD, 0x01df027f); //size:640*480
dispc_write_reg(DISPC_CONFIG,0x4);
dispc_write_reg(DISPC_TIMING_H, 0x0720101e); //LCD Timing params
dispc_write_reg(DISPC_TIMING_V, 0x02100a03);
dispc_write_reg(DISPC_POL_FREQ, 0x00);
dispc_write_reg(DISPC_DIVISOR, 0x00010009); //maybe need change
dispc_write_reg(DISPC_GFX_SIZE, 0x01df027f);
dispc_write_reg(DISPC_GFX_FIFO_THRESHOLD, 0x03ff0300);
dispc_write_re