[PATCH] drm/i915/hdcp: Avoid duplicate HDCP enables
Sean Paul
sean at poorly.run
Wed May 20 19:47:44 UTC 2020
From: Sean Paul <seanpaul at chromium.org>
If userspace sets the CP property to DESIRED while it's already ENABLED,
the driver will try to re-enable HDCP. On some displays, this will
result in R0' mismatches. I'm guessing this is because the display is
still sending back Ri instead of re-authenticating.
At any rate, we can fix this inefficiency easily enough by just nooping
the DESIRED property set if HDCP is already ENABLED.
Signed-off-by: Sean Paul <seanpaul at chromium.org>
---
I suspect this is the actual root cause I was chasing with
"drm/i915/hdcp: Add additional R0' wait". I was able to reproduce the
R0` messages by marking HDCP desired while it was already enabled. This
_should_ work, but it seems like some displays handle it more graciously
than others.
drivers/gpu/drm/i915/display/intel_hdcp.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
index 2cbc4619b4ce..f770fe0c5595 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
@@ -2156,12 +2156,16 @@ void intel_hdcp_atomic_check(struct drm_connector *connector,
}
/*
- * Nothing to do if the state didn't change, or HDCP was activated since
- * the last commit. And also no change in hdcp content type.
+ * Nothing to do if content type is unchanged and one of:
+ * - state didn't change
+ * - HDCP was activated since the last commit
+ * - attempting to set to desired while already enabled
*/
if (old_cp == new_cp ||
(old_cp == DRM_MODE_CONTENT_PROTECTION_DESIRED &&
- new_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED)) {
+ new_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED) ||
+ (old_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
+ new_cp == DRM_MODE_CONTENT_PROTECTION_DESIRED)) {
if (old_state->hdcp_content_type ==
new_state->hdcp_content_type)
return;
--
Sean Paul, Software Engineer, Google / Chromium OS
More information about the dri-devel
mailing list