[PATCH v3 35/40] drm/i915: Check HDCP 1.4 and 2.2 link on CP_IRQ
Shankar, Uma
uma.shankar at intel.com
Fri May 18 15:59:34 UTC 2018
>-----Original Message-----
>From: dri-devel [mailto:dri-devel-bounces at lists.freedesktop.org] On Behalf Of
>Ramalingam C
>Sent: Tuesday, April 3, 2018 7:28 PM
>To: intel-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org;
>seanpaul at chromium.org; daniel at ffwll.ch; chris at chris-wilson.co.uk;
>jani.nikula at linux.intel.com; Winkler, Tomas <tomas.winkler at intel.com>;
>Usyskin, Alexander <alexander.usyskin at intel.com>
>Cc: Vivi, Rodrigo <rodrigo.vivi at 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 at 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 at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list