mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
drm/amd/display: Revert Add HPO encoder support to Replay
This reverts commits: commit1f26214d26
("drm/amd/display: Add HPO encoder support to Replay") commit3bfce48b10
("drm/amd/display: Add support for Panel Replay on DP1 eDP (panel_inst=1)") due to visual confirm issue. Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Gabe Teeger <gabe.teeger@amd.com> Signed-off-by: Wayne Lin <wayne.lin@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit 92f68f6a1b297633159a3f3759e4dfc7e5b58abb)
This commit is contained in:
parent
c17b750b3a
commit
0aa86640eb
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "dc_dmub_srv.h"
|
#include "dc_dmub_srv.h"
|
||||||
#include "dc_dp_types.h"
|
|
||||||
#include "dmub/dmub_srv.h"
|
#include "dmub/dmub_srv.h"
|
||||||
#include "core_types.h"
|
#include "core_types.h"
|
||||||
#include "dmub_replay.h"
|
#include "dmub_replay.h"
|
||||||
@ -44,45 +43,21 @@ static void dmub_replay_get_state(struct dmub_replay *dmub, enum replay_state *s
|
|||||||
/*
|
/*
|
||||||
* Enable/Disable Replay.
|
* Enable/Disable Replay.
|
||||||
*/
|
*/
|
||||||
static void dmub_replay_enable(struct dmub_replay *dmub, bool enable, bool wait, uint8_t panel_inst,
|
static void dmub_replay_enable(struct dmub_replay *dmub, bool enable, bool wait, uint8_t panel_inst)
|
||||||
struct dc_link *link)
|
|
||||||
{
|
{
|
||||||
union dmub_rb_cmd cmd;
|
union dmub_rb_cmd cmd;
|
||||||
struct dc_context *dc = dmub->ctx;
|
struct dc_context *dc = dmub->ctx;
|
||||||
uint32_t retry_count;
|
uint32_t retry_count;
|
||||||
enum replay_state state = REPLAY_STATE_0;
|
enum replay_state state = REPLAY_STATE_0;
|
||||||
struct pipe_ctx *pipe_ctx = NULL;
|
|
||||||
struct resource_context *res_ctx = &link->ctx->dc->current_state->res_ctx;
|
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
memset(&cmd, 0, sizeof(cmd));
|
||||||
cmd.replay_enable.header.type = DMUB_CMD__REPLAY;
|
cmd.replay_enable.header.type = DMUB_CMD__REPLAY;
|
||||||
cmd.replay_enable.data.panel_inst = panel_inst;
|
cmd.replay_enable.data.panel_inst = panel_inst;
|
||||||
|
|
||||||
cmd.replay_enable.header.sub_type = DMUB_CMD__REPLAY_ENABLE;
|
cmd.replay_enable.header.sub_type = DMUB_CMD__REPLAY_ENABLE;
|
||||||
if (enable) {
|
if (enable)
|
||||||
cmd.replay_enable.data.enable = REPLAY_ENABLE;
|
cmd.replay_enable.data.enable = REPLAY_ENABLE;
|
||||||
// hpo stream/link encoder assignments are not static, need to update everytime we try to enable replay
|
else
|
||||||
if (link->cur_link_settings.link_rate >= LINK_RATE_UHBR10) {
|
|
||||||
for (i = 0; i < MAX_PIPES; i++) {
|
|
||||||
if (res_ctx &&
|
|
||||||
res_ctx->pipe_ctx[i].stream &&
|
|
||||||
res_ctx->pipe_ctx[i].stream->link &&
|
|
||||||
res_ctx->pipe_ctx[i].stream->link == link &&
|
|
||||||
res_ctx->pipe_ctx[i].stream->link->connector_signal == SIGNAL_TYPE_EDP) {
|
|
||||||
pipe_ctx = &res_ctx->pipe_ctx[i];
|
|
||||||
//TODO: refactor for multi edp support
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pipe_ctx)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cmd.replay_enable.data.hpo_stream_enc_inst = pipe_ctx->stream_res.hpo_dp_stream_enc->inst;
|
|
||||||
cmd.replay_enable.data.hpo_link_enc_inst = pipe_ctx->link_res.hpo_dp_link_enc->inst;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
cmd.replay_enable.data.enable = REPLAY_DISABLE;
|
cmd.replay_enable.data.enable = REPLAY_DISABLE;
|
||||||
|
|
||||||
cmd.replay_enable.header.payload_bytes = sizeof(struct dmub_rb_cmd_replay_enable_data);
|
cmd.replay_enable.header.payload_bytes = sizeof(struct dmub_rb_cmd_replay_enable_data);
|
||||||
@ -174,17 +149,6 @@ static bool dmub_replay_copy_settings(struct dmub_replay *dmub,
|
|||||||
copy_settings_data->digbe_inst = replay_context->digbe_inst;
|
copy_settings_data->digbe_inst = replay_context->digbe_inst;
|
||||||
copy_settings_data->digfe_inst = replay_context->digfe_inst;
|
copy_settings_data->digfe_inst = replay_context->digfe_inst;
|
||||||
|
|
||||||
if (link->cur_link_settings.link_rate >= LINK_RATE_UHBR10) {
|
|
||||||
if (pipe_ctx->stream_res.hpo_dp_stream_enc)
|
|
||||||
copy_settings_data->hpo_stream_enc_inst = pipe_ctx->stream_res.hpo_dp_stream_enc->inst;
|
|
||||||
else
|
|
||||||
copy_settings_data->hpo_stream_enc_inst = 0;
|
|
||||||
if (pipe_ctx->link_res.hpo_dp_link_enc)
|
|
||||||
copy_settings_data->hpo_link_enc_inst = pipe_ctx->link_res.hpo_dp_link_enc->inst;
|
|
||||||
else
|
|
||||||
copy_settings_data->hpo_link_enc_inst = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pipe_ctx->plane_res.dpp)
|
if (pipe_ctx->plane_res.dpp)
|
||||||
copy_settings_data->dpp_inst = pipe_ctx->plane_res.dpp->inst;
|
copy_settings_data->dpp_inst = pipe_ctx->plane_res.dpp->inst;
|
||||||
else
|
else
|
||||||
@ -247,7 +211,6 @@ static void dmub_replay_set_coasting_vtotal(struct dmub_replay *dmub,
|
|||||||
pCmd->header.type = DMUB_CMD__REPLAY;
|
pCmd->header.type = DMUB_CMD__REPLAY;
|
||||||
pCmd->header.sub_type = DMUB_CMD__REPLAY_SET_COASTING_VTOTAL;
|
pCmd->header.sub_type = DMUB_CMD__REPLAY_SET_COASTING_VTOTAL;
|
||||||
pCmd->header.payload_bytes = sizeof(struct dmub_cmd_replay_set_coasting_vtotal_data);
|
pCmd->header.payload_bytes = sizeof(struct dmub_cmd_replay_set_coasting_vtotal_data);
|
||||||
pCmd->replay_set_coasting_vtotal_data.panel_inst = panel_inst;
|
|
||||||
pCmd->replay_set_coasting_vtotal_data.coasting_vtotal = (coasting_vtotal & 0xFFFF);
|
pCmd->replay_set_coasting_vtotal_data.coasting_vtotal = (coasting_vtotal & 0xFFFF);
|
||||||
pCmd->replay_set_coasting_vtotal_data.coasting_vtotal_high = (coasting_vtotal & 0xFFFF0000) >> 16;
|
pCmd->replay_set_coasting_vtotal_data.coasting_vtotal_high = (coasting_vtotal & 0xFFFF0000) >> 16;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ struct dmub_replay_funcs {
|
|||||||
void (*replay_get_state)(struct dmub_replay *dmub, enum replay_state *state,
|
void (*replay_get_state)(struct dmub_replay *dmub, enum replay_state *state,
|
||||||
uint8_t panel_inst);
|
uint8_t panel_inst);
|
||||||
void (*replay_enable)(struct dmub_replay *dmub, bool enable, bool wait,
|
void (*replay_enable)(struct dmub_replay *dmub, bool enable, bool wait,
|
||||||
uint8_t panel_inst, struct dc_link *link);
|
uint8_t panel_inst);
|
||||||
bool (*replay_copy_settings)(struct dmub_replay *dmub, struct dc_link *link,
|
bool (*replay_copy_settings)(struct dmub_replay *dmub, struct dc_link *link,
|
||||||
struct replay_context *replay_context, uint8_t panel_inst);
|
struct replay_context *replay_context, uint8_t panel_inst);
|
||||||
void (*replay_set_power_opt)(struct dmub_replay *dmub, unsigned int power_opt,
|
void (*replay_set_power_opt)(struct dmub_replay *dmub, unsigned int power_opt,
|
||||||
|
@ -944,7 +944,7 @@ bool edp_set_replay_allow_active(struct dc_link *link, const bool *allow_active,
|
|||||||
// TODO: Handle mux change case if force_static is set
|
// TODO: Handle mux change case if force_static is set
|
||||||
// If force_static is set, just change the replay_allow_active state directly
|
// If force_static is set, just change the replay_allow_active state directly
|
||||||
if (replay != NULL && link->replay_settings.replay_feature_enabled)
|
if (replay != NULL && link->replay_settings.replay_feature_enabled)
|
||||||
replay->funcs->replay_enable(replay, *allow_active, wait, panel_inst, link);
|
replay->funcs->replay_enable(replay, *allow_active, wait, panel_inst);
|
||||||
link->replay_settings.replay_allow_active = *allow_active;
|
link->replay_settings.replay_allow_active = *allow_active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4047,14 +4047,6 @@ struct dmub_cmd_replay_copy_settings_data {
|
|||||||
* DIG BE HW instance.
|
* DIG BE HW instance.
|
||||||
*/
|
*/
|
||||||
uint8_t digbe_inst;
|
uint8_t digbe_inst;
|
||||||
/**
|
|
||||||
* @hpo_stream_enc_inst: HPO stream encoder instance
|
|
||||||
*/
|
|
||||||
uint8_t hpo_stream_enc_inst;
|
|
||||||
/**
|
|
||||||
* @hpo_link_enc_inst: HPO link encoder instance
|
|
||||||
*/
|
|
||||||
uint8_t hpo_link_enc_inst;
|
|
||||||
/**
|
/**
|
||||||
* AUX HW instance.
|
* AUX HW instance.
|
||||||
*/
|
*/
|
||||||
@ -4159,18 +4151,6 @@ struct dmub_rb_cmd_replay_enable_data {
|
|||||||
* This does not support HDMI/DP2 for now.
|
* This does not support HDMI/DP2 for now.
|
||||||
*/
|
*/
|
||||||
uint8_t phy_rate;
|
uint8_t phy_rate;
|
||||||
/**
|
|
||||||
* @hpo_stream_enc_inst: HPO stream encoder instance
|
|
||||||
*/
|
|
||||||
uint8_t hpo_stream_enc_inst;
|
|
||||||
/**
|
|
||||||
* @hpo_link_enc_inst: HPO link encoder instance
|
|
||||||
*/
|
|
||||||
uint8_t hpo_link_enc_inst;
|
|
||||||
/**
|
|
||||||
* @pad: Align structure to 4 byte boundary.
|
|
||||||
*/
|
|
||||||
uint8_t pad[2];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user