drm/amd/display: Exit idle optimizations before HDCP execution
[ Upstream commit f30a3bea92bdab398531129d187629fb1d28f598 ] [WHY] PSP can access DCN registers during command submission and we need to ensure that DCN is not in PG before doing so. [HOW] Add a callback to DM to lock and notify DC for idle optimization exit. It can't be DC directly because of a potential race condition with the link protection thread and the rest of DM operation. Cc: Mario Limonciello <mario.limonciello@amd.com> Cc: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Charlene Liu <charlene.liu@amd.com> Acked-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
52d4cfa56b
commit
b4291f58a9
@ -86,6 +86,14 @@ static uint8_t is_cp_desired_hdcp2(struct mod_hdcp *hdcp)
|
||||
!hdcp->connection.is_hdcp2_revoked;
|
||||
}
|
||||
|
||||
static void exit_idle_optimizations(struct mod_hdcp *hdcp)
|
||||
{
|
||||
struct mod_hdcp_dm *dm = &hdcp->config.dm;
|
||||
|
||||
if (dm->funcs.exit_idle_optimizations)
|
||||
dm->funcs.exit_idle_optimizations(dm->handle);
|
||||
}
|
||||
|
||||
static enum mod_hdcp_status execution(struct mod_hdcp *hdcp,
|
||||
struct mod_hdcp_event_context *event_ctx,
|
||||
union mod_hdcp_transition_input *input)
|
||||
@ -448,6 +456,8 @@ enum mod_hdcp_status mod_hdcp_process_event(struct mod_hdcp *hdcp,
|
||||
memset(&event_ctx, 0, sizeof(struct mod_hdcp_event_context));
|
||||
event_ctx.event = event;
|
||||
|
||||
exit_idle_optimizations(hdcp);
|
||||
|
||||
/* execute and transition */
|
||||
exec_status = execution(hdcp, &event_ctx, &hdcp->auth.trans_input);
|
||||
trans_status = transition(
|
||||
|
@ -143,6 +143,13 @@ struct mod_hdcp_ddc {
|
||||
} funcs;
|
||||
};
|
||||
|
||||
struct mod_hdcp_dm {
|
||||
void *handle;
|
||||
struct {
|
||||
void (*exit_idle_optimizations)(void *handle);
|
||||
} funcs;
|
||||
};
|
||||
|
||||
struct mod_hdcp_psp {
|
||||
void *handle;
|
||||
void *funcs;
|
||||
@ -252,6 +259,7 @@ struct mod_hdcp_display_query {
|
||||
struct mod_hdcp_config {
|
||||
struct mod_hdcp_psp psp;
|
||||
struct mod_hdcp_ddc ddc;
|
||||
struct mod_hdcp_dm dm;
|
||||
uint8_t index;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user