[U-Boot] LCD Support on mx51 vision2

Hi,
Could anyone confirm that LCD support is functional on top-of-tree U-boot for mx51 vision2 board?
I am working on adding LCD support for mx51evk and I am getting the following error from mxcfb_map_video_memory:
U-Boot 2012.04.01-00075-g6efea73-dirty (May 08 2012 - 14:40:01)
CPU: Freescale i.MX51 rev3.0 at 800 MHz Reset cause: POR Board: MX51EVK DRAM: 512 MiB WARNING: Caches not enabled MMC: FSL_SDHC: 0, FSL_SDHC: 1 Unable to allocate framebuffer memory
Regards,
Fabio Estevam

Hi,
On Tue, 8 May 2012 14:46:18 -0300 Fabio Estevam festevam@gmail.com wrote:
Hi,
Could anyone confirm that LCD support is functional on top-of-tree U-boot for mx51 vision2 board?
I cannot confirm this as I do not have the hardware to test. But ...
I am working on adding LCD support for mx51evk and I am getting the following error from mxcfb_map_video_memory:
U-Boot 2012.04.01-00075-g6efea73-dirty (May 08 2012 - 14:40:01)
CPU: Freescale i.MX51 rev3.0 at 800 MHz Reset cause: POR Board: MX51EVK DRAM: 512 MiB WARNING: Caches not enabled MMC: FSL_SDHC: 0, FSL_SDHC: 1 Unable to allocate framebuffer memory
the issue is probably the insufficient malloc area size defined in the board config file. The mx51evk defines CONFIG_SYS_MALLOC_LEN to be slightly more than 2 MiB. The vision2 config sets CONFIG_SYS_MALLOC_LEN to 10 MiB. Please try increasing CONFIG_SYS_MALLOC_LEN.
Thanks, Anatolij

Hi Anatolij,
On 5/8/12, Anatolij Gustschin agust@denx.de wrote:
the issue is probably the insufficient malloc area size defined in the board config file. The mx51evk defines CONFIG_SYS_MALLOC_LEN to be slightly more than 2 MiB. The vision2 config sets CONFIG_SYS_MALLOC_LEN to 10 MiB. Please try increasing CONFIG_SYS_MALLOC_LEN.
Thanks for your suggestion. Increasing CONFIG_SYS_MALLOC_LEN does not fix the issue.
I will debug this problem.
Thanks,
Fabio Estevam

Anatolij,
On Tue, May 8, 2012 at 4:35 PM, Fabio Estevam festevam@gmail.com wrote:
Thanks for your suggestion. Increasing CONFIG_SYS_MALLOC_LEN does not fix the issue.
Below is my patch and some more debug information.
As you can see mode->xres is getting a weird value instead of '800' that I pass in the fb_videomode struct.
diff --git a/board/freescale/mx51evk/mx51evk.c b/board/freescale/mx51evk/mx51evk.c index b505a71..a6cf64a 100644 --- a/board/freescale/mx51evk/mx51evk.c +++ b/board/freescale/mx51evk/mx51evk.c @@ -36,6 +36,8 @@ #include <fsl_pmic.h> #include <mc13892.h> #include <usb/ehci-fsl.h> +#include <linux/fb.h> +#include <ipu_pixfmt.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -453,6 +455,27 @@ int board_mmc_init(bd_t *bis) } #endif
+static struct fb_videomode claa_wvga = { + .name = "CLAA07LC0ACW", + .refresh = 57, + .xres = 800, + .yres = 480, + .pixclock = 37037, + .left_margin = 40, + .right_margin = 60, + .upper_margin = 10, + .lower_margin = 10, + .hsync_len = 20, + .vsync_len = 10, + .sync = 0, + .vmode = FB_VMODE_NONINTERLACED +}; + +void lcd_enable(void) +{ + mx51_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565); +} + int board_early_init_f(void) { setup_iomux_uart(); diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c index 1bee54c..c640838 100644 --- a/drivers/video/mxc_ipuv3_fb.c +++ b/drivers/video/mxc_ipuv3_fb.c @@ -26,6 +26,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ +#define DEBUG
#include <common.h> #include <asm/errno.h> @@ -66,6 +67,8 @@ void fb_videomode_to_var(struct fb_var_screeninfo *var, var->vsync_len = mode->vsync_len; var->sync = mode->sync; var->vmode = mode->vmode & FB_VMODE_MASK; + + printf("%s mode->xres: %d\n", __func__, mode->xres); }
/* @@ -542,8 +545,15 @@ static int mxcfb_probe(u32 interface_pix_fmt, uint8_t disp, fb_videomode_to_var(&fbi->var, mode); fbi->var.bits_per_pixel = 16; fbi->fix.line_length = fbi->var.xres * (fbi->var.bits_per_pixel / 8); + + printf("fbi->var.xres: %d\n", fbi->var.xres); + printf("fbi->var.bits_per_pixel /8 : %d\n", fbi->var.bits_per_pixel / 8); + printf("fbi->fix.line_length: %d\n", fbi->fix.line_length); + fbi->fix.smem_len = fbi->var.yres_virtual * fbi->fix.line_length;
+ printf("fbi->fix.smem_len: %d\n", fbi->fix.smem_len); + mxcfb_check_var(&fbi->var, fbi);
/* Default Y virtual size is 2x panel size */ diff --git a/include/configs/mx51evk.h b/include/configs/mx51evk.h index 1477b21..e4240ba 100644 --- a/include/configs/mx51evk.h +++ b/include/configs/mx51evk.h @@ -51,7 +51,7 @@ /* * Size of malloc() pool */ -#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2 * 1024 * 1024) +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 10 * 1024 * 1024)
#define CONFIG_BOARD_LATE_INIT
@@ -123,6 +123,17 @@ #define CONFIG_MXC_USB_PORTSC PORT_PTS_ULPI #define CONFIG_MXC_USB_FLAGS MXC_EHCI_POWER_PINS_ENABLED
+/* Framebuffer and LCD */ +#define CONFIG_PREBOOT +#define CONFIG_VIDEO +#define CONFIG_VIDEO_MX5 +#define CONFIG_CFB_CONSOLE +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_VIDEO_BMP_RLE8 +#define CONFIG_SPLASH_SCREEN +#define CONFIG_CMD_BMP +#define CONFIG_BMP_16BPP + /* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE #define CONFIG_CONS_INDEX 1

Hi Fabio,
On Tue, 8 May 2012 18:24:38 -0300 Fabio Estevam festevam@gmail.com wrote:
Anatolij,
On Tue, May 8, 2012 at 4:35 PM, Fabio Estevam festevam@gmail.com wrote:
Thanks for your suggestion. Increasing CONFIG_SYS_MALLOC_LEN does not fix the issue.
Below is my patch and some more debug information.
As you can see mode->xres is getting a weird value instead of '800' that I pass in the fb_videomode struct.
Thanks for the info. I think you additionally need to call lcd_enable() in your board_init(). The mode struct will be initialized then. From your patch I do not see that you call lcd_enable().
Thanks, Anatolij

Hi Anatolij,
On Tue, May 8, 2012 at 7:40 PM, Anatolij Gustschin agust@denx.de wrote:
Thanks for the info. I think you additionally need to call lcd_enable() in your board_init(). The mode struct will be initialized then. From your patch I do not see that you call lcd_enable().
You are clearly right! Now I see the console output on my LCD :-)
Will submit the patch soon.
Now I will try to load some splashscreen.
Thanks a lot for your help,
Fabio Estevam

Hi Anatolij,
On Tue, May 8, 2012 at 7:59 PM, Fabio Estevam festevam@gmail.com wrote:
You are clearly right! Now I see the console output on my LCD :-)
Will submit the patch soon.
I am using the following LCD configuration on my board file (same as vision2.h):
#define CONFIG_PREBOOT #define CONFIG_VIDEO #define CONFIG_VIDEO_MX5 #define CONFIG_CFB_CONSOLE #define CONFIG_VGA_AS_SINGLE_DEVICE #define CONFIG_VIDEO_BMP_RLE8 #define CONFIG_SPLASH_SCREEN #define CONFIG_CMD_BMP #define CONFIG_BMP_16BPP #define CONFIG_VIDEO_LOGO
,and this directs the console to the LCD as expected.
I would like to keep only the video logo on screen and keep the console into the serial port.
Is this possible?
If I remove "#define CONFIG_CFB_CONSOLE" the build fails (This can be reproduced with vision2 config).
If I keep "#define CONFIG_CFB_CONSOLE" and pass "set console serial" the console output still goes to the LCD.
Any suggestions?
Thanks,
Fabio Estevam

On 09/05/2012 17:59, Fabio Estevam wrote:
Hi Anatolij,
On Tue, May 8, 2012 at 7:59 PM, Fabio Estevam festevam@gmail.com wrote:
You are clearly right! Now I see the console output on my LCD :-)
Will submit the patch soon.
I am using the following LCD configuration on my board file (same as vision2.h):
#define CONFIG_PREBOOT #define CONFIG_VIDEO #define CONFIG_VIDEO_MX5 #define CONFIG_CFB_CONSOLE #define CONFIG_VGA_AS_SINGLE_DEVICE #define CONFIG_VIDEO_BMP_RLE8 #define CONFIG_SPLASH_SCREEN #define CONFIG_CMD_BMP #define CONFIG_BMP_16BPP #define CONFIG_VIDEO_LOGO
,and this directs the console to the LCD as expected.
I would like to keep only the video logo on screen and keep the console into the serial port.
On vision, the display was used for splashscreen and the console is set to the serial line.
Is this possible?
If I remove "#define CONFIG_CFB_CONSOLE" the build fails (This can be reproduced with vision2 config).
If I keep "#define CONFIG_CFB_CONSOLE" and pass "set console serial" the console output still goes to the LCD.
Any suggestions?
You have to set stdin / stdout - maybe in late_init() ?
Stefano

Hi Stefano,
On Wed, May 9, 2012 at 1:19 PM, Stefano Babic sbabic@denx.de wrote:
You have to set stdin / stdout - maybe in late_init() ?
That did the trick! Thanks a lot
participants (3)
-
Anatolij Gustschin
-
Fabio Estevam
-
Stefano Babic