Commit 017b3e56 authored by Alvin Lee's avatar Alvin Lee Committed by Alex Deucher

drm/amd/display: Update TX masks correctly

[Why]
Bugs occur when TX interrupt comes in when no USB-C on board.

[How]
Check PHY for USB-C before enabling TX interrupt in DMCU FW.
Signed-off-by: default avatarAlvin Lee <alvin.lee2@amd.com>
Reviewed-by: default avatarJun Lei <Jun.Lei@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8144148f
...@@ -378,6 +378,11 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu) ...@@ -378,6 +378,11 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu)
struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu); struct dce_dmcu *dmcu_dce = TO_DCE_DMCU(dmcu);
const struct dc_config *config = &dmcu->ctx->dc->config; const struct dc_config *config = &dmcu->ctx->dc->config;
bool status = false; bool status = false;
struct dc_context *ctx = dmcu->ctx;
unsigned int i;
// 5 4 3 2 1 0
// F E D C B A - bit 0 is A, bit 5 is F
unsigned int tx_interrupt_mask = 0;
PERF_TRACE(); PERF_TRACE();
/* Definition of DC_DMCU_SCRATCH /* Definition of DC_DMCU_SCRATCH
...@@ -387,6 +392,15 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu) ...@@ -387,6 +392,15 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu)
*/ */
dmcu->dmcu_state = REG_READ(DC_DMCU_SCRATCH); dmcu->dmcu_state = REG_READ(DC_DMCU_SCRATCH);
for (i = 0; i < ctx->dc->link_count; i++) {
if (ctx->dc->links[i]->link_enc->features.flags.bits.DP_IS_USB_C) {
if (ctx->dc->links[i]->link_enc->transmitter >= TRANSMITTER_UNIPHY_A &&
ctx->dc->links[i]->link_enc->transmitter <= TRANSMITTER_UNIPHY_F) {
tx_interrupt_mask |= 1 << ctx->dc->links[i]->link_enc->transmitter;
}
}
}
switch (dmcu->dmcu_state) { switch (dmcu->dmcu_state) {
case DMCU_UNLOADED: case DMCU_UNLOADED:
status = false; status = false;
...@@ -401,6 +415,8 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu) ...@@ -401,6 +415,8 @@ static bool dcn10_dmcu_init(struct dmcu *dmcu)
/* Set backlight ramping stepsize */ /* Set backlight ramping stepsize */
REG_WRITE(MASTER_COMM_DATA_REG2, abm_gain_stepsize); REG_WRITE(MASTER_COMM_DATA_REG2, abm_gain_stepsize);
REG_WRITE(MASTER_COMM_DATA_REG3, tx_interrupt_mask);
/* Set command to initialize microcontroller */ /* Set command to initialize microcontroller */
REG_UPDATE(MASTER_COMM_CMD_REG, MASTER_COMM_CMD_REG_BYTE0, REG_UPDATE(MASTER_COMM_CMD_REG, MASTER_COMM_CMD_REG_BYTE0,
MCP_INIT_DMCU); MCP_INIT_DMCU);
......
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