diff mbox

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

Message ID 1487758186-14459-1-git-send-email-festevam@gmail.com
State Superseded
Delegated to: Anatolij Gustschin
Headers show

Commit Message

Fabio Estevam Feb. 22, 2017, 10:09 a.m. UTC
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 'videomode' variable is present and
in case it is not present, do not continue with the LCDIF powerdown
sequence.

Tested on a imx7dsabresd board.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
---
Changes since v1:
- Only check videomode variable to avoid LCDIF to initialize again.

 drivers/video/mxsfb.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Anatolij Gustschin Feb. 22, 2017, 12:58 p.m. UTC | #1
Hi Fabio,

On Wed, 22 Feb 2017 07:09:46 -0300
Fabio Estevam festevam@gmail.com wrote:
...
> @@ -135,6 +135,11 @@ void lcdif_power_down(void)
>  {
>  	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
>  	int timeout = 1000000;
> +	char *penv;
> +
> +	penv = getenv("videomode");
> +	if (!penv)
> +		return;

will a simple check of frameAdrs fix this problem?

Like:
	if (!panel.frameAdrs)
		return;

Thanks,
Anatolij
Fabio Estevam Feb. 22, 2017, 1:37 p.m. UTC | #2
Hi Anatolij,

On Wed, Feb 22, 2017 at 9:58 AM, Anatolij Gustschin <agust@denx.de> wrote:

> will a simple check of frameAdrs fix this problem?
>
> Like:
>         if (!panel.frameAdrs)
>                 return;

Yes, it does! Thanks for the suggestion.
diff mbox

Patch

diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index 3cc03ca..eb986ee 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -135,6 +135,11 @@  void lcdif_power_down(void)
 {
 	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
 	int timeout = 1000000;
+	char *penv;
+
+	penv = getenv("videomode");
+	if (!penv)
+		return;
 
 	writel(panel.frameAdrs, &regs->hw_lcdif_cur_buf_reg);
 	writel(panel.frameAdrs, &regs->hw_lcdif_next_buf_reg);