From: Jayesh Choudhary <j-choudhary@ti.com>
TIDSS should know which VP has OLDI output to avoid calling clock
functions for that VP as those are controlled by oldi driver. Add a
property "is_ext_vp_clk" to "tidss_device" structure for that. Mark it
'true' in tidss_oldi_init() and 'false' in tidss_oldi_deinit().
Fixes: 7246e0929945 ("drm/tidss: Add OLDI bridge support")
Tested-by: Michael Walle <mwalle@kernel.org>
Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
Signed-off-by: Swamil Jain <s-jain1@ti.com>
---
drivers/gpu/drm/tidss/tidss_drv.h | 2 ++
drivers/gpu/drm/tidss/tidss_oldi.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/tidss/tidss_drv.h b/drivers/gpu/drm/tidss/tidss_drv.h
index 84454a4855d1..e1c1f41d8b4b 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.h
+++ b/drivers/gpu/drm/tidss/tidss_drv.h
@@ -24,6 +24,8 @@ struct tidss_device {
const struct dispc_features *feat;
struct dispc_device *dispc;
+ bool is_ext_vp_clk[TIDSS_MAX_PORTS];
+
unsigned int num_crtcs;
struct drm_crtc *crtcs[TIDSS_MAX_PORTS];
diff --git a/drivers/gpu/drm/tidss/tidss_oldi.c b/drivers/gpu/drm/tidss/tidss_oldi.c
index 7688251beba2..7ecbb2c3d0a2 100644
--- a/drivers/gpu/drm/tidss/tidss_oldi.c
+++ b/drivers/gpu/drm/tidss/tidss_oldi.c
@@ -430,6 +430,7 @@ void tidss_oldi_deinit(struct tidss_device *tidss)
for (int i = 0; i < tidss->num_oldis; i++) {
if (tidss->oldis[i]) {
drm_bridge_remove(&tidss->oldis[i]->bridge);
+ tidss->is_ext_vp_clk[tidss->oldis[i]->parent_vp] = false;
tidss->oldis[i] = NULL;
}
}
@@ -580,6 +581,7 @@ int tidss_oldi_init(struct tidss_device *tidss)
oldi->bridge.timings = &default_tidss_oldi_timings;
tidss->oldis[tidss->num_oldis++] = oldi;
+ tidss->is_ext_vp_clk[oldi->parent_vp] = true;
oldi->tidss = tidss;
drm_bridge_add(&oldi->bridge);
Hi,
On 11/09/2025 14:07, Swamil Jain wrote:
> From: Jayesh Choudhary <j-choudhary@ti.com>
>
> TIDSS should know which VP has OLDI output to avoid calling clock
> functions for that VP as those are controlled by oldi driver. Add a
> property "is_ext_vp_clk" to "tidss_device" structure for that. Mark it
> 'true' in tidss_oldi_init() and 'false' in tidss_oldi_deinit().
>
> Fixes: 7246e0929945 ("drm/tidss: Add OLDI bridge support")
What bug does this fix? It's just adding a new field which it sets to
true/false...
Tomi
> Tested-by: Michael Walle <mwalle@kernel.org>
> Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
> Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
> Signed-off-by: Swamil Jain <s-jain1@ti.com>
> ---
> drivers/gpu/drm/tidss/tidss_drv.h | 2 ++
> drivers/gpu/drm/tidss/tidss_oldi.c | 2 ++
> 2 files changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/tidss/tidss_drv.h b/drivers/gpu/drm/tidss/tidss_drv.h
> index 84454a4855d1..e1c1f41d8b4b 100644
> --- a/drivers/gpu/drm/tidss/tidss_drv.h
> +++ b/drivers/gpu/drm/tidss/tidss_drv.h
> @@ -24,6 +24,8 @@ struct tidss_device {
>
> const struct dispc_features *feat;
> struct dispc_device *dispc;
> + bool is_ext_vp_clk[TIDSS_MAX_PORTS];
> +
>
> unsigned int num_crtcs;
> struct drm_crtc *crtcs[TIDSS_MAX_PORTS];
> diff --git a/drivers/gpu/drm/tidss/tidss_oldi.c b/drivers/gpu/drm/tidss/tidss_oldi.c
> index 7688251beba2..7ecbb2c3d0a2 100644
> --- a/drivers/gpu/drm/tidss/tidss_oldi.c
> +++ b/drivers/gpu/drm/tidss/tidss_oldi.c
> @@ -430,6 +430,7 @@ void tidss_oldi_deinit(struct tidss_device *tidss)
> for (int i = 0; i < tidss->num_oldis; i++) {
> if (tidss->oldis[i]) {
> drm_bridge_remove(&tidss->oldis[i]->bridge);
> + tidss->is_ext_vp_clk[tidss->oldis[i]->parent_vp] = false;
> tidss->oldis[i] = NULL;
> }
> }
> @@ -580,6 +581,7 @@ int tidss_oldi_init(struct tidss_device *tidss)
> oldi->bridge.timings = &default_tidss_oldi_timings;
>
> tidss->oldis[tidss->num_oldis++] = oldi;
> + tidss->is_ext_vp_clk[oldi->parent_vp] = true;
> oldi->tidss = tidss;
>
> drm_bridge_add(&oldi->bridge);
Hi Tomi,
On 9/16/25 17:10, Tomi Valkeinen wrote:
> Hi,
>
> On 11/09/2025 14:07, Swamil Jain wrote:
>> From: Jayesh Choudhary <j-choudhary@ti.com>
>>
>> TIDSS should know which VP has OLDI output to avoid calling clock
>> functions for that VP as those are controlled by oldi driver. Add a
>> property "is_ext_vp_clk" to "tidss_device" structure for that. Mark it
>> 'true' in tidss_oldi_init() and 'false' in tidss_oldi_deinit().
>>
>> Fixes: 7246e0929945 ("drm/tidss: Add OLDI bridge support")
>
> What bug does this fix? It's just adding a new field which it sets to
> true/false...
Please take a look:
https://lore.kernel.org/all/a0489fea-8c06-4c89-a530-8be691f4705d@ti.com/
Should we remove the tag?
Or, else, please suggest a better way to describe the issue mentioned in
above link.
Regards,
Swamil
>
> Tomi
>
>> Tested-by: Michael Walle <mwalle@kernel.org>
>> Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
>> Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
>> Signed-off-by: Swamil Jain <s-jain1@ti.com>
>> ---
>> drivers/gpu/drm/tidss/tidss_drv.h | 2 ++
>> drivers/gpu/drm/tidss/tidss_oldi.c | 2 ++
>> 2 files changed, 4 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/tidss/tidss_drv.h b/drivers/gpu/drm/tidss/tidss_drv.h
>> index 84454a4855d1..e1c1f41d8b4b 100644
>> --- a/drivers/gpu/drm/tidss/tidss_drv.h
>> +++ b/drivers/gpu/drm/tidss/tidss_drv.h
>> @@ -24,6 +24,8 @@ struct tidss_device {
>>
>> const struct dispc_features *feat;
>> struct dispc_device *dispc;
>> + bool is_ext_vp_clk[TIDSS_MAX_PORTS];
>> +
>>
>> unsigned int num_crtcs;
>> struct drm_crtc *crtcs[TIDSS_MAX_PORTS];
>> diff --git a/drivers/gpu/drm/tidss/tidss_oldi.c b/drivers/gpu/drm/tidss/tidss_oldi.c
>> index 7688251beba2..7ecbb2c3d0a2 100644
>> --- a/drivers/gpu/drm/tidss/tidss_oldi.c
>> +++ b/drivers/gpu/drm/tidss/tidss_oldi.c
>> @@ -430,6 +430,7 @@ void tidss_oldi_deinit(struct tidss_device *tidss)
>> for (int i = 0; i < tidss->num_oldis; i++) {
>> if (tidss->oldis[i]) {
>> drm_bridge_remove(&tidss->oldis[i]->bridge);
>> + tidss->is_ext_vp_clk[tidss->oldis[i]->parent_vp] = false;
>> tidss->oldis[i] = NULL;
>> }
>> }
>> @@ -580,6 +581,7 @@ int tidss_oldi_init(struct tidss_device *tidss)
>> oldi->bridge.timings = &default_tidss_oldi_timings;
>>
>> tidss->oldis[tidss->num_oldis++] = oldi;
>> + tidss->is_ext_vp_clk[oldi->parent_vp] = true;
>> oldi->tidss = tidss;
>>
>> drm_bridge_add(&oldi->bridge);
>
Hi,
On 17/09/2025 16:32, Swamil Jain wrote:
> Hi Tomi,
>
> On 9/16/25 17:10, Tomi Valkeinen wrote:
>> Hi,
>>
>> On 11/09/2025 14:07, Swamil Jain wrote:
>>> From: Jayesh Choudhary <j-choudhary@ti.com>
>>>
>>> TIDSS should know which VP has OLDI output to avoid calling clock
>>> functions for that VP as those are controlled by oldi driver. Add a
>>> property "is_ext_vp_clk" to "tidss_device" structure for that. Mark it
>>> 'true' in tidss_oldi_init() and 'false' in tidss_oldi_deinit().
>>>
>>> Fixes: 7246e0929945 ("drm/tidss: Add OLDI bridge support")
>>
>> What bug does this fix? It's just adding a new field which it sets to
>> true/false...
>
> Please take a look: https://lore.kernel.org/all/a0489fea-8c06-4c89-
> a530-8be691f4705d@ti.com/
There isn't a mention of any issue or fix in the intro letter nor the
patch descriptions, so a fixes tag looks very odd here.
Usually a Fixes tag is for a patch that does the fix. And, of course,
explains what the issue is and what the fix is.
If I understand this right, the fix is this from the patch 2:
+ if (dispc->tidss->is_ext_vp_clk[hw_videoport])
+ return 0;
And patch 3?
Those should be probably made into a single patch that fixes the issue.
Also, bridges have mode_valid callback. Would that be better in patch 3?
Tomi
> Should we remove the tag?
> Or, else, please suggest a better way to describe the issue mentioned in
> above link.
>
> Regards,
> Swamil
>>
>> Tomi
>>
>>> Tested-by: Michael Walle <mwalle@kernel.org>
>>> Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
>>> Signed-off-by: Jayesh Choudhary <j-choudhary@ti.com>
>>> Signed-off-by: Swamil Jain <s-jain1@ti.com>
>>> ---
>>> drivers/gpu/drm/tidss/tidss_drv.h | 2 ++
>>> drivers/gpu/drm/tidss/tidss_oldi.c | 2 ++
>>> 2 files changed, 4 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/tidss/tidss_drv.h b/drivers/gpu/drm/
>>> tidss/tidss_drv.h
>>> index 84454a4855d1..e1c1f41d8b4b 100644
>>> --- a/drivers/gpu/drm/tidss/tidss_drv.h
>>> +++ b/drivers/gpu/drm/tidss/tidss_drv.h
>>> @@ -24,6 +24,8 @@ struct tidss_device {
>>> const struct dispc_features *feat;
>>> struct dispc_device *dispc;
>>> + bool is_ext_vp_clk[TIDSS_MAX_PORTS];
>>> +
>>> unsigned int num_crtcs;
>>> struct drm_crtc *crtcs[TIDSS_MAX_PORTS];
>>> diff --git a/drivers/gpu/drm/tidss/tidss_oldi.c b/drivers/gpu/drm/
>>> tidss/tidss_oldi.c
>>> index 7688251beba2..7ecbb2c3d0a2 100644
>>> --- a/drivers/gpu/drm/tidss/tidss_oldi.c
>>> +++ b/drivers/gpu/drm/tidss/tidss_oldi.c
>>> @@ -430,6 +430,7 @@ void tidss_oldi_deinit(struct tidss_device *tidss)
>>> for (int i = 0; i < tidss->num_oldis; i++) {
>>> if (tidss->oldis[i]) {
>>> drm_bridge_remove(&tidss->oldis[i]->bridge);
>>> + tidss->is_ext_vp_clk[tidss->oldis[i]->parent_vp] = false;
>>> tidss->oldis[i] = NULL;
>>> }
>>> }
>>> @@ -580,6 +581,7 @@ int tidss_oldi_init(struct tidss_device *tidss)
>>> oldi->bridge.timings = &default_tidss_oldi_timings;
>>> tidss->oldis[tidss->num_oldis++] = oldi;
>>> + tidss->is_ext_vp_clk[oldi->parent_vp] = true;
>>> oldi->tidss = tidss;
>>> drm_bridge_add(&oldi->bridge);
>>
>
© 2016 - 2026 Red Hat, Inc.