Message ID | 1522763873-23041-36-git-send-email-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>-----Original Message----- >From: dri-devel [mailto:dri-devel-bounces@lists.freedesktop.org] On Behalf Of >Ramalingam C >Sent: Tuesday, April 3, 2018 7:28 PM >To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; >seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk; >jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>; >Usyskin, Alexander <alexander.usyskin@intel.com> >Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com> >Subject: [PATCH v3 35/40] 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. > >Signed-off-by: Ramalingam C <ramalingam.c@intel.com> >--- > 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 4a9f5a690528..f92c0326fff5 100644 >--- a/drivers/gpu/drm/i915/intel_dp.c >+++ b/drivers/gpu/drm/i915/intel_dp.c >@@ -4468,7 +4468,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 2f14756b4b0e..8e60ccd0d368 100644 >--- a/drivers/gpu/drm/i915/intel_drv.h >+++ b/drivers/gpu/drm/i915/intel_drv.h >@@ -1932,8 +1932,8 @@ 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); >+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 5707830a4617..8cf0eeb4b3f8 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); > > static inline > bool panel_supports_hdcp(struct intel_connector *connector) @@ -79,6 +80,26 >@@ static inline bool intel_hdcp2_capable(struct intel_connector *connector) > panel_supports_hdcp2(connector)); > } > >+static inline bool intel_hdcp_in_force(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_force(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) { @@ - >858,7 +879,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; >@@ -1734,3 +1755,11 @@ static int intel_hdcp2_init(struct intel_connector >*connector) > hdcp->hdcp2_supported = false; > return ret; > } >+ >+void intel_hdcp_handle_cp_irq(struct intel_connector *connector) { >+ if (intel_hdcp_in_force(connector)) >+ intel_hdcp_check_link(connector); >+ else if (intel_hdcp2_in_force(connector)) >+ intel_hdcp2_check_link(connector); I don't think this is defined yet ? >+} >-- >2.7.4 > >_______________________________________________ >dri-devel mailing list >dri-devel@lists.freedesktop.org >https://lists.freedesktop.org/mailman/listinfo/dri-devel
On Friday 18 May 2018 09:29 PM, Shankar, Uma wrote: > >> -----Original Message----- >> From: dri-devel [mailto:dri-devel-bounces@lists.freedesktop.org] On Behalf Of >> Ramalingam C >> Sent: Tuesday, April 3, 2018 7:28 PM >> To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; >> seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk; >> jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>; >> Usyskin, Alexander <alexander.usyskin@intel.com> >> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com> >> Subject: [PATCH v3 35/40] 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. >> >> Signed-off-by: Ramalingam C <ramalingam.c@intel.com> >> --- >> 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 4a9f5a690528..f92c0326fff5 100644 >> --- a/drivers/gpu/drm/i915/intel_dp.c >> +++ b/drivers/gpu/drm/i915/intel_dp.c >> @@ -4468,7 +4468,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 2f14756b4b0e..8e60ccd0d368 100644 >> --- a/drivers/gpu/drm/i915/intel_drv.h >> +++ b/drivers/gpu/drm/i915/intel_drv.h >> @@ -1932,8 +1932,8 @@ 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); >> +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 5707830a4617..8cf0eeb4b3f8 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); >> >> static inline >> bool panel_supports_hdcp(struct intel_connector *connector) @@ -79,6 +80,26 >> @@ static inline bool intel_hdcp2_capable(struct intel_connector *connector) >> panel_supports_hdcp2(connector)); >> } >> >> +static inline bool intel_hdcp_in_force(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_force(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) { @@ - >> 858,7 +879,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; >> @@ -1734,3 +1755,11 @@ static int intel_hdcp2_init(struct intel_connector >> *connector) >> hdcp->hdcp2_supported = false; >> return ret; >> } >> + >> +void intel_hdcp_handle_cp_irq(struct intel_connector *connector) { >> + if (intel_hdcp_in_force(connector)) >> + intel_hdcp_check_link(connector); >> + else if (intel_hdcp2_in_force(connector)) >> + intel_hdcp2_check_link(connector); > I don't think this is defined yet ? 27/40-th patch implements it. Ram > >> +} >> -- >> 2.7.4 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 4a9f5a690528..f92c0326fff5 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -4468,7 +4468,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 2f14756b4b0e..8e60ccd0d368 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -1932,8 +1932,8 @@ 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); +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 5707830a4617..8cf0eeb4b3f8 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); static inline bool panel_supports_hdcp(struct intel_connector *connector) @@ -79,6 +80,26 @@ static inline bool intel_hdcp2_capable(struct intel_connector *connector) panel_supports_hdcp2(connector)); } +static inline bool intel_hdcp_in_force(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_force(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) { @@ -858,7 +879,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; @@ -1734,3 +1755,11 @@ static int intel_hdcp2_init(struct intel_connector *connector) hdcp->hdcp2_supported = false; return ret; } + +void intel_hdcp_handle_cp_irq(struct intel_connector *connector) +{ + if (intel_hdcp_in_force(connector)) + intel_hdcp_check_link(connector); + else if (intel_hdcp2_in_force(connector)) + intel_hdcp2_check_link(connector); +}
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. Signed-off-by: Ramalingam C <ramalingam.c@intel.com> --- 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(-)