summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorAnatolij Gustschin <agust@denx.de>2017-08-25 13:10:43 (GMT)
committerAnatolij Gustschin <agust@denx.de>2017-08-29 13:23:55 (GMT)
commit0d1ae97c0299089e85a2980ac76e924e6d4447c6 (patch)
tree8e2735870f700820e8f5e85d52d1728dce6e4425 /drivers/video
parent22aa21dba4085bb8d597eeeeeee9e3328af684bb (diff)
downloadu-boot-0d1ae97c0299089e85a2980ac76e924e6d4447c6.tar.xz
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 <agust@denx.de>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/mxc_ipuv3_fb.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c
index 0d0a0a9..8836229 100644
--- a/drivers/video/mxc_ipuv3_fb.c
+++ b/drivers/video/mxc_ipuv3_fb.c
@@ -13,6 +13,7 @@
#include <common.h>
#include <linux/errno.h>
+#include <asm/arch/crm_regs.h>
#include <asm/global_data.h>
#include <linux/string.h>
#include <linux/list.h>
@@ -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];