diff options
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c')
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c index df0fa815cd6e..cfd9e6ccb790 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_thermal.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include "vega12_smumgr.h" | 26 | #include "vega12_smumgr.h" |
| 27 | #include "vega12_ppsmc.h" | 27 | #include "vega12_ppsmc.h" |
| 28 | #include "vega12_inc.h" | 28 | #include "vega12_inc.h" |
| 29 | #include "pp_soc15.h" | 29 | #include "soc15_common.h" |
| 30 | #include "pp_debug.h" | 30 | #include "pp_debug.h" |
| 31 | 31 | ||
| 32 | static int vega12_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) | 32 | static int vega12_get_current_rpm(struct pp_hwmgr *hwmgr, uint32_t *current_rpm) |
| @@ -147,13 +147,10 @@ int vega12_fan_ctrl_reset_fan_speed_to_default(struct pp_hwmgr *hwmgr) | |||
| 147 | */ | 147 | */ |
| 148 | int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) | 148 | int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) |
| 149 | { | 149 | { |
| 150 | struct amdgpu_device *adev = hwmgr->adev; | ||
| 150 | int temp = 0; | 151 | int temp = 0; |
| 151 | uint32_t reg; | ||
| 152 | 152 | ||
| 153 | reg = soc15_get_register_offset(THM_HWID, 0, | 153 | temp = RREG32_SOC15(THM, 0, mmCG_MULT_THERMAL_STATUS); |
| 154 | mmCG_MULT_THERMAL_STATUS_BASE_IDX, mmCG_MULT_THERMAL_STATUS); | ||
| 155 | |||
| 156 | temp = cgs_read_register(hwmgr->device, reg); | ||
| 157 | 154 | ||
| 158 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> | 155 | temp = (temp & CG_MULT_THERMAL_STATUS__CTF_TEMP_MASK) >> |
| 159 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; | 156 | CG_MULT_THERMAL_STATUS__CTF_TEMP__SHIFT; |
| @@ -175,11 +172,12 @@ int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) | |||
| 175 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 172 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
| 176 | struct PP_TemperatureRange *range) | 173 | struct PP_TemperatureRange *range) |
| 177 | { | 174 | { |
| 175 | struct amdgpu_device *adev = hwmgr->adev; | ||
| 178 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP * | 176 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP * |
| 179 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 177 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
| 180 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP * | 178 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP * |
| 181 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 179 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
| 182 | uint32_t val, reg; | 180 | uint32_t val; |
| 183 | 181 | ||
| 184 | if (low < range->min) | 182 | if (low < range->min) |
| 185 | low = range->min; | 183 | low = range->min; |
| @@ -189,18 +187,15 @@ static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
| 189 | if (low > high) | 187 | if (low > high) |
| 190 | return -EINVAL; | 188 | return -EINVAL; |
| 191 | 189 | ||
| 192 | reg = soc15_get_register_offset(THM_HWID, 0, | 190 | val = RREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL); |
| 193 | mmTHM_THERMAL_INT_CTRL_BASE_IDX, mmTHM_THERMAL_INT_CTRL); | ||
| 194 | |||
| 195 | val = cgs_read_register(hwmgr->device, reg); | ||
| 196 | 191 | ||
| 197 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 192 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
| 198 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 193 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
| 199 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 194 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
| 200 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 195 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); |
| 201 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); | 196 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); |
| 202 | 197 | ||
| 203 | cgs_write_register(hwmgr->device, reg, val); | 198 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); |
| 204 | 199 | ||
| 205 | return 0; | 200 | return 0; |
| 206 | } | 201 | } |
| @@ -212,15 +207,14 @@ static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | |||
| 212 | */ | 207 | */ |
| 213 | static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) | 208 | static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) |
| 214 | { | 209 | { |
| 210 | struct amdgpu_device *adev = hwmgr->adev; | ||
| 215 | uint32_t val = 0; | 211 | uint32_t val = 0; |
| 216 | uint32_t reg; | ||
| 217 | 212 | ||
| 218 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTH_CLR__SHIFT); | 213 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTH_CLR__SHIFT); |
| 219 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); | 214 | val |= (1 << THM_THERMAL_INT_ENA__THERM_INTL_CLR__SHIFT); |
| 220 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); | 215 | val |= (1 << THM_THERMAL_INT_ENA__THERM_TRIGGER_CLR__SHIFT); |
| 221 | 216 | ||
| 222 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 217 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, val); |
| 223 | cgs_write_register(hwmgr->device, reg, val); | ||
| 224 | 218 | ||
| 225 | return 0; | 219 | return 0; |
| 226 | } | 220 | } |
| @@ -231,10 +225,9 @@ static int vega12_thermal_enable_alert(struct pp_hwmgr *hwmgr) | |||
| 231 | */ | 225 | */ |
| 232 | int vega12_thermal_disable_alert(struct pp_hwmgr *hwmgr) | 226 | int vega12_thermal_disable_alert(struct pp_hwmgr *hwmgr) |
| 233 | { | 227 | { |
| 234 | uint32_t reg; | 228 | struct amdgpu_device *adev = hwmgr->adev; |
| 235 | 229 | ||
| 236 | reg = soc15_get_register_offset(THM_HWID, 0, mmTHM_THERMAL_INT_ENA_BASE_IDX, mmTHM_THERMAL_INT_ENA); | 230 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_ENA, 0); |
| 237 | cgs_write_register(hwmgr->device, reg, 0); | ||
| 238 | 231 | ||
| 239 | return 0; | 232 | return 0; |
| 240 | } | 233 | } |
