Message ID | 20230911074233.31556-17-shawn.sung@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add display driver for MT8188 VDOSYS1 | expand |
Hi, Hsiao-chien: On Mon, 2023-09-11 at 15:42 +0800, Hsiao Chien Sung wrote: > Since LARBs (Local ARBiter) have to be powered on before its users, > to ensure the power-on sequence, we created a device link between > RDMA and its LARB, and when pm_runtime_get_sync is called in RDMA, > system will guarantee the LARB is powered on before the RDMA. OVL is one of LARB user, but OVL have no device link with LARB, but it works for years. If all DMA component need device link with LARB, add to all of them not only mdp_rdma. Regards, CK > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_mdp_rdma.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c > b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c > index c3adaeefd551..fce6fbb534b1 100644 > --- a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c > +++ b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c > @@ -244,10 +244,23 @@ size_t mtk_mdp_rdma_get_num_formats(struct > device *dev) > > int mtk_mdp_rdma_clk_enable(struct device *dev) > { > + int ret; > struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev); > > - clk_prepare_enable(rdma->clk); > - return 0; > + /* > + * Since LARBs (Local ARBiter) have to be powered on before its > users, > + * to ensure the power-on sequence, we created a device link > between > + * RDMA and its LARB, and when pm_runtime_get_sync is called in > RDMA, > + * system will make sure the LARB is powered on before the RDMA > + */ > + ret = pm_runtime_get_sync(dev); > + > + if (ret < 0) > + dev_err(dev, "pm_runtime_get_sync failed: %d\n", ret); > + else > + ret = clk_prepare_enable(rdma->clk); > + > + return ret; > } > > void mtk_mdp_rdma_clk_disable(struct device *dev) > @@ -255,6 +268,9 @@ void mtk_mdp_rdma_clk_disable(struct device *dev) > struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev); > > clk_disable_unprepare(rdma->clk); > + > + /* Same reason as when enabling clock, turn the LARB off */ > + pm_runtime_put(dev); > } > > static int mtk_mdp_rdma_bind(struct device *dev, struct device > *master, > -- > 2.18.0 >
diff --git a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c index c3adaeefd551..fce6fbb534b1 100644 --- a/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c +++ b/drivers/gpu/drm/mediatek/mtk_mdp_rdma.c @@ -244,10 +244,23 @@ size_t mtk_mdp_rdma_get_num_formats(struct device *dev) int mtk_mdp_rdma_clk_enable(struct device *dev) { + int ret; struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev); - clk_prepare_enable(rdma->clk); - return 0; + /* + * Since LARBs (Local ARBiter) have to be powered on before its users, + * to ensure the power-on sequence, we created a device link between + * RDMA and its LARB, and when pm_runtime_get_sync is called in RDMA, + * system will make sure the LARB is powered on before the RDMA + */ + ret = pm_runtime_get_sync(dev); + + if (ret < 0) + dev_err(dev, "pm_runtime_get_sync failed: %d\n", ret); + else + ret = clk_prepare_enable(rdma->clk); + + return ret; } void mtk_mdp_rdma_clk_disable(struct device *dev) @@ -255,6 +268,9 @@ void mtk_mdp_rdma_clk_disable(struct device *dev) struct mtk_mdp_rdma *rdma = dev_get_drvdata(dev); clk_disable_unprepare(rdma->clk); + + /* Same reason as when enabling clock, turn the LARB off */ + pm_runtime_put(dev); } static int mtk_mdp_rdma_bind(struct device *dev, struct device *master,
Since LARBs (Local ARBiter) have to be powered on before its users, to ensure the power-on sequence, we created a device link between RDMA and its LARB, and when pm_runtime_get_sync is called in RDMA, system will guarantee the LARB is powered on before the RDMA. Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> --- drivers/gpu/drm/mediatek/mtk_mdp_rdma.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) -- 2.18.0