From 645d39aea367064868dcdd30c411806f4403b67b Mon Sep 17 00:00:00 2001 From: Soeren Moch Date: Thu, 30 Jul 2020 14:11:57 +0200 Subject: [PATCH 1/2] board: tbs2910: Fix video output with existing environments Migration to DM_VIDEO changed the output device name (in stout, stderr) from 'vga' to 'vidconsole'. This also was adapted in the default environment. However, existing user defined environments still use 'vga'. Enable this workaround to map the 'vga' name to 'vidconsole'. So we get HDMI video output also with existing legacy environments. Signed-off-by: Soeren Moch --- configs/tbs2910_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/tbs2910_defconfig b/configs/tbs2910_defconfig index eb290554d6..f50a9952f4 100644 --- a/configs/tbs2910_defconfig +++ b/configs/tbs2910_defconfig @@ -101,6 +101,7 @@ CONFIG_DM_VIDEO=y # CONFIG_VIDEO_ANSI is not set CONFIG_SYS_WHITE_ON_BLACK=y # CONFIG_PANEL is not set +CONFIG_VIDCONSOLE_AS_LCD=y CONFIG_I2C_EDID=y CONFIG_VIDEO_IPUV3=y # CONFIG_GZIP is not set From 3ce83ee0125fdf2908c39970335121909e98b750 Mon Sep 17 00:00:00 2001 From: Anatolij Gustschin Date: Mon, 3 Aug 2020 15:45:33 +0200 Subject: [PATCH 2/2] video: ipuv3: fix framebuffer base address init with multiple IPUs Since commit 7812bbdc3732 ("video: Correctly handle multiple framebuffers") the vidconsole output is missing on the primary display on boards with two IPU units (all i.MX6Q/D based boards). The base address of the allocated framebuffer is not correctly programmed in the display controller. Fix it. Reported-by: Soeren Moch Signed-off-by: Anatolij Gustschin Tested-by: Soeren Moch --- drivers/video/imx/mxc_ipuv3_fb.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/video/imx/mxc_ipuv3_fb.c b/drivers/video/imx/mxc_ipuv3_fb.c index 587d62f2d8..4c20ec5e66 100644 --- a/drivers/video/imx/mxc_ipuv3_fb.c +++ b/drivers/video/imx/mxc_ipuv3_fb.c @@ -66,6 +66,7 @@ static void fb_videomode_to_var(struct fb_var_screeninfo *var, * Structure containing the MXC specific framebuffer information. */ struct mxcfb_info { + struct udevice *udev; int blank; ipu_channel_t ipu_ch; int ipu_di; @@ -381,13 +382,16 @@ static int mxcfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) static int mxcfb_map_video_memory(struct fb_info *fbi) { + struct mxcfb_info *mxc_fbi = (struct mxcfb_info *)fbi->par; + struct video_uc_platdata *plat = dev_get_uclass_platdata(mxc_fbi->udev); + if (fbi->fix.smem_len < fbi->var.yres_virtual * fbi->fix.line_length) { fbi->fix.smem_len = fbi->var.yres_virtual * fbi->fix.line_length; } fbi->fix.smem_len = roundup(fbi->fix.smem_len, ARCH_DMA_MINALIGN); - fbi->screen_base = (char *)gd->video_bottom; + fbi->screen_base = (char *)plat->base; fbi->fix.smem_start = (unsigned long)fbi->screen_base; if (fbi->screen_base == 0) { @@ -477,8 +481,8 @@ extern struct clk *g_ipu_clk; * * @return Appropriate error code to the kernel common code */ -static int mxcfb_probe(u32 interface_pix_fmt, uint8_t disp, - struct fb_videomode const *mode) +static int mxcfb_probe(struct udevice *dev, u32 interface_pix_fmt, + uint8_t disp, struct fb_videomode const *mode) { struct fb_info *fbi; struct mxcfb_info *mxcfbi; @@ -501,6 +505,7 @@ static int mxcfb_probe(u32 interface_pix_fmt, uint8_t disp, } mxcfbi->ipu_di = disp; + mxcfbi->udev = dev; if (!ipu_clk_enabled()) clk_enable(g_ipu_clk); @@ -600,7 +605,7 @@ static int ipuv3_video_probe(struct udevice *dev) if (ret < 0) return ret; - ret = mxcfb_probe(gpixfmt, gdisp, gmode); + ret = mxcfb_probe(dev, gpixfmt, gdisp, gmode); if (ret < 0) return ret;