Loading drivers/gpu/drm/msm/sde_hdcp_2x.c +30 −12 Original line number Diff line number Diff line Loading @@ -252,9 +252,7 @@ static int sde_hdcp_2x_get_next_message(struct sde_hdcp_2x_ctrl *hdcp, case REP_SEND_RECV_ID_LIST: return REP_SEND_ACK; case REP_STREAM_MANAGE: if (hdcp->resend_stream_manage) return REP_STREAM_MANAGE; else hdcp->resend_stream_manage = false; return REP_STREAM_READY; default: pr_err("Uknown message ID (%d)", hdcp->last_msg); Loading Loading @@ -486,6 +484,12 @@ static void sde_hdcp_2x_stream(struct sde_hdcp_2x_ctrl *hdcp) return; } if (!hdcp->authenticated && hdcp->app_data.response.data[0] != REP_SEND_ACK) { pr_debug("invalid state. HDCP repeater not authenticated\n"); return; } rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_QUERY_STREAM, &hdcp->app_data); if (rc) Loading @@ -500,9 +504,12 @@ static void sde_hdcp_2x_stream(struct sde_hdcp_2x_ctrl *hdcp) pr_debug("message received from TZ: %s\n", sde_hdcp_2x_message_name(hdcp->app_data.response.data[0])); exit: if (!rc && !atomic_read(&hdcp->hdcp_off)) if (!rc && !atomic_read(&hdcp->hdcp_off)) { /* Modify last message to ensure the proper message is sent */ hdcp->last_msg = REP_SEND_ACK; sde_hdcp_2x_send_message(hdcp); } } static void sde_hdcp_2x_query_stream_work(struct kthread_work *work) { Loading Loading @@ -728,7 +735,15 @@ static void sde_hdcp_2x_msg_recvd(struct sde_hdcp_2x_ctrl *hdcp) sde_hdcp_2x_message_name(out_msg)); if (msg[0] == REP_STREAM_READY && out_msg != REP_STREAM_MANAGE) { if (!hdcp->authenticated) { if (hdcp->resend_stream_manage) { pr_debug("resend stream management\n"); rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_QUERY_STREAM, &hdcp->app_data); if (!rc) sde_hdcp_2x_send_message(hdcp); goto exit; } else if (!hdcp->authenticated) { rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_EN_ENCRYPTION, &hdcp->app_data); Loading Loading @@ -758,11 +773,8 @@ static void sde_hdcp_2x_msg_recvd(struct sde_hdcp_2x_ctrl *hdcp) hdcp->resend_lc_init = true; } hdcp->resend_stream_manage = false; if (msg[0] == REP_STREAM_READY && out_msg == REP_STREAM_MANAGE) { if (msg[0] == REP_STREAM_READY && out_msg == REP_STREAM_MANAGE) pr_debug("resend %s\n", sde_hdcp_2x_message_name(out_msg)); hdcp->resend_stream_manage = true; } if (out_msg == AKE_NO_STORED_KM) hdcp->no_stored_km = 1; Loading Loading @@ -884,8 +896,14 @@ static void sde_hdcp_2x_manage_stream_work(struct kthread_work *work) } } if (query_streams && hdcp->authenticated) if (query_streams) { if (hdcp->authenticated) { HDCP_2X_EXECUTE(stream); } else if (hdcp->last_msg == REP_STREAM_MANAGE || hdcp->last_msg == REP_STREAM_READY) { hdcp->resend_stream_manage = true; } } } static bool sde_remove_streams(struct sde_hdcp_2x_ctrl *hdcp, Loading Loading
drivers/gpu/drm/msm/sde_hdcp_2x.c +30 −12 Original line number Diff line number Diff line Loading @@ -252,9 +252,7 @@ static int sde_hdcp_2x_get_next_message(struct sde_hdcp_2x_ctrl *hdcp, case REP_SEND_RECV_ID_LIST: return REP_SEND_ACK; case REP_STREAM_MANAGE: if (hdcp->resend_stream_manage) return REP_STREAM_MANAGE; else hdcp->resend_stream_manage = false; return REP_STREAM_READY; default: pr_err("Uknown message ID (%d)", hdcp->last_msg); Loading Loading @@ -486,6 +484,12 @@ static void sde_hdcp_2x_stream(struct sde_hdcp_2x_ctrl *hdcp) return; } if (!hdcp->authenticated && hdcp->app_data.response.data[0] != REP_SEND_ACK) { pr_debug("invalid state. HDCP repeater not authenticated\n"); return; } rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_QUERY_STREAM, &hdcp->app_data); if (rc) Loading @@ -500,9 +504,12 @@ static void sde_hdcp_2x_stream(struct sde_hdcp_2x_ctrl *hdcp) pr_debug("message received from TZ: %s\n", sde_hdcp_2x_message_name(hdcp->app_data.response.data[0])); exit: if (!rc && !atomic_read(&hdcp->hdcp_off)) if (!rc && !atomic_read(&hdcp->hdcp_off)) { /* Modify last message to ensure the proper message is sent */ hdcp->last_msg = REP_SEND_ACK; sde_hdcp_2x_send_message(hdcp); } } static void sde_hdcp_2x_query_stream_work(struct kthread_work *work) { Loading Loading @@ -728,7 +735,15 @@ static void sde_hdcp_2x_msg_recvd(struct sde_hdcp_2x_ctrl *hdcp) sde_hdcp_2x_message_name(out_msg)); if (msg[0] == REP_STREAM_READY && out_msg != REP_STREAM_MANAGE) { if (!hdcp->authenticated) { if (hdcp->resend_stream_manage) { pr_debug("resend stream management\n"); rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_QUERY_STREAM, &hdcp->app_data); if (!rc) sde_hdcp_2x_send_message(hdcp); goto exit; } else if (!hdcp->authenticated) { rc = hdcp2_app_comm(hdcp->hdcp2_ctx, HDCP2_CMD_EN_ENCRYPTION, &hdcp->app_data); Loading Loading @@ -758,11 +773,8 @@ static void sde_hdcp_2x_msg_recvd(struct sde_hdcp_2x_ctrl *hdcp) hdcp->resend_lc_init = true; } hdcp->resend_stream_manage = false; if (msg[0] == REP_STREAM_READY && out_msg == REP_STREAM_MANAGE) { if (msg[0] == REP_STREAM_READY && out_msg == REP_STREAM_MANAGE) pr_debug("resend %s\n", sde_hdcp_2x_message_name(out_msg)); hdcp->resend_stream_manage = true; } if (out_msg == AKE_NO_STORED_KM) hdcp->no_stored_km = 1; Loading Loading @@ -884,8 +896,14 @@ static void sde_hdcp_2x_manage_stream_work(struct kthread_work *work) } } if (query_streams && hdcp->authenticated) if (query_streams) { if (hdcp->authenticated) { HDCP_2X_EXECUTE(stream); } else if (hdcp->last_msg == REP_STREAM_MANAGE || hdcp->last_msg == REP_STREAM_READY) { hdcp->resend_stream_manage = true; } } } static bool sde_remove_streams(struct sde_hdcp_2x_ctrl *hdcp, Loading