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_oldi_vp" 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")
Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
Signed-off-by: Jayesh Choudhary <j-choudhary@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 0ae24f645582..82beaaceadb3 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_oldi_vp[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 b0f99656e87e..63e07c8edeaa 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_oldi_vp[tidss->oldis[i]->parent_vp] = false;
tidss->oldis[i] = NULL;
}
}
@@ -579,6 +580,7 @@ int tidss_oldi_init(struct tidss_device *tidss)
oldi->bridge.timings = &default_tidss_oldi_timings;
tidss->oldis[tidss->num_oldis++] = oldi;
+ tidss->is_oldi_vp[oldi->parent_vp] = true;
oldi->tidss = tidss;
drm_bridge_add(&oldi->bridge);
--
2.34.1
Hi, On 04/07/2025 12:48, Jayesh Choudhary wrote: > 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 "OLDI" > property "is_oldi_vp" to "tidss_device" structure for that. Mark it > 'true' in tidss_oldi_init() and 'false' in tidss_oldi_deinit(). The above is not wrong, but I think it would be nicer to be more specific what's this about: it's not really about OLDI, but whether tidss crtc/dispc controls the clock. I would name the field "is_ext_vp_clk" or something similar. Tomi > Fixes: 7246e0929945 ("drm/tidss: Add OLDI bridge support") > Reviewed-by: Devarsh Thakkar <devarsht@ti.com> > Signed-off-by: Jayesh Choudhary <j-choudhary@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 0ae24f645582..82beaaceadb3 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_oldi_vp[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 b0f99656e87e..63e07c8edeaa 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_oldi_vp[tidss->oldis[i]->parent_vp] = false; > tidss->oldis[i] = NULL; > } > } > @@ -579,6 +580,7 @@ int tidss_oldi_init(struct tidss_device *tidss) > oldi->bridge.timings = &default_tidss_oldi_timings; > > tidss->oldis[tidss->num_oldis++] = oldi; > + tidss->is_oldi_vp[oldi->parent_vp] = true; > oldi->tidss = tidss; > > drm_bridge_add(&oldi->bridge);
© 2016 - 2025 Red Hat, Inc.