drm/amd/display: add vline time in micro sec to PSR context
authorDavid Zhang <dingchen.zhang@amd.com>
Mon, 2 May 2022 15:59:58 +0000 (11:59 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 6 Jun 2022 18:42:02 +0000 (14:42 -0400)
[why]
The current PSR SU programming margin is fixed base on FHD 60HZ
panel. If the resolution and refresh rate become higher, the time
of current margin might not cover the programming SU time.

[how]
Notice that the programming SU time is the same among different
panels.

Instead of fixing the margin with target line number, change the
margin unit to micro second which indicate the time needed for
programming SU. Then FW set the margin line number base on the
line time and margin time.

Signed-off-by: David Zhang <dingchen.zhang@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc_types.h
drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c

index dc1d75b204cde45f328ffeed6ea847d0ca388b98..68e9fc6b510cb1369ab10279952d98f4f2c08a22 100644 (file)
@@ -3274,6 +3274,8 @@ bool dc_link_setup_psr(struct dc_link *link,
                        psr_config->su_granularity_required;
                psr_context->su_y_granularity =
                        psr_config->su_y_granularity;
+               psr_context->line_time_in_us =
+                       psr_config->line_time_in_us;
        }
 
        psr_context->channel = link->ddc->ddc_pin->hw_info.ddc_channel;
index d61ea3e2bfbfb6cc5fd527ff422feb2fa38a4f65..119ce8b7a55589abc38d3ec98904387148586092 100644 (file)
@@ -676,6 +676,7 @@ struct psr_config {
        bool su_granularity_required;
        /* psr2 selective update y granularity capability */
        uint8_t su_y_granularity;
+       unsigned int line_time_in_us;
 };
 
 union dmcu_psr_level {
@@ -783,6 +784,7 @@ struct psr_context {
        bool su_granularity_required;
        /* psr2 selective update y granularity capability */
        uint8_t su_y_granularity;
+       unsigned int line_time_in_us;
 };
 
 struct colorspace_transform {
index bc4943205bce1aa974cdde2f2515160db9a6e2ef..c2d65756ce5d083249de520268ada9c97e96f0a5 100644 (file)
@@ -340,6 +340,7 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
                copy_settings_data->su_y_granularity = psr_context->su_y_granularity;
 
        copy_settings_data->line_capture_indication = 0;
+       copy_settings_data->line_time_in_us = psr_context->line_time_in_us;
        copy_settings_data->fec_enable_status = (link->fec_state == dc_link_fec_enabled);
        copy_settings_data->fec_enable_delay_in100us = link->dc->debug.fec_enable_delay_in100us;
        copy_settings_data->cmd_version =  DMUB_CMD_PSR_CONTROL_VERSION_1;