From: Ramalingam C <ramalingam.c@intel.com>
To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
daniel.vetter@ffwll.ch, tomas.winkler@intel.com,
uma.shankar@intel.com
Subject: [PATCH v14 04/35] drm/i915: Initialize HDCP2.2
Date: Fri, 15 Feb 2019 14:04:59 +0530 [thread overview]
Message-ID: <1550219730-17734-5-git-send-email-ramalingam.c@intel.com> (raw)
In-Reply-To: <1550219730-17734-1-git-send-email-ramalingam.c@intel.com>
Add the HDCP2.2 initialization to the existing HDCP1.4 stack.
v2:
mei interface handle is protected with mutex. [Chris Wilson]
v3:
Notifiers are used for the mei interface state.
v4:
Poll for mei client device state
Error msg for out of mem [Uma]
Inline req for init function removed [Uma]
v5:
Rebase as Part of reordering.
Component is used for the I915 and MEI_HDCP interface [Daniel]
v6:
HDCP2.2 uses the I915 component master to communicate with mei_hdcp
- [Daniel]
Required HDCP2.2 variables defined [Sean Paul]
v7:
intel_hdcp2.2_init returns void [Uma]
Realigning the codes.
v8:
Avoid using bool structure members.
MEI interface related changes are moved into separate patch.
Commit msg is updated accordingly.
intel_hdcp_exit is defined and used from i915_unload
v9:
Movement of the hdcp_check_link is moved to new patch [Daniel]
intel_hdcp2_exit is removed as mei_comp will be unbind in i915_unload.
v10:
bool is used in struct to make coding simpler. [Daniel]
hdmi hdcp init is placed correctly after encoder attachment.
v11:
hdcp2_capability check is moved into hdcp.c [Tomas]
Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 11 +++++++++++
drivers/gpu/drm/i915/intel_hdcp.c | 28 ++++++++++++++++++++++++++--
drivers/gpu/drm/i915/intel_hdmi.c | 6 +++---
3 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 3398b28c053b..11c696025085 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -404,6 +404,17 @@ struct intel_hdcp {
u64 value;
struct delayed_work check_work;
struct work_struct prop_work;
+
+ /* HDCP2.2 related definitions */
+ /* Flag indicates whether this connector supports HDCP2.2 or not. */
+ bool hdcp2_supported;
+
+ /*
+ * Content Stream Type defined by content owner. TYPE0(0x0) content can
+ * flow in the link protected by HDCP2.2 or HDCP1.4, where as TYPE1(0x1)
+ * content can flow only through a link protected by HDCP2.2.
+ */
+ u8 content_type;
};
struct intel_connector {
diff --git a/drivers/gpu/drm/i915/intel_hdcp.c b/drivers/gpu/drm/i915/intel_hdcp.c
index 8cb85b07cfde..7b1097d79fb8 100644
--- a/drivers/gpu/drm/i915/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/intel_hdcp.c
@@ -832,14 +832,34 @@ bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port)
return INTEL_GEN(dev_priv) >= 9 && port < PORT_E;
}
+static bool is_hdcp2_supported(struct drm_i915_private *dev_priv)
+{
+ if (!IS_ENABLED(CONFIG_INTEL_MEI_HDCP))
+ return false;
+
+ return (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv) ||
+ IS_KABYLAKE(dev_priv));
+}
+
+static void intel_hdcp2_init(struct intel_connector *connector)
+{
+ struct intel_hdcp *hdcp = &connector->hdcp;
+
+ /* TODO: MEI interface needs to be initialized here */
+ hdcp->hdcp2_supported = true;
+}
+
int intel_hdcp_init(struct intel_connector *connector,
const struct intel_hdcp_shim *shim)
{
+ struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
struct intel_hdcp *hdcp = &connector->hdcp;
int ret;
- ret = drm_connector_attach_content_protection_property(
- &connector->base);
+ if (!shim)
+ return -EINVAL;
+
+ ret = drm_connector_attach_content_protection_property(&connector->base);
if (ret)
return ret;
@@ -847,6 +867,10 @@ int intel_hdcp_init(struct intel_connector *connector,
mutex_init(&hdcp->mutex);
INIT_DELAYED_WORK(&hdcp->check_work, intel_hdcp_check_work);
INIT_WORK(&hdcp->prop_work, intel_hdcp_prop_work);
+
+ if (is_hdcp2_supported(dev_priv))
+ intel_hdcp2_init(connector);
+
return 0;
}
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index f125a62eba8c..faeedf76db99 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2427,6 +2427,9 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
intel_hdmi_add_properties(intel_hdmi, connector);
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+ intel_hdmi->attached_connector = intel_connector;
+
if (is_hdcp_supported(dev_priv, port)) {
int ret = intel_hdcp_init(intel_connector,
&intel_hdmi_hdcp_shim);
@@ -2434,9 +2437,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
DRM_DEBUG_KMS("HDCP init failed, skipping.\n");
}
- intel_connector_attach_encoder(intel_connector, intel_encoder);
- intel_hdmi->attached_connector = intel_connector;
-
/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
* 0xd. Failure to do so will result in spurious interrupts being
* generated on the port when a cable is not attached.
--
2.7.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-02-15 8:34 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-15 8:34 [PATCH v14 00/35] drm/i915: Implement HDCP2.2 Ramalingam C
2019-02-15 8:34 ` [PATCH v14 01/35] drm/i915: Gathering the HDCP1.4 routines together Ramalingam C
2019-02-15 8:34 ` [PATCH v14 02/35] drm: enum port definition is moved into i915_drm.h Ramalingam C
2019-02-15 17:47 ` Daniel Vetter
2019-02-15 8:34 ` [PATCH v14 03/35] drm: header for i915 - MEI_HDCP interface Ramalingam C
2019-02-15 17:47 ` Daniel Vetter
2019-02-15 8:34 ` Ramalingam C [this message]
2019-02-15 8:35 ` [PATCH v14 05/35] drm/i915: MEI interface definition Ramalingam C via dri-devel
2019-02-15 17:53 ` Daniel Vetter
2019-02-15 8:35 ` [PATCH v14 06/35] drm/i915: hdcp1.4 CP_IRQ handling and SW encryption tracking Ramalingam C
2019-02-15 8:35 ` [PATCH v14 07/35] drm/i915: Enable and Disable of HDCP2.2 Ramalingam C
2019-02-15 8:35 ` [PATCH v14 08/35] drm/i915: Implement HDCP2.2 receiver authentication Ramalingam C
2019-02-15 8:35 ` [PATCH v14 09/35] drm: helper functions for hdcp2 seq_num to from u32 Ramalingam C
2019-02-15 17:56 ` Daniel Vetter
2019-02-15 8:35 ` [PATCH v14 10/35] drm/i915: Implement HDCP2.2 repeater authentication Ramalingam C
2019-02-15 8:35 ` [PATCH v14 11/35] drm: HDCP2.2 link check period Ramalingam C
2019-02-15 8:35 ` [PATCH v14 12/35] drm/i915: Implement HDCP2.2 link integrity check Ramalingam C
2019-02-15 8:35 ` [PATCH v14 13/35] drm/i915: Handle HDCP2.2 downstream topology change Ramalingam C
2019-02-15 8:35 ` [PATCH v14 14/35] drm: removing the DP Errata msg and its msg id Ramalingam C
2019-02-15 8:35 ` [PATCH v14 15/35] drm/i915: Implement the HDCP2.2 support for DP Ramalingam C via dri-devel
2019-02-15 8:35 ` [PATCH v14 16/35] drm/i915: Implement the HDCP2.2 support for HDMI Ramalingam C
2019-02-15 8:35 ` [PATCH v14 17/35] drm/i915: CP_IRQ handling for DP HDCP2.2 msgs Ramalingam C
2019-02-15 8:35 ` [PATCH v14 18/35] drm/i915: Fix KBL HDCP2.2 encrypt status signalling Ramalingam C via dri-devel
2019-02-15 8:35 ` [PATCH v14 19/35] mei: bus: whitelist hdcp client Ramalingam C
2019-02-15 8:35 ` [PATCH v14 20/35] mei: bus: export to_mei_cl_device for mei client device drivers Ramalingam C
2019-02-15 8:35 ` [PATCH v14 21/35] misc/mei/hdcp: Client driver for HDCP application Ramalingam C
2019-02-15 8:35 ` [PATCH v14 22/35] misc/mei/hdcp: Define ME FW interface for HDCP2.2 Ramalingam C
2019-02-15 8:35 ` [PATCH v14 23/35] misc/mei/hdcp: Initiate Wired HDCP2.2 Tx Session Ramalingam C
2019-02-15 8:35 ` [PATCH v14 24/35] misc/mei/hdcp: Verify Receiver Cert and prepare km Ramalingam C
2019-02-15 8:35 ` [PATCH v14 25/35] misc/mei/hdcp: Verify H_prime Ramalingam C
2019-02-15 8:35 ` [PATCH v14 26/35] misc/mei/hdcp: Store the HDCP Pairing info Ramalingam C via dri-devel
2019-02-15 8:35 ` [PATCH v14 27/35] misc/mei/hdcp: Initiate Locality check Ramalingam C
2019-02-15 8:35 ` [PATCH v14 28/35] misc/mei/hdcp: Verify L_prime Ramalingam C
2019-02-15 8:35 ` [PATCH v14 29/35] misc/mei/hdcp: Prepare Session Key Ramalingam C
2019-02-15 8:35 ` [PATCH v14 30/35] misc/mei/hdcp: Repeater topology verification and ack Ramalingam C
2019-02-15 8:35 ` [PATCH v14 31/35] misc/mei/hdcp: Verify M_prime Ramalingam C
2019-02-15 8:35 ` [PATCH v14 32/35] misc/mei/hdcp: Enabling the HDCP authentication Ramalingam C via dri-devel
2019-02-15 8:35 ` [PATCH v14 33/35] misc/mei/hdcp: Closing wired HDCP2.2 Tx Session Ramalingam C
2019-02-15 8:35 ` [PATCH v14 34/35] misc/mei/hdcp: Component framework for I915 Interface Ramalingam C
2019-02-15 8:35 ` [PATCH v14 35/35] FOR_TEST_ONLY: i915/Kconfig: Select mei_hdcp by I915 Ramalingam C
2019-02-16 20:46 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Implement HDCP2.2 Patchwork
2019-02-16 20:56 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-02-16 21:07 ` ✗ Fi.CI.BAT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1550219730-17734-5-git-send-email-ramalingam.c@intel.com \
--to=ramalingam.c@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=tomas.winkler@intel.com \
--cc=uma.shankar@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox