Merge tag 'amd-drm-fixes-5.9-2020-08-20' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
amd-drm-fixes-5.9-2020-08-20: amdgpu: - Fixes for Navy Flounder - Misc display fixes - RAS fix amdkfd: - SDMA fix for renoir Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200820041938.3928-1-alexander.deucher@amd.com
This commit is contained in:
commit
ba9086a6df
|
@ -195,19 +195,32 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev,
|
|||
unsigned int engine_id,
|
||||
unsigned int queue_id)
|
||||
{
|
||||
uint32_t sdma_engine_reg_base[2] = {
|
||||
SOC15_REG_OFFSET(SDMA0, 0,
|
||||
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL,
|
||||
SOC15_REG_OFFSET(SDMA1, 0,
|
||||
mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL
|
||||
};
|
||||
uint32_t retval = sdma_engine_reg_base[engine_id]
|
||||
uint32_t sdma_engine_reg_base = 0;
|
||||
uint32_t sdma_rlc_reg_offset;
|
||||
|
||||
switch (engine_id) {
|
||||
default:
|
||||
dev_warn(adev->dev,
|
||||
"Invalid sdma engine id (%d), using engine id 0\n",
|
||||
engine_id);
|
||||
fallthrough;
|
||||
case 0:
|
||||
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0,
|
||||
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
|
||||
break;
|
||||
case 1:
|
||||
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0,
|
||||
mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
|
||||
break;
|
||||
}
|
||||
|
||||
sdma_rlc_reg_offset = sdma_engine_reg_base
|
||||
+ queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL);
|
||||
|
||||
pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id,
|
||||
queue_id, retval);
|
||||
queue_id, sdma_rlc_reg_offset);
|
||||
|
||||
return retval;
|
||||
return sdma_rlc_reg_offset;
|
||||
}
|
||||
|
||||
static inline struct v9_mqd *get_mqd(void *mqd)
|
||||
|
|
|
@ -1243,7 +1243,6 @@ void amdgpu_ras_debugfs_remove(struct amdgpu_device *adev,
|
|||
if (!obj || !obj->ent)
|
||||
return;
|
||||
|
||||
debugfs_remove(obj->ent);
|
||||
obj->ent = NULL;
|
||||
put_obj(obj);
|
||||
}
|
||||
|
@ -1257,7 +1256,6 @@ static void amdgpu_ras_debugfs_remove_all(struct amdgpu_device *adev)
|
|||
amdgpu_ras_debugfs_remove(adev, &obj->head);
|
||||
}
|
||||
|
||||
debugfs_remove_recursive(con->dir);
|
||||
con->dir = NULL;
|
||||
}
|
||||
/* debugfs end */
|
||||
|
|
|
@ -179,12 +179,11 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
|
|||
}
|
||||
break;
|
||||
case CHIP_SIENNA_CICHLID:
|
||||
case CHIP_NAVY_FLOUNDER:
|
||||
err = psp_init_ta_microcode(&adev->psp, chip_name);
|
||||
if (err)
|
||||
return err;
|
||||
break;
|
||||
case CHIP_NAVY_FLOUNDER:
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
|
|
@ -1108,6 +1108,18 @@ static enum bp_result bios_parser_enable_disp_power_gating(
|
|||
action);
|
||||
}
|
||||
|
||||
static enum bp_result bios_parser_enable_lvtma_control(
|
||||
struct dc_bios *dcb,
|
||||
uint8_t uc_pwr_on)
|
||||
{
|
||||
struct bios_parser *bp = BP_FROM_DCB(dcb);
|
||||
|
||||
if (!bp->cmd_tbl.enable_lvtma_control)
|
||||
return BP_RESULT_FAILURE;
|
||||
|
||||
return bp->cmd_tbl.enable_lvtma_control(bp, uc_pwr_on);
|
||||
}
|
||||
|
||||
static bool bios_parser_is_accelerated_mode(
|
||||
struct dc_bios *dcb)
|
||||
{
|
||||
|
@ -2208,7 +2220,9 @@ static const struct dc_vbios_funcs vbios_funcs = {
|
|||
.get_board_layout_info = bios_get_board_layout_info,
|
||||
.pack_data_tables = bios_parser_pack_data_tables,
|
||||
|
||||
.get_atom_dc_golden_table = bios_get_atom_dc_golden_table
|
||||
.get_atom_dc_golden_table = bios_get_atom_dc_golden_table,
|
||||
|
||||
.enable_lvtma_control = bios_parser_enable_lvtma_control
|
||||
};
|
||||
|
||||
static bool bios_parser2_construct(
|
||||
|
|
|
@ -904,6 +904,33 @@ static unsigned int get_smu_clock_info_v3_1(struct bios_parser *bp, uint8_t id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
******************************************************************************
|
||||
**
|
||||
** LVTMA CONTROL
|
||||
**
|
||||
******************************************************************************
|
||||
*****************************************************************************/
|
||||
|
||||
static enum bp_result enable_lvtma_control(
|
||||
struct bios_parser *bp,
|
||||
uint8_t uc_pwr_on);
|
||||
|
||||
static void init_enable_lvtma_control(struct bios_parser *bp)
|
||||
{
|
||||
/* TODO add switch for table vrsion */
|
||||
bp->cmd_tbl.enable_lvtma_control = enable_lvtma_control;
|
||||
|
||||
}
|
||||
|
||||
static enum bp_result enable_lvtma_control(
|
||||
struct bios_parser *bp,
|
||||
uint8_t uc_pwr_on)
|
||||
{
|
||||
enum bp_result result = BP_RESULT_FAILURE;
|
||||
return result;
|
||||
}
|
||||
|
||||
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp)
|
||||
{
|
||||
init_dig_encoder_control(bp);
|
||||
|
@ -919,4 +946,5 @@ void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp)
|
|||
init_set_dce_clock(bp);
|
||||
init_get_smu_clock_info(bp);
|
||||
|
||||
init_enable_lvtma_control(bp);
|
||||
}
|
||||
|
|
|
@ -94,7 +94,8 @@ struct cmd_tbl {
|
|||
struct bp_set_dce_clock_parameters *bp_params);
|
||||
unsigned int (*get_smu_clock_info)(
|
||||
struct bios_parser *bp, uint8_t id);
|
||||
|
||||
enum bp_result (*enable_lvtma_control)(struct bios_parser *bp,
|
||||
uint8_t uc_pwr_on);
|
||||
};
|
||||
|
||||
void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp);
|
||||
|
|
|
@ -136,6 +136,10 @@ struct dc_vbios_funcs {
|
|||
|
||||
enum bp_result (*get_atom_dc_golden_table)(
|
||||
struct dc_bios *dcb);
|
||||
|
||||
enum bp_result (*enable_lvtma_control)(
|
||||
struct dc_bios *bios,
|
||||
uint8_t uc_pwr_on);
|
||||
};
|
||||
|
||||
struct bios_registers {
|
||||
|
|
|
@ -842,6 +842,17 @@ void dce110_edp_power_control(
|
|||
cntl.coherent = false;
|
||||
cntl.lanes_number = LANE_COUNT_FOUR;
|
||||
cntl.hpd_sel = link->link_enc->hpd_source;
|
||||
|
||||
if (ctx->dc->ctx->dmub_srv &&
|
||||
ctx->dc->debug.dmub_command_table) {
|
||||
if (cntl.action == TRANSMITTER_CONTROL_POWER_ON)
|
||||
bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||
LVTMA_CONTROL_POWER_ON);
|
||||
else
|
||||
bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||
LVTMA_CONTROL_POWER_OFF);
|
||||
}
|
||||
|
||||
bp_result = link_transmitter_control(ctx->dc_bios, &cntl);
|
||||
|
||||
if (!power_up)
|
||||
|
@ -919,8 +930,21 @@ void dce110_edp_backlight_control(
|
|||
/*edp 1.2*/
|
||||
if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON)
|
||||
edp_receiver_ready_T7(link);
|
||||
|
||||
if (ctx->dc->ctx->dmub_srv &&
|
||||
ctx->dc->debug.dmub_command_table) {
|
||||
if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON)
|
||||
ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||
LVTMA_CONTROL_LCD_BLON);
|
||||
else
|
||||
ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios,
|
||||
LVTMA_CONTROL_LCD_BLOFF);
|
||||
}
|
||||
|
||||
link_transmitter_control(ctx->dc_bios, &cntl);
|
||||
|
||||
|
||||
|
||||
if (enable && link->dpcd_sink_ext_caps.bits.oled)
|
||||
msleep(OLED_POST_T7_DELAY);
|
||||
|
||||
|
|
|
@ -1457,8 +1457,8 @@ static void dcn20_update_dchubp_dpp(
|
|||
|
||||
/* Any updates are handled in dc interface, just need to apply existing for plane enable */
|
||||
if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed ||
|
||||
pipe_ctx->update_flags.bits.scaler || pipe_ctx->update_flags.bits.viewport)
|
||||
&& pipe_ctx->stream->cursor_attributes.address.quad_part != 0) {
|
||||
pipe_ctx->update_flags.bits.scaler || viewport_changed == true) &&
|
||||
pipe_ctx->stream->cursor_attributes.address.quad_part != 0) {
|
||||
dc->hwss.set_cursor_position(pipe_ctx);
|
||||
dc->hwss.set_cursor_attribute(pipe_ctx);
|
||||
|
||||
|
|
|
@ -167,7 +167,9 @@
|
|||
LE_SF(DCIO_SOFT_RESET, UNIPHYB_SOFT_RESET, mask_sh),\
|
||||
LE_SF(DCIO_SOFT_RESET, UNIPHYC_SOFT_RESET, mask_sh),\
|
||||
LE_SF(DCIO_SOFT_RESET, UNIPHYD_SOFT_RESET, mask_sh),\
|
||||
LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh)
|
||||
LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh)
|
||||
|
||||
#define LINK_ENCODER_MASK_SH_LIST_DCN20(mask_sh)\
|
||||
LINK_ENCODER_MASK_SH_LIST_DCN10(mask_sh),\
|
||||
|
|
|
@ -61,7 +61,10 @@
|
|||
DPCS_DCN2_MASK_SH_LIST(mask_sh),\
|
||||
LE_SF(DPCSTX0_DPCSTX_TX_CNTL, DPCS_TX_DATA_ORDER_INVERT_18_BIT, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL0, RDPCS_PHY_TX_VBOOST_LVL, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh)
|
||||
LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\
|
||||
LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh)
|
||||
|
||||
|
||||
void dcn30_link_encoder_construct(
|
||||
struct dcn20_link_encoder *enc20,
|
||||
|
|
|
@ -491,6 +491,7 @@ static const struct dcn10_link_enc_hpd_registers link_enc_hpd_regs[] = {
|
|||
[id] = {\
|
||||
LE_DCN3_REG_LIST(id), \
|
||||
UNIPHY_DCN2_REG_LIST(phyid), \
|
||||
SRI(DP_DPHY_INTERNAL_CTRL, DP, id) \
|
||||
}
|
||||
|
||||
static const struct dce110_aux_registers_shift aux_shift = {
|
||||
|
|
|
@ -63,6 +63,7 @@ typedef struct {
|
|||
|
||||
#define BPP_INVALID 0
|
||||
#define BPP_BLENDED_PIPE 0xffffffff
|
||||
#define DCN30_MAX_DSC_IMAGE_WIDTH 5184
|
||||
|
||||
static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib);
|
||||
static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(
|
||||
|
@ -3984,6 +3985,9 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||
} else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) {
|
||||
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
|
||||
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1;
|
||||
} else if (v->DSCEnabled[k] && (v->HActive[k] > DCN30_MAX_DSC_IMAGE_WIDTH)) {
|
||||
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
|
||||
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1;
|
||||
} else {
|
||||
v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
|
||||
v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithoutODMCombine;
|
||||
|
|
|
@ -101,6 +101,13 @@ enum bp_pipe_control_action {
|
|||
ASIC_PIPE_INIT
|
||||
};
|
||||
|
||||
enum bp_lvtma_control_action {
|
||||
LVTMA_CONTROL_LCD_BLOFF = 2,
|
||||
LVTMA_CONTROL_LCD_BLON = 3,
|
||||
LVTMA_CONTROL_POWER_ON = 12,
|
||||
LVTMA_CONTROL_POWER_OFF = 13
|
||||
};
|
||||
|
||||
struct bp_encoder_control {
|
||||
enum bp_encoder_control_action action;
|
||||
enum engine_id engine_id;
|
||||
|
|
|
@ -431,6 +431,9 @@ struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg);
|
|||
*/
|
||||
static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2)
|
||||
{
|
||||
if (arg1.value == 0)
|
||||
return arg2.value == 0 ? dc_fixpt_one : dc_fixpt_zero;
|
||||
|
||||
return dc_fixpt_exp(
|
||||
dc_fixpt_mul(
|
||||
dc_fixpt_log(arg1),
|
||||
|
|
|
@ -2204,14 +2204,17 @@ static const struct throttling_logging_label {
|
|||
};
|
||||
static void arcturus_log_thermal_throttling_event(struct smu_context *smu)
|
||||
{
|
||||
int ret;
|
||||
int throttler_idx, throtting_events = 0, buf_idx = 0;
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
uint32_t throttler_status;
|
||||
char log_buf[256];
|
||||
|
||||
arcturus_get_smu_metrics_data(smu,
|
||||
METRICS_THROTTLER_STATUS,
|
||||
&throttler_status);
|
||||
ret = arcturus_get_smu_metrics_data(smu,
|
||||
METRICS_THROTTLER_STATUS,
|
||||
&throttler_status);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
memset(log_buf, 0, sizeof(log_buf));
|
||||
for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label);
|
||||
|
|
Loading…
Reference in New Issue