>-----Original Message----- >From: C, Ramalingam >Sent: Saturday, July 14, 2018 8:45 AM >To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; dri-devel@xxxxxxxxxxxxxxxxxxxxx; >daniel@xxxxxxxx; seanpaul@xxxxxxxxxxxx; Winkler, Tomas ><tomas.winkler@xxxxxxxxx>; Usyskin, Alexander <alexander.usyskin@xxxxxxxxx>; >Shankar, Uma <uma.shankar@xxxxxxxxx> >Cc: Sharma, Shashank <shashank.sharma@xxxxxxxxx>; C, Ramalingam ><ramalingam.c@xxxxxxxxx> >Subject: [PATCH v6 17/35] drm/i915: Check HDCP 1.4 and 2.2 link on CP_IRQ > >On DP HDCP1.4 and 2.2, when CP_IRQ is received, start the link integrity check >for the HDCP version that is enabled. > >v2: > Rebased. Function name is changed. >v3: > No Changes. >v4: > No Changes. >v5: > No Changes. >v6: > %s/_in_force/_in_use [Sean Paul] > >Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> >cc: Sean Paul <seanpaul@xxxxxxxxxxxx> >Reviewed-by: Sean Paul <seanpaul@xxxxxxxxxxxx> >--- > drivers/gpu/drm/i915/intel_dp.c | 2 +- > drivers/gpu/drm/i915/intel_drv.h | 2 +- drivers/gpu/drm/i915/intel_hdcp.c | 31 >++++++++++++++++++++++++++++++- > 3 files changed, 32 insertions(+), 3 deletions(-) > >diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c >index 0d31c9c286e9..6dcb09430fb5 100644 >--- a/drivers/gpu/drm/i915/intel_dp.c >+++ b/drivers/gpu/drm/i915/intel_dp.c >@@ -4484,7 +4484,7 @@ intel_dp_short_pulse(struct intel_dp *intel_dp) > if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST) > intel_dp_handle_test_request(intel_dp); > if (sink_irq_vector & DP_CP_IRQ) >- intel_hdcp_check_link(intel_dp->attached_connector); >+ intel_hdcp_handle_cp_irq(intel_dp- >>attached_connector); > if (sink_irq_vector & DP_SINK_SPECIFIC_IRQ) > DRM_DEBUG_DRIVER("Sink specific irq unhandled\n"); > } >diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h >index ce4679a0b530..82cda9a5aae3 100644 >--- a/drivers/gpu/drm/i915/intel_drv.h >+++ b/drivers/gpu/drm/i915/intel_drv.h >@@ -1969,10 +1969,10 @@ int intel_hdcp_init(struct intel_connector >*connector, > bool hdcp2_supported); > int intel_hdcp_enable(struct intel_connector *connector); int >intel_hdcp_disable(struct intel_connector *connector); -int >intel_hdcp_check_link(struct intel_connector *connector); bool >is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port); int >intel_hdcp_component_init(struct drm_i915_private *dev_priv); bool >is_hdcp2_supported(struct drm_i915_private *dev_priv); >+void intel_hdcp_handle_cp_irq(struct intel_connector *connector); > > /* intel_psr.c */ > #define CAN_PSR(dev_priv) (HAS_PSR(dev_priv) && dev_priv->psr.sink_support) >diff --git a/drivers/gpu/drm/i915/intel_hdcp.c >b/drivers/gpu/drm/i915/intel_hdcp.c >index 6afce9ae09ed..66d47240336f 100644 >--- a/drivers/gpu/drm/i915/intel_hdcp.c >+++ b/drivers/gpu/drm/i915/intel_hdcp.c >@@ -32,6 +32,7 @@ int intel_hdcp_read_valid_bksv(struct intel_digital_port >*intel_dig_port, > const struct intel_hdcp_shim *shim, u8 *bksv); static >struct intel_digital_port *conn_to_dig_port(struct intel_connector *connector); >+static int intel_hdcp_check_link(struct intel_connector *connector); > > /* Is HDCP1.4 capable on Platform and Panel */ static bool >intel_hdcp_capable(struct intel_connector *connector) @@ -66,6 +67,26 @@ >static bool intel_hdcp2_capable(struct intel_connector *connector) > return capable; > } > >+static inline bool intel_hdcp_in_use(struct intel_connector *connector) >+{ >+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev); >+ enum port port = connector->encoder->port; >+ u32 reg; >+ >+ reg = I915_READ(PORT_HDCP_STATUS(port)); >+ return reg & (HDCP_STATUS_AUTH | HDCP_STATUS_ENC); } >+ >+static inline bool intel_hdcp2_in_use(struct intel_connector >+*connector) { >+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev); >+ enum port port = connector->encoder->port; >+ u32 reg; >+ >+ reg = I915_READ(HDCP2_STATUS_DDI(port)); >+ return reg & (LINK_ENCRYPTION_STATUS | LINK_AUTH_STATUS); } >+ > static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port *intel_dig_port, > const struct intel_hdcp_shim *shim) { @@ - >928,7 +949,7 @@ void intel_hdcp_atomic_check(struct drm_connector >*connector, } > > /* Implements Part 3 of the HDCP authorization procedure */ -int >intel_hdcp_check_link(struct intel_connector *connector) >+static int intel_hdcp_check_link(struct intel_connector *connector) > { > struct intel_hdcp *hdcp = &connector->hdcp; > struct drm_i915_private *dev_priv = connector->base.dev->dev_private; >@@ -1821,3 +1842,11 @@ static void intel_hdcp2_check_work(struct >work_struct *work) > schedule_delayed_work(&hdcp->hdcp2_check_work, > DRM_HDCP2_CHECK_PERIOD_MS); > } >+ >+void intel_hdcp_handle_cp_irq(struct intel_connector *connector) { >+ if (intel_hdcp_in_use(connector)) >+ intel_hdcp_check_link(connector); Handle the return value. Atleast a print in case of link failures through this path. >+ else if (intel_hdcp2_in_use(connector)) >+ intel_hdcp2_check_link(connector); Same here. With above fixed. Reviewed-by: Uma Shankar <uma.shankar@xxxxxxxxx> >+} >-- >2.7.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel