diff options
author | Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> | 2020-06-01 17:22:41 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2020-07-01 01:59:25 -0400 |
commit | ef9de1876aa774342c57299b70c1b8913ee5436a (patch) | |
tree | 9b35d12d778958fe63e7d77664b6e182b9f9faac | |
parent | 0cc722248a8e608f4759f6df46e76f7c2315bfba (diff) | |
download | linux-ef9de1876aa774342c57299b70c1b8913ee5436a.tar.bz2 |
drm/amd/display: enable assr
[Why]
assr is content protection for eDP, in order to use it we need to call
psp ta (dtm)
[How]
We have a enable_assr callback, hook into this and call the correct psp
cmd id to enable assr.
Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Reviewed-by: Hersen Wu <hersenxs.wu@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c | 37 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dm_cp_psp.h | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c index dcf84a61de37..a8ee42d30911 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c @@ -390,6 +390,42 @@ void hdcp_destroy(struct hdcp_workqueue *hdcp_work) kfree(hdcp_work); } + +static bool enable_assr(void *handle, struct dc_link *link) +{ + + struct hdcp_workqueue *hdcp_work = handle; + struct mod_hdcp hdcp = hdcp_work->hdcp; + struct psp_context *psp = hdcp.config.psp.handle; + struct ta_dtm_shared_memory *dtm_cmd; + bool res = true; + + if (!psp->dtm_context.dtm_initialized) { + DRM_INFO("Failed to enable ASSR, DTM TA is not initialized."); + return false; + } + + dtm_cmd = (struct ta_dtm_shared_memory *)psp->dtm_context.dtm_shared_buf; + + mutex_lock(&psp->dtm_context.mutex); + memset(dtm_cmd, 0, sizeof(struct ta_dtm_shared_memory)); + + dtm_cmd->cmd_id = TA_DTM_COMMAND__TOPOLOGY_ASSR_ENABLE; + dtm_cmd->dtm_in_message.topology_assr_enable.display_topology_dig_be_index = link->link_enc_hw_inst; + dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE; + + psp_dtm_invoke(psp, dtm_cmd->cmd_id); + + if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) { + DRM_INFO("Failed to enable ASSR"); + res = false; + } + + mutex_unlock(&psp->dtm_context.mutex); + + return res; +} + static void update_config(void *handle, struct cp_psp_stream_config *config) { struct hdcp_workqueue *hdcp_work = handle; @@ -599,6 +635,7 @@ struct hdcp_workqueue *hdcp_create_workqueue(struct amdgpu_device *adev, struct } cp_psp->funcs.update_stream_config = update_config; + cp_psp->funcs.enable_assr = enable_assr; cp_psp->handle = hdcp_work; /* File created at /sys/class/drm/card0/device/hdcp_srm*/ diff --git a/drivers/gpu/drm/amd/display/dc/dm_cp_psp.h b/drivers/gpu/drm/amd/display/dc/dm_cp_psp.h index 968c46dfb506..5da7677627a1 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_cp_psp.h +++ b/drivers/gpu/drm/amd/display/dc/dm_cp_psp.h @@ -38,6 +38,7 @@ struct cp_psp_stream_config { }; struct cp_psp_funcs { + bool (*enable_assr)(void *handle, struct dc_link *link); void (*update_stream_config)(void *handle, struct cp_psp_stream_config *config); }; |