]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/i915: Add connector to hdcp_shim->check_link()
authorSean Paul <seanpaul@chromium.org>
Tue, 18 Aug 2020 15:39:02 +0000 (11:39 -0400)
committerRamalingam C <ramalingam.c@intel.com>
Tue, 1 Sep 2020 07:32:33 +0000 (13:02 +0530)
Currently we derive the connector from digital port in check_link(). For
MST, this isn't sufficient since the digital port passed into the
function can have multiple connectors downstream. This patch adds
connector to the check_link() arguments so we have it when we need it.

Reviewed-by: Anshuman Gupta <anshuman.gupta@intel.com>
Reviewed-by: Ramalingam C <ramalingam.c@intel.com>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200218220242.107265-13-sean@poorly.run
Link: https://patchwork.freedesktop.org/patch/msgid/20200305201236.152307-14-sean@poorly.run
Link: https://patchwork.freedesktop.org/patch/msgid/20200429195502.39919-14-sean@poorly.run
Link: https://patchwork.freedesktop.org/patch/msgid/20200623155907.22961-15-sean@poorly.run
Changes in v4:
-Added to the set
Changes in v5:
-None
Changes in v6:
-None
Changes in v7:
-None
Changes in v8:
-None

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200818153910.27894-15-sean@poorly.run
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_dp_hdcp.c
drivers/gpu/drm/i915/display/intel_hdcp.c
drivers/gpu/drm/i915/display/intel_hdmi.c

index 5e01f2f840c9745b0636d9add95b0fe508914966..413b60337a0b700f6c3ec9b5e56d568dd6fca208 100644 (file)
@@ -318,7 +318,8 @@ struct intel_hdcp_shim {
                                 bool enable);
 
        /* Ensures the link is still protected */
-       bool (*check_link)(struct intel_digital_port *dig_port);
+       bool (*check_link)(struct intel_digital_port *dig_port,
+                          struct intel_connector *connector);
 
        /* Detects panel's hdcp capability. This is optional for HDMI. */
        int (*hdcp_capable)(struct intel_digital_port *dig_port,
index c164ad11e617eadf339fcd400de8795408dea7be..b744253a592464899a3bfb4fa040b9f5f354e092 100644 (file)
@@ -224,7 +224,8 @@ int intel_dp_hdcp_toggle_signalling(struct intel_digital_port *dig_port,
 }
 
 static
-bool intel_dp_hdcp_check_link(struct intel_digital_port *dig_port)
+bool intel_dp_hdcp_check_link(struct intel_digital_port *dig_port,
+                             struct intel_connector *connector)
 {
        struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
        ssize_t ret;
index d0c922f84d53ec27d16c974464524f183883afd7..cd0b24a2ee66f448c9d9dd33a6caf3c1525f6197 100644 (file)
@@ -943,7 +943,7 @@ static int intel_hdcp_check_link(struct intel_connector *connector)
                goto out;
        }
 
-       if (hdcp->shim->check_link(dig_port)) {
+       if (hdcp->shim->check_link(dig_port, connector)) {
                if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) {
                        intel_hdcp_update_value(connector,
                                DRM_MODE_CONTENT_PROTECTION_ENABLED, true);
index c0ea16dae3b3ae293e2731ee2097b0485ea52955..0978b0d8f4c67fb7d38e5614556bd70454c30fbe 100644 (file)
@@ -1546,11 +1546,10 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *dig_port,
 }
 
 static
-bool intel_hdmi_hdcp_check_link_once(struct intel_digital_port *dig_port)
+bool intel_hdmi_hdcp_check_link_once(struct intel_digital_port *dig_port,
+                                    struct intel_connector *connector)
 {
        struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
-       struct intel_connector *connector =
-               dig_port->hdmi.attached_connector;
        enum port port = dig_port->base.port;
        enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder;
        int ret;
@@ -1578,13 +1577,14 @@ bool intel_hdmi_hdcp_check_link_once(struct intel_digital_port *dig_port)
 }
 
 static
-bool intel_hdmi_hdcp_check_link(struct intel_digital_port *dig_port)
+bool intel_hdmi_hdcp_check_link(struct intel_digital_port *dig_port,
+                               struct intel_connector *connector)
 {
        struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
        int retry;
 
        for (retry = 0; retry < 3; retry++)
-               if (intel_hdmi_hdcp_check_link_once(dig_port))
+               if (intel_hdmi_hdcp_check_link_once(dig_port, connector))
                        return true;
 
        drm_err(&i915->drm, "Link check failed\n");