Commit 0ec74408 authored by Leung, Martin's avatar Leung, Martin Committed by Alex Deucher

drm/amd/display: revert Blank eDP on disable/enable drv

why and how:
Revert this change. It was causing a black screen with certain blocks
Reviewed-by: default avatarGeorge Shen <George.Shen@amd.com>
Acked-by: default avatarJasdeep Dhillon <jdhillon@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarLeung, Martin <Martin.Leung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4b81dd2c
...@@ -638,8 +638,14 @@ static void dcn31_set_low_power_state(struct clk_mgr *clk_mgr_base) ...@@ -638,8 +638,14 @@ static void dcn31_set_low_power_state(struct clk_mgr *clk_mgr_base)
} }
} }
int dcn31_get_dtb_ref_freq_khz(struct clk_mgr *clk_mgr_base)
{
return clk_mgr_base->clks.ref_dtbclk_khz;
}
static struct clk_mgr_funcs dcn31_funcs = { static struct clk_mgr_funcs dcn31_funcs = {
.get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz, .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz,
.get_dtb_ref_clk_frequency = dcn31_get_dtb_ref_freq_khz,
.update_clocks = dcn31_update_clocks, .update_clocks = dcn31_update_clocks,
.init_clocks = dcn31_init_clocks, .init_clocks = dcn31_init_clocks,
.enable_pme_wa = dcn31_enable_pme_wa, .enable_pme_wa = dcn31_enable_pme_wa,
...@@ -719,7 +725,7 @@ void dcn31_clk_mgr_construct( ...@@ -719,7 +725,7 @@ void dcn31_clk_mgr_construct(
} }
clk_mgr->base.base.dprefclk_khz = 600000; clk_mgr->base.base.dprefclk_khz = 600000;
clk_mgr->base.dccg->ref_dtbclk_khz = 600000; clk_mgr->base.base.clks.ref_dtbclk_khz = 600000;
dce_clock_read_ss_info(&clk_mgr->base); dce_clock_read_ss_info(&clk_mgr->base);
/*if bios enabled SS, driver needs to adjust dtb clock, only enable with correct bios*/ /*if bios enabled SS, driver needs to adjust dtb clock, only enable with correct bios*/
//clk_mgr->base.dccg->ref_dtbclk_khz = dce_adjust_dp_ref_freq_for_ss(clk_mgr_internal, clk_mgr->base.base.dprefclk_khz); //clk_mgr->base.dccg->ref_dtbclk_khz = dce_adjust_dp_ref_freq_for_ss(clk_mgr_internal, clk_mgr->base.base.dprefclk_khz);
......
...@@ -51,6 +51,8 @@ void dcn31_clk_mgr_construct(struct dc_context *ctx, ...@@ -51,6 +51,8 @@ void dcn31_clk_mgr_construct(struct dc_context *ctx,
struct pp_smu_funcs *pp_smu, struct pp_smu_funcs *pp_smu,
struct dccg *dccg); struct dccg *dccg);
int dcn31_get_dtb_ref_freq_khz(struct clk_mgr *clk_mgr_base);
void dcn31_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr_int); void dcn31_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr_int);
#endif //__DCN31_CLK_MGR_H__ #endif //__DCN31_CLK_MGR_H__
...@@ -580,6 +580,7 @@ static void dcn315_enable_pme_wa(struct clk_mgr *clk_mgr_base) ...@@ -580,6 +580,7 @@ static void dcn315_enable_pme_wa(struct clk_mgr *clk_mgr_base)
static struct clk_mgr_funcs dcn315_funcs = { static struct clk_mgr_funcs dcn315_funcs = {
.get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz, .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz,
.get_dtb_ref_clk_frequency = dcn31_get_dtb_ref_freq_khz,
.update_clocks = dcn315_update_clocks, .update_clocks = dcn315_update_clocks,
.init_clocks = dcn31_init_clocks, .init_clocks = dcn31_init_clocks,
.enable_pme_wa = dcn315_enable_pme_wa, .enable_pme_wa = dcn315_enable_pme_wa,
...@@ -656,9 +657,9 @@ void dcn315_clk_mgr_construct( ...@@ -656,9 +657,9 @@ void dcn315_clk_mgr_construct(
clk_mgr->base.base.dprefclk_khz = 600000; clk_mgr->base.base.dprefclk_khz = 600000;
clk_mgr->base.base.dprefclk_khz = dcn315_smu_get_dpref_clk(&clk_mgr->base); clk_mgr->base.base.dprefclk_khz = dcn315_smu_get_dpref_clk(&clk_mgr->base);
clk_mgr->base.dccg->ref_dtbclk_khz = clk_mgr->base.base.dprefclk_khz; clk_mgr->base.base.clks.ref_dtbclk_khz = clk_mgr->base.base.dprefclk_khz;
dce_clock_read_ss_info(&clk_mgr->base); dce_clock_read_ss_info(&clk_mgr->base);
clk_mgr->base.dccg->ref_dtbclk_khz = dce_adjust_dp_ref_freq_for_ss(&clk_mgr->base, clk_mgr->base.base.dprefclk_khz); clk_mgr->base.base.clks.ref_dtbclk_khz = dce_adjust_dp_ref_freq_for_ss(&clk_mgr->base, clk_mgr->base.base.dprefclk_khz);
clk_mgr->base.base.bw_params = &dcn315_bw_params; clk_mgr->base.base.bw_params = &dcn315_bw_params;
......
...@@ -571,6 +571,7 @@ static void dcn316_clk_mgr_helper_populate_bw_params( ...@@ -571,6 +571,7 @@ static void dcn316_clk_mgr_helper_populate_bw_params(
static struct clk_mgr_funcs dcn316_funcs = { static struct clk_mgr_funcs dcn316_funcs = {
.enable_pme_wa = dcn316_enable_pme_wa, .enable_pme_wa = dcn316_enable_pme_wa,
.get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz, .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz,
.get_dtb_ref_clk_frequency = dcn31_get_dtb_ref_freq_khz,
.update_clocks = dcn316_update_clocks, .update_clocks = dcn316_update_clocks,
.init_clocks = dcn31_init_clocks, .init_clocks = dcn31_init_clocks,
.are_clock_states_equal = dcn31_are_clock_states_equal, .are_clock_states_equal = dcn31_are_clock_states_equal,
...@@ -685,7 +686,7 @@ void dcn316_clk_mgr_construct( ...@@ -685,7 +686,7 @@ void dcn316_clk_mgr_construct(
clk_mgr->base.base.dprefclk_khz = 600000; clk_mgr->base.base.dprefclk_khz = 600000;
clk_mgr->base.base.dprefclk_khz = dcn316_smu_get_dpref_clk(&clk_mgr->base); clk_mgr->base.base.dprefclk_khz = dcn316_smu_get_dpref_clk(&clk_mgr->base);
clk_mgr->base.dccg->ref_dtbclk_khz = clk_mgr->base.base.dprefclk_khz; clk_mgr->base.base.clks.ref_dtbclk_khz = clk_mgr->base.base.dprefclk_khz;
dce_clock_read_ss_info(&clk_mgr->base); dce_clock_read_ss_info(&clk_mgr->base);
/*clk_mgr->base.dccg->ref_dtbclk_khz = /*clk_mgr->base.dccg->ref_dtbclk_khz =
dce_adjust_dp_ref_freq_for_ss(&clk_mgr->base, clk_mgr->base.base.dprefclk_khz);*/ dce_adjust_dp_ref_freq_for_ss(&clk_mgr->base, clk_mgr->base.base.dprefclk_khz);*/
......
...@@ -416,6 +416,7 @@ struct dc_clocks { ...@@ -416,6 +416,7 @@ struct dc_clocks {
bool p_state_change_support; bool p_state_change_support;
enum dcn_zstate_support_state zstate_support; enum dcn_zstate_support_state zstate_support;
bool dtbclk_en; bool dtbclk_en;
int ref_dtbclk_khz;
enum dcn_pwr_state pwr_state; enum dcn_pwr_state pwr_state;
/* /*
* Elements below are not compared for the purposes of * Elements below are not compared for the purposes of
...@@ -719,6 +720,8 @@ struct dc_debug_options { ...@@ -719,6 +720,8 @@ struct dc_debug_options {
bool apply_vendor_specific_lttpr_wa; bool apply_vendor_specific_lttpr_wa;
bool extended_blank_optimization; bool extended_blank_optimization;
union aux_wake_wa_options aux_wake_wa; union aux_wake_wa_options aux_wake_wa;
/* uses value at boot and disables switch */
bool disable_dtb_ref_clk_switch;
uint8_t psr_power_use_phy_fsm; uint8_t psr_power_use_phy_fsm;
enum dml_hostvm_override_opts dml_hostvm_override; enum dml_hostvm_override_opts dml_hostvm_override;
}; };
......
...@@ -606,16 +606,12 @@ void dccg31_set_audio_dtbclk_dto( ...@@ -606,16 +606,12 @@ void dccg31_set_audio_dtbclk_dto(
REG_UPDATE(DCCG_AUDIO_DTO_SOURCE, REG_UPDATE(DCCG_AUDIO_DTO_SOURCE,
DCCG_AUDIO_DTO_SEL, 4); // 04 - DCCG_AUDIO_DTO_SEL_AUDIO_DTO_DTBCLK DCCG_AUDIO_DTO_SEL, 4); // 04 - DCCG_AUDIO_DTO_SEL_AUDIO_DTO_DTBCLK
dccg->audio_dtbclk_khz = req_audio_dtbclk_khz;
} else { } else {
REG_WRITE(DCCG_AUDIO_DTBCLK_DTO_PHASE, 0); REG_WRITE(DCCG_AUDIO_DTBCLK_DTO_PHASE, 0);
REG_WRITE(DCCG_AUDIO_DTBCLK_DTO_MODULO, 0); REG_WRITE(DCCG_AUDIO_DTBCLK_DTO_MODULO, 0);
REG_UPDATE(DCCG_AUDIO_DTO_SOURCE, REG_UPDATE(DCCG_AUDIO_DTO_SOURCE,
DCCG_AUDIO_DTO_SEL, 3); // 03 - DCCG_AUDIO_DTO_SEL_NO_AUDIO_DTO DCCG_AUDIO_DTO_SEL, 3); // 03 - DCCG_AUDIO_DTO_SEL_NO_AUDIO_DTO
dccg->audio_dtbclk_khz = 0;
} }
} }
......
...@@ -237,6 +237,7 @@ struct clk_mgr_funcs { ...@@ -237,6 +237,7 @@ struct clk_mgr_funcs {
bool safe_to_lower); bool safe_to_lower);
int (*get_dp_ref_clk_frequency)(struct clk_mgr *clk_mgr); int (*get_dp_ref_clk_frequency)(struct clk_mgr *clk_mgr);
int (*get_dtb_ref_clk_frequency)(struct clk_mgr *clk_mgr);
void (*set_low_power_state)(struct clk_mgr *clk_mgr); void (*set_low_power_state)(struct clk_mgr *clk_mgr);
......
...@@ -60,8 +60,17 @@ struct dccg { ...@@ -60,8 +60,17 @@ struct dccg {
const struct dccg_funcs *funcs; const struct dccg_funcs *funcs;
int pipe_dppclk_khz[MAX_PIPES]; int pipe_dppclk_khz[MAX_PIPES];
int ref_dppclk; int ref_dppclk;
int dtbclk_khz[MAX_PIPES]; //int dtbclk_khz[MAX_PIPES];/* TODO needs to be removed */
int audio_dtbclk_khz; //int audio_dtbclk_khz;/* TODO needs to be removed */
//int ref_dtbclk_khz;/* TODO needs to be removed */
};
struct dtbclk_dto_params {
const struct dc_crtc_timing *timing;
int otg_inst;
int pixclk_khz;
int req_audio_dtbclk_khz;
int num_odm_segments;
int ref_dtbclk_khz; int ref_dtbclk_khz;
}; };
...@@ -111,10 +120,7 @@ struct dccg_funcs { ...@@ -111,10 +120,7 @@ struct dccg_funcs {
void (*set_dtbclk_dto)( void (*set_dtbclk_dto)(
struct dccg *dccg, struct dccg *dccg,
int dtbclk_inst, const struct dtbclk_dto_params *params);
int req_dtbclk_khz,
int num_odm_segments,
const struct dc_crtc_timing *timing);
void (*set_audio_dtbclk_dto)( void (*set_audio_dtbclk_dto)(
struct dccg *dccg, struct dccg *dccg,
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "core_types.h" #include "core_types.h"
#include "dccg.h" #include "dccg.h"
#include "dc_link_dp.h" #include "dc_link_dp.h"
#include "clk_mgr.h"
static enum phyd32clk_clock_source get_phyd32clk_src(struct dc_link *link) static enum phyd32clk_clock_source get_phyd32clk_src(struct dc_link *link)
{ {
...@@ -106,14 +107,18 @@ static void setup_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx) ...@@ -106,14 +107,18 @@ static void setup_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx)
struct hpo_dp_link_encoder *link_enc = pipe_ctx->link_res.hpo_dp_link_enc; struct hpo_dp_link_encoder *link_enc = pipe_ctx->link_res.hpo_dp_link_enc;
struct dccg *dccg = dc->res_pool->dccg; struct dccg *dccg = dc->res_pool->dccg;
struct timing_generator *tg = pipe_ctx->stream_res.tg; struct timing_generator *tg = pipe_ctx->stream_res.tg;
int odm_segment_count = get_odm_segment_count(pipe_ctx); struct dtbclk_dto_params dto_params = {0};
enum phyd32clk_clock_source phyd32clk = get_phyd32clk_src(pipe_ctx->stream->link); enum phyd32clk_clock_source phyd32clk = get_phyd32clk_src(pipe_ctx->stream->link);
dto_params.otg_inst = tg->inst;
dto_params.pixclk_khz = pipe_ctx->stream->phy_pix_clk;
dto_params.num_odm_segments = get_odm_segment_count(pipe_ctx);
dto_params.timing = &pipe_ctx->stream->timing;
dto_params.ref_dtbclk_khz = dc->clk_mgr->funcs->get_dtb_ref_clk_frequency(dc->clk_mgr);
dccg->funcs->set_dpstreamclk(dccg, DTBCLK0, tg->inst); dccg->funcs->set_dpstreamclk(dccg, DTBCLK0, tg->inst);
dccg->funcs->enable_symclk32_se(dccg, stream_enc->inst, phyd32clk); dccg->funcs->enable_symclk32_se(dccg, stream_enc->inst, phyd32clk);
dccg->funcs->set_dtbclk_dto(dccg, tg->inst, pipe_ctx->stream->phy_pix_clk, dccg->funcs->set_dtbclk_dto(dccg, &dto_params);
odm_segment_count,
&pipe_ctx->stream->timing);
stream_enc->funcs->enable_stream(stream_enc); stream_enc->funcs->enable_stream(stream_enc);
stream_enc->funcs->map_stream_to_link(stream_enc, stream_enc->inst, link_enc->inst); stream_enc->funcs->map_stream_to_link(stream_enc, stream_enc->inst, link_enc->inst);
} }
...@@ -124,9 +129,13 @@ static void reset_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx) ...@@ -124,9 +129,13 @@ static void reset_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx)
struct hpo_dp_stream_encoder *stream_enc = pipe_ctx->stream_res.hpo_dp_stream_enc; struct hpo_dp_stream_encoder *stream_enc = pipe_ctx->stream_res.hpo_dp_stream_enc;
struct dccg *dccg = dc->res_pool->dccg; struct dccg *dccg = dc->res_pool->dccg;
struct timing_generator *tg = pipe_ctx->stream_res.tg; struct timing_generator *tg = pipe_ctx->stream_res.tg;
struct dtbclk_dto_params dto_params = {0};
dto_params.otg_inst = tg->inst;
dto_params.timing = &pipe_ctx->stream->timing;
stream_enc->funcs->disable(stream_enc); stream_enc->funcs->disable(stream_enc);
dccg->funcs->set_dtbclk_dto(dccg, tg->inst, 0, 0, &pipe_ctx->stream->timing); dccg->funcs->set_dtbclk_dto(dccg, &dto_params);
dccg->funcs->disable_symclk32_se(dccg, stream_enc->inst); dccg->funcs->disable_symclk32_se(dccg, stream_enc->inst);
dccg->funcs->set_dpstreamclk(dccg, REFCLK, tg->inst); dccg->funcs->set_dpstreamclk(dccg, REFCLK, tg->inst);
} }
......
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