mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-18 12:19:11 +08:00
drm/amd/display: Enable Replay for static screen use cases
- Setup replay config on device init. - Enable replay if feature is enabled (prioritize replay over PSR, since it can be enabled in more usecases) - Add debug masks to enable replay on supported ASICs Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
3698a75f5a
commit
44e60b14d5
@@ -65,6 +65,7 @@
|
||||
#include "amdgpu_dm_debugfs.h"
|
||||
#endif
|
||||
#include "amdgpu_dm_psr.h"
|
||||
#include "amdgpu_dm_replay.h"
|
||||
|
||||
#include "ivsrcid/ivsrcid_vislands30.h"
|
||||
|
||||
@@ -4265,6 +4266,7 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
|
||||
enum dc_connection_type new_connection_type = dc_connection_none;
|
||||
const struct dc_plane_cap *plane;
|
||||
bool psr_feature_enabled = false;
|
||||
bool replay_feature_enabled = false;
|
||||
int max_overlay = dm->dc->caps.max_slave_planes;
|
||||
|
||||
dm->display_indexes_num = dm->dc->caps.max_streams;
|
||||
@@ -4374,6 +4376,20 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(amdgpu_dc_debug_mask & DC_DISABLE_REPLAY)) {
|
||||
switch (adev->ip_versions[DCE_HWIP][0]) {
|
||||
case IP_VERSION(3, 1, 4):
|
||||
case IP_VERSION(3, 1, 5):
|
||||
case IP_VERSION(3, 1, 6):
|
||||
case IP_VERSION(3, 2, 0):
|
||||
case IP_VERSION(3, 2, 1):
|
||||
replay_feature_enabled = true;
|
||||
break;
|
||||
default:
|
||||
replay_feature_enabled = amdgpu_dc_feature_mask & DC_REPLAY_MASK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* loops over all connectors on the board */
|
||||
for (i = 0; i < link_cnt; i++) {
|
||||
struct dc_link *link = NULL;
|
||||
@@ -4422,6 +4438,12 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
|
||||
amdgpu_dm_update_connector_after_detect(aconnector);
|
||||
setup_backlight_device(dm, aconnector);
|
||||
|
||||
/*
|
||||
* Disable psr if replay can be enabled
|
||||
*/
|
||||
if (replay_feature_enabled && amdgpu_dm_setup_replay(link, aconnector))
|
||||
psr_feature_enabled = false;
|
||||
|
||||
if (psr_feature_enabled)
|
||||
amdgpu_dm_set_psr_caps(link);
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "dc.h"
|
||||
#include "amdgpu.h"
|
||||
#include "amdgpu_dm_psr.h"
|
||||
#include "amdgpu_dm_replay.h"
|
||||
#include "amdgpu_dm_crtc.h"
|
||||
#include "amdgpu_dm_plane.h"
|
||||
#include "amdgpu_dm_trace.h"
|
||||
@@ -123,7 +124,12 @@ static void vblank_control_worker(struct work_struct *work)
|
||||
* fill_dc_dirty_rects().
|
||||
*/
|
||||
if (vblank_work->stream && vblank_work->stream->link) {
|
||||
if (vblank_work->enable) {
|
||||
/*
|
||||
* Prioritize replay, instead of psr
|
||||
*/
|
||||
if (vblank_work->stream->link->replay_settings.replay_feature_enabled)
|
||||
amdgpu_dm_replay_enable(vblank_work->stream, false);
|
||||
else if (vblank_work->enable) {
|
||||
if (vblank_work->stream->link->psr_settings.psr_version < DC_PSR_VERSION_SU_1 &&
|
||||
vblank_work->stream->link->psr_settings.psr_allow_active)
|
||||
amdgpu_dm_psr_disable(vblank_work->stream);
|
||||
@@ -132,6 +138,7 @@ static void vblank_control_worker(struct work_struct *work)
|
||||
#ifdef CONFIG_DRM_AMD_SECURE_DISPLAY
|
||||
!amdgpu_dm_crc_window_is_activated(&vblank_work->acrtc->base) &&
|
||||
#endif
|
||||
vblank_work->stream->link->panel_config.psr.disallow_replay &&
|
||||
vblank_work->acrtc->dm_irq_params.allow_psr_entry) {
|
||||
amdgpu_dm_psr_enable(vblank_work->stream);
|
||||
}
|
||||
|
||||
@@ -240,6 +240,7 @@ enum DC_FEATURE_MASK {
|
||||
DC_DISABLE_LTTPR_DP2_0 = (1 << 6), //0x40, disabled by default
|
||||
DC_PSR_ALLOW_SMU_OPT = (1 << 7), //0x80, disabled by default
|
||||
DC_PSR_ALLOW_MULTI_DISP_OPT = (1 << 8), //0x100, disabled by default
|
||||
DC_REPLAY_MASK = (1 << 9), //0x200, disabled by default for dcn < 3.1.4
|
||||
};
|
||||
|
||||
enum DC_DEBUG_MASK {
|
||||
@@ -250,6 +251,7 @@ enum DC_DEBUG_MASK {
|
||||
DC_DISABLE_PSR = 0x10,
|
||||
DC_FORCE_SUBVP_MCLK_SWITCH = 0x20,
|
||||
DC_DISABLE_MPO = 0x40,
|
||||
DC_DISABLE_REPLAY = 0x50,
|
||||
DC_ENABLE_DPIA_TRACE = 0x80,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user