mirror of
https://github.com/torvalds/linux.git
synced 2026-05-04 14:32:27 -04:00
drm/amd/display: Adjust dm to use supported interfaces for setting multiple crc windows
[Why & How] We actually have the capability to calculate independent CRC for 2 crc window at the same time. Extend dm with the capability by having array to configure/maintain multiple crc windows. Add the flexibility but use 1st CRC instance only for now. Can change to use the 2nd CRC instance if needed. Reviewed-by: HaoPing Liu <haoping.liu@amd.com> Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> Signed-off-by: Roman Li <roman.li@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -2155,6 +2155,10 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
|
||||
amdgpu_dm_crtc_secure_display_create_contexts(adev);
|
||||
if (!adev->dm.secure_display_ctx.crtc_ctx)
|
||||
DRM_ERROR("amdgpu: failed to initialize secure display contexts.\n");
|
||||
|
||||
if (amdgpu_ip_version(adev, DCE_HWIP, 0) >= IP_VERSION(4, 0, 1))
|
||||
adev->dm.secure_display_ctx.support_mul_roi = true;
|
||||
|
||||
#endif
|
||||
|
||||
DRM_DEBUG_DRIVER("KMS initialized.\n");
|
||||
@@ -10027,14 +10031,19 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
||||
if (amdgpu_dm_is_valid_crc_source(cur_crc_src)) {
|
||||
#if defined(CONFIG_DRM_AMD_SECURE_DISPLAY)
|
||||
if (amdgpu_dm_crc_window_is_activated(crtc)) {
|
||||
uint8_t cnt;
|
||||
spin_lock_irqsave(&adev_to_drm(adev)->event_lock, flags);
|
||||
acrtc->dm_irq_params.window_param.update_win = true;
|
||||
for (cnt = 0; cnt < MAX_CRC_WINDOW_NUM; cnt++) {
|
||||
if (acrtc->dm_irq_params.window_param[cnt].enable) {
|
||||
acrtc->dm_irq_params.window_param[cnt].update_win = true;
|
||||
|
||||
/**
|
||||
* It takes 2 frames for HW to stably generate CRC when
|
||||
* resuming from suspend, so we set skip_frame_cnt 2.
|
||||
*/
|
||||
acrtc->dm_irq_params.window_param.skip_frame_cnt = 2;
|
||||
/**
|
||||
* It takes 2 frames for HW to stably generate CRC when
|
||||
* resuming from suspend, so we set skip_frame_cnt 2.
|
||||
*/
|
||||
acrtc->dm_irq_params.window_param[cnt].skip_frame_cnt = 2;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&adev_to_drm(adev)->event_lock, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user