[U-Boot] [PATCH] video: mxsfb: Fix reset hang when videomode variable is not present

From: Fabio Estevam fabio.estevam@nxp.com
Currently the system hangs when the 'videomode' variable is not present:
=> setenv videomode => saveenv => reset
(Board hangs)
lcdif_power_down() assumes that the LCDIF controller has been properly configured and enabled, which may not be true.
To fix this issue check whether video_hw_init() succeeded or not and only perform the LCDIF shutdown when the controller has been properly enabled.
Tested on a imx7dsabresd board.
Signed-off-by: Fabio Estevam fabio.estevam@nxp.com --- drivers/video/mxsfb.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c index 3cc03ca..83fd9aa 100644 --- a/drivers/video/mxsfb.c +++ b/drivers/video/mxsfb.c @@ -136,6 +136,9 @@ void lcdif_power_down(void) struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE; int timeout = 1000000;
+ if (!video_hw_init()) + return; + writel(panel.frameAdrs, ®s->hw_lcdif_cur_buf_reg); writel(panel.frameAdrs, ®s->hw_lcdif_next_buf_reg); writel(LCDIF_CTRL1_VSYNC_EDGE_IRQ, ®s->hw_lcdif_ctrl1_clr);

Hi Fabio,
On Wed, Feb 22, 2017 at 06:52:24AM -0300, Fabio Estevam wrote:
From: Fabio Estevam fabio.estevam@nxp.com
Currently the system hangs when the 'videomode' variable is not present:
=> setenv videomode => saveenv => reset
(Board hangs)
lcdif_power_down() assumes that the LCDIF controller has been properly configured and enabled, which may not be true.
To fix this issue check whether video_hw_init() succeeded or not and only perform the LCDIF shutdown when the controller has been properly enabled.
Tested on a imx7dsabresd board.
Signed-off-by: Fabio Estevam fabio.estevam@nxp.com
drivers/video/mxsfb.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c index 3cc03ca..83fd9aa 100644 --- a/drivers/video/mxsfb.c +++ b/drivers/video/mxsfb.c @@ -136,6 +136,9 @@ void lcdif_power_down(void) struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE; int timeout = 1000000;
- if (!video_hw_init())
return;
If videomode is set, this will reinitialize the lcdif. Checking videomode env is ok to handle it as you proposed just now.
Regards, Peng.
participants (2)
-
Fabio Estevam
-
Peng Fan