Hi Stefano, On Tue, Oct 20, 2015 at 03:59:18PM +0200, Stefano Babic wrote: >Hi Peng, > >On 20/10/2015 13:39, Peng Fan wrote: >> Introudce a new function lcdif_power_down. >> >> 1. Waits for a VSYNC interrupt to guarantee the reset is done at the >> VSYNC edge, which somehow makes the LCDIF consume the display FIFO(?) >> and helps the LCDIF work normally at the kernel stage. >> 2. Add power down function to stop lcdif. >> >> The reason to introduce lcdif_power_down is that we want lcdif to be in >> initial state when doing uboot reset or before kernel boot to make >> system stable, otherwise system may hang. >> > >The explanation is independent from the processor type. But checking in >the next patch, this code runs only for 6UL. Why not for the 6sx ?
We met the issue on i.MX6UL EVK, but did not met issue on i.MX6SX SDB. So I add the check. After a thought, it should be open to CONFIG_VIDEO_MXS. To those which use LPDDR2 or LPDDR3, if LCDIF is enabled, lcdif_power_down is a must, since there is no reset pin as DDR3. No reset pin will make ddr not stable. Anyway lcdif_power_down do not hurts to those use DDR3. Will use #ifdef CONFIG_VIDEO_MXS lcdif_power_down(); #endif Regards, Peng. > > >> Signed-off-by: Peng Fan <peng....@freescale.com> >> Cc: Stefano Babic <sba...@denx.de> >> Cc: Anatolij Gustschin <ag...@denx.de> >> --- >> >> V2: >> none >> >> arch/arm/include/asm/imx-common/sys_proto.h | 2 ++ >> drivers/video/mxsfb.c | 17 +++++++++++++++++ >> 2 files changed, 19 insertions(+) >> >> diff --git a/arch/arm/include/asm/imx-common/sys_proto.h >> b/arch/arm/include/asm/imx-common/sys_proto.h >> index 5673fb4..386c2dc 100644 >> --- a/arch/arm/include/asm/imx-common/sys_proto.h >> +++ b/arch/arm/include/asm/imx-common/sys_proto.h >> @@ -47,6 +47,8 @@ int fecmxc_initialize(bd_t *bis); >> u32 get_ahb_clk(void); >> u32 get_periph_clk(void); >> >> +void lcdif_power_down(void); >> + >> int mxs_reset_block(struct mxs_register_32 *reg); >> int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); >> int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); >> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c >> index eed57d5..ddbb118 100644 >> --- a/drivers/video/mxsfb.c >> +++ b/drivers/video/mxsfb.c >> @@ -131,6 +131,23 @@ static void mxs_lcd_init(GraphicDevice *panel, >> writel(LCDIF_CTRL_RUN, ®s->hw_lcdif_ctrl_set); >> } >> >> +void lcdif_power_down(void) >> +{ >> + struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE; >> + int timeout = 1000000; >> + >> + 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); >> + while (--timeout) { >> + if (readl(®s->hw_lcdif_ctrl1_reg) & >> + LCDIF_CTRL1_VSYNC_EDGE_IRQ) >> + break; >> + udelay(1); >> + } >> + mxs_reset_block((struct mxs_register_32 *)®s->hw_lcdif_ctrl_reg); >> +} >> + >> void *video_hw_init(void) >> { >> int bpp = -1; >> > >Best regards, >Stefano Babic > >-- >===================================================================== >DENX Software Engineering GmbH, Managing Director: Wolfgang Denk >HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany >Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de >===================================================================== -- _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot