diff options
author | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2019-07-05 14:21:34 +0300 |
---|---|---|
committer | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2019-07-09 10:05:15 +0300 |
commit | c9edbc27610ba7c1de1a6019ffdf860068825b47 (patch) | |
tree | c89a37c2c82f6ad9c00585bb2ae9bf7601237f17 | |
parent | 8db6554d78d144ee0a91325961f0aea835a04005 (diff) |
soc: imx: HACK: keep lcdif power domain always on
ISSUE: For some reason elcdif pll goes down during kernel boot.
Use this HACK to keep elcdif pll working until found the root
cause of issue.
NOTE: sc_pm_*() functions can't be call from interrupt contex
(they use IPC calls so can be sleep).
Workaround: don't call a pair clk_prepare_enable()/clk_disable_unprepare()
inside mxsfb_irq_handler();
This solution should be replaced with better one too.
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-rw-r--r-- | drivers/gpu/drm/mxsfb/mxsfb_drv.c | 7 | ||||
-rw-r--r-- | drivers/soc/imx/pm-domains.c | 3 |
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c index 1a12f5e1bd13..e52f0bc6ba75 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c @@ -643,17 +643,18 @@ static irqreturn_t mxsfb_irq_handler(int irq, void *data) struct mxsfb_drm_private *mxsfb = drm->dev_private; u32 reg; +/* clk_prepare_enable(mxsfb->clk_axi); - +*/ reg = readl(mxsfb->base + LCDC_CTRL1); if (reg & CTRL1_CUR_FRAME_DONE_IRQ) drm_crtc_handle_vblank(&mxsfb->pipe.crtc); writel(CTRL1_CUR_FRAME_DONE_IRQ, mxsfb->base + LCDC_CTRL1 + REG_CLR); - +/* clk_disable_unprepare(mxsfb->clk_axi); - +*/ return IRQ_HANDLED; } diff --git a/drivers/soc/imx/pm-domains.c b/drivers/soc/imx/pm-domains.c index a585fa1f802f..771c63084e15 100644 --- a/drivers/soc/imx/pm-domains.c +++ b/drivers/soc/imx/pm-domains.c @@ -95,7 +95,8 @@ static int imx8_pd_power(struct generic_pm_domain *domain, bool power_on) pd->rsrc_id == SC_R_HDMI_I2S || pd->rsrc_id == SC_R_HDMI_I2C_0 || pd->rsrc_id == SC_R_HDMI_PLL_0 || - pd->rsrc_id == SC_R_HDMI_PLL_1)) + pd->rsrc_id == SC_R_HDMI_PLL_1 || + pd->rsrc_id == SC_R_ELCDIF_PLL)) pd->pd.flags |= GENPD_FLAG_ALWAYS_ON; return 0; |