2023-01-18 19:32:42

by Mark Yacoub

[permalink] [raw]
Subject: [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()

From: Sean Paul <[email protected]>

This patch moves the hdcp atomic check from i915 to drm_hdcp so other
drivers can use it. No functional changes, just cleaned up some of the
code when moving it over.

Acked-by: Jani Nikula <[email protected]>
Acked-by: Jani Nikula <[email protected]>
Reviewed-by: Rodrigo Vivi <[email protected]>
Reviewed-by: Abhinav Kumar <[email protected]>
Signed-off-by: Sean Paul <[email protected]>
Signed-off-by: Mark Yacoub <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v1
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v2
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v3
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v4
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v5

Changes in v2:
-None
Changes in v3:
-None
Changes in v4:
-None
Changes in v5:
-None
Changes in V6:
-Rebase: move helper from drm_hdcp.c to drm_hdcp_helper.c

---
drivers/gpu/drm/display/drm_hdcp_helper.c | 69 +++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_atomic.c | 4 +-
drivers/gpu/drm/i915/display/intel_hdcp.c | 47 --------------
drivers/gpu/drm/i915/display/intel_hdcp.h | 3 -
include/drm/display/drm_hdcp_helper.h | 3 +
5 files changed, 74 insertions(+), 52 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_hdcp_helper.c b/drivers/gpu/drm/display/drm_hdcp_helper.c
index e78999c72bd7..7d910523b05f 100644
--- a/drivers/gpu/drm/display/drm_hdcp_helper.c
+++ b/drivers/gpu/drm/display/drm_hdcp_helper.c
@@ -20,6 +20,7 @@
#include <drm/drm_property.h>
#include <drm/drm_mode_object.h>
#include <drm/drm_connector.h>
+#include <drm/drm_atomic.h>

static inline void drm_hdcp_print_ksv(const u8 *ksv)
{
@@ -419,3 +420,71 @@ void drm_hdcp_update_content_protection(struct drm_connector *connector,
dev->mode_config.content_protection_property);
}
EXPORT_SYMBOL(drm_hdcp_update_content_protection);
+
+/**
+ * drm_hdcp_atomic_check - Helper for drivers to call during connector->atomic_check
+ *
+ * @state: pointer to the atomic state being checked
+ * @connector: drm_connector on which content protection state needs an update
+ *
+ * This function can be used by display drivers to perform an atomic check on the
+ * hdcp state elements. If hdcp state has changed, this function will set
+ * mode_changed on the crtc driving the connector so it can update its hardware
+ * to match the hdcp state.
+ */
+void drm_hdcp_atomic_check(struct drm_connector *connector,
+ struct drm_atomic_state *state)
+{
+ struct drm_connector_state *new_conn_state, *old_conn_state;
+ struct drm_crtc_state *new_crtc_state;
+ u64 old_hdcp, new_hdcp;
+
+ old_conn_state = drm_atomic_get_old_connector_state(state, connector);
+ old_hdcp = old_conn_state->content_protection;
+
+ new_conn_state = drm_atomic_get_new_connector_state(state, connector);
+ new_hdcp = new_conn_state->content_protection;
+
+ if (!new_conn_state->crtc) {
+ /*
+ * If the connector is being disabled with CP enabled, mark it
+ * desired so it's re-enabled when the connector is brought back
+ */
+ if (old_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED)
+ new_conn_state->content_protection =
+ DRM_MODE_CONTENT_PROTECTION_DESIRED;
+ return;
+ }
+
+ new_crtc_state =
+ drm_atomic_get_new_crtc_state(state, new_conn_state->crtc);
+ /*
+ * Fix the HDCP uapi content protection state in case of modeset.
+ * FIXME: As per HDCP content protection property uapi doc, an uevent()
+ * need to be sent if there is transition from ENABLED->DESIRED.
+ */
+ if (drm_atomic_crtc_needs_modeset(new_crtc_state) &&
+ (old_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
+ new_hdcp != DRM_MODE_CONTENT_PROTECTION_UNDESIRED))
+ new_conn_state->content_protection =
+ DRM_MODE_CONTENT_PROTECTION_DESIRED;
+
+ /*
+ * 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_hdcp == new_hdcp ||
+ (old_hdcp == DRM_MODE_CONTENT_PROTECTION_DESIRED &&
+ new_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED) ||
+ (old_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
+ new_hdcp == DRM_MODE_CONTENT_PROTECTION_DESIRED)) {
+ if (old_conn_state->hdcp_content_type ==
+ new_conn_state->hdcp_content_type)
+ return;
+ }
+
+ new_crtc_state->mode_changed = true;
+}
+EXPORT_SYMBOL(drm_hdcp_atomic_check);
diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c
index 18f0a5ae3bac..8a473199c4bf 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic.c
@@ -32,6 +32,7 @@
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_fourcc.h>
+#include <drm/display/drm_hdcp_helper.h>

#include "i915_drv.h"
#include "i915_reg.h"
@@ -39,7 +40,6 @@
#include "intel_cdclk.h"
#include "intel_display_types.h"
#include "intel_global_state.h"
-#include "intel_hdcp.h"
#include "intel_psr.h"
#include "skl_universal_plane.h"

@@ -123,7 +123,7 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
to_intel_digital_connector_state(old_state);
struct drm_crtc_state *crtc_state;

- intel_hdcp_atomic_check(conn, old_state, new_state);
+ drm_hdcp_atomic_check(conn, state);

if (!new_state->crtc)
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
index 6406fd487ee5..396d2cef000a 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
@@ -2524,53 +2524,6 @@ void intel_hdcp_cleanup(struct intel_connector *connector)
mutex_unlock(&hdcp->mutex);
}

-void intel_hdcp_atomic_check(struct drm_connector *connector,
- struct drm_connector_state *old_state,
- struct drm_connector_state *new_state)
-{
- u64 old_cp = old_state->content_protection;
- u64 new_cp = new_state->content_protection;
- struct drm_crtc_state *crtc_state;
-
- if (!new_state->crtc) {
- /*
- * If the connector is being disabled with CP enabled, mark it
- * desired so it's re-enabled when the connector is brought back
- */
- if (old_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED)
- new_state->content_protection =
- DRM_MODE_CONTENT_PROTECTION_DESIRED;
- return;
- }
-
- crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
- new_state->crtc);
- /*
- * Fix the HDCP uapi content protection state in case of modeset.
- * FIXME: As per HDCP content protection property uapi doc, an uevent()
- * need to be sent if there is transition from ENABLED->DESIRED.
- */
- if (drm_atomic_crtc_needs_modeset(crtc_state) &&
- (old_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
- new_cp != DRM_MODE_CONTENT_PROTECTION_UNDESIRED))
- new_state->content_protection =
- DRM_MODE_CONTENT_PROTECTION_DESIRED;
-
- /*
- * 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.
- */
- if (old_cp == new_cp ||
- (old_cp == DRM_MODE_CONTENT_PROTECTION_DESIRED &&
- new_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED)) {
- if (old_state->hdcp_content_type ==
- new_state->hdcp_content_type)
- return;
- }
-
- crtc_state->mode_changed = true;
-}
-
/* Handles the CP_IRQ raised from the DP HDCP sink */
void intel_hdcp_handle_cp_irq(struct intel_connector *connector)
{
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h
index 8f53b0c7fe5c..7c5fd84a7b65 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.h
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.h
@@ -22,9 +22,6 @@ struct intel_digital_port;
enum port;
enum transcoder;

-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,
struct intel_digital_port *dig_port,
const struct intel_hdcp_shim *hdcp_shim);
diff --git a/include/drm/display/drm_hdcp_helper.h b/include/drm/display/drm_hdcp_helper.h
index 8aaf87bf2735..dd02b2e72a50 100644
--- a/include/drm/display/drm_hdcp_helper.h
+++ b/include/drm/display/drm_hdcp_helper.h
@@ -11,6 +11,7 @@

#include <drm/display/drm_hdcp.h>

+struct drm_atomic_state;
struct drm_device;
struct drm_connector;

@@ -18,5 +19,7 @@ int drm_hdcp_check_ksvs_revoked(struct drm_device *dev, u8 *ksvs, u32 ksv_count)
int drm_connector_attach_content_protection_property(struct drm_connector *connector,
bool hdcp_content_type);
void drm_hdcp_update_content_protection(struct drm_connector *connector, u64 val);
+void drm_hdcp_atomic_check(struct drm_connector *connector,
+ struct drm_atomic_state *state);

#endif
--
2.39.0.246.g2a6d74b583-goog


2023-01-19 11:16:45

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()

On 18/01/2023 20:30, Mark Yacoub wrote:
> From: Sean Paul <[email protected]>
>
> This patch moves the hdcp atomic check from i915 to drm_hdcp so other
> drivers can use it. No functional changes, just cleaned up some of the
> code when moving it over.
>
> Acked-by: Jani Nikula <[email protected]>
> Acked-by: Jani Nikula <[email protected]>
> Reviewed-by: Rodrigo Vivi <[email protected]>
> Reviewed-by: Abhinav Kumar <[email protected]>
> Signed-off-by: Sean Paul <[email protected]>
> Signed-off-by: Mark Yacoub <[email protected]>
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v1
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v2
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v3
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v4
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v5

It seems all your previous versions were sent not to correct people and
lists. Therefore we see it for the first time even though it is v6! It's
not the first such weird CC list in chromium, so maybe your
organisational process could be improved? Not only for you but for
colleagues as well, so you all start using get_maintainers.pl on newest
kernel (not something ancient)?

Best regards,
Krzysztof

2023-01-19 12:29:09

by Dmitry Baryshkov

[permalink] [raw]
Subject: Re: [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()

On 18/01/2023 21:30, Mark Yacoub wrote:
> From: Sean Paul <[email protected]>
>
> This patch moves the hdcp atomic check from i915 to drm_hdcp so other
> drivers can use it. No functional changes, just cleaned up some of the
> code when moving it over.
>
> Acked-by: Jani Nikula <[email protected]>
> Acked-by: Jani Nikula <[email protected]>
> Reviewed-by: Rodrigo Vivi <[email protected]>
> Reviewed-by: Abhinav Kumar <[email protected]>
> Signed-off-by: Sean Paul <[email protected]>
> Signed-off-by: Mark Yacoub <[email protected]>
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v1
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v2
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v3
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v4
> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v5
>
> Changes in v2:
> -None
> Changes in v3:
> -None
> Changes in v4:
> -None
> Changes in v5:
> -None
> Changes in V6:
> -Rebase: move helper from drm_hdcp.c to drm_hdcp_helper.c
>
> ---
> drivers/gpu/drm/display/drm_hdcp_helper.c | 69 +++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_atomic.c | 4 +-
> drivers/gpu/drm/i915/display/intel_hdcp.c | 47 --------------
> drivers/gpu/drm/i915/display/intel_hdcp.h | 3 -
> include/drm/display/drm_hdcp_helper.h | 3 +
> 5 files changed, 74 insertions(+), 52 deletions(-)

With the hope that commit message is cleaned up:

Reviewed-by: Dmitry Baryshkov <[email protected]>

--
With best wishes
Dmitry

2023-01-20 15:56:05

by Sean Paul

[permalink] [raw]
Subject: Re: [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()

On Thu, Jan 19, 2023 at 11:37:52AM +0100, Krzysztof Kozlowski wrote:
> On 18/01/2023 20:30, Mark Yacoub wrote:
> > From: Sean Paul <[email protected]>
> >
> > This patch moves the hdcp atomic check from i915 to drm_hdcp so other
> > drivers can use it. No functional changes, just cleaned up some of the
> > code when moving it over.
> >
> > Acked-by: Jani Nikula <[email protected]>
> > Acked-by: Jani Nikula <[email protected]>
> > Reviewed-by: Rodrigo Vivi <[email protected]>
> > Reviewed-by: Abhinav Kumar <[email protected]>
> > Signed-off-by: Sean Paul <[email protected]>
> > Signed-off-by: Mark Yacoub <[email protected]>
> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v1
> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v2
> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v3
> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v4
> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v5
>
> It seems all your previous versions were sent not to correct people and
> lists. Therefore we see it for the first time even though it is v6!

Hi Krzysztof,
Thanks for your review comments.

Here are the addresses the last version was sent to, who is missing?

To: [email protected],
[email protected],
[email protected],
[email protected],
[email protected]
Cc: [email protected],
[email protected],
[email protected],
[email protected],
Sean Paul <[email protected]>,
Maarten Lankhorst <[email protected]>,
Maxime Ripard <[email protected]>,
Thomas Zimmermann <[email protected]>,
David Airlie <[email protected]>,
Daniel Vetter <[email protected]>,
Jani Nikula <[email protected]>,
Joonas Lahtinen <[email protected]>,
Tvrtko Ursulin <[email protected]>

> It's
> not the first such weird CC list in chromium, so maybe your
> organisational process could be improved? Not only for you but for
> colleagues as well, so you all start using get_maintainers.pl on newest
> kernel (not something ancient)?

I can't really speak for others, but I use MAINTAINERS from drm-tip. The
previous patch sets were sent before 24df12013853 ("MAINTAINERS: Add
Dmitry as MSM DRM driver co-maintainer"), which might explain why you think
there are absences?

Thanks again,

Sean

>
> Best regards,
> Krzysztof
>

--
Sean Paul, Software Engineer, Google / Chromium OS

2023-01-20 21:12:38

by Dmitry Baryshkov

[permalink] [raw]
Subject: Re: [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()



On 20 January 2023 18:32:47 GMT+03:00, Sean Paul <[email protected]> wrote:
>On Thu, Jan 19, 2023 at 11:37:52AM +0100, Krzysztof Kozlowski wrote:
>> On 18/01/2023 20:30, Mark Yacoub wrote:
>> > From: Sean Paul <[email protected]>
>> >
>> > This patch moves the hdcp atomic check from i915 to drm_hdcp so other
>> > drivers can use it. No functional changes, just cleaned up some of the
>> > code when moving it over.
>> >
>> > Acked-by: Jani Nikula <[email protected]>
>> > Acked-by: Jani Nikula <[email protected]>
>> > Reviewed-by: Rodrigo Vivi <[email protected]>
>> > Reviewed-by: Abhinav Kumar <[email protected]>
>> > Signed-off-by: Sean Paul <[email protected]>
>> > Signed-off-by: Mark Yacoub <[email protected]>
>> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v1
>> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v2
>> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v3
>> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v4
>> > Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] #v5
>>
>> It seems all your previous versions were sent not to correct people and
>> lists. Therefore we see it for the first time even though it is v6!
>
>Hi Krzysztof,
>Thanks for your review comments.
>
>Here are the addresses the last version was sent to, who is missing?
>
>To: [email protected],
> [email protected],
> [email protected],
> [email protected],
> [email protected]
>Cc: [email protected],
> [email protected],
> [email protected],
> [email protected],
> Sean Paul <[email protected]>,
> Maarten Lankhorst <[email protected]>,
> Maxime Ripard <[email protected]>,
> Thomas Zimmermann <[email protected]>,
> David Airlie <[email protected]>,
> Daniel Vetter <[email protected]>,
> Jani Nikula <[email protected]>,
> Joonas Lahtinen <[email protected]>,
> Tvrtko Ursulin <[email protected]>
>
>> It's
>> not the first such weird CC list in chromium, so maybe your
>> organisational process could be improved? Not only for you but for
>> colleagues as well, so you all start using get_maintainers.pl on newest
>> kernel (not something ancient)?
>
>I can't really speak for others, but I use MAINTAINERS from drm-tip. The
>previous patch sets were sent before 24df12013853 ("MAINTAINERS: Add
>Dmitry as MSM DRM driver co-maintainer"), which might explain why you think
>there are absences?

Current iteration of the patchset got at least three addresses wrong. They have been changed for various reasons. Thus I also can suppose that the list is incomplete and/or incorrect.

>
>Thanks again,
>
>Sean
>
>>
>> Best regards,
>> Krzysztof
>>
>

--
With best wishes
Dmitry

2023-03-10 05:30:47

by Kandpal, Suraj

[permalink] [raw]
Subject: RE: [Intel-gfx] [PATCH v6 01/10] drm/hdcp: Add drm_hdcp_atomic_check()

>
> From: Sean Paul <[email protected]>
>
> This patch moves the hdcp atomic check from i915 to drm_hdcp so other
> drivers can use it. No functional changes, just cleaned up some of the code
> when moving it over.
>
> Acked-by: Jani Nikula <[email protected]>
> Acked-by: Jani Nikula <[email protected]>
> Reviewed-by: Rodrigo Vivi <[email protected]>
> Reviewed-by: Abhinav Kumar <[email protected]>
> Signed-off-by: Sean Paul <[email protected]>
> Signed-off-by: Mark Yacoub <[email protected]>
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20210913175747.47456-2-
> [email protected] #v1
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20210915203834.1439-2-
> [email protected] #v2
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20211001151145.55916-2-
> [email protected] #v3
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20211105030434.2828845-
> [email protected] #v4
> Link:
> https://patchwork.freedesktop.org/patch/msgid/20220411204741.1074308-
> [email protected] #v5
>
> Changes in v2:
> -None
> Changes in v3:
> -None
> Changes in v4:
> -None
> Changes in v5:
> -None
> Changes in V6:
> -Rebase: move helper from drm_hdcp.c to drm_hdcp_helper.c
>
> ---
> drivers/gpu/drm/display/drm_hdcp_helper.c | 69
> +++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_atomic.c | 4 +-
> drivers/gpu/drm/i915/display/intel_hdcp.c | 47 --------------
> drivers/gpu/drm/i915/display/intel_hdcp.h | 3 -
> include/drm/display/drm_hdcp_helper.h | 3 +
> 5 files changed, 74 insertions(+), 52 deletions(-)
>
> diff --git a/drivers/gpu/drm/display/drm_hdcp_helper.c
> b/drivers/gpu/drm/display/drm_hdcp_helper.c
> index e78999c72bd7..7d910523b05f 100644
> --- a/drivers/gpu/drm/display/drm_hdcp_helper.c
> +++ b/drivers/gpu/drm/display/drm_hdcp_helper.c
> @@ -20,6 +20,7 @@
> #include <drm/drm_property.h>
> #include <drm/drm_mode_object.h>
> #include <drm/drm_connector.h>
> +#include <drm/drm_atomic.h>
>
> static inline void drm_hdcp_print_ksv(const u8 *ksv) { @@ -419,3 +420,71
> @@ void drm_hdcp_update_content_protection(struct drm_connector
> *connector,
> dev-
> >mode_config.content_protection_property);
> }
> EXPORT_SYMBOL(drm_hdcp_update_content_protection);
> +
> +/**
> + * drm_hdcp_atomic_check - Helper for drivers to call during
> +connector->atomic_check
> + *
> + * @state: pointer to the atomic state being checked
> + * @connector: drm_connector on which content protection state needs an
> +update
> + *
> + * This function can be used by display drivers to perform an atomic
> +check on the
> + * hdcp state elements. If hdcp state has changed, this function will
> +set
> + * mode_changed on the crtc driving the connector so it can update its
> +hardware
> + * to match the hdcp state.
> + */
> +void drm_hdcp_atomic_check(struct drm_connector *connector,
> + struct drm_atomic_state *state)
> +{
> + struct drm_connector_state *new_conn_state, *old_conn_state;
> + struct drm_crtc_state *new_crtc_state;
> + u64 old_hdcp, new_hdcp;
> +
> + old_conn_state = drm_atomic_get_old_connector_state(state,
> connector);
> + old_hdcp = old_conn_state->content_protection;
> +
> + new_conn_state = drm_atomic_get_new_connector_state(state,
> connector);
> + new_hdcp = new_conn_state->content_protection;
> +
> + if (!new_conn_state->crtc) {
> + /*
> + * If the connector is being disabled with CP enabled, mark it
> + * desired so it's re-enabled when the connector is brought
> back
> + */
> + if (old_hdcp ==
> DRM_MODE_CONTENT_PROTECTION_ENABLED)
> + new_conn_state->content_protection =
> +
> DRM_MODE_CONTENT_PROTECTION_DESIRED;
> + return;
> + }
> +
> + new_crtc_state =
> + drm_atomic_get_new_crtc_state(state, new_conn_state-
> >crtc);
> + /*
> + * Fix the HDCP uapi content protection state in case of modeset.
> + * FIXME: As per HDCP content protection property uapi doc, an
> uevent()
> + * need to be sent if there is transition from ENABLED->DESIRED.
> + */

Hi Mark,
Is the above comment needed here as drm_hdcp_update_content_protection is
used to change property which sends a uevent making the above comment misleading

Regards,
Suraj Kandpal
> + if (drm_atomic_crtc_needs_modeset(new_crtc_state) &&
> + (old_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
> + new_hdcp != DRM_MODE_CONTENT_PROTECTION_UNDESIRED))
> + new_conn_state->content_protection =
> + DRM_MODE_CONTENT_PROTECTION_DESIRED;
> +
> + /*
> + * 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_hdcp == new_hdcp ||
> + (old_hdcp == DRM_MODE_CONTENT_PROTECTION_DESIRED &&
> + new_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED) ||
> + (old_hdcp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
> + new_hdcp == DRM_MODE_CONTENT_PROTECTION_DESIRED)) {
> + if (old_conn_state->hdcp_content_type ==
> + new_conn_state->hdcp_content_type)
> + return;
> + }
> +
> + new_crtc_state->mode_changed = true;
> +}
> +EXPORT_SYMBOL(drm_hdcp_atomic_check);
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c
> b/drivers/gpu/drm/i915/display/intel_atomic.c
> index 18f0a5ae3bac..8a473199c4bf 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic.c
> @@ -32,6 +32,7 @@
> #include <drm/drm_atomic.h>
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_fourcc.h>
> +#include <drm/display/drm_hdcp_helper.h>
>
> #include "i915_drv.h"
> #include "i915_reg.h"
> @@ -39,7 +40,6 @@
> #include "intel_cdclk.h"
> #include "intel_display_types.h"
> #include "intel_global_state.h"
> -#include "intel_hdcp.h"
> #include "intel_psr.h"
> #include "skl_universal_plane.h"
>
> @@ -123,7 +123,7 @@ int intel_digital_connector_atomic_check(struct
> drm_connector *conn,
> to_intel_digital_connector_state(old_state);
> struct drm_crtc_state *crtc_state;
>
> - intel_hdcp_atomic_check(conn, old_state, new_state);
> + drm_hdcp_atomic_check(conn, state);
>
> if (!new_state->crtc)
> return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c
> b/drivers/gpu/drm/i915/display/intel_hdcp.c
> index 6406fd487ee5..396d2cef000a 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
> @@ -2524,53 +2524,6 @@ void intel_hdcp_cleanup(struct intel_connector
> *connector)
> mutex_unlock(&hdcp->mutex);
> }
>
> -void intel_hdcp_atomic_check(struct drm_connector *connector,
> - struct drm_connector_state *old_state,
> - struct drm_connector_state *new_state)
> -{
> - u64 old_cp = old_state->content_protection;
> - u64 new_cp = new_state->content_protection;
> - struct drm_crtc_state *crtc_state;
> -
> - if (!new_state->crtc) {
> - /*
> - * If the connector is being disabled with CP enabled, mark it
> - * desired so it's re-enabled when the connector is brought
> back
> - */
> - if (old_cp ==
> DRM_MODE_CONTENT_PROTECTION_ENABLED)
> - new_state->content_protection =
> -
> DRM_MODE_CONTENT_PROTECTION_DESIRED;
> - return;
> - }
> -
> - crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
> - new_state->crtc);
> - /*
> - * Fix the HDCP uapi content protection state in case of modeset.
> - * FIXME: As per HDCP content protection property uapi doc, an
> uevent()
> - * need to be sent if there is transition from ENABLED->DESIRED.
> - */
> - if (drm_atomic_crtc_needs_modeset(crtc_state) &&
> - (old_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED &&
> - new_cp != DRM_MODE_CONTENT_PROTECTION_UNDESIRED))
> - new_state->content_protection =
> - DRM_MODE_CONTENT_PROTECTION_DESIRED;
> -
> - /*
> - * 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.
> - */
> - if (old_cp == new_cp ||
> - (old_cp == DRM_MODE_CONTENT_PROTECTION_DESIRED &&
> - new_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED)) {
> - if (old_state->hdcp_content_type ==
> - new_state->hdcp_content_type)
> - return;
> - }
> -
> - crtc_state->mode_changed = true;
> -}
> -
> /* Handles the CP_IRQ raised from the DP HDCP sink */ void
> intel_hdcp_handle_cp_irq(struct intel_connector *connector) { diff --git
> a/drivers/gpu/drm/i915/display/intel_hdcp.h
> b/drivers/gpu/drm/i915/display/intel_hdcp.h
> index 8f53b0c7fe5c..7c5fd84a7b65 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.h
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h
> @@ -22,9 +22,6 @@ struct intel_digital_port; enum port; enum transcoder;
>
> -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,
> struct intel_digital_port *dig_port,
> const struct intel_hdcp_shim *hdcp_shim); diff --git
> a/include/drm/display/drm_hdcp_helper.h
> b/include/drm/display/drm_hdcp_helper.h
> index 8aaf87bf2735..dd02b2e72a50 100644
> --- a/include/drm/display/drm_hdcp_helper.h
> +++ b/include/drm/display/drm_hdcp_helper.h
> @@ -11,6 +11,7 @@
>
> #include <drm/display/drm_hdcp.h>
>
> +struct drm_atomic_state;
> struct drm_device;
> struct drm_connector;
>
> @@ -18,5 +19,7 @@ int drm_hdcp_check_ksvs_revoked(struct drm_device
> *dev, u8 *ksvs, u32 ksv_count) int
> drm_connector_attach_content_protection_property(struct drm_connector
> *connector,
> bool hdcp_content_type);
> void drm_hdcp_update_content_protection(struct drm_connector
> *connector, u64 val);
> +void drm_hdcp_atomic_check(struct drm_connector *connector,
> + struct drm_atomic_state *state);
>
> #endif
> --
> 2.39.0.246.g2a6d74b583-goog