Re: [Intel-gfx] [PATCH v3 30/40] drm/i915: Initialize HDCP2.2 and its MEI interface

2018-05-18 Thread Ramalingam C



On Friday 18 May 2018 06:03 PM, Shankar, Uma wrote:



-Original Message-
From: Intel-gfx [mailto:intel-gfx-boun...@lists.freedesktop.org] On Behalf Of
Ramalingam C
Sent: Tuesday, April 3, 2018 7:28 PM
To: intel-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
seanp...@chromium.org; dan...@ffwll.ch; ch...@chris-wilson.co.uk;
jani.nik...@linux.intel.com; Winkler, Tomas <tomas.wink...@intel.com>;
Usyskin, Alexander <alexander.usys...@intel.com>
Cc: Vivi, Rodrigo <rodrigo.v...@intel.com>
Subject: [Intel-gfx] [PATCH v3 30/40] drm/i915: Initialize HDCP2.2 and its MEI
interface

Initialize HDCP2.2 support. This includes the mei interface initialization 
along with
required notifier registration.

v2:
  mei interface handle is protected with mutex. [Chris Wilson]
v3:
  Notifiers are used for the mei interface state.

Signed-off-by: Ramalingam C <ramalinga...@intel.com>
---
drivers/gpu/drm/i915/intel_dp.c   |   3 +-
drivers/gpu/drm/i915/intel_drv.h  |   5 +-
drivers/gpu/drm/i915/intel_hdcp.c | 104
+-
drivers/gpu/drm/i915/intel_hdmi.c |   2 +-
4 files changed, 109 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 9a4a51e79fa1..955a20208097 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -6381,7 +6381,8 @@ intel_dp_init_connector(struct intel_digital_port
*intel_dig_port,
intel_dp_add_properties(intel_dp, connector);

if (is_hdcp_supported(dev_priv, port) && !intel_dp_is_edp(intel_dp)) {
-   int ret = intel_hdcp_init(intel_connector, _dp_hdcp_shim);
+   int ret = intel_hdcp_init(intel_connector, _dp_hdcp_shim,
+ false);
if (ret)
DRM_DEBUG_KMS("HDCP init failed, skipping.\n");
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index ca06d9a158f6..2f14756b4b0e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -442,7 +442,7 @@ struct intel_hdcp {
/* mei interface related information */
struct mei_cl_device *cldev;
struct mei_hdcp_data mei_data;
-
+   struct notifier_block mei_cldev_nb;
struct delayed_work hdcp2_check_work;
};

@@ -1928,7 +1928,8 @@ 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,
-   const struct intel_hdcp_shim *hdcp_shim);
+   const struct intel_hdcp_shim *hdcp_shim,
+   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); diff --git
a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c
index 53d35ee8f683..6eb58a833c7d 100644
--- a/drivers/gpu/drm/i915/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/intel_hdcp.c
@@ -11,6 +11,7 @@
#include 
#include 
#include 
+#include 

#include "intel_drv.h"
#include "i915_reg.h"
@@ -25,6 +26,7 @@ static int _intel_hdcp2_enable(struct intel_connector
*connector);  static int _intel_hdcp2_disable(struct intel_connector 
*connector);
static void intel_hdcp2_check_work(struct work_struct *work);  static int
intel_hdcp2_check_link(struct intel_connector *connector);
+static int intel_hdcp2_init(struct intel_connector *connector);

static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port *intel_dig_port,
const struct intel_hdcp_shim *shim) @@ -
686,11 +688,15 @@ bool is_hdcp_supported(struct drm_i915_private *dev_priv,
enum port port)  }

int intel_hdcp_init(struct intel_connector *connector,
-   const struct intel_hdcp_shim *hdcp_shim)
+   const struct intel_hdcp_shim *hdcp_shim,
+   bool hdcp2_supported)
{
struct intel_hdcp *hdcp = >hdcp;
int ret;

+   if (!hdcp_shim)
+   return -EINVAL;
+
ret = drm_connector_attach_content_protection_property(
>base);
if (ret)
@@ -699,7 +705,12 @@ int intel_hdcp_init(struct intel_connector *connector,
hdcp->hdcp_shim = hdcp_shim;
mutex_init(>hdcp_mutex);
INIT_DELAYED_WORK(>hdcp_check_work,
intel_hdcp_check_work);
+   INIT_DELAYED_WORK(>hdcp2_check_work,
intel_hdcp2_check_work);
INIT_WORK(>hdcp_prop_work, intel_hdcp_prop_work);
+
+   if (hdcp2_supported)
+   intel_hdcp2_init(connector);
+
return 0;
}

@@ -1565,3 +1576,94 @@ static void intel_hdcp2_check_work(struct
work_struct *work)
schedule_delayed_work(>hdcp2_che

RE: [Intel-gfx] [PATCH v3 30/40] drm/i915: Initialize HDCP2.2 and its MEI interface

2018-05-18 Thread Shankar, Uma


>-Original Message-
>From: Intel-gfx [mailto:intel-gfx-boun...@lists.freedesktop.org] On Behalf Of
>Ramalingam C
>Sent: Tuesday, April 3, 2018 7:28 PM
>To: intel-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
>seanp...@chromium.org; dan...@ffwll.ch; ch...@chris-wilson.co.uk;
>jani.nik...@linux.intel.com; Winkler, Tomas <tomas.wink...@intel.com>;
>Usyskin, Alexander <alexander.usys...@intel.com>
>Cc: Vivi, Rodrigo <rodrigo.v...@intel.com>
>Subject: [Intel-gfx] [PATCH v3 30/40] drm/i915: Initialize HDCP2.2 and its MEI
>interface
>
>Initialize HDCP2.2 support. This includes the mei interface initialization 
>along with
>required notifier registration.
>
>v2:
>  mei interface handle is protected with mutex. [Chris Wilson]
>v3:
>  Notifiers are used for the mei interface state.
>
>Signed-off-by: Ramalingam C <ramalinga...@intel.com>
>---
> drivers/gpu/drm/i915/intel_dp.c   |   3 +-
> drivers/gpu/drm/i915/intel_drv.h  |   5 +-
> drivers/gpu/drm/i915/intel_hdcp.c | 104
>+-
> drivers/gpu/drm/i915/intel_hdmi.c |   2 +-
> 4 files changed, 109 insertions(+), 5 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>index 9a4a51e79fa1..955a20208097 100644
>--- a/drivers/gpu/drm/i915/intel_dp.c
>+++ b/drivers/gpu/drm/i915/intel_dp.c
>@@ -6381,7 +6381,8 @@ intel_dp_init_connector(struct intel_digital_port
>*intel_dig_port,
>   intel_dp_add_properties(intel_dp, connector);
>
>   if (is_hdcp_supported(dev_priv, port) && !intel_dp_is_edp(intel_dp)) {
>-  int ret = intel_hdcp_init(intel_connector, _dp_hdcp_shim);
>+  int ret = intel_hdcp_init(intel_connector, _dp_hdcp_shim,
>+false);
>   if (ret)
>   DRM_DEBUG_KMS("HDCP init failed, skipping.\n");
>   }
>diff --git a/drivers/gpu/drm/i915/intel_drv.h 
>b/drivers/gpu/drm/i915/intel_drv.h
>index ca06d9a158f6..2f14756b4b0e 100644
>--- a/drivers/gpu/drm/i915/intel_drv.h
>+++ b/drivers/gpu/drm/i915/intel_drv.h
>@@ -442,7 +442,7 @@ struct intel_hdcp {
>   /* mei interface related information */
>   struct mei_cl_device *cldev;
>   struct mei_hdcp_data mei_data;
>-
>+  struct notifier_block mei_cldev_nb;
>   struct delayed_work hdcp2_check_work;
> };
>
>@@ -1928,7 +1928,8 @@ 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,
>-  const struct intel_hdcp_shim *hdcp_shim);
>+  const struct intel_hdcp_shim *hdcp_shim,
>+  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); diff --git
>a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c
>index 53d35ee8f683..6eb58a833c7d 100644
>--- a/drivers/gpu/drm/i915/intel_hdcp.c
>+++ b/drivers/gpu/drm/i915/intel_hdcp.c
>@@ -11,6 +11,7 @@
> #include 
> #include 
> #include 
>+#include 
>
> #include "intel_drv.h"
> #include "i915_reg.h"
>@@ -25,6 +26,7 @@ static int _intel_hdcp2_enable(struct intel_connector
>*connector);  static int _intel_hdcp2_disable(struct intel_connector 
>*connector);
>static void intel_hdcp2_check_work(struct work_struct *work);  static int
>intel_hdcp2_check_link(struct intel_connector *connector);
>+static int intel_hdcp2_init(struct intel_connector *connector);
>
> static int intel_hdcp_poll_ksv_fifo(struct intel_digital_port *intel_dig_port,
>   const struct intel_hdcp_shim *shim) @@ -
>686,11 +688,15 @@ bool is_hdcp_supported(struct drm_i915_private *dev_priv,
>enum port port)  }
>
> int intel_hdcp_init(struct intel_connector *connector,
>-  const struct intel_hdcp_shim *hdcp_shim)
>+  const struct intel_hdcp_shim *hdcp_shim,
>+  bool hdcp2_supported)
> {
>   struct intel_hdcp *hdcp = >hdcp;
>   int ret;
>
>+  if (!hdcp_shim)
>+  return -EINVAL;
>+
>   ret = drm_connector_attach_content_protection_property(
>   >base);
>   if (ret)
>@@ -699,7 +705,12 @@ int intel_hdcp_init(struct intel_connector *connector,
>   hdcp->hdcp_shim = hdcp_shim;
>   mutex_init(>hdcp_mutex);
>   INIT_DELAYED_WORK(>hdc