Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/2] drm/i915: Get transcoder power domain before reading its register
@ 2019-08-08  0:49 José Roberto de Souza
  2019-08-08  0:49 ` [PATCH v4 2/2] drm/i915/tgl: Fix the read of the DDI that transcoder is attached to José Roberto de Souza
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: José Roberto de Souza @ 2019-08-08  0:49 UTC (permalink / raw)
  To: intel-gfx; +Cc: Lucas De Marchi

When getting the pipes attached to encoder if it is not a eDP encoder
it iterates over all pipes and read a transcoder register.
But it should not read a transcoder register before get its power
domain.

It was not a issue in gens older than 12 because if it only had
port A connected it would be attached to EDP and it would skip all
the transcoders readout, if it had more than one port connected,
pipe B would cause PG3 to be on and it contains all other
transcoders.

But on gen 12 there is no EDP transcoder so it is always iterating
over all pipes and if only one sink is connected, PG3 is kept off
and reading other transcoders registers would cause a
unclaimed read warning.

So here getting the power domain of the transcoder only if it is
enabled, otherwise it is not connected to the DDI.

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index aa5b2440513c..647ba5140656 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -2015,6 +2015,12 @@ static void intel_ddi_get_encoder_pipes(struct intel_encoder *encoder,
 	for_each_pipe(dev_priv, p) {
 		enum transcoder cpu_transcoder = (enum transcoder)p;
 		unsigned int port_mask, ddi_select;
+		intel_wakeref_t trans_wakeref;
+
+		trans_wakeref = intel_display_power_get_if_enabled(dev_priv,
+								   POWER_DOMAIN_TRANSCODER(cpu_transcoder));
+		if (!trans_wakeref)
+			continue;
 
 		if (INTEL_GEN(dev_priv) >= 12) {
 			port_mask = TGL_TRANS_DDI_PORT_MASK;
@@ -2025,6 +2031,8 @@ static void intel_ddi_get_encoder_pipes(struct intel_encoder *encoder,
 		}
 
 		tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
+		intel_display_power_put(dev_priv, POWER_DOMAIN_TRANSCODER(cpu_transcoder),
+					trans_wakeref);
 
 		if ((tmp & port_mask) != ddi_select)
 			continue;
-- 
2.22.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-08-10 16:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-08  0:49 [PATCH v4 1/2] drm/i915: Get transcoder power domain before reading its register José Roberto de Souza
2019-08-08  0:49 ` [PATCH v4 2/2] drm/i915/tgl: Fix the read of the DDI that transcoder is attached to José Roberto de Souza
2019-08-08  1:00   ` Lucas De Marchi
2019-08-10 16:08   ` Chris Wilson
2019-08-08  1:00 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v4,1/2] drm/i915: Get transcoder power domain before reading its register Patchwork
2019-08-08  1:21 ` ✓ Fi.CI.BAT: success " Patchwork
2019-08-08 13:49 ` ✗ Fi.CI.IGT: failure " Patchwork
2019-08-08 18:56   ` Souza, Jose
2019-08-08 19:48     ` Souza, Jose

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox