video: ipuv3_fb: skip IPU shutdown if IPU was not enabled before
authorAnatolij Gustschin <agust@denx.de>
Mon, 4 Sep 2017 21:33:45 +0000 (23:33 +0200)
committerAnatolij Gustschin <agust@denx.de>
Mon, 4 Sep 2017 21:33:45 +0000 (23:33 +0200)
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 <agust@denx.de>
drivers/video/ipu.h
drivers/video/ipu_common.c
drivers/video/mxc_ipuv3_fb.c

index 348be58bf6abaa729401d0db9744bdc0cf801c90..ff91d18868b4dd438436c0d7cf71250386262b20 100644 (file)
@@ -253,6 +253,7 @@ struct clk *clk_get_parent(struct clk *clk);
 
 void ipu_dump_registers(void);
 int ipu_probe(void);
+bool ipu_clk_enabled(void);
 
 void ipu_dmfc_init(int dmfc_type, int first);
 void ipu_init_dc_mappings(void);
index f8d4488fcef4a94483de9cd66920e23b1825d78a..f259fb9633212ba42b39d1efe5015fbcc5ac984d 100644 (file)
@@ -1243,3 +1243,8 @@ int ipu_set_ldb_clock(int rate)
 
        return 0;
 }
+
+bool ipu_clk_enabled(void)
+{
+       return g_ipu_clk_enabled;
+}
index 0d0a0a97ff43c0d3a720e2689da53de09c0f34d4..1ab5cb7b1c87c37a5d16030c38520c96c3c576d8 100644 (file)
@@ -571,6 +571,9 @@ void ipuv3_fb_shutdown(void)
        int i;
        struct ipu_stat *stat = (struct ipu_stat *)IPU_STAT;
 
+       if (!ipu_clk_enabled())
+               return;
+
        for (i = 0; i < ARRAY_SIZE(mxcfb_info); i++) {
                struct fb_info *fbi = mxcfb_info[i];
                if (fbi) {