From: Wenjing Liu <wenjing....@amd.com>

[why]
DM needs to be notified when hdcp module has completed
authentication attempt.

Acked-by: Anson Jacob <anson.ja...@amd.com>
Signed-off-by: Wenjing Liu <wenjing....@amd.com>
---
 .../gpu/drm/amd/display/modules/hdcp/hdcp.c   |  5 +-
 .../gpu/drm/amd/display/modules/hdcp/hdcp.h   |  8 ++
 .../display/modules/hdcp/hdcp1_transition.c   |  8 +-
 .../display/modules/hdcp/hdcp2_transition.c   |  4 +-
 .../drm/amd/display/modules/hdcp/hdcp_log.c   | 74 +++++++++++++++++++
 .../drm/amd/display/modules/hdcp/hdcp_log.h   | 72 ------------------
 .../drm/amd/display/modules/inc/mod_hdcp.h    |  1 +
 7 files changed, 93 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
index 06d60f031a06..3e81850a7ffe 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
@@ -145,6 +145,7 @@ static enum mod_hdcp_status transition(struct mod_hdcp 
*hdcp,
                        } else {
                                callback_in_ms(0, output);
                                set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
+                               set_auth_complete(hdcp, output);
                        }
                else if (is_hdmi_dvi_sl_hdcp(hdcp))
                        if (is_cp_desired_hdcp2(hdcp)) {
@@ -156,10 +157,12 @@ static enum mod_hdcp_status transition(struct mod_hdcp 
*hdcp,
                        } else {
                                callback_in_ms(0, output);
                                set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
+                               set_auth_complete(hdcp, output);
                        }
                else {
                        callback_in_ms(0, output);
                        set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
+                       set_auth_complete(hdcp, output);
                }
        } else if (is_in_cp_not_desired_state(hdcp)) {
                increment_stay_counter(hdcp);
@@ -520,7 +523,7 @@ enum mod_hdcp_status mod_hdcp_process_event(struct mod_hdcp 
*hdcp,
 
        /* reset authentication if needed */
        if (trans_status == MOD_HDCP_STATUS_RESET_NEEDED) {
-               HDCP_FULL_DDC_TRACE(hdcp);
+               mod_hdcp_log_ddc_trace(hdcp);
                reset_status = reset_authentication(hdcp, output);
                if (reset_status != MOD_HDCP_STATUS_SUCCESS)
                        push_error_status(hdcp, reset_status);
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.h 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.h
index 7123f0915706..399fbca8947b 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.h
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp.h
@@ -324,6 +324,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct 
mod_hdcp *hdcp,
 /* log functions */
 void mod_hdcp_dump_binary_message(uint8_t *msg, uint32_t msg_size,
                uint8_t *buf, uint32_t buf_size);
+void mod_hdcp_log_ddc_trace(struct mod_hdcp *hdcp);
 /* TODO: add adjustment log */
 
 /* psp functions */
@@ -494,6 +495,13 @@ static inline void set_watchdog_in_ms(struct mod_hdcp 
*hdcp, uint16_t time,
        output->watchdog_timer_delay = time;
 }
 
+static inline void set_auth_complete(struct mod_hdcp *hdcp,
+               struct mod_hdcp_output *output)
+{
+       output->auth_complete = 1;
+       mod_hdcp_log_ddc_trace(hdcp);
+}
+
 /* connection topology helpers */
 static inline uint8_t is_display_active(struct mod_hdcp_display *display)
 {
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_transition.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_transition.c
index 3dda8c1d83fc..7f011196ce98 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_transition.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_transition.c
@@ -89,7 +89,7 @@ enum mod_hdcp_status mod_hdcp_hdcp1_transition(struct 
mod_hdcp *hdcp,
                } else {
                        callback_in_ms(0, output);
                        set_state_id(hdcp, output, H1_A45_AUTHENTICATED);
-                       HDCP_FULL_DDC_TRACE(hdcp);
+                       set_auth_complete(hdcp, output);
                }
                break;
        case H1_A45_AUTHENTICATED:
@@ -137,7 +137,7 @@ enum mod_hdcp_status mod_hdcp_hdcp1_transition(struct 
mod_hdcp *hdcp,
                }
                callback_in_ms(0, output);
                set_state_id(hdcp, output, H1_A45_AUTHENTICATED);
-               HDCP_FULL_DDC_TRACE(hdcp);
+               set_auth_complete(hdcp, output);
                break;
        default:
                status = MOD_HDCP_STATUS_INVALID_STATE;
@@ -239,7 +239,7 @@ enum mod_hdcp_status mod_hdcp_hdcp1_dp_transition(struct 
mod_hdcp *hdcp,
                        set_state_id(hdcp, output, D1_A6_WAIT_FOR_READY);
                } else {
                        set_state_id(hdcp, output, D1_A4_AUTHENTICATED);
-                       HDCP_FULL_DDC_TRACE(hdcp);
+                       set_auth_complete(hdcp, output);
                }
                break;
        case D1_A4_AUTHENTICATED:
@@ -311,7 +311,7 @@ enum mod_hdcp_status mod_hdcp_hdcp1_dp_transition(struct 
mod_hdcp *hdcp,
                        break;
                }
                set_state_id(hdcp, output, D1_A4_AUTHENTICATED);
-               HDCP_FULL_DDC_TRACE(hdcp);
+               set_auth_complete(hdcp, output);
                break;
        default:
                fail_and_restart_in_ms(0, &status, output);
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c
index 70cb230d8f56..1f4095b26409 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c
@@ -242,7 +242,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_transition(struct 
mod_hdcp *hdcp,
                }
                callback_in_ms(0, output);
                set_state_id(hdcp, output, H2_A5_AUTHENTICATED);
-               HDCP_FULL_DDC_TRACE(hdcp);
+               set_auth_complete(hdcp, output);
                break;
        case H2_A5_AUTHENTICATED:
                if (input->rxstatus_read == FAIL ||
@@ -559,7 +559,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct 
mod_hdcp *hdcp,
                        break;
                }
                set_state_id(hdcp, output, D2_A5_AUTHENTICATED);
-               HDCP_FULL_DDC_TRACE(hdcp);
+               set_auth_complete(hdcp, output);
                break;
        case D2_A5_AUTHENTICATED:
                if (input->rxstatus_read == FAIL ||
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.c
index 1a0f7c3dc964..6b3b5f610907 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.c
@@ -51,6 +51,80 @@ void mod_hdcp_dump_binary_message(uint8_t *msg, uint32_t 
msg_size,
        }
 }
 
+void mod_hdcp_log_ddc_trace(struct mod_hdcp *hdcp)
+{
+       if (is_hdcp1(hdcp)) {
+               HDCP_DDC_READ_TRACE(hdcp, "BKSV", hdcp->auth.msg.hdcp1.bksv,
+                               sizeof(hdcp->auth.msg.hdcp1.bksv));
+               HDCP_DDC_READ_TRACE(hdcp, "BCAPS", &hdcp->auth.msg.hdcp1.bcaps,
+                               sizeof(hdcp->auth.msg.hdcp1.bcaps));
+               HDCP_DDC_READ_TRACE(hdcp, "BSTATUS",
+                               (uint8_t *)&hdcp->auth.msg.hdcp1.bstatus,
+                               sizeof(hdcp->auth.msg.hdcp1.bstatus));
+               HDCP_DDC_WRITE_TRACE(hdcp, "AN", hdcp->auth.msg.hdcp1.an,
+                               sizeof(hdcp->auth.msg.hdcp1.an));
+               HDCP_DDC_WRITE_TRACE(hdcp, "AKSV", hdcp->auth.msg.hdcp1.aksv,
+                               sizeof(hdcp->auth.msg.hdcp1.aksv));
+               HDCP_DDC_WRITE_TRACE(hdcp, "AINFO", &hdcp->auth.msg.hdcp1.ainfo,
+                               sizeof(hdcp->auth.msg.hdcp1.ainfo));
+               HDCP_DDC_READ_TRACE(hdcp, "RI' / R0'",
+                               (uint8_t *)&hdcp->auth.msg.hdcp1.r0p,
+                               sizeof(hdcp->auth.msg.hdcp1.r0p));
+               HDCP_DDC_READ_TRACE(hdcp, "BINFO",
+                               (uint8_t *)&hdcp->auth.msg.hdcp1.binfo_dp,
+                               sizeof(hdcp->auth.msg.hdcp1.binfo_dp));
+               HDCP_DDC_READ_TRACE(hdcp, "KSVLIST", 
hdcp->auth.msg.hdcp1.ksvlist,
+                               hdcp->auth.msg.hdcp1.ksvlist_size);
+               HDCP_DDC_READ_TRACE(hdcp, "V'", hdcp->auth.msg.hdcp1.vp,
+                               sizeof(hdcp->auth.msg.hdcp1.vp));
+       } else if (is_hdcp2(hdcp)) {
+               HDCP_DDC_READ_TRACE(hdcp, "HDCP2Version",
+                               &hdcp->auth.msg.hdcp2.hdcp2version_hdmi,
+                               sizeof(hdcp->auth.msg.hdcp2.hdcp2version_hdmi));
+               HDCP_DDC_READ_TRACE(hdcp, "Rx Caps", 
hdcp->auth.msg.hdcp2.rxcaps_dp,
+                               sizeof(hdcp->auth.msg.hdcp2.rxcaps_dp));
+               HDCP_DDC_WRITE_TRACE(hdcp, "AKE Init", 
hdcp->auth.msg.hdcp2.ake_init,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_init));
+               HDCP_DDC_READ_TRACE(hdcp, "AKE Cert", 
hdcp->auth.msg.hdcp2.ake_cert,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_cert));
+               HDCP_DDC_WRITE_TRACE(hdcp, "Stored KM",
+                               hdcp->auth.msg.hdcp2.ake_stored_km,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_stored_km));
+               HDCP_DDC_WRITE_TRACE(hdcp, "No Stored KM",
+                               hdcp->auth.msg.hdcp2.ake_no_stored_km,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km));
+               HDCP_DDC_READ_TRACE(hdcp, "H'", 
hdcp->auth.msg.hdcp2.ake_h_prime,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_h_prime));
+               HDCP_DDC_READ_TRACE(hdcp, "Pairing Info",
+                               hdcp->auth.msg.hdcp2.ake_pairing_info,
+                               sizeof(hdcp->auth.msg.hdcp2.ake_pairing_info));
+               HDCP_DDC_WRITE_TRACE(hdcp, "LC Init", 
hdcp->auth.msg.hdcp2.lc_init,
+                               sizeof(hdcp->auth.msg.hdcp2.lc_init));
+               HDCP_DDC_READ_TRACE(hdcp, "L'", hdcp->auth.msg.hdcp2.lc_l_prime,
+                               sizeof(hdcp->auth.msg.hdcp2.lc_l_prime));
+               HDCP_DDC_WRITE_TRACE(hdcp, "Exchange KS", 
hdcp->auth.msg.hdcp2.ske_eks,
+                               sizeof(hdcp->auth.msg.hdcp2.ske_eks));
+               HDCP_DDC_READ_TRACE(hdcp, "Rx Status",
+                               (uint8_t *)&hdcp->auth.msg.hdcp2.rxstatus,
+                               sizeof(hdcp->auth.msg.hdcp2.rxstatus));
+               HDCP_DDC_READ_TRACE(hdcp, "Rx Id List",
+                               hdcp->auth.msg.hdcp2.rx_id_list,
+                               hdcp->auth.msg.hdcp2.rx_id_list_size);
+               HDCP_DDC_WRITE_TRACE(hdcp, "Rx Id List Ack",
+                               hdcp->auth.msg.hdcp2.repeater_auth_ack,
+                               sizeof(hdcp->auth.msg.hdcp2.repeater_auth_ack));
+               HDCP_DDC_WRITE_TRACE(hdcp, "Content Stream Management",
+                               
hdcp->auth.msg.hdcp2.repeater_auth_stream_manage,
+                               hdcp->auth.msg.hdcp2.stream_manage_size);
+               HDCP_DDC_READ_TRACE(hdcp, "Stream Ready",
+                               hdcp->auth.msg.hdcp2.repeater_auth_stream_ready,
+                               
sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready));
+               HDCP_DDC_WRITE_TRACE(hdcp, "Content Stream Type",
+                               hdcp->auth.msg.hdcp2.content_stream_type_dp,
+                               
sizeof(hdcp->auth.msg.hdcp2.content_stream_type_dp));
+       }
+}
+
 char *mod_hdcp_status_to_str(int32_t status)
 {
        switch (status) {
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h
index 47f8ee2832ff..eb6f9b9c504a 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_log.h
@@ -106,78 +106,6 @@
                                hdcp->config.index, msg_name,\
                                hdcp->buf); \
 } while (0)
-#define HDCP_FULL_DDC_TRACE(hdcp) do { \
-       if (is_hdcp1(hdcp)) { \
-               HDCP_DDC_READ_TRACE(hdcp, "BKSV", hdcp->auth.msg.hdcp1.bksv, \
-                               sizeof(hdcp->auth.msg.hdcp1.bksv)); \
-               HDCP_DDC_READ_TRACE(hdcp, "BCAPS", &hdcp->auth.msg.hdcp1.bcaps, 
\
-                               sizeof(hdcp->auth.msg.hdcp1.bcaps)); \
-               HDCP_DDC_READ_TRACE(hdcp, "BSTATUS", \
-                               (uint8_t *)&hdcp->auth.msg.hdcp1.bstatus, \
-                               sizeof(hdcp->auth.msg.hdcp1.bstatus)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "AN", hdcp->auth.msg.hdcp1.an, \
-                               sizeof(hdcp->auth.msg.hdcp1.an)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "AKSV", hdcp->auth.msg.hdcp1.aksv, \
-                               sizeof(hdcp->auth.msg.hdcp1.aksv)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "AINFO", 
&hdcp->auth.msg.hdcp1.ainfo, \
-                               sizeof(hdcp->auth.msg.hdcp1.ainfo)); \
-               HDCP_DDC_READ_TRACE(hdcp, "RI' / R0'", \
-                               (uint8_t *)&hdcp->auth.msg.hdcp1.r0p, \
-                               sizeof(hdcp->auth.msg.hdcp1.r0p)); \
-               HDCP_DDC_READ_TRACE(hdcp, "BINFO", \
-                               (uint8_t *)&hdcp->auth.msg.hdcp1.binfo_dp, \
-                               sizeof(hdcp->auth.msg.hdcp1.binfo_dp)); \
-               HDCP_DDC_READ_TRACE(hdcp, "KSVLIST", 
hdcp->auth.msg.hdcp1.ksvlist, \
-                               hdcp->auth.msg.hdcp1.ksvlist_size); \
-               HDCP_DDC_READ_TRACE(hdcp, "V'", hdcp->auth.msg.hdcp1.vp, \
-                               sizeof(hdcp->auth.msg.hdcp1.vp)); \
-       } else { \
-               HDCP_DDC_READ_TRACE(hdcp, "HDCP2Version", \
-                               &hdcp->auth.msg.hdcp2.hdcp2version_hdmi, \
-                               
sizeof(hdcp->auth.msg.hdcp2.hdcp2version_hdmi)); \
-               HDCP_DDC_READ_TRACE(hdcp, "Rx Caps", 
hdcp->auth.msg.hdcp2.rxcaps_dp, \
-                               sizeof(hdcp->auth.msg.hdcp2.rxcaps_dp)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "AKE Init", 
hdcp->auth.msg.hdcp2.ake_init, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_init)); \
-               HDCP_DDC_READ_TRACE(hdcp, "AKE Cert", 
hdcp->auth.msg.hdcp2.ake_cert, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_cert)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "Stored KM", \
-                               hdcp->auth.msg.hdcp2.ake_stored_km, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_stored_km)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "No Stored KM", \
-                               hdcp->auth.msg.hdcp2.ake_no_stored_km, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km)); 
\
-               HDCP_DDC_READ_TRACE(hdcp, "H'", 
hdcp->auth.msg.hdcp2.ake_h_prime, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_h_prime)); \
-               HDCP_DDC_READ_TRACE(hdcp, "Pairing Info", \
-                               hdcp->auth.msg.hdcp2.ake_pairing_info, \
-                               sizeof(hdcp->auth.msg.hdcp2.ake_pairing_info)); 
\
-               HDCP_DDC_WRITE_TRACE(hdcp, "LC Init", 
hdcp->auth.msg.hdcp2.lc_init, \
-                               sizeof(hdcp->auth.msg.hdcp2.lc_init)); \
-               HDCP_DDC_READ_TRACE(hdcp, "L'", 
hdcp->auth.msg.hdcp2.lc_l_prime, \
-                               sizeof(hdcp->auth.msg.hdcp2.lc_l_prime)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "Exchange KS", 
hdcp->auth.msg.hdcp2.ske_eks, \
-                               sizeof(hdcp->auth.msg.hdcp2.ske_eks)); \
-               HDCP_DDC_READ_TRACE(hdcp, "Rx Status", \
-                               (uint8_t *)&hdcp->auth.msg.hdcp2.rxstatus, \
-                               sizeof(hdcp->auth.msg.hdcp2.rxstatus)); \
-               HDCP_DDC_READ_TRACE(hdcp, "Rx Id List", \
-                               hdcp->auth.msg.hdcp2.rx_id_list, \
-                               hdcp->auth.msg.hdcp2.rx_id_list_size); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "Rx Id List Ack", \
-                               hdcp->auth.msg.hdcp2.repeater_auth_ack, \
-                               
sizeof(hdcp->auth.msg.hdcp2.repeater_auth_ack)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "Content Stream Management", \
-                               
hdcp->auth.msg.hdcp2.repeater_auth_stream_manage, \
-                               hdcp->auth.msg.hdcp2.stream_manage_size); \
-               HDCP_DDC_READ_TRACE(hdcp, "Stream Ready", \
-                               
hdcp->auth.msg.hdcp2.repeater_auth_stream_ready, \
-                               
sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready)); \
-               HDCP_DDC_WRITE_TRACE(hdcp, "Content Stream Type", \
-                               hdcp->auth.msg.hdcp2.content_stream_type_dp, \
-                               
sizeof(hdcp->auth.msg.hdcp2.content_stream_type_dp)); \
-       } \
-} while (0)
 #define HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, i) \
                HDCP_LOG_TOP(hdcp, "[Link %d]\tadd display %d", \
                                hdcp->config.index, i)
diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h 
b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
index a6eb86de8d5c..f37101f5a777 100644
--- a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
+++ b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h
@@ -225,6 +225,7 @@ struct mod_hdcp_output {
        uint8_t watchdog_timer_stop;
        uint16_t callback_delay;
        uint16_t watchdog_timer_delay;
+       uint8_t auth_complete;
 };
 
 /* used to represent per display info */
-- 
2.25.1

Reply via email to