From patchwork Mon Jun 8 10:01:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nautiyal, Ankit K" X-Patchwork-Id: 11593007 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9E29D1392 for ; Mon, 8 Jun 2020 10:06:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8554A206D5 for ; Mon, 8 Jun 2020 10:06:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8554A206D5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 859BD6E15E; Mon, 8 Jun 2020 10:06:06 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id B865E6E15E for ; Mon, 8 Jun 2020 10:06:04 +0000 (UTC) IronPort-SDR: qumb59RUYE65lgNupmz4yn7P5fPm465oeKiAcnVRjPqe6sOCHblppUP+9moc+siRkOuciRM2Ad W8OqyXkrai2A== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2020 03:06:04 -0700 IronPort-SDR: bYaQW4C0GCbScbrYT175gmIKTy42685s8tSAA8eTIHw4iJymOFefbULTIdxllgiPztC/BFD+gg G/BPzT4VwRgg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,487,1583222400"; d="scan'208";a="270462112" Received: from unknown (HELO linux-akn.iind.intel.com) ([10.223.34.148]) by orsmga003.jf.intel.com with ESMTP; 08 Jun 2020 03:06:01 -0700 From: Ankit Nautiyal To: intel-gfx@lists.freedesktop.org Date: Mon, 8 Jun 2020 15:31:02 +0530 Message-Id: <20200608100103.19472-2-ankit.k.nautiyal@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200608100103.19472-1-ankit.k.nautiyal@intel.com> References: <20200608100103.19472-1-ankit.k.nautiyal@intel.com> Subject: [Intel-gfx] [PATCH v2 1/2] drm/i915: Add support for considering HDCP ver requested via debugfs X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jani.nikula@intel.com, martin.peres@intel.com MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" For testing and debugging each HDCP version separately, a debugfs entry for requesting a specific version is required. The version requested via debugfs needs to be stored in hdcp structure. This can then be considered while enabling HDCP, provided the platform and the display supports the requested version. This patch adds the support for storing the version requested as a 32bit flag. It also adds a helper function to check if a version is requested. If a specific HDCP version is requested through the debugfs, the driver chooses that version, instead of policy of choosing the highest HDCP version supported. v2: Initialize debugfs_ver_request flag with 0. (Jani Nikula) Signed-off-by: Ankit Nautiyal --- .../gpu/drm/i915/display/intel_display_types.h | 10 ++++++++++ drivers/gpu/drm/i915/display/intel_hdcp.c | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 9488449e4b94..cfa641c70717 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -408,6 +408,16 @@ struct intel_hdcp { * Hence caching the transcoder here. */ enum transcoder cpu_transcoder; + + /* + * HDCP version requested from debugfs i915_hdcp_ver_request. + * Kernel will read these bits and entertain the request, as per + * the HDCP capability of the panel and platform. + */ +#define HDCP_VERSION_1_4 0x01 +#define HDCP_VERSION_2_2 0x02 +#define HDCP_VERSION_MASK 0x03 + u32 debugfs_ver_request; }; struct intel_connector { diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 2cbc4619b4ce..a21ea9c2e9a7 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -1977,6 +1977,8 @@ int intel_hdcp_init(struct intel_connector *connector, if (!shim) return -EINVAL; + hdcp->debugfs_ver_request = 0; + if (is_hdcp2_supported(dev_priv)) intel_hdcp2_init(connector, shim); @@ -1998,6 +2000,14 @@ int intel_hdcp_init(struct intel_connector *connector, return 0; } +static bool hdcp_debugfs_requested(struct intel_hdcp *hdcp, u32 hdcp_version) +{ + if (!hdcp->debugfs_ver_request) + return true; + + return hdcp->debugfs_ver_request & hdcp_version ? true : false; +} + int intel_hdcp_enable(struct intel_connector *connector, enum transcoder cpu_transcoder, u8 content_type) { @@ -2023,7 +2033,8 @@ int intel_hdcp_enable(struct intel_connector *connector, * Considering that HDCP2.2 is more secure than HDCP1.4, If the setup * is capable of HDCP2.2, it is preferred to use HDCP2.2. */ - if (intel_hdcp2_capable(connector)) { + if (hdcp_debugfs_requested(hdcp, HDCP_VERSION_2_2) && + intel_hdcp2_capable(connector)) { ret = _intel_hdcp2_enable(connector); if (!ret) check_link_interval = DRM_HDCP2_CHECK_PERIOD_MS; @@ -2033,7 +2044,8 @@ int intel_hdcp_enable(struct intel_connector *connector, * When HDCP2.2 fails and Content Type is not Type1, HDCP1.4 will * be attempted. */ - if (ret && intel_hdcp_capable(connector) && + if (ret && hdcp_debugfs_requested(hdcp, HDCP_VERSION_1_4) && + intel_hdcp_capable(connector) && hdcp->content_type != DRM_MODE_HDCP_CONTENT_TYPE1) { ret = _intel_hdcp_enable(connector); } From patchwork Mon Jun 8 10:01:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nautiyal, Ankit K" X-Patchwork-Id: 11593009 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9D5491392 for ; Mon, 8 Jun 2020 10:06:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 850CF206D5 for ; Mon, 8 Jun 2020 10:06:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 850CF206D5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3C6E86E179; Mon, 8 Jun 2020 10:06:08 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1B47A6E19C for ; Mon, 8 Jun 2020 10:06:07 +0000 (UTC) IronPort-SDR: JVJrblEHdWK+YXjs8uoBiu4GXMzbQFrBVcn4xaxvTMm0FzxRjcg6siRkXLgR+V5JCxakg8E7eJ CMwlgF7mtOVg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2020 03:06:06 -0700 IronPort-SDR: ZNLj9PZkxcECUfr/t/gsFQfANBevV6LCMyHXjzt90iPVIcDKUHszt1o1bXu5T+0RjniLO0Nshb tLK5CQkur3gA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,487,1583222400"; d="scan'208";a="270462122" Received: from unknown (HELO linux-akn.iind.intel.com) ([10.223.34.148]) by orsmga003.jf.intel.com with ESMTP; 08 Jun 2020 03:06:04 -0700 From: Ankit Nautiyal To: intel-gfx@lists.freedesktop.org Date: Mon, 8 Jun 2020 15:31:03 +0530 Message-Id: <20200608100103.19472-3-ankit.k.nautiyal@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200608100103.19472-1-ankit.k.nautiyal@intel.com> References: <20200608100103.19472-1-ankit.k.nautiyal@intel.com> Subject: [Intel-gfx] [PATCH v2 2/2] drm/i915: Add a new debugfs to request HDCP version X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jani.nikula@intel.com, martin.peres@intel.com MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" As per the current HDCP design, the driver selects the highest version of HDCP that can be used to satisfy the content-protection requirements of the user. Due to this, the content-protection tests cannot test a lower version of HDCP, if the platform and the display panel, both support higher HDCP version. To provide some support for testing and debugging, a per-connector debugfs is required to set the HDCP version via debugfs that the kernel can consider, while enabling HDCP. This patch adds a new debugfs entry for each connector that supports HDCP. For enforcing a particular HDCP version for a connector, the user can write into the debugfs for that connector. v2: As suggested by Jani Nikula: -used kstrtouint_from_user() to directly read as uint from user buffer. -used 32 bit flag instead of 64 bit for hdcp_ver flag. -removed unnecessary prints and fixed other minor formatting issues. Signed-off-by: Ankit Nautiyal --- .../drm/i915/display/intel_display_debugfs.c | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c index 70525623bcdf..c01653d412e7 100644 --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c @@ -2185,6 +2185,72 @@ static const struct file_operations i915_dsc_fec_support_fops = { .write = i915_dsc_fec_support_write }; +static int i915_hdcp_ver_request_show(struct seq_file *m, void *data) +{ + struct drm_connector *connector = m->private; + struct intel_connector *intel_connector = to_intel_connector(connector); + u32 hdcp_ver_flag; + + if (connector->status != connector_status_connected) + return -ENODEV; + + /* HDCP is supported by connector */ + if (!intel_connector->hdcp.shim) + return -EINVAL; + + hdcp_ver_flag = intel_connector->hdcp.debugfs_ver_request; + seq_printf(m, "HDCP_VER_FLAGS: %u\n", hdcp_ver_flag); + + return 0; +} + +static int i915_hdcp_ver_request_open(struct inode *inode, + struct file *file) +{ + return single_open(file, i915_hdcp_ver_request_show, + inode->i_private); +} + +static ssize_t i915_hdcp_ver_request_write(struct file *file, + const char __user *ubuf, + size_t len, loff_t *offp) +{ + unsigned int hdcp_ver = 0; + int ret; + struct drm_connector *connector = + ((struct seq_file *)file->private_data)->private; + struct intel_connector *intel_connector = to_intel_connector(connector); + struct intel_hdcp *hdcp = &intel_connector->hdcp; + + if (!hdcp->shim) + return -EINVAL; + + if (len == 0) + return 0; + + ret = kstrtouint_from_user(ubuf, len, 0, &hdcp_ver); + if (ret < 0) + return ret; + + if (hdcp_ver > HDCP_VERSION_MASK) + return -EINVAL; + + hdcp->debugfs_ver_request = hdcp_ver; + + *offp += len; + + return len; +} + +static const struct file_operations i915_hdcp_ver_request_fops = { + .owner = THIS_MODULE, + .open = i915_hdcp_ver_request_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = i915_hdcp_ver_request_write +}; + /** * intel_connector_debugfs_add - add i915 specific connector debugfs files * @connector: pointer to a registered drm_connector @@ -2215,6 +2281,8 @@ int intel_connector_debugfs_add(struct drm_connector *connector) connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) { debugfs_create_file("i915_hdcp_sink_capability", S_IRUGO, root, connector, &i915_hdcp_sink_capability_fops); + debugfs_create_file("i915_hdcp_version_request", 0444, root, + connector, &i915_hdcp_ver_request_fops); } if (INTEL_GEN(dev_priv) >= 10 &&