[PATCH 3/3] drm/i915: Add output_poll_period_get() hook

José Roberto de Souza jose.souza at intel.com
Tue Feb 5 23:22:01 UTC 2019


When unpowered type-C dongles WA is active we need the output poll
work to execute with a very small period, so lets check if WA is
active and return a more appropriate period interval.

Cc: Imre Deak <imre.deak at intel.com>
Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 35 ++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 4d5ec929f987..1522aced255b 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14905,10 +14905,45 @@ intel_mode_valid(struct drm_device *dev,
 	return MODE_OK;
 }
 
+static unsigned long intel_output_poll_period_get(struct drm_device *dev)
+{
+	struct drm_connector *connector;
+	struct drm_connector_list_iter conn_iter;
+	unsigned long period = 10 * HZ;
+
+	/* Return smaller period if unpowered type-C dongles WA is active */
+	drm_connector_list_iter_begin(dev, &conn_iter);
+	drm_for_each_connector_iter(connector, &conn_iter) {
+		struct intel_connector *intel_connector;
+		struct intel_encoder *intel_encoder;
+		struct intel_digital_port *dig_port;
+
+		if (!(connector->polled & DRM_CONNECTOR_POLL_CONNECT))
+			continue;
+
+		intel_connector = to_intel_connector(connector);
+		intel_encoder = intel_connector->encoder;
+		dig_port = enc_to_dig_port(&intel_encoder->base);
+
+		if (!dig_port)
+			continue;
+
+		/* Set period to 100msec */
+		if (dig_port->tc_delay_wa_remaining_tries) {
+			period = HZ / 10;
+			break;
+		}
+	}
+	drm_connector_list_iter_end(&conn_iter);
+
+	return period;
+}
+
 static const struct drm_mode_config_funcs intel_mode_funcs = {
 	.fb_create = intel_user_framebuffer_create,
 	.get_format_info = intel_get_format_info,
 	.output_poll_changed = intel_fbdev_output_poll_changed,
+	.output_poll_period_get = intel_output_poll_period_get,
 	.mode_valid = intel_mode_valid,
 	.atomic_check = intel_atomic_check,
 	.atomic_commit = intel_atomic_commit,
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list