drm/amd/display: Amend coasting vtotal for replay low hz
[WHY] The original coasting vtotal is 2 bytes, and it need to be amended to 4 bytes because low hz case. [HOW] Amend coasting vtotal from 2 bytes to 4 bytes. Cc: Mario Limonciello <mario.limonciello@amd.com> Cc: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Acked-by: Alex Hung <alex.hung@amd.com> Signed-off-by: ChunTao Tso <chuntao.tso@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
3d066f9547
commit
8e054b0f1e
@ -1085,9 +1085,9 @@ struct replay_settings {
|
||||
/* SMU optimization is enabled */
|
||||
bool replay_smu_opt_enable;
|
||||
/* Current Coasting vtotal */
|
||||
uint16_t coasting_vtotal;
|
||||
uint32_t coasting_vtotal;
|
||||
/* Coasting vtotal table */
|
||||
uint16_t coasting_vtotal_table[PR_COASTING_TYPE_NUM];
|
||||
uint32_t coasting_vtotal_table[PR_COASTING_TYPE_NUM];
|
||||
/* Maximum link off frame count */
|
||||
enum replay_link_off_frame_count_level link_off_frame_count_level;
|
||||
/* Replay pseudo vtotal for abm + ips on full screen video which can improve ips residency */
|
||||
|
@ -285,12 +285,12 @@ struct link_service {
|
||||
enum replay_FW_Message_type msg,
|
||||
union dmub_replay_cmd_set *cmd_data);
|
||||
bool (*edp_set_coasting_vtotal)(
|
||||
struct dc_link *link, uint16_t coasting_vtotal);
|
||||
struct dc_link *link, uint32_t coasting_vtotal);
|
||||
bool (*edp_replay_residency)(const struct dc_link *link,
|
||||
unsigned int *residency, const bool is_start,
|
||||
const bool is_alpm);
|
||||
bool (*edp_set_replay_power_opt_and_coasting_vtotal)(struct dc_link *link,
|
||||
const unsigned int *power_opts, uint16_t coasting_vtotal);
|
||||
const unsigned int *power_opts, uint32_t coasting_vtotal);
|
||||
|
||||
bool (*edp_wait_for_t12)(struct dc_link *link);
|
||||
bool (*edp_is_ilr_optimization_required)(struct dc_link *link,
|
||||
|
@ -1034,7 +1034,7 @@ bool edp_send_replay_cmd(struct dc_link *link,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool edp_set_coasting_vtotal(struct dc_link *link, uint16_t coasting_vtotal)
|
||||
bool edp_set_coasting_vtotal(struct dc_link *link, uint32_t coasting_vtotal)
|
||||
{
|
||||
struct dc *dc = link->ctx->dc;
|
||||
struct dmub_replay *replay = dc->res_pool->replay;
|
||||
@ -1073,7 +1073,7 @@ bool edp_replay_residency(const struct dc_link *link,
|
||||
}
|
||||
|
||||
bool edp_set_replay_power_opt_and_coasting_vtotal(struct dc_link *link,
|
||||
const unsigned int *power_opts, uint16_t coasting_vtotal)
|
||||
const unsigned int *power_opts, uint32_t coasting_vtotal)
|
||||
{
|
||||
struct dc *dc = link->ctx->dc;
|
||||
struct dmub_replay *replay = dc->res_pool->replay;
|
||||
|
@ -59,12 +59,12 @@ bool edp_setup_replay(struct dc_link *link,
|
||||
bool edp_send_replay_cmd(struct dc_link *link,
|
||||
enum replay_FW_Message_type msg,
|
||||
union dmub_replay_cmd_set *cmd_data);
|
||||
bool edp_set_coasting_vtotal(struct dc_link *link, uint16_t coasting_vtotal);
|
||||
bool edp_set_coasting_vtotal(struct dc_link *link, uint32_t coasting_vtotal);
|
||||
bool edp_replay_residency(const struct dc_link *link,
|
||||
unsigned int *residency, const bool is_start, const bool is_alpm);
|
||||
bool edp_get_replay_state(const struct dc_link *link, uint64_t *state);
|
||||
bool edp_set_replay_power_opt_and_coasting_vtotal(struct dc_link *link,
|
||||
const unsigned int *power_opts, uint16_t coasting_vtotal);
|
||||
const unsigned int *power_opts, uint32_t coasting_vtotal);
|
||||
bool edp_wait_for_t12(struct dc_link *link);
|
||||
bool edp_is_ilr_optimization_required(struct dc_link *link,
|
||||
struct dc_crtc_timing *crtc_timing);
|
||||
|
@ -3238,6 +3238,14 @@ struct dmub_cmd_replay_set_coasting_vtotal_data {
|
||||
* Currently the support is only for 0 or 1
|
||||
*/
|
||||
uint8_t panel_inst;
|
||||
/**
|
||||
* 16-bit value dicated by driver that indicates the coasting vtotal high byte part.
|
||||
*/
|
||||
uint16_t coasting_vtotal_high;
|
||||
/**
|
||||
* Explicit padding to 4 byte boundary.
|
||||
*/
|
||||
uint8_t pad[2];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -975,7 +975,7 @@ bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link,
|
||||
|
||||
void set_replay_coasting_vtotal(struct dc_link *link,
|
||||
enum replay_coasting_vtotal_type type,
|
||||
uint16_t vtotal)
|
||||
uint32_t vtotal)
|
||||
{
|
||||
link->replay_settings.coasting_vtotal_table[type] = vtotal;
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ bool dmub_init_abm_config(struct resource_pool *res_pool,
|
||||
void init_replay_config(struct dc_link *link, struct replay_config *pr_config);
|
||||
void set_replay_coasting_vtotal(struct dc_link *link,
|
||||
enum replay_coasting_vtotal_type type,
|
||||
uint16_t vtotal);
|
||||
uint32_t vtotal);
|
||||
void set_replay_ips_full_screen_video_src_vtotal(struct dc_link *link, uint16_t vtotal);
|
||||
void calculate_replay_link_off_frame_count(struct dc_link *link,
|
||||
uint16_t vtotal, uint16_t htotal);
|
||||
|
Loading…
Reference in New Issue
Block a user