Commit 64ed6a2e authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

drm/amd/display: Add variable refresh rate parameters to DC structures

Time stamping will be part of surface, and will be updated when address is flipped.
FreeSync parameters will be attached to stream, as it adjusts the timing dynamically.
Signed-off-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a3e1737e
...@@ -447,6 +447,7 @@ union surface_update_flags { ...@@ -447,6 +447,7 @@ union surface_update_flags {
struct dc_plane_state { struct dc_plane_state {
struct dc_plane_address address; struct dc_plane_address address;
struct dc_plane_flip_time time;
struct scaling_taps scaling_quality; struct scaling_taps scaling_quality;
struct rect src_rect; struct rect src_rect;
struct rect dst_rect; struct rect dst_rect;
...@@ -557,6 +558,7 @@ struct dc_transfer_func *dc_create_transfer_func(void); ...@@ -557,6 +558,7 @@ struct dc_transfer_func *dc_create_transfer_func(void);
*/ */
struct dc_flip_addrs { struct dc_flip_addrs {
struct dc_plane_address address; struct dc_plane_address address;
unsigned int flip_timestamp_in_us;
bool flip_immediate; bool flip_immediate;
/* TODO: add flip duration for FreeSync */ /* TODO: add flip duration for FreeSync */
}; };
......
...@@ -692,8 +692,18 @@ struct crtc_trigger_info { ...@@ -692,8 +692,18 @@ struct crtc_trigger_info {
enum trigger_delay delay; enum trigger_delay delay;
}; };
struct dc_crtc_timing { enum vrr_state {
VRR_STATE_OFF = 0,
VRR_STATE_VARIABLE,
VRR_STATE_FIXED,
};
struct dc_crtc_timing_adjust {
uint32_t v_total_min;
uint32_t v_total_max;
};
struct dc_crtc_timing {
uint32_t h_total; uint32_t h_total;
uint32_t h_border_left; uint32_t h_border_left;
uint32_t h_addressable; uint32_t h_addressable;
......
...@@ -48,6 +48,8 @@ struct dc_stream_status { ...@@ -48,6 +48,8 @@ struct dc_stream_status {
struct dc_stream_state { struct dc_stream_state {
struct dc_sink *sink; struct dc_sink *sink;
struct dc_crtc_timing timing; struct dc_crtc_timing timing;
struct dc_crtc_timing_adjust timing_adjust;
struct vrr_params vrr_params;
struct rect src; /* composition area */ struct rect src; /* composition area */
struct rect dst; /* stream addressable area */ struct rect dst; /* stream addressable area */
......
...@@ -521,6 +521,24 @@ struct audio_info { ...@@ -521,6 +521,24 @@ struct audio_info {
struct audio_mode modes[DC_MAX_AUDIO_DESC_COUNT]; struct audio_mode modes[DC_MAX_AUDIO_DESC_COUNT];
}; };
struct vrr_params {
enum vrr_state state;
uint32_t window_min;
uint32_t window_max;
uint32_t inserted_frame_duration_in_us;
uint32_t frames_to_insert;
uint32_t frame_counter;
};
#define DC_PLANE_UPDATE_TIMES_MAX 10
struct dc_plane_flip_time {
unsigned int time_elapsed_in_us[DC_PLANE_UPDATE_TIMES_MAX];
unsigned int index;
unsigned int prev_update_time_in_us;
};
// Will combine with vrr_params at some point.
struct freesync_context { struct freesync_context {
bool supported; bool supported;
bool enabled; bool enabled;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment