Commit 1f5dcb73 authored by Michael Strauss's avatar Michael Strauss Committed by Alex Deucher

drm/amd/display: Fix dpstreamclk programming

[WHY]
Currently programming incorrect hpo inst as well as selecting incorrect source

[HOW]
Use hpo inst instead of otg inst to select dpstreamclk inst
Reviewed-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarMichael Strauss <michael.strauss@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b5e924bd
...@@ -158,9 +158,11 @@ static void dccg31_disable_dpstreamclk(struct dccg *dccg, int otg_inst) ...@@ -158,9 +158,11 @@ static void dccg31_disable_dpstreamclk(struct dccg *dccg, int otg_inst)
} }
} }
void dccg31_set_dpstreamclk(struct dccg *dccg, void dccg31_set_dpstreamclk(
enum streamclk_source src, struct dccg *dccg,
int otg_inst) enum streamclk_source src,
int otg_inst,
int dp_hpo_inst)
{ {
if (src == REFCLK) if (src == REFCLK)
dccg31_disable_dpstreamclk(dccg, otg_inst); dccg31_disable_dpstreamclk(dccg, otg_inst);
......
...@@ -161,11 +161,6 @@ struct dccg *dccg31_create( ...@@ -161,11 +161,6 @@ struct dccg *dccg31_create(
void dccg31_init(struct dccg *dccg); void dccg31_init(struct dccg *dccg);
void dccg31_set_dpstreamclk(
struct dccg *dccg,
enum streamclk_source src,
int otg_inst);
void dccg31_enable_symclk32_se( void dccg31_enable_symclk32_se(
struct dccg *dccg, struct dccg *dccg,
int hpo_se_inst, int hpo_se_inst,
...@@ -207,7 +202,8 @@ void dccg31_get_dccg_ref_freq( ...@@ -207,7 +202,8 @@ void dccg31_get_dccg_ref_freq(
void dccg31_set_dpstreamclk( void dccg31_set_dpstreamclk(
struct dccg *dccg, struct dccg *dccg,
enum streamclk_source src, enum streamclk_source src,
int otg_inst); int otg_inst,
int dp_hpo_inst);
void dccg31_set_dtbclk_dto( void dccg31_set_dtbclk_dto(
struct dccg *dccg, struct dccg *dccg,
......
...@@ -184,7 +184,8 @@ void dccg314_set_dtbclk_dto( ...@@ -184,7 +184,8 @@ void dccg314_set_dtbclk_dto(
void dccg314_set_dpstreamclk( void dccg314_set_dpstreamclk(
struct dccg *dccg, struct dccg *dccg,
enum streamclk_source src, enum streamclk_source src,
int otg_inst) int otg_inst,
int dp_hpo_inst)
{ {
struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg); struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
...@@ -192,26 +193,26 @@ void dccg314_set_dpstreamclk( ...@@ -192,26 +193,26 @@ void dccg314_set_dpstreamclk(
dccg314_set_dtbclk_p_src(dccg, src, otg_inst); dccg314_set_dtbclk_p_src(dccg, src, otg_inst);
/* enabled to select one of the DTBCLKs for pipe */ /* enabled to select one of the DTBCLKs for pipe */
switch (otg_inst) { switch (dp_hpo_inst) {
case 0: case 0:
REG_UPDATE_2(DPSTREAMCLK_CNTL, REG_UPDATE_2(DPSTREAMCLK_CNTL,
DPSTREAMCLK0_EN, (src == REFCLK) ? 0 : 1, DPSTREAMCLK0_EN, (src == REFCLK) ? 0 : 1,
DPSTREAMCLK0_SRC_SEL, 0); DPSTREAMCLK0_SRC_SEL, otg_inst);
break; break;
case 1: case 1:
REG_UPDATE_2(DPSTREAMCLK_CNTL, REG_UPDATE_2(DPSTREAMCLK_CNTL,
DPSTREAMCLK1_EN, (src == REFCLK) ? 0 : 1, DPSTREAMCLK1_EN, (src == REFCLK) ? 0 : 1,
DPSTREAMCLK1_SRC_SEL, 1); DPSTREAMCLK1_SRC_SEL, otg_inst);
break; break;
case 2: case 2:
REG_UPDATE_2(DPSTREAMCLK_CNTL, REG_UPDATE_2(DPSTREAMCLK_CNTL,
DPSTREAMCLK2_EN, (src == REFCLK) ? 0 : 1, DPSTREAMCLK2_EN, (src == REFCLK) ? 0 : 1,
DPSTREAMCLK2_SRC_SEL, 2); DPSTREAMCLK2_SRC_SEL, otg_inst);
break; break;
case 3: case 3:
REG_UPDATE_2(DPSTREAMCLK_CNTL, REG_UPDATE_2(DPSTREAMCLK_CNTL,
DPSTREAMCLK3_EN, (src == REFCLK) ? 0 : 1, DPSTREAMCLK3_EN, (src == REFCLK) ? 0 : 1,
DPSTREAMCLK3_SRC_SEL, 3); DPSTREAMCLK3_SRC_SEL, otg_inst);
break; break;
default: default:
BREAK_TO_DEBUGGER(); BREAK_TO_DEBUGGER();
......
...@@ -211,7 +211,8 @@ static void dccg32_get_dccg_ref_freq(struct dccg *dccg, ...@@ -211,7 +211,8 @@ static void dccg32_get_dccg_ref_freq(struct dccg *dccg,
void dccg32_set_dpstreamclk( void dccg32_set_dpstreamclk(
struct dccg *dccg, struct dccg *dccg,
enum streamclk_source src, enum streamclk_source src,
int otg_inst) int otg_inst,
int dp_hpo_inst)
{ {
struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg); struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
......
...@@ -101,7 +101,8 @@ struct dccg_funcs { ...@@ -101,7 +101,8 @@ struct dccg_funcs {
void (*set_dpstreamclk)( void (*set_dpstreamclk)(
struct dccg *dccg, struct dccg *dccg,
enum streamclk_source src, enum streamclk_source src,
int otg_inst); int otg_inst,
int dp_hpo_inst);
void (*enable_symclk32_se)( void (*enable_symclk32_se)(
struct dccg *dccg, struct dccg *dccg,
......
...@@ -116,7 +116,7 @@ static void setup_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx) ...@@ -116,7 +116,7 @@ static void setup_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx)
dto_params.timing = &pipe_ctx->stream->timing; dto_params.timing = &pipe_ctx->stream->timing;
dto_params.ref_dtbclk_khz = dc->clk_mgr->funcs->get_dtb_ref_clk_frequency(dc->clk_mgr); 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, link_enc->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, &dto_params); dccg->funcs->set_dtbclk_dto(dccg, &dto_params);
stream_enc->funcs->enable_stream(stream_enc); stream_enc->funcs->enable_stream(stream_enc);
...@@ -137,7 +137,7 @@ static void reset_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx) ...@@ -137,7 +137,7 @@ static void reset_hpo_dp_stream_encoder(struct pipe_ctx *pipe_ctx)
stream_enc->funcs->disable(stream_enc); stream_enc->funcs->disable(stream_enc);
dccg->funcs->set_dtbclk_dto(dccg, &dto_params); 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, pipe_ctx->link_res.hpo_dp_link_enc->inst);
} }
static void setup_hpo_dp_stream_attribute(struct pipe_ctx *pipe_ctx) static void setup_hpo_dp_stream_attribute(struct pipe_ctx *pipe_ctx)
......
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