Message ID | 20200623155907.22961-15-sean@poorly.run (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Add support for HDCP 1.4 over MST | expand |
On 2020-06-23 at 21:29:04 +0530, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > 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. > > Signed-off-by: Sean Paul <seanpaul@chromium.org> Looks good to me, this require a rebase on latest drm-tip Reviewed-by: Anshuman Gupta <anshuman.gupta@intel.com> > Link: https://patchwork.freedesktop.org/patch/msgid/20200218220242.107265-13-sean@poorly.run #v4 > Link: https://patchwork.freedesktop.org/patch/msgid/20200305201236.152307-14-sean@poorly.run #v5 > Link: https://patchwork.freedesktop.org/patch/msgid/20200429195502.39919-14-sean@poorly.run #v6 > > Changes in v4: > -Added to the set > Changes in v5: > -None > Changes in v6: > -None > Changes in v7: > -None > --- > drivers/gpu/drm/i915/display/intel_display_types.h | 3 ++- > drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 3 ++- > drivers/gpu/drm/i915/display/intel_hdcp.c | 2 +- > drivers/gpu/drm/i915/display/intel_hdmi.c | 5 ++--- > 4 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h > index 811085ef3fba..94211b8fc159 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -318,7 +318,8 @@ struct intel_hdcp_shim { > bool enable); > > /* Ensures the link is still protected */ > - bool (*check_link)(struct intel_digital_port *intel_dig_port); > + bool (*check_link)(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector); > > /* Detects panel's hdcp capability. This is optional for HDMI. */ > int (*hdcp_capable)(struct intel_digital_port *intel_dig_port, > diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > index e26a45f880cb..43446a6cae8d 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > @@ -223,7 +223,8 @@ int intel_dp_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > } > > static > -bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port) > +bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector) > { > struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev); > ssize_t ret; > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c > index d79d4142aea7..6bd0e4616ee1 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -953,7 +953,7 @@ static int intel_hdcp_check_link(struct intel_connector *connector) > goto out; > } > > - if (hdcp->shim->check_link(intel_dig_port)) { > + if (hdcp->shim->check_link(intel_dig_port, connector)) { > if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) { > intel_hdcp_update_value(connector, > DRM_MODE_CONTENT_PROTECTION_ENABLED, true); > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index ca71ee3dd1c7..b12f1af0611d 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -1546,11 +1546,10 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, > } > > static > -bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port) > +bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector) > { > struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev); > - struct intel_connector *connector = > - intel_dig_port->hdmi.attached_connector; > enum port port = intel_dig_port->base.port; > enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; > int ret; > -- > Sean Paul, Software Engineer, Google / Chromium OS > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> -----Original Message----- > From: Sean Paul <sean@poorly.run> > Sent: Tuesday, June 23, 2020 9:29 PM > To: dri-devel@lists.freedesktop.org; intel-gfx@lists.freedesktop.org > Cc: Li, Juston <juston.li@intel.com>; C, Ramalingam > <ramalingam.c@intel.com>; ville.syrjala@linux.intel.com; > jani.nikula@linux.intel.com; joonas.lahtinen@linux.intel.com; Vivi, Rodrigo > <rodrigo.vivi@intel.com>; daniel.vetter@ffwll.ch; Sean Paul > <seanpaul@chromium.org> > Subject: [PATCH v7 14/17] drm/i915: Add connector to hdcp_shim->check_link() > > From: Sean Paul <seanpaul@chromium.org> > > 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. > > Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Ramalingam C <ramalingam.c@intel.com> > Link: > https://patchwork.freedesktop.org/patch/msgid/20200218220242.107265-13- > sean@poorly.run #v4 > Link: > https://patchwork.freedesktop.org/patch/msgid/20200305201236.152307-14- > sean@poorly.run #v5 > Link: https://patchwork.freedesktop.org/patch/msgid/20200429195502.39919- > 14-sean@poorly.run #v6 > > Changes in v4: > -Added to the set > Changes in v5: > -None > Changes in v6: > -None > Changes in v7: > -None > --- > drivers/gpu/drm/i915/display/intel_display_types.h | 3 ++- > drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 3 ++- > drivers/gpu/drm/i915/display/intel_hdcp.c | 2 +- > drivers/gpu/drm/i915/display/intel_hdmi.c | 5 ++--- > 4 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > b/drivers/gpu/drm/i915/display/intel_display_types.h > index 811085ef3fba..94211b8fc159 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -318,7 +318,8 @@ struct intel_hdcp_shim { > bool enable); > > /* Ensures the link is still protected */ > - bool (*check_link)(struct intel_digital_port *intel_dig_port); > + bool (*check_link)(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector); > > /* Detects panel's hdcp capability. This is optional for HDMI. */ > int (*hdcp_capable)(struct intel_digital_port *intel_dig_port, diff --git > a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > index e26a45f880cb..43446a6cae8d 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > @@ -223,7 +223,8 @@ int intel_dp_hdcp_toggle_signalling(struct > intel_digital_port *intel_dig_port, } > > static > -bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port) > +bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector) > { > struct drm_i915_private *i915 = to_i915(intel_dig_port- > >base.base.dev); > ssize_t ret; > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c > b/drivers/gpu/drm/i915/display/intel_hdcp.c > index d79d4142aea7..6bd0e4616ee1 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -953,7 +953,7 @@ static int intel_hdcp_check_link(struct intel_connector > *connector) > goto out; > } > > - if (hdcp->shim->check_link(intel_dig_port)) { > + if (hdcp->shim->check_link(intel_dig_port, connector)) { > if (hdcp->value != > DRM_MODE_CONTENT_PROTECTION_UNDESIRED) { > intel_hdcp_update_value(connector, > > DRM_MODE_CONTENT_PROTECTION_ENABLED, true); diff --git > a/drivers/gpu/drm/i915/display/intel_hdmi.c > b/drivers/gpu/drm/i915/display/intel_hdmi.c > index ca71ee3dd1c7..b12f1af0611d 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -1546,11 +1546,10 @@ int intel_hdmi_hdcp_toggle_signalling(struct > intel_digital_port *intel_dig_port, } > > static > -bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port) > +bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port, > + struct intel_connector *connector) > { > struct drm_i915_private *i915 = to_i915(intel_dig_port- > >base.base.dev); > - struct intel_connector *connector = > - intel_dig_port->hdmi.attached_connector; > enum port port = intel_dig_port->base.port; > enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; > int ret; > -- > Sean Paul, Software Engineer, Google / Chromium OS
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 811085ef3fba..94211b8fc159 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -318,7 +318,8 @@ struct intel_hdcp_shim { bool enable); /* Ensures the link is still protected */ - bool (*check_link)(struct intel_digital_port *intel_dig_port); + bool (*check_link)(struct intel_digital_port *intel_dig_port, + struct intel_connector *connector); /* Detects panel's hdcp capability. This is optional for HDMI. */ int (*hdcp_capable)(struct intel_digital_port *intel_dig_port, diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c index e26a45f880cb..43446a6cae8d 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c @@ -223,7 +223,8 @@ int intel_dp_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, } static -bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port) +bool intel_dp_hdcp_check_link(struct intel_digital_port *intel_dig_port, + struct intel_connector *connector) { struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev); ssize_t ret; diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index d79d4142aea7..6bd0e4616ee1 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -953,7 +953,7 @@ static int intel_hdcp_check_link(struct intel_connector *connector) goto out; } - if (hdcp->shim->check_link(intel_dig_port)) { + if (hdcp->shim->check_link(intel_dig_port, connector)) { if (hdcp->value != DRM_MODE_CONTENT_PROTECTION_UNDESIRED) { intel_hdcp_update_value(connector, DRM_MODE_CONTENT_PROTECTION_ENABLED, true); diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index ca71ee3dd1c7..b12f1af0611d 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -1546,11 +1546,10 @@ int intel_hdmi_hdcp_toggle_signalling(struct intel_digital_port *intel_dig_port, } static -bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port) +bool intel_hdmi_hdcp_check_link(struct intel_digital_port *intel_dig_port, + struct intel_connector *connector) { struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev); - struct intel_connector *connector = - intel_dig_port->hdmi.attached_connector; enum port port = intel_dig_port->base.port; enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; int ret;