Skip to content

Commit ff8caad

Browse files
Nicholas Kazlauskasalexdeucher
authored andcommitted
drm/amd/display: Allow IPS2 during Replay
[Why & How] Add regkey to block video playback in IPS2 by default Allow idle optimizations in the same spot we allow Replay for video playback usecases. Avoid sending it when there's an external display connected by modifying the allow idle checks to check for active non-eDP screens. 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>
1 parent 3380fca commit ff8caad

3 files changed

Lines changed: 11 additions & 1 deletion

File tree

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,6 +1717,8 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
17171717

17181718
init_data.flags.disable_ips = DMUB_IPS_DISABLE_ALL;
17191719

1720+
init_data.flags.disable_ips_in_vpb = 1;
1721+
17201722
/* Enable DWB for tested platforms only */
17211723
if (amdgpu_ip_version(adev, DCE_HWIP, 0) >= IP_VERSION(3, 0, 0))
17221724
init_data.num_virtual_links = 1;

drivers/gpu/drm/amd/display/dc/dc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ struct dc_config {
434434
bool EnableMinDispClkODM;
435435
bool enable_auto_dpm_test_logs;
436436
unsigned int disable_ips;
437+
unsigned int disable_ips_in_vpb;
437438
};
438439

439440
enum visual_confirm {

drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,14 +680,21 @@ void dcn35_power_down_on_boot(struct dc *dc)
680680
bool dcn35_apply_idle_power_optimizations(struct dc *dc, bool enable)
681681
{
682682
struct dc_link *edp_links[MAX_NUM_EDP];
683-
int edp_num;
683+
int i, edp_num;
684684
if (dc->debug.dmcub_emulation)
685685
return true;
686686

687687
if (enable) {
688688
dc_get_edp_links(dc, edp_links, &edp_num);
689689
if (edp_num == 0 || edp_num > 1)
690690
return false;
691+
692+
for (i = 0; i < dc->current_state->stream_count; ++i) {
693+
struct dc_stream_state *stream = dc->current_state->streams[i];
694+
695+
if (!stream->dpms_off && !dc_is_embedded_signal(stream->signal))
696+
return false;
697+
}
691698
}
692699

693700
// TODO: review other cases when idle optimization is allowed

0 commit comments

Comments
 (0)