[PATCH v6 09/42] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off

AngeloGioacchino Del Regno posted 42 patches 10 months, 1 week ago
There is a newer version of this series
[PATCH v6 09/42] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Posted by AngeloGioacchino Del Regno 10 months, 1 week ago
In preparation for adding support for MT8195's HDMI reserved
DPI, add calls to clk_prepare_enable() / clk_disable_unprepare()
for the TVD clock: in this particular case, the aforementioned
clock is not (and cannot be) parented to neither pixel or engine
clocks hence it won't get enabled automatically by the clock
framework.

Please note that on all of the currently supported MediaTek
platforms, the TVD clock is always a parent of either pixel or
engine clocks, and this means that the common clock framework
is already enabling this clock before the children.
On such platforms, this commit will only increase the refcount
of the TVD clock without any functional change.

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
 drivers/gpu/drm/mediatek/mtk_dpi.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
index 5c15c8935916..67504eb874d2 100644
--- a/drivers/gpu/drm/mediatek/mtk_dpi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
@@ -501,6 +501,7 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)
 
 	mtk_dpi_disable(dpi);
 	clk_disable_unprepare(dpi->pixel_clk);
+	clk_disable_unprepare(dpi->tvd_clk);
 	clk_disable_unprepare(dpi->engine_clk);
 }
 
@@ -517,6 +518,12 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
 		goto err_refcount;
 	}
 
+	ret = clk_prepare_enable(dpi->tvd_clk);
+	if (ret) {
+		dev_err(dpi->dev, "Failed to enable tvd pll: %d\n", ret);
+		goto err_engine;
+	}
+
 	ret = clk_prepare_enable(dpi->pixel_clk);
 	if (ret) {
 		dev_err(dpi->dev, "Failed to enable pixel clock: %d\n", ret);
@@ -526,6 +533,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
 	return 0;
 
 err_pixel:
+	clk_disable_unprepare(dpi->tvd_clk);
+err_engine:
 	clk_disable_unprepare(dpi->engine_clk);
 err_refcount:
 	dpi->refcount--;
-- 
2.48.1
Re: [PATCH v6 09/42] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Posted by CK Hu (胡俊光) 10 months, 1 week ago
On Tue, 2025-02-11 at 12:33 +0100, AngeloGioacchino Del Regno wrote:
> External email : Please do not click links or open attachments until you have verified the sender or the content.
> 
> 
> In preparation for adding support for MT8195's HDMI reserved
> DPI, add calls to clk_prepare_enable() / clk_disable_unprepare()
> for the TVD clock: in this particular case, the aforementioned
> clock is not (and cannot be) parented to neither pixel or engine
> clocks hence it won't get enabled automatically by the clock
> framework.
> 
> Please note that on all of the currently supported MediaTek
> platforms, the TVD clock is always a parent of either pixel or
> engine clocks, and this means that the common clock framework
> is already enabling this clock before the children.
> On such platforms, this commit will only increase the refcount
> of the TVD clock without any functional change.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_dpi.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> index 5c15c8935916..67504eb874d2 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> @@ -501,6 +501,7 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)
> 
>         mtk_dpi_disable(dpi);
>         clk_disable_unprepare(dpi->pixel_clk);
> +       clk_disable_unprepare(dpi->tvd_clk);
>         clk_disable_unprepare(dpi->engine_clk);
>  }
> 
> @@ -517,6 +518,12 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
>                 goto err_refcount;
>         }
> 
> +       ret = clk_prepare_enable(dpi->tvd_clk);
> +       if (ret) {
> +               dev_err(dpi->dev, "Failed to enable tvd pll: %d\n", ret);
> +               goto err_engine;
> +       }
> +
>         ret = clk_prepare_enable(dpi->pixel_clk);
>         if (ret) {
>                 dev_err(dpi->dev, "Failed to enable pixel clock: %d\n", ret);
> @@ -526,6 +533,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
>         return 0;
> 
>  err_pixel:
> +       clk_disable_unprepare(dpi->tvd_clk);
> +err_engine:
>         clk_disable_unprepare(dpi->engine_clk);
>  err_refcount:
>         dpi->refcount--;
> --
> 2.48.1
> 

Re: [PATCH v6 09/42] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Posted by CK Hu (胡俊光) 10 months ago
On Fri, 2025-02-14 at 09:51 +0800, CK Hu wrote:
> On Tue, 2025-02-11 at 12:33 +0100, AngeloGioacchino Del Regno wrote:
> > External email : Please do not click links or open attachments until you have verified the sender or the content.
> > 
> > 
> > In preparation for adding support for MT8195's HDMI reserved
> > DPI, add calls to clk_prepare_enable() / clk_disable_unprepare()
> > for the TVD clock: in this particular case, the aforementioned
> > clock is not (and cannot be) parented to neither pixel or engine
> > clocks hence it won't get enabled automatically by the clock
> > framework.
> > 
> > Please note that on all of the currently supported MediaTek
> > platforms, the TVD clock is always a parent of either pixel or
> > engine clocks, and this means that the common clock framework
> > is already enabling this clock before the children.
> > On such platforms, this commit will only increase the refcount
> > of the TVD clock without any functional change.
> 
> Reviewed-by: CK Hu <ck.hu@mediatek.com>

One question:
MT8195 DPI clock is from HDMI, why need to contol TVD clock?
It seems this patch is redundant.

Regards,
CK

> 
> > 
> > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> > ---
> >  drivers/gpu/drm/mediatek/mtk_dpi.c | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > index 5c15c8935916..67504eb874d2 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > @@ -501,6 +501,7 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)
> > 
> >         mtk_dpi_disable(dpi);
> >         clk_disable_unprepare(dpi->pixel_clk);
> > +       clk_disable_unprepare(dpi->tvd_clk);
> >         clk_disable_unprepare(dpi->engine_clk);
> >  }
> > 
> > @@ -517,6 +518,12 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
> >                 goto err_refcount;
> >         }
> > 
> > +       ret = clk_prepare_enable(dpi->tvd_clk);
> > +       if (ret) {
> > +               dev_err(dpi->dev, "Failed to enable tvd pll: %d\n", ret);
> > +               goto err_engine;
> > +       }
> > +
> >         ret = clk_prepare_enable(dpi->pixel_clk);
> >         if (ret) {
> >                 dev_err(dpi->dev, "Failed to enable pixel clock: %d\n", ret);
> > @@ -526,6 +533,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
> >         return 0;
> > 
> >  err_pixel:
> > +       clk_disable_unprepare(dpi->tvd_clk);
> > +err_engine:
> >         clk_disable_unprepare(dpi->engine_clk);
> >  err_refcount:
> >         dpi->refcount--;
> > --
> > 2.48.1
> > 
> 

Re: [PATCH v6 09/42] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Posted by AngeloGioacchino Del Regno 10 months ago
Il 14/02/25 04:31, CK Hu (胡俊光) ha scritto:
> On Fri, 2025-02-14 at 09:51 +0800, CK Hu wrote:
>> On Tue, 2025-02-11 at 12:33 +0100, AngeloGioacchino Del Regno wrote:
>>> External email : Please do not click links or open attachments until you have verified the sender or the content.
>>>
>>>
>>> In preparation for adding support for MT8195's HDMI reserved
>>> DPI, add calls to clk_prepare_enable() / clk_disable_unprepare()
>>> for the TVD clock: in this particular case, the aforementioned
>>> clock is not (and cannot be) parented to neither pixel or engine
>>> clocks hence it won't get enabled automatically by the clock
>>> framework.
>>>
>>> Please note that on all of the currently supported MediaTek
>>> platforms, the TVD clock is always a parent of either pixel or
>>> engine clocks, and this means that the common clock framework
>>> is already enabling this clock before the children.
>>> On such platforms, this commit will only increase the refcount
>>> of the TVD clock without any functional change.
>>
>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
> 
> One question:
> MT8195 DPI clock is from HDMI, why need to contol TVD clock?
> It seems this patch is redundant.
> 

Ungates the HDMI-generated TVD, that's it.

Regards,
Angelo

> Regards,
> CK
> 
>>
>>>
>>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> ---
>>>   drivers/gpu/drm/mediatek/mtk_dpi.c | 9 +++++++++
>>>   1 file changed, 9 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
>>> index 5c15c8935916..67504eb874d2 100644
>>> --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
>>> +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
>>> @@ -501,6 +501,7 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)
>>>
>>>          mtk_dpi_disable(dpi);
>>>          clk_disable_unprepare(dpi->pixel_clk);
>>> +       clk_disable_unprepare(dpi->tvd_clk);
>>>          clk_disable_unprepare(dpi->engine_clk);
>>>   }
>>>
>>> @@ -517,6 +518,12 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
>>>                  goto err_refcount;
>>>          }
>>>
>>> +       ret = clk_prepare_enable(dpi->tvd_clk);
>>> +       if (ret) {
>>> +               dev_err(dpi->dev, "Failed to enable tvd pll: %d\n", ret);
>>> +               goto err_engine;
>>> +       }
>>> +
>>>          ret = clk_prepare_enable(dpi->pixel_clk);
>>>          if (ret) {
>>>                  dev_err(dpi->dev, "Failed to enable pixel clock: %d\n", ret);
>>> @@ -526,6 +533,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
>>>          return 0;
>>>
>>>   err_pixel:
>>> +       clk_disable_unprepare(dpi->tvd_clk);
>>> +err_engine:
>>>          clk_disable_unprepare(dpi->engine_clk);
>>>   err_refcount:
>>>          dpi->refcount--;
>>> --
>>> 2.48.1
>>>
>>
>