summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-07-05 14:21:34 +0300
committerOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-07-09 10:05:15 +0300
commitc9edbc27610ba7c1de1a6019ffdf860068825b47 (patch)
treec89a37c2c82f6ad9c00585bb2ae9bf7601237f17
parent8db6554d78d144ee0a91325961f0aea835a04005 (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.c7
-rw-r--r--drivers/soc/imx/pm-domains.c3
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;