Merge branch 'drm-next-4.21' of git://people.freedesktop.org/~agd5f/linux into drm-next
New features for 4.21: amdgpu: - Support for SDMA paging queue on vega - Put compute EOP buffers into vram for better performance - Share more code with amdkfd - Support for scanout with DCC on gfx9 - Initial kerneldoc for DC - Updated SMU firmware support for gfx8 chips - Rework CSA handling for eventual support for preemption - XGMI PSP support - Clean up RLC handling - Enable GPU reset by default on VI, SOC15 dGPUs - Ring and IB test cleanups amdkfd: - Share more code with amdgpu ttm: - Move global init out of the drivers scheduler: - Track if schedulers are ready for work - Timeout/fault handling changes to facilitate GPU recovery Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181114165113.3751-1-alexander.deucher@amd.com
This commit is contained in:
@@ -967,7 +967,7 @@ int smu7_enable_didt_config(struct pp_hwmgr *hwmgr)
|
||||
PP_CAP(PHM_PlatformCaps_TDRamping) ||
|
||||
PP_CAP(PHM_PlatformCaps_TCPRamping)) {
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
mutex_lock(&adev->grbm_idx_mutex);
|
||||
value = 0;
|
||||
value2 = cgs_read_register(hwmgr->device, mmGRBM_GFX_INDEX);
|
||||
@@ -1014,13 +1014,13 @@ int smu7_enable_didt_config(struct pp_hwmgr *hwmgr)
|
||||
"Failed to enable DPM DIDT.", goto error);
|
||||
}
|
||||
mutex_unlock(&adev->grbm_idx_mutex);
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
error:
|
||||
mutex_unlock(&adev->grbm_idx_mutex);
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1034,7 +1034,7 @@ int smu7_disable_didt_config(struct pp_hwmgr *hwmgr)
|
||||
PP_CAP(PHM_PlatformCaps_TDRamping) ||
|
||||
PP_CAP(PHM_PlatformCaps_TCPRamping)) {
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
result = smu7_enable_didt(hwmgr, false);
|
||||
PP_ASSERT_WITH_CODE((result == 0),
|
||||
@@ -1046,12 +1046,12 @@ int smu7_disable_didt_config(struct pp_hwmgr *hwmgr)
|
||||
PP_ASSERT_WITH_CODE((0 == result),
|
||||
"Failed to disable DPM DIDT.", goto error);
|
||||
}
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
error:
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@@ -937,7 +937,7 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
num_se = adev->gfx.config.max_shader_engines;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
mutex_lock(&adev->grbm_idx_mutex);
|
||||
for (count = 0; count < num_se; count++) {
|
||||
@@ -962,7 +962,7 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
vega10_didt_set_mask(hwmgr, true);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -971,11 +971,11 @@ static int vega10_disable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
struct amdgpu_device *adev = hwmgr->adev;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
vega10_didt_set_mask(hwmgr, false);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -988,7 +988,7 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
num_se = adev->gfx.config.max_shader_engines;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
mutex_lock(&adev->grbm_idx_mutex);
|
||||
for (count = 0; count < num_se; count++) {
|
||||
@@ -1007,7 +1007,7 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
vega10_didt_set_mask(hwmgr, true);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
vega10_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega10);
|
||||
if (PP_CAP(PHM_PlatformCaps_GCEDC))
|
||||
@@ -1024,11 +1024,11 @@ static int vega10_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
|
||||
struct amdgpu_device *adev = hwmgr->adev;
|
||||
uint32_t data;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
vega10_didt_set_mask(hwmgr, false);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
if (PP_CAP(PHM_PlatformCaps_GCEDC)) {
|
||||
data = 0x00000000;
|
||||
@@ -1049,7 +1049,7 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
num_se = adev->gfx.config.max_shader_engines;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
mutex_lock(&adev->grbm_idx_mutex);
|
||||
for (count = 0; count < num_se; count++) {
|
||||
@@ -1070,7 +1070,7 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
vega10_didt_set_mask(hwmgr, true);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1079,11 +1079,11 @@ static int vega10_disable_se_edc_config(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
struct amdgpu_device *adev = hwmgr->adev;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
vega10_didt_set_mask(hwmgr, false);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1097,7 +1097,7 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
num_se = adev->gfx.config.max_shader_engines;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10);
|
||||
|
||||
@@ -1118,7 +1118,7 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
vega10_didt_set_mask(hwmgr, true);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega10);
|
||||
|
||||
@@ -1138,11 +1138,11 @@ static int vega10_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
|
||||
struct amdgpu_device *adev = hwmgr->adev;
|
||||
uint32_t data;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
vega10_didt_set_mask(hwmgr, false);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
if (PP_CAP(PHM_PlatformCaps_GCEDC)) {
|
||||
data = 0x00000000;
|
||||
@@ -1160,7 +1160,7 @@ static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
|
||||
struct amdgpu_device *adev = hwmgr->adev;
|
||||
int result;
|
||||
|
||||
adev->gfx.rlc.funcs->enter_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_enter_safe_mode(adev);
|
||||
|
||||
mutex_lock(&adev->grbm_idx_mutex);
|
||||
WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000);
|
||||
@@ -1173,7 +1173,7 @@ static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
|
||||
|
||||
vega10_didt_set_mask(hwmgr, false);
|
||||
|
||||
adev->gfx.rlc.funcs->exit_safe_mode(adev);
|
||||
amdgpu_gfx_rlc_exit_safe_mode(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -2755,7 +2755,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
|
||||
for (i = 0; i < clocks.num_levels; i++)
|
||||
size += sprintf(buf + size, "%d: %uMhz %s\n",
|
||||
i, clocks.data[i].clocks_in_khz / 1000,
|
||||
(clocks.data[i].clocks_in_khz == now) ? "*" : "");
|
||||
(clocks.data[i].clocks_in_khz == now * 10) ? "*" : "");
|
||||
break;
|
||||
|
||||
case PP_MCLK:
|
||||
@@ -2772,7 +2772,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
|
||||
for (i = 0; i < clocks.num_levels; i++)
|
||||
size += sprintf(buf + size, "%d: %uMhz %s\n",
|
||||
i, clocks.data[i].clocks_in_khz / 1000,
|
||||
(clocks.data[i].clocks_in_khz == now) ? "*" : "");
|
||||
(clocks.data[i].clocks_in_khz == now * 10) ? "*" : "");
|
||||
break;
|
||||
|
||||
case PP_PCIE:
|
||||
@@ -3454,109 +3454,64 @@ static int vega20_get_thermal_temperature_range(struct pp_hwmgr *hwmgr,
|
||||
|
||||
static const struct pp_hwmgr_func vega20_hwmgr_funcs = {
|
||||
/* init/fini related */
|
||||
.backend_init =
|
||||
vega20_hwmgr_backend_init,
|
||||
.backend_fini =
|
||||
vega20_hwmgr_backend_fini,
|
||||
.asic_setup =
|
||||
vega20_setup_asic_task,
|
||||
.power_off_asic =
|
||||
vega20_power_off_asic,
|
||||
.dynamic_state_management_enable =
|
||||
vega20_enable_dpm_tasks,
|
||||
.dynamic_state_management_disable =
|
||||
vega20_disable_dpm_tasks,
|
||||
.backend_init = vega20_hwmgr_backend_init,
|
||||
.backend_fini = vega20_hwmgr_backend_fini,
|
||||
.asic_setup = vega20_setup_asic_task,
|
||||
.power_off_asic = vega20_power_off_asic,
|
||||
.dynamic_state_management_enable = vega20_enable_dpm_tasks,
|
||||
.dynamic_state_management_disable = vega20_disable_dpm_tasks,
|
||||
/* power state related */
|
||||
.apply_clocks_adjust_rules =
|
||||
vega20_apply_clocks_adjust_rules,
|
||||
.pre_display_config_changed =
|
||||
vega20_pre_display_configuration_changed_task,
|
||||
.display_config_changed =
|
||||
vega20_display_configuration_changed_task,
|
||||
.apply_clocks_adjust_rules = vega20_apply_clocks_adjust_rules,
|
||||
.pre_display_config_changed = vega20_pre_display_configuration_changed_task,
|
||||
.display_config_changed = vega20_display_configuration_changed_task,
|
||||
.check_smc_update_required_for_display_configuration =
|
||||
vega20_check_smc_update_required_for_display_configuration,
|
||||
.notify_smc_display_config_after_ps_adjustment =
|
||||
vega20_notify_smc_display_config_after_ps_adjustment,
|
||||
/* export to DAL */
|
||||
.get_sclk =
|
||||
vega20_dpm_get_sclk,
|
||||
.get_mclk =
|
||||
vega20_dpm_get_mclk,
|
||||
.get_dal_power_level =
|
||||
vega20_get_dal_power_level,
|
||||
.get_clock_by_type_with_latency =
|
||||
vega20_get_clock_by_type_with_latency,
|
||||
.get_clock_by_type_with_voltage =
|
||||
vega20_get_clock_by_type_with_voltage,
|
||||
.set_watermarks_for_clocks_ranges =
|
||||
vega20_set_watermarks_for_clocks_ranges,
|
||||
.display_clock_voltage_request =
|
||||
vega20_display_clock_voltage_request,
|
||||
.get_performance_level =
|
||||
vega20_get_performance_level,
|
||||
.get_sclk = vega20_dpm_get_sclk,
|
||||
.get_mclk = vega20_dpm_get_mclk,
|
||||
.get_dal_power_level = vega20_get_dal_power_level,
|
||||
.get_clock_by_type_with_latency = vega20_get_clock_by_type_with_latency,
|
||||
.get_clock_by_type_with_voltage = vega20_get_clock_by_type_with_voltage,
|
||||
.set_watermarks_for_clocks_ranges = vega20_set_watermarks_for_clocks_ranges,
|
||||
.display_clock_voltage_request = vega20_display_clock_voltage_request,
|
||||
.get_performance_level = vega20_get_performance_level,
|
||||
/* UMD pstate, profile related */
|
||||
.force_dpm_level =
|
||||
vega20_dpm_force_dpm_level,
|
||||
.get_power_profile_mode =
|
||||
vega20_get_power_profile_mode,
|
||||
.set_power_profile_mode =
|
||||
vega20_set_power_profile_mode,
|
||||
.force_dpm_level = vega20_dpm_force_dpm_level,
|
||||
.get_power_profile_mode = vega20_get_power_profile_mode,
|
||||
.set_power_profile_mode = vega20_set_power_profile_mode,
|
||||
/* od related */
|
||||
.set_power_limit =
|
||||
vega20_set_power_limit,
|
||||
.get_sclk_od =
|
||||
vega20_get_sclk_od,
|
||||
.set_sclk_od =
|
||||
vega20_set_sclk_od,
|
||||
.get_mclk_od =
|
||||
vega20_get_mclk_od,
|
||||
.set_mclk_od =
|
||||
vega20_set_mclk_od,
|
||||
.odn_edit_dpm_table =
|
||||
vega20_odn_edit_dpm_table,
|
||||
.set_power_limit = vega20_set_power_limit,
|
||||
.get_sclk_od = vega20_get_sclk_od,
|
||||
.set_sclk_od = vega20_set_sclk_od,
|
||||
.get_mclk_od = vega20_get_mclk_od,
|
||||
.set_mclk_od = vega20_set_mclk_od,
|
||||
.odn_edit_dpm_table = vega20_odn_edit_dpm_table,
|
||||
/* for sysfs to retrive/set gfxclk/memclk */
|
||||
.force_clock_level =
|
||||
vega20_force_clock_level,
|
||||
.print_clock_levels =
|
||||
vega20_print_clock_levels,
|
||||
.read_sensor =
|
||||
vega20_read_sensor,
|
||||
.force_clock_level = vega20_force_clock_level,
|
||||
.print_clock_levels = vega20_print_clock_levels,
|
||||
.read_sensor = vega20_read_sensor,
|
||||
/* powergate related */
|
||||
.powergate_uvd =
|
||||
vega20_power_gate_uvd,
|
||||
.powergate_vce =
|
||||
vega20_power_gate_vce,
|
||||
.powergate_uvd = vega20_power_gate_uvd,
|
||||
.powergate_vce = vega20_power_gate_vce,
|
||||
/* thermal related */
|
||||
.start_thermal_controller =
|
||||
vega20_start_thermal_controller,
|
||||
.stop_thermal_controller =
|
||||
vega20_thermal_stop_thermal_controller,
|
||||
.get_thermal_temperature_range =
|
||||
vega20_get_thermal_temperature_range,
|
||||
.register_irq_handlers =
|
||||
smu9_register_irq_handlers,
|
||||
.disable_smc_firmware_ctf =
|
||||
vega20_thermal_disable_alert,
|
||||
.start_thermal_controller = vega20_start_thermal_controller,
|
||||
.stop_thermal_controller = vega20_thermal_stop_thermal_controller,
|
||||
.get_thermal_temperature_range = vega20_get_thermal_temperature_range,
|
||||
.register_irq_handlers = smu9_register_irq_handlers,
|
||||
.disable_smc_firmware_ctf = vega20_thermal_disable_alert,
|
||||
/* fan control related */
|
||||
.get_fan_speed_percent =
|
||||
vega20_fan_ctrl_get_fan_speed_percent,
|
||||
.set_fan_speed_percent =
|
||||
vega20_fan_ctrl_set_fan_speed_percent,
|
||||
.get_fan_speed_info =
|
||||
vega20_fan_ctrl_get_fan_speed_info,
|
||||
.get_fan_speed_rpm =
|
||||
vega20_fan_ctrl_get_fan_speed_rpm,
|
||||
.set_fan_speed_rpm =
|
||||
vega20_fan_ctrl_set_fan_speed_rpm,
|
||||
.get_fan_control_mode =
|
||||
vega20_get_fan_control_mode,
|
||||
.set_fan_control_mode =
|
||||
vega20_set_fan_control_mode,
|
||||
.get_fan_speed_percent = vega20_fan_ctrl_get_fan_speed_percent,
|
||||
.set_fan_speed_percent = vega20_fan_ctrl_set_fan_speed_percent,
|
||||
.get_fan_speed_info = vega20_fan_ctrl_get_fan_speed_info,
|
||||
.get_fan_speed_rpm = vega20_fan_ctrl_get_fan_speed_rpm,
|
||||
.set_fan_speed_rpm = vega20_fan_ctrl_set_fan_speed_rpm,
|
||||
.get_fan_control_mode = vega20_get_fan_control_mode,
|
||||
.set_fan_control_mode = vega20_set_fan_control_mode,
|
||||
/* smu memory related */
|
||||
.notify_cac_buffer_info =
|
||||
vega20_notify_cac_buffer_info,
|
||||
.enable_mgpu_fan_boost =
|
||||
vega20_enable_mgpu_fan_boost,
|
||||
.notify_cac_buffer_info = vega20_notify_cac_buffer_info,
|
||||
.enable_mgpu_fan_boost = vega20_enable_mgpu_fan_boost,
|
||||
};
|
||||
|
||||
int vega20_hwmgr_init(struct pp_hwmgr *hwmgr)
|
||||
|
@@ -28,7 +28,6 @@
|
||||
#include "hardwaremanager.h"
|
||||
#include "hwmgr_ppt.h"
|
||||
#include "ppatomctrl.h"
|
||||
#include "hwmgr_ppt.h"
|
||||
#include "power_state.h"
|
||||
#include "smu_helper.h"
|
||||
|
||||
|
@@ -37,10 +37,6 @@
|
||||
#include "gmc/gmc_8_1_d.h"
|
||||
#include "gmc/gmc_8_1_sh_mask.h"
|
||||
|
||||
#include "bif/bif_5_0_d.h"
|
||||
#include "bif/bif_5_0_sh_mask.h"
|
||||
|
||||
|
||||
#include "bif/bif_5_0_d.h"
|
||||
#include "bif/bif_5_0_sh_mask.h"
|
||||
|
||||
|
@@ -44,7 +44,6 @@
|
||||
|
||||
#include "smu7_hwmgr.h"
|
||||
#include "hardwaremanager.h"
|
||||
#include "ppatomctrl.h"
|
||||
#include "atombios.h"
|
||||
#include "pppcielanes.h"
|
||||
|
||||
|
@@ -29,7 +29,6 @@
|
||||
#include "rv_ppsmc.h"
|
||||
#include "smu10_driver_if.h"
|
||||
#include "smu10.h"
|
||||
#include "ppatomctrl.h"
|
||||
#include "pp_debug.h"
|
||||
|
||||
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -61,9 +62,13 @@ static uint32_t smu8_get_argument(struct pp_hwmgr *hwmgr)
|
||||
mmSMU_MP1_SRBM2P_ARG_0);
|
||||
}
|
||||
|
||||
static int smu8_send_msg_to_smc_async(struct pp_hwmgr *hwmgr, uint16_t msg)
|
||||
/* Send a message to the SMC, and wait for its response.*/
|
||||
static int smu8_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr,
|
||||
uint16_t msg, uint32_t parameter)
|
||||
{
|
||||
int result = 0;
|
||||
ktime_t t_start;
|
||||
s64 elapsed_us;
|
||||
|
||||
if (hwmgr == NULL || hwmgr->device == NULL)
|
||||
return -EINVAL;
|
||||
@@ -74,28 +79,31 @@ static int smu8_send_msg_to_smc_async(struct pp_hwmgr *hwmgr, uint16_t msg)
|
||||
/* Read the last message to SMU, to report actual cause */
|
||||
uint32_t val = cgs_read_register(hwmgr->device,
|
||||
mmSMU_MP1_SRBM2P_MSG_0);
|
||||
pr_err("smu8_send_msg_to_smc_async (0x%04x) failed\n", msg);
|
||||
pr_err("SMU still servicing msg (0x%04x)\n", val);
|
||||
pr_err("%s(0x%04x) aborted; SMU still servicing msg (0x%04x)\n",
|
||||
__func__, msg, val);
|
||||
return result;
|
||||
}
|
||||
t_start = ktime_get();
|
||||
|
||||
cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_ARG_0, parameter);
|
||||
|
||||
cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_RESP_0, 0);
|
||||
cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_MSG_0, msg);
|
||||
|
||||
return 0;
|
||||
result = PHM_WAIT_FIELD_UNEQUAL(hwmgr,
|
||||
SMU_MP1_SRBM2P_RESP_0, CONTENT, 0);
|
||||
|
||||
elapsed_us = ktime_us_delta(ktime_get(), t_start);
|
||||
|
||||
WARN(result, "%s(0x%04x, %#x) timed out after %lld us\n",
|
||||
__func__, msg, parameter, elapsed_us);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Send a message to the SMC, and wait for its response.*/
|
||||
static int smu8_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
result = smu8_send_msg_to_smc_async(hwmgr, msg);
|
||||
if (result != 0)
|
||||
return result;
|
||||
|
||||
return PHM_WAIT_FIELD_UNEQUAL(hwmgr,
|
||||
SMU_MP1_SRBM2P_RESP_0, CONTENT, 0);
|
||||
return smu8_send_msg_to_smc_with_parameter(hwmgr, msg, 0);
|
||||
}
|
||||
|
||||
static int smu8_set_smc_sram_address(struct pp_hwmgr *hwmgr,
|
||||
@@ -135,17 +143,6 @@ static int smu8_write_smc_sram_dword(struct pp_hwmgr *hwmgr,
|
||||
return result;
|
||||
}
|
||||
|
||||
static int smu8_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr,
|
||||
uint16_t msg, uint32_t parameter)
|
||||
{
|
||||
if (hwmgr == NULL || hwmgr->device == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_ARG_0, parameter);
|
||||
|
||||
return smu8_send_msg_to_smc(hwmgr, msg);
|
||||
}
|
||||
|
||||
static int smu8_check_fw_load_finish(struct pp_hwmgr *hwmgr,
|
||||
uint32_t firmware)
|
||||
{
|
||||
@@ -737,6 +734,10 @@ static int smu8_start_smu(struct pp_hwmgr *hwmgr)
|
||||
|
||||
cgs_write_register(hwmgr->device, mmMP0PUB_IND_INDEX, index);
|
||||
hwmgr->smu_version = cgs_read_register(hwmgr->device, mmMP0PUB_IND_DATA);
|
||||
pr_info("smu version %02d.%02d.%02d\n",
|
||||
((hwmgr->smu_version >> 16) & 0xFF),
|
||||
((hwmgr->smu_version >> 8) & 0xFF),
|
||||
(hwmgr->smu_version & 0xFF));
|
||||
adev->pm.fw_version = hwmgr->smu_version >> 8;
|
||||
|
||||
return smu8_request_smu_load_fw(hwmgr);
|
||||
|
@@ -37,10 +37,13 @@ MODULE_FIRMWARE("amdgpu/fiji_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris10_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris10_k2_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris11_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris11_k2_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris12_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/polaris12_k_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/vegam_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/vega10_smc.bin");
|
||||
MODULE_FIRMWARE("amdgpu/vega10_acg_smc.bin");
|
||||
|
@@ -40,7 +40,6 @@
|
||||
|
||||
#include "smu7_hwmgr.h"
|
||||
#include "hardwaremanager.h"
|
||||
#include "ppatomctrl.h"
|
||||
#include "atombios.h"
|
||||
#include "pppcielanes.h"
|
||||
|
||||
|
Reference in New Issue
Block a user