<pre>
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
>

</pre><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->