From patchwork Thu Jan 20 02:06:56 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Besemer X-Patchwork-Id: 79633 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 6DC04B70AF for ; Thu, 20 Jan 2011 13:07:09 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2DF1428096; Thu, 20 Jan 2011 03:07:07 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jvRqxUrJaNIt; Thu, 20 Jan 2011 03:07:06 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DF93A2808D; Thu, 20 Jan 2011 03:07:03 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 199032808D for ; Thu, 20 Jan 2011 03:07:01 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xw-5ry3LVbXT for ; Thu, 20 Jan 2011 03:06:59 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-bw0-f44.google.com (mail-bw0-f44.google.com [209.85.214.44]) by theia.denx.de (Postfix) with ESMTPS id 052F52808C for ; Thu, 20 Jan 2011 03:06:56 +0100 (CET) Received: by bwz12 with SMTP id 12so116278bwz.3 for ; Wed, 19 Jan 2011 18:06:56 -0800 (PST) MIME-Version: 1.0 Received: by 10.204.71.82 with SMTP id g18mr1345229bkj.166.1295489216207; Wed, 19 Jan 2011 18:06:56 -0800 (PST) Received: by 10.204.62.198 with HTTP; Wed, 19 Jan 2011 18:06:56 -0800 (PST) Date: Wed, 19 Jan 2011 18:06:56 -0800 Message-ID: From: Thomas Besemer To: u-boot@lists.denx.de Subject: [U-Boot] IMX51 EVK Splash Screen X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.9 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Hi folks - I had posted last week. I was able to get basic Splash Screen going on EVK, through using patches I found from googling around. At the end of this email, the patch set that shows the differences from the U-Boot I pulled on 12/24/2010. I am not sure I have the right patch set, but in this case, what I have does seem to work; U-Boot does output to LCD display on the second Display Interface. Through some of the archives, this one specifically: http://www.mail-archive.com/u-boot@lists.denx.de/msg41664.html There seems to have been a discussion on lcd_setmem(). Has this been resolved, and I missed it? You'll see from patch set that I just put a very large buffer in place (hard coded hack). U-Boot hung on boot before I put this in, and based on what I see on mailing list, this seems to be an issue of not having the display information available early on in boot. At any rate, I got it to boot, and see that the LCD shows display on startup. Yet, I lose the console on this; the serial port is read, but the output goes to LCD. I have still not displayed a bit map image, but with IPU working, not horribly concerned. In an ideal world, what I would like is to not loose the console. I want stdin/stdout to remain on serial port, while I toss a bit map out on LCD. Any comments on how to do this? End game is that I toss a splash screen up on LCD on EVK, while having U-Boot information still on the console. So, a couple of things: 1. Do I have correct patch work for this version of U-Boot, or is there a newer version of U-Boot to pull? I pulled both mainline and IMX tree yesterday, don't see the MX51 EVK in them. 2. How to configure so that I get console while LCD is available for display. 3. What is current status on lcd_setmem() thing. If this patch set that I have is workable, then I am going to move forward to put in support for DVI interface on EVK, and figure out how to use U-Boot Environment Variables to specify which DIU to use. I might have missed a few things along the way folks; I am not the sharpest tool in the shed. Please let me know if I missed patch sets on lcd_setmem(), and help me understand how to make sure console works with Splash Screen. Thanks, tom struct mxcfb_info *mxcfbi; @@ -550,11 +550,14 @@ mxcfbi->blank = FB_BLANK_POWERDOWN; } - mxcfbi->ipu_di = 0; + mxcfbi->ipu_di = ipu_di; ipu_disp_set_global_alpha(mxcfbi->ipu_ch, 1, 0x80); ipu_disp_set_color_key(mxcfbi->ipu_ch, 0, 0); - strcpy(fbi->fix.id, "DISP3 BG"); + if (ipu_di == 0) + strcpy(fbi->fix.id, "DISP3 BG"); + else if (ipu_di == 1) + strcpy(fbi->fix.id, "DISP3 BG - DI1"); g_dp_in_use = 1; @@ -625,9 +628,10 @@ memset(lcdbase, 0, mem_len); } -int mx51_fb_init(struct fb_videomode *mode) +int mx51_fb_init(struct fb_videomode *mode, u32 ipu_di, u32 bppix) { int ret; + uint32_t pixfmt = 0; ret = ipu_probe(); if (ret) @@ -635,8 +639,24 @@ lcd_base += 56; + switch (bppix) { + case 32: + pixfmt = IPU_PIX_FMT_BGR32; + break; + case 24: + pixfmt = IPU_PIX_FMT_BGR24; + break; + case 18: + pixfmt = IPU_PIX_FMT_RGB666; + break; + case 16: + pixfmt = IPU_PIX_FMT_RGB565; + break; + } + + debug("Framebuffer at 0x%x\n", (unsigned int)lcd_base); - ret = mxcfb_probe(IPU_PIX_FMT_RGB666, mode); + ret = mxcfb_probe(pixfmt, mode, ipu_di); return ret; } Index: include/configs/mx51evk.h =================================================================== --- include/configs/mx51evk.h (revision 173) +++ include/configs/mx51evk.h (working copy) @@ -190,6 +190,15 @@ #define CONFIG_SYS_DDR_CLKSEL 0 #define CONFIG_SYS_CLKTL_CBCDR 0x59E35100 +/* + * Framebuffer and LCD + */ +#define CONFIG_LCD +#define CONFIG_VIDEO_MX5 +#define LCD_BPP LCD_COLOR16 +#define CONFIG_CMD_BMP +#define CONFIG_BMP_16BPP + /*----------------------------------------------------------------------- * FLASH and environment organization */ Index: board/freescale/mx51evk/mx51evk.c =================================================================== --- board/freescale/mx51evk/mx51evk.c (revision 170) +++ board/freescale/mx51evk/mx51evk.c (working copy) @@ -34,10 +34,38 @@ #include #include +#ifdef CONFIG_LCD +#include +#include +#endif + DECLARE_GLOBAL_DATA_PTR; static u32 system_rev; +extern int mx51_fb_init(struct fb_videomode *mode, u32 ipu_di, u32 pix_fmt); +#ifdef CONFIG_LCD +static struct fb_videomode claa_wvga = { + "CLAA07LC0ACW", + 57, /* Refresh */ + 800, /* xres */ + 480, /* yres */ + 37037, /* pixclock = 27Mhz */ + 40, /* left margin */ + 60, /* right margin */ + 10, /* upper margin */ + 10, /* lower margin */ + 20, /* hsync-len */ + 10, /* vsync-len */ + 0, /* sync */ + FB_VMODE_NONINTERLACED, /* vmode */ + 0, /* flag */ +}; + +static int wvga_ipu_di = 1; +static int wvga_bppix = 16; +#endif + #ifdef CONFIG_FSL_ESDHC struct fsl_esdhc_cfg esdhc_cfg[2] = { {MMC_SDHC1_BASE_ADDR, 1}, @@ -148,6 +176,41 @@ mxc_iomux_set_pad(MX51_PIN_NANDF_D11, 0x2180); } +#ifdef CONFIG_LCD +void setup_iomux_ipu(void) +{ + puts( "setup_iopmux_ipu(): invoked\n" ); + /* DISP2_DAT [0:15] are configured by default */ + mxc_request_iomux(MX51_PIN_DI1_D1_CS, IOMUX_CONFIG_ALT4); + mxc_iomux_set_pad(MX51_PIN_DI1_D1_CS, + PAD_CTL_PKE_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST); + mxc_request_iomux(MUX_IN_GPIO3_IPP_IND_G_IN_4_SELECT_INPUT, + INPUT_CTL_PATH1); + + /* DISP2_DRDY pin */ + mxc_request_iomux(MX51_PIN_DI_GP4, IOMUX_CONFIG_ALT4); + mxc_iomux_set_pad(MX51_PIN_DI_GP4, PAD_CTL_PKE_ENABLE | + PAD_CTL_PUE_KEEPER | PAD_CTL_DRV_LOW); + + puts( "setup_iopmux_ipu(): done\n" ); +} + +#endif + +#ifdef CONFIG_LCD +void lcd_enable(void) +{ + int ret; +puts( "lcd_enable(): invoked\n" ); + + ret = mx51_fb_init(&claa_wvga, wvga_ipu_di, wvga_bppix); + if (ret) { + puts("LCD cannot be configured\n"); + } + +} +#endif + #ifdef CONFIG_MXC_SPI static void setup_iomux_spi(void) { @@ -409,7 +472,9 @@ setup_iomux_uart(); setup_iomux_fec(); - +#ifdef CONFIG_LCD + setup_iomux_ipu(); +#endif return 0; } Index: common/lcd.c =================================================================== --- common/lcd.c (revision 170) +++ common/lcd.c (working copy) @@ -438,16 +438,21 @@ ulong lcd_setmem (ulong addr) { ulong size; +#ifdef ORIGINAL_PRE_TBESEMER 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; +#else + size = 1024 * 1024 * 12; /* Round up to nearest full page */ size = (size + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); +#endif + /* Allocate pages for the frame buffer. */ addr -= size; Index: drivers/video/mxc_ipuv3_fb.c =================================================================== --- drivers/video/mxc_ipuv3_fb.c (revision 170) +++ drivers/video/mxc_ipuv3_fb.c (working copy) @@ -526,7 +526,7 @@ * * @return Appropriate error code to the kernel common code */ -static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode) +static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode, u32 ipu_di) { struct fb_info *fbi;