From 22aa21dba4085bb8d597eeeeeee9e3328af684bb Mon Sep 17 00:00:00 2001 From: Niko Mauno Date: Thu, 3 Aug 2017 09:53:24 +0300 Subject: [PATCH 1/2] splash_source: Verify FIT magic Before reading entire FIT image, add sanity check by testing image header against FDT_MAGIC. This should help avoid problems in situations where FIT is not yet available from storage device, for example when performing initial programming of device. Cc: Anatolij Gustschin Acked-by: Tomas Melin --- common/splash_source.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/splash_source.c b/common/splash_source.c index a21ad62f82..e0defdebd6 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -317,6 +317,11 @@ static int splash_load_fit(struct splash_location *location, u32 bmp_load_addr) return res; img_header = (struct image_header *)bmp_load_addr; + if (image_get_magic(img_header) != FDT_MAGIC) { + printf("Could not find FDT magic\n"); + return -EINVAL; + } + fit_size = fdt_totalsize(img_header); /* Read in entire FIT */ From 0d1ae97c0299089e85a2980ac76e924e6d4447c6 Mon Sep 17 00:00:00 2001 From: Anatolij Gustschin Date: Fri, 25 Aug 2017 15:10:43 +0200 Subject: [PATCH 2/2] video: ipuv3_fb: skip IPU shutdown if IPU was not enabled before Boards can skip display interface init using board_video_skip(). If display interface was not initialized (e.g. no ipuv3 framebuffer registered or IPU clock disabled), booting Linux stops due to the crash in IPU shutdown function, when accessing IPU registers. Check IPU clock and skip shutdown if clock is not enabled. Signed-off-by: Anatolij Gustschin --- drivers/video/mxc_ipuv3_fb.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c index 0d0a0a97ff..88362290ef 100644 --- a/drivers/video/mxc_ipuv3_fb.c +++ b/drivers/video/mxc_ipuv3_fb.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -568,8 +569,18 @@ err0: void ipuv3_fb_shutdown(void) { - int i; + struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; struct ipu_stat *stat = (struct ipu_stat *)IPU_STAT; + u32 reg; + int i; + + /* + * Check if IPU clock was enabled before. Won't access + * IPU registers if clock is not enabled. + */ + reg = readl(&mxc_ccm->CCGR3); + if ((reg & MXC_CCM_CCGR3_IPU1_IPU_MASK) == 0) + return; for (i = 0; i < ARRAY_SIZE(mxcfb_info); i++) { struct fb_info *fbi = mxcfb_info[i];