Message ID | 1453209057-16444-1-git-send-email-festevam@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 19/01/16 15:10, Fabio Estevam wrote: > From: Fabio Estevam <fabio.estevam@nxp.com> > > Currently when we boot the kernel on a mx25pdk the LCDC controller > does not show the Linux logo on boot. > > This problem is well explained by Sascha Hauer: > > "Unfortunately this LCD controller does not have an enable bit. The > controller starts directly when the clocks are enabled. If the clocks > are enabled when the controller is not yet programmed with proper > register values then it just goes into some undefined state. What I > suspect is that the clocks already were enabled before driver probe, > presumably by the bootloader, so the controller is already in undefined > state when entering Linux. Now by dis/enabling the ipg clock you > effectively reset the controller. Since you have programmed it with > valid register values in the mean time it starts working after this > reset." > > So do as suggested and force a reset of the LCDC hardware by > enabling and disabling the IPG clock. > > With this change the Linux logo can be seen on boot on a mx25pdk. > > Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> > --- > drivers/video/fbdev/imxfb.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) Thanks. Queued for 4.5 fixes. Tomi
Hi Tomi, On Fri, Jan 29, 2016 at 10:20 AM, Tomi Valkeinen <tomi.valkeinen@ti.com> wrote: > > > On 19/01/16 15:10, Fabio Estevam wrote: >> From: Fabio Estevam <fabio.estevam@nxp.com> >> >> Currently when we boot the kernel on a mx25pdk the LCDC controller >> does not show the Linux logo on boot. >> >> This problem is well explained by Sascha Hauer: >> >> "Unfortunately this LCD controller does not have an enable bit. The >> controller starts directly when the clocks are enabled. If the clocks >> are enabled when the controller is not yet programmed with proper >> register values then it just goes into some undefined state. What I >> suspect is that the clocks already were enabled before driver probe, >> presumably by the bootloader, so the controller is already in undefined >> state when entering Linux. Now by dis/enabling the ipg clock you >> effectively reset the controller. Since you have programmed it with >> valid register values in the mean time it starts working after this >> reset." >> >> So do as suggested and force a reset of the LCDC hardware by >> enabling and disabling the IPG clock. >> >> With this change the Linux logo can be seen on boot on a mx25pdk. >> >> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> >> --- >> drivers/video/fbdev/imxfb.c | 15 +++++++++++++++ >> 1 file changed, 15 insertions(+) > > Thanks. Queued for 4.5 fixes. Still don't see this one applied in Linus nor linux-next tree yet. -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 10/02/16 21:52, Fabio Estevam wrote: > Hi Tomi, > > On Fri, Jan 29, 2016 at 10:20 AM, Tomi Valkeinen <tomi.valkeinen@ti.com> wrote: >> >> >> On 19/01/16 15:10, Fabio Estevam wrote: >>> From: Fabio Estevam <fabio.estevam@nxp.com> >>> >>> Currently when we boot the kernel on a mx25pdk the LCDC controller >>> does not show the Linux logo on boot. >>> >>> This problem is well explained by Sascha Hauer: >>> >>> "Unfortunately this LCD controller does not have an enable bit. The >>> controller starts directly when the clocks are enabled. If the clocks >>> are enabled when the controller is not yet programmed with proper >>> register values then it just goes into some undefined state. What I >>> suspect is that the clocks already were enabled before driver probe, >>> presumably by the bootloader, so the controller is already in undefined >>> state when entering Linux. Now by dis/enabling the ipg clock you >>> effectively reset the controller. Since you have programmed it with >>> valid register values in the mean time it starts working after this >>> reset." >>> >>> So do as suggested and force a reset of the LCDC hardware by >>> enabling and disabling the IPG clock. >>> >>> With this change the Linux logo can be seen on boot on a mx25pdk. >>> >>> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> >>> --- >>> drivers/video/fbdev/imxfb.c | 15 +++++++++++++++ >>> 1 file changed, 15 insertions(+) >> >> Thanks. Queued for 4.5 fixes. > > Still don't see this one applied in Linus nor linux-next tree yet. I've been a bit preoccupied, but I hope I get to send the pull request today. Tomi
diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c index cee8860..bb2f1e8 100644 --- a/drivers/video/fbdev/imxfb.c +++ b/drivers/video/fbdev/imxfb.c @@ -902,6 +902,21 @@ static int imxfb_probe(struct platform_device *pdev) goto failed_getclock; } + /* + * The LCDC controller does not have an enable bit. The + * controller starts directly when the clocks are enabled. + * If the clocks are enabled when the controller is not yet + * programmed with proper register values (enabled at the + * bootloader, for example) then it just goes into some undefined + * state. + * To avoid this issue, let's enable and disable LCDC IPG clock + * so that we force some kind of 'reset' to the LCDC block. + */ + ret = clk_prepare_enable(fbi->clk_ipg); + if (ret) + goto failed_getclock; + clk_disable_unprepare(fbi->clk_ipg); + fbi->clk_ahb = devm_clk_get(&pdev->dev, "ahb"); if (IS_ERR(fbi->clk_ahb)) { ret = PTR_ERR(fbi->clk_ahb);