Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+126 -22
+22 -9
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
··· 195 195 unsigned int engine_id, 196 196 unsigned int queue_id) 197 197 { 198 - uint32_t sdma_engine_reg_base[2] = { 199 - SOC15_REG_OFFSET(SDMA0, 0, 200 - mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL, 201 - SOC15_REG_OFFSET(SDMA1, 0, 202 - mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL 203 - }; 204 - uint32_t retval = sdma_engine_reg_base[engine_id] 198 + uint32_t sdma_engine_reg_base = 0; 199 + uint32_t sdma_rlc_reg_offset; 200 + 201 + switch (engine_id) { 202 + default: 203 + dev_warn(adev->dev, 204 + "Invalid sdma engine id (%d), using engine id 0\n", 205 + engine_id); 206 + fallthrough; 207 + case 0: 208 + sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, 209 + mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 210 + break; 211 + case 1: 212 + sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0, 213 + mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; 214 + break; 215 + } 216 + 217 + sdma_rlc_reg_offset = sdma_engine_reg_base 205 218 + queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL); 206 219 207 220 pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id, 208 - queue_id, retval); 221 + queue_id, sdma_rlc_reg_offset); 209 222 210 - return retval; 223 + return sdma_rlc_reg_offset; 211 224 } 212 225 213 226 static inline struct v9_mqd *get_mqd(void *mqd)
-2
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
··· 1243 1243 if (!obj || !obj->ent) 1244 1244 return; 1245 1245 1246 - debugfs_remove(obj->ent); 1247 1246 obj->ent = NULL; 1248 1247 put_obj(obj); 1249 1248 } ··· 1256 1257 amdgpu_ras_debugfs_remove(adev, &obj->head); 1257 1258 } 1258 1259 1259 - debugfs_remove_recursive(con->dir); 1260 1260 con->dir = NULL; 1261 1261 } 1262 1262 /* debugfs end */
+1 -2
drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
··· 179 179 } 180 180 break; 181 181 case CHIP_SIENNA_CICHLID: 182 + case CHIP_NAVY_FLOUNDER: 182 183 err = psp_init_ta_microcode(&adev->psp, chip_name); 183 184 if (err) 184 185 return err; 185 - break; 186 - case CHIP_NAVY_FLOUNDER: 187 186 break; 188 187 default: 189 188 BUG();
+15 -1
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
··· 1108 1108 action); 1109 1109 } 1110 1110 1111 + static enum bp_result bios_parser_enable_lvtma_control( 1112 + struct dc_bios *dcb, 1113 + uint8_t uc_pwr_on) 1114 + { 1115 + struct bios_parser *bp = BP_FROM_DCB(dcb); 1116 + 1117 + if (!bp->cmd_tbl.enable_lvtma_control) 1118 + return BP_RESULT_FAILURE; 1119 + 1120 + return bp->cmd_tbl.enable_lvtma_control(bp, uc_pwr_on); 1121 + } 1122 + 1111 1123 static bool bios_parser_is_accelerated_mode( 1112 1124 struct dc_bios *dcb) 1113 1125 { ··· 2220 2208 .get_board_layout_info = bios_get_board_layout_info, 2221 2209 .pack_data_tables = bios_parser_pack_data_tables, 2222 2210 2223 - .get_atom_dc_golden_table = bios_get_atom_dc_golden_table 2211 + .get_atom_dc_golden_table = bios_get_atom_dc_golden_table, 2212 + 2213 + .enable_lvtma_control = bios_parser_enable_lvtma_control 2224 2214 }; 2225 2215 2226 2216 static bool bios_parser2_construct(
+28
drivers/gpu/drm/amd/display/dc/bios/command_table2.c
··· 904 904 return 0; 905 905 } 906 906 907 + /****************************************************************************** 908 + ****************************************************************************** 909 + ** 910 + ** LVTMA CONTROL 911 + ** 912 + ****************************************************************************** 913 + *****************************************************************************/ 914 + 915 + static enum bp_result enable_lvtma_control( 916 + struct bios_parser *bp, 917 + uint8_t uc_pwr_on); 918 + 919 + static void init_enable_lvtma_control(struct bios_parser *bp) 920 + { 921 + /* TODO add switch for table vrsion */ 922 + bp->cmd_tbl.enable_lvtma_control = enable_lvtma_control; 923 + 924 + } 925 + 926 + static enum bp_result enable_lvtma_control( 927 + struct bios_parser *bp, 928 + uint8_t uc_pwr_on) 929 + { 930 + enum bp_result result = BP_RESULT_FAILURE; 931 + return result; 932 + } 933 + 907 934 void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp) 908 935 { 909 936 init_dig_encoder_control(bp); ··· 946 919 init_set_dce_clock(bp); 947 920 init_get_smu_clock_info(bp); 948 921 922 + init_enable_lvtma_control(bp); 949 923 }
+2 -1
drivers/gpu/drm/amd/display/dc/bios/command_table2.h
··· 94 94 struct bp_set_dce_clock_parameters *bp_params); 95 95 unsigned int (*get_smu_clock_info)( 96 96 struct bios_parser *bp, uint8_t id); 97 - 97 + enum bp_result (*enable_lvtma_control)(struct bios_parser *bp, 98 + uint8_t uc_pwr_on); 98 99 }; 99 100 100 101 void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp);
+4
drivers/gpu/drm/amd/display/dc/dc_bios_types.h
··· 136 136 137 137 enum bp_result (*get_atom_dc_golden_table)( 138 138 struct dc_bios *dcb); 139 + 140 + enum bp_result (*enable_lvtma_control)( 141 + struct dc_bios *bios, 142 + uint8_t uc_pwr_on); 139 143 }; 140 144 141 145 struct bios_registers {
+24
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
··· 842 842 cntl.coherent = false; 843 843 cntl.lanes_number = LANE_COUNT_FOUR; 844 844 cntl.hpd_sel = link->link_enc->hpd_source; 845 + 846 + if (ctx->dc->ctx->dmub_srv && 847 + ctx->dc->debug.dmub_command_table) { 848 + if (cntl.action == TRANSMITTER_CONTROL_POWER_ON) 849 + bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, 850 + LVTMA_CONTROL_POWER_ON); 851 + else 852 + bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, 853 + LVTMA_CONTROL_POWER_OFF); 854 + } 855 + 845 856 bp_result = link_transmitter_control(ctx->dc_bios, &cntl); 846 857 847 858 if (!power_up) ··· 930 919 /*edp 1.2*/ 931 920 if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON) 932 921 edp_receiver_ready_T7(link); 922 + 923 + if (ctx->dc->ctx->dmub_srv && 924 + ctx->dc->debug.dmub_command_table) { 925 + if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON) 926 + ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, 927 + LVTMA_CONTROL_LCD_BLON); 928 + else 929 + ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, 930 + LVTMA_CONTROL_LCD_BLOFF); 931 + } 932 + 933 933 link_transmitter_control(ctx->dc_bios, &cntl); 934 + 935 + 934 936 935 937 if (enable && link->dpcd_sink_ext_caps.bits.oled) 936 938 msleep(OLED_POST_T7_DELAY);
+2 -2
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
··· 1457 1457 1458 1458 /* Any updates are handled in dc interface, just need to apply existing for plane enable */ 1459 1459 if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed || 1460 - pipe_ctx->update_flags.bits.scaler || pipe_ctx->update_flags.bits.viewport) 1461 - && pipe_ctx->stream->cursor_attributes.address.quad_part != 0) { 1460 + pipe_ctx->update_flags.bits.scaler || viewport_changed == true) && 1461 + pipe_ctx->stream->cursor_attributes.address.quad_part != 0) { 1462 1462 dc->hwss.set_cursor_position(pipe_ctx); 1463 1463 dc->hwss.set_cursor_attribute(pipe_ctx); 1464 1464
+1
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
··· 491 491 [id] = {\ 492 492 LE_DCN3_REG_LIST(id), \ 493 493 UNIPHY_DCN2_REG_LIST(phyid), \ 494 + SRI(DP_DPHY_INTERNAL_CTRL, DP, id) \ 494 495 } 495 496 496 497 static const struct dce110_aux_registers_shift aux_shift = {
+4
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
··· 63 63 64 64 #define BPP_INVALID 0 65 65 #define BPP_BLENDED_PIPE 0xffffffff 66 + #define DCN30_MAX_DSC_IMAGE_WIDTH 5184 66 67 67 68 static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib); 68 69 static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation( ··· 3983 3982 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; 3984 3983 v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1; 3985 3984 } else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) { 3985 + v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1; 3986 + v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1; 3987 + } else if (v->DSCEnabled[k] && (v->HActive[k] > DCN30_MAX_DSC_IMAGE_WIDTH)) { 3986 3988 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1; 3987 3989 v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1; 3988 3990 } else {
+7
drivers/gpu/drm/amd/display/include/bios_parser_types.h
··· 101 101 ASIC_PIPE_INIT 102 102 }; 103 103 104 + enum bp_lvtma_control_action { 105 + LVTMA_CONTROL_LCD_BLOFF = 2, 106 + LVTMA_CONTROL_LCD_BLON = 3, 107 + LVTMA_CONTROL_POWER_ON = 12, 108 + LVTMA_CONTROL_POWER_OFF = 13 109 + }; 110 + 104 111 struct bp_encoder_control { 105 112 enum bp_encoder_control_action action; 106 113 enum engine_id engine_id;
+3
drivers/gpu/drm/amd/display/include/fixed31_32.h
··· 431 431 */ 432 432 static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2) 433 433 { 434 + if (arg1.value == 0) 435 + return arg2.value == 0 ? dc_fixpt_one : dc_fixpt_zero; 436 + 434 437 return dc_fixpt_exp( 435 438 dc_fixpt_mul( 436 439 dc_fixpt_log(arg1),
+6 -3
drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
··· 2204 2204 }; 2205 2205 static void arcturus_log_thermal_throttling_event(struct smu_context *smu) 2206 2206 { 2207 + int ret; 2207 2208 int throttler_idx, throtting_events = 0, buf_idx = 0; 2208 2209 struct amdgpu_device *adev = smu->adev; 2209 2210 uint32_t throttler_status; 2210 2211 char log_buf[256]; 2211 2212 2212 - arcturus_get_smu_metrics_data(smu, 2213 - METRICS_THROTTLER_STATUS, 2214 - &throttler_status); 2213 + ret = arcturus_get_smu_metrics_data(smu, 2214 + METRICS_THROTTLER_STATUS, 2215 + &throttler_status); 2216 + if (ret) 2217 + return; 2215 2218 2216 2219 memset(log_buf, 0, sizeof(log_buf)); 2217 2220 for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label);