Message ID | 20200623155907.22961-14-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:03 +0530, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > This patch plumbs port through hdcp init instead of relying on > intel_attached_encoder() to return a non-NULL encoder which won't work > for MST connectors. Looks good to me, Reviewed-by: Anshuman Gupta <anshuman.gupta@intel.com> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Signed-off-by: Sean Paul <seanpaul@chromium.org> > Link: https://patchwork.freedesktop.org/patch/msgid/20200305201236.152307-13-sean@poorly.run #v5 > Link: https://patchwork.freedesktop.org/patch/msgid/20200429195502.39919-13-sean@poorly.run #v6 > > Changes in v5: > -Added to the set > Changes in v6: > -None > Changes in v7: > -None > --- > drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 3 ++- > drivers/gpu/drm/i915/display/intel_hdcp.c | 11 ++++++----- > drivers/gpu/drm/i915/display/intel_hdcp.h | 2 +- > drivers/gpu/drm/i915/display/intel_hdmi.c | 2 +- > 4 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > index 0e06a1066d61..e26a45f880cb 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > @@ -630,7 +630,8 @@ int intel_dp_init_hdcp(struct intel_digital_port *intel_dig_port, > return 0; > > if (!intel_dp_is_edp(intel_dp)) > - return intel_hdcp_init(intel_connector, &intel_dp_hdcp_shim); > + return intel_hdcp_init(intel_connector, port, > + &intel_dp_hdcp_shim); > > return 0; > } > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c > index 5679877c6b4c..d79d4142aea7 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -1955,6 +1955,7 @@ static enum mei_fw_tc intel_get_mei_fw_tc(enum transcoder cpu_transcoder) > } > > static int initialize_hdcp_port_data(struct intel_connector *connector, > + enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > @@ -1962,8 +1963,7 @@ static int initialize_hdcp_port_data(struct intel_connector *connector, > struct hdcp_port_data *data = &hdcp->port_data; > > if (INTEL_GEN(dev_priv) < 12) > - data->fw_ddi = > - intel_get_mei_fw_ddi_index(intel_attached_encoder(connector)->port); > + data->fw_ddi = intel_get_mei_fw_ddi_index(port); > else > /* > * As per ME FW API expectation, for GEN 12+, fw_ddi is filled > @@ -2033,14 +2033,14 @@ void intel_hdcp_component_init(struct drm_i915_private *dev_priv) > } > } > > -static void intel_hdcp2_init(struct intel_connector *connector, > +static void intel_hdcp2_init(struct intel_connector *connector, enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *i915 = to_i915(connector->base.dev); > struct intel_hdcp *hdcp = &connector->hdcp; > int ret; > > - ret = initialize_hdcp_port_data(connector, shim); > + ret = initialize_hdcp_port_data(connector, port, shim); > if (ret) { > drm_dbg_kms(&i915->drm, "Mei hdcp data init failed\n"); > return; > @@ -2050,6 +2050,7 @@ static void intel_hdcp2_init(struct intel_connector *connector, > } > > int intel_hdcp_init(struct intel_connector *connector, > + enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > @@ -2060,7 +2061,7 @@ int intel_hdcp_init(struct intel_connector *connector, > return -EINVAL; > > if (is_hdcp2_supported(dev_priv)) > - intel_hdcp2_init(connector, shim); > + intel_hdcp2_init(connector, port, shim); > > ret = > drm_connector_attach_content_protection_property(&connector->base, > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h > index 86bbaec120cc..1bbf5b67ed0a 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.h > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h > @@ -22,7 +22,7 @@ enum transcoder; > void intel_hdcp_atomic_check(struct drm_connector *connector, > struct drm_connector_state *old_state, > struct drm_connector_state *new_state); > -int intel_hdcp_init(struct intel_connector *connector, > +int intel_hdcp_init(struct intel_connector *connector, enum port port, > const struct intel_hdcp_shim *hdcp_shim); > int intel_hdcp_enable(struct intel_connector *connector, > enum transcoder cpu_transcoder, u8 content_type); > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index a59acfff456e..ca71ee3dd1c7 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -3260,7 +3260,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, > intel_hdmi->attached_connector = intel_connector; > > if (is_hdcp_supported(dev_priv, port)) { > - int ret = intel_hdcp_init(intel_connector, > + int ret = intel_hdcp_init(intel_connector, port, > &intel_hdmi_hdcp_shim); > if (ret) > drm_dbg_kms(&dev_priv->drm, > -- > Sean Paul, Software Engineer, Google / Chromium OS > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
On 2020-06-23 at 11:59:03 -0400, Sean Paul wrote: > From: Sean Paul <seanpaul@chromium.org> > > This patch plumbs port through hdcp init instead of relying on > intel_attached_encoder() to return a non-NULL encoder which won't work > for MST connectors. > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Ramalingam C <ramalingam.c@intel.com> > Link: https://patchwork.freedesktop.org/patch/msgid/20200305201236.152307-13-sean@poorly.run #v5 > Link: https://patchwork.freedesktop.org/patch/msgid/20200429195502.39919-13-sean@poorly.run #v6 > > Changes in v5: > -Added to the set > Changes in v6: > -None > Changes in v7: > -None > --- > drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 3 ++- > drivers/gpu/drm/i915/display/intel_hdcp.c | 11 ++++++----- > drivers/gpu/drm/i915/display/intel_hdcp.h | 2 +- > drivers/gpu/drm/i915/display/intel_hdmi.c | 2 +- > 4 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > index 0e06a1066d61..e26a45f880cb 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c > @@ -630,7 +630,8 @@ int intel_dp_init_hdcp(struct intel_digital_port *intel_dig_port, > return 0; > > if (!intel_dp_is_edp(intel_dp)) > - return intel_hdcp_init(intel_connector, &intel_dp_hdcp_shim); > + return intel_hdcp_init(intel_connector, port, > + &intel_dp_hdcp_shim); > > return 0; > } > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c > index 5679877c6b4c..d79d4142aea7 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.c > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c > @@ -1955,6 +1955,7 @@ static enum mei_fw_tc intel_get_mei_fw_tc(enum transcoder cpu_transcoder) > } > > static int initialize_hdcp_port_data(struct intel_connector *connector, > + enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > @@ -1962,8 +1963,7 @@ static int initialize_hdcp_port_data(struct intel_connector *connector, > struct hdcp_port_data *data = &hdcp->port_data; > > if (INTEL_GEN(dev_priv) < 12) > - data->fw_ddi = > - intel_get_mei_fw_ddi_index(intel_attached_encoder(connector)->port); > + data->fw_ddi = intel_get_mei_fw_ddi_index(port); > else > /* > * As per ME FW API expectation, for GEN 12+, fw_ddi is filled > @@ -2033,14 +2033,14 @@ void intel_hdcp_component_init(struct drm_i915_private *dev_priv) > } > } > > -static void intel_hdcp2_init(struct intel_connector *connector, > +static void intel_hdcp2_init(struct intel_connector *connector, enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *i915 = to_i915(connector->base.dev); > struct intel_hdcp *hdcp = &connector->hdcp; > int ret; > > - ret = initialize_hdcp_port_data(connector, shim); > + ret = initialize_hdcp_port_data(connector, port, shim); > if (ret) { > drm_dbg_kms(&i915->drm, "Mei hdcp data init failed\n"); > return; > @@ -2050,6 +2050,7 @@ static void intel_hdcp2_init(struct intel_connector *connector, > } > > int intel_hdcp_init(struct intel_connector *connector, > + enum port port, > const struct intel_hdcp_shim *shim) > { > struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > @@ -2060,7 +2061,7 @@ int intel_hdcp_init(struct intel_connector *connector, > return -EINVAL; > > if (is_hdcp2_supported(dev_priv)) > - intel_hdcp2_init(connector, shim); > + intel_hdcp2_init(connector, port, shim); > > ret = > drm_connector_attach_content_protection_property(&connector->base, > diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h > index 86bbaec120cc..1bbf5b67ed0a 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdcp.h > +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h > @@ -22,7 +22,7 @@ enum transcoder; > void intel_hdcp_atomic_check(struct drm_connector *connector, > struct drm_connector_state *old_state, > struct drm_connector_state *new_state); > -int intel_hdcp_init(struct intel_connector *connector, > +int intel_hdcp_init(struct intel_connector *connector, enum port port, > const struct intel_hdcp_shim *hdcp_shim); > int intel_hdcp_enable(struct intel_connector *connector, > enum transcoder cpu_transcoder, u8 content_type); > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index a59acfff456e..ca71ee3dd1c7 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -3260,7 +3260,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, > intel_hdmi->attached_connector = intel_connector; > > if (is_hdcp_supported(dev_priv, port)) { > - int ret = intel_hdcp_init(intel_connector, > + int ret = intel_hdcp_init(intel_connector, port, > &intel_hdmi_hdcp_shim); > if (ret) > drm_dbg_kms(&dev_priv->drm, > -- > Sean Paul, Software Engineer, Google / Chromium OS >
diff --git a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c index 0e06a1066d61..e26a45f880cb 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_dp_hdcp.c @@ -630,7 +630,8 @@ int intel_dp_init_hdcp(struct intel_digital_port *intel_dig_port, return 0; if (!intel_dp_is_edp(intel_dp)) - return intel_hdcp_init(intel_connector, &intel_dp_hdcp_shim); + return intel_hdcp_init(intel_connector, port, + &intel_dp_hdcp_shim); return 0; } diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 5679877c6b4c..d79d4142aea7 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -1955,6 +1955,7 @@ static enum mei_fw_tc intel_get_mei_fw_tc(enum transcoder cpu_transcoder) } static int initialize_hdcp_port_data(struct intel_connector *connector, + enum port port, const struct intel_hdcp_shim *shim) { struct drm_i915_private *dev_priv = to_i915(connector->base.dev); @@ -1962,8 +1963,7 @@ static int initialize_hdcp_port_data(struct intel_connector *connector, struct hdcp_port_data *data = &hdcp->port_data; if (INTEL_GEN(dev_priv) < 12) - data->fw_ddi = - intel_get_mei_fw_ddi_index(intel_attached_encoder(connector)->port); + data->fw_ddi = intel_get_mei_fw_ddi_index(port); else /* * As per ME FW API expectation, for GEN 12+, fw_ddi is filled @@ -2033,14 +2033,14 @@ void intel_hdcp_component_init(struct drm_i915_private *dev_priv) } } -static void intel_hdcp2_init(struct intel_connector *connector, +static void intel_hdcp2_init(struct intel_connector *connector, enum port port, const struct intel_hdcp_shim *shim) { struct drm_i915_private *i915 = to_i915(connector->base.dev); struct intel_hdcp *hdcp = &connector->hdcp; int ret; - ret = initialize_hdcp_port_data(connector, shim); + ret = initialize_hdcp_port_data(connector, port, shim); if (ret) { drm_dbg_kms(&i915->drm, "Mei hdcp data init failed\n"); return; @@ -2050,6 +2050,7 @@ static void intel_hdcp2_init(struct intel_connector *connector, } int intel_hdcp_init(struct intel_connector *connector, + enum port port, const struct intel_hdcp_shim *shim) { struct drm_i915_private *dev_priv = to_i915(connector->base.dev); @@ -2060,7 +2061,7 @@ int intel_hdcp_init(struct intel_connector *connector, return -EINVAL; if (is_hdcp2_supported(dev_priv)) - intel_hdcp2_init(connector, shim); + intel_hdcp2_init(connector, port, shim); ret = drm_connector_attach_content_protection_property(&connector->base, diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h index 86bbaec120cc..1bbf5b67ed0a 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.h +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h @@ -22,7 +22,7 @@ enum transcoder; void intel_hdcp_atomic_check(struct drm_connector *connector, struct drm_connector_state *old_state, struct drm_connector_state *new_state); -int intel_hdcp_init(struct intel_connector *connector, +int intel_hdcp_init(struct intel_connector *connector, enum port port, const struct intel_hdcp_shim *hdcp_shim); int intel_hdcp_enable(struct intel_connector *connector, enum transcoder cpu_transcoder, u8 content_type); diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index a59acfff456e..ca71ee3dd1c7 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -3260,7 +3260,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, intel_hdmi->attached_connector = intel_connector; if (is_hdcp_supported(dev_priv, port)) { - int ret = intel_hdcp_init(intel_connector, + int ret = intel_hdcp_init(intel_connector, port, &intel_hdmi_hdcp_shim); if (ret) drm_dbg_kms(&dev_priv->drm,