|
@@ -1538,78 +1538,6 @@ int cz_get_power_state_size(struct pp_hwmgr *hwmgr)
|
|
|
return sizeof(struct cz_power_state);
|
|
|
}
|
|
|
|
|
|
-static void
|
|
|
-cz_print_current_perforce_level(struct pp_hwmgr *hwmgr, struct seq_file *m)
|
|
|
-{
|
|
|
- struct cz_hwmgr *cz_hwmgr = (struct cz_hwmgr *)(hwmgr->backend);
|
|
|
-
|
|
|
- struct phm_clock_voltage_dependency_table *table =
|
|
|
- hwmgr->dyn_state.vddc_dependency_on_sclk;
|
|
|
-
|
|
|
- struct phm_vce_clock_voltage_dependency_table *vce_table =
|
|
|
- hwmgr->dyn_state.vce_clock_voltage_dependency_table;
|
|
|
-
|
|
|
- struct phm_uvd_clock_voltage_dependency_table *uvd_table =
|
|
|
- hwmgr->dyn_state.uvd_clock_voltage_dependency_table;
|
|
|
-
|
|
|
- uint32_t sclk_index = PHM_GET_FIELD(cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixTARGET_AND_CURRENT_PROFILE_INDEX),
|
|
|
- TARGET_AND_CURRENT_PROFILE_INDEX, CURR_SCLK_INDEX);
|
|
|
- uint32_t uvd_index = PHM_GET_FIELD(cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixTARGET_AND_CURRENT_PROFILE_INDEX_2),
|
|
|
- TARGET_AND_CURRENT_PROFILE_INDEX_2, CURR_UVD_INDEX);
|
|
|
- uint32_t vce_index = PHM_GET_FIELD(cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixTARGET_AND_CURRENT_PROFILE_INDEX_2),
|
|
|
- TARGET_AND_CURRENT_PROFILE_INDEX_2, CURR_VCE_INDEX);
|
|
|
-
|
|
|
- uint32_t sclk, vclk, dclk, ecclk, tmp, activity_percent;
|
|
|
- uint16_t vddnb, vddgfx;
|
|
|
- int result;
|
|
|
-
|
|
|
- if (sclk_index >= NUM_SCLK_LEVELS) {
|
|
|
- seq_printf(m, "\n invalid sclk dpm profile %d\n", sclk_index);
|
|
|
- } else {
|
|
|
- sclk = table->entries[sclk_index].clk;
|
|
|
- seq_printf(m, "\n index: %u sclk: %u MHz\n", sclk_index, sclk/100);
|
|
|
- }
|
|
|
-
|
|
|
- tmp = (cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixSMUSVI_NB_CURRENTVID) &
|
|
|
- CURRENT_NB_VID_MASK) >> CURRENT_NB_VID__SHIFT;
|
|
|
- vddnb = cz_convert_8Bit_index_to_voltage(hwmgr, tmp);
|
|
|
- tmp = (cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixSMUSVI_GFX_CURRENTVID) &
|
|
|
- CURRENT_GFX_VID_MASK) >> CURRENT_GFX_VID__SHIFT;
|
|
|
- vddgfx = cz_convert_8Bit_index_to_voltage(hwmgr, (u16)tmp);
|
|
|
- seq_printf(m, "\n vddnb: %u vddgfx: %u\n", vddnb, vddgfx);
|
|
|
-
|
|
|
- seq_printf(m, "\n uvd %sabled\n", cz_hwmgr->uvd_power_gated ? "dis" : "en");
|
|
|
- if (!cz_hwmgr->uvd_power_gated) {
|
|
|
- if (uvd_index >= CZ_MAX_HARDWARE_POWERLEVELS) {
|
|
|
- seq_printf(m, "\n invalid uvd dpm level %d\n", uvd_index);
|
|
|
- } else {
|
|
|
- vclk = uvd_table->entries[uvd_index].vclk;
|
|
|
- dclk = uvd_table->entries[uvd_index].dclk;
|
|
|
- seq_printf(m, "\n index: %u uvd vclk: %u MHz dclk: %u MHz\n", uvd_index, vclk/100, dclk/100);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- seq_printf(m, "\n vce %sabled\n", cz_hwmgr->vce_power_gated ? "dis" : "en");
|
|
|
- if (!cz_hwmgr->vce_power_gated) {
|
|
|
- if (vce_index >= CZ_MAX_HARDWARE_POWERLEVELS) {
|
|
|
- seq_printf(m, "\n invalid vce dpm level %d\n", vce_index);
|
|
|
- } else {
|
|
|
- ecclk = vce_table->entries[vce_index].ecclk;
|
|
|
- seq_printf(m, "\n index: %u vce ecclk: %u MHz\n", vce_index, ecclk/100);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- result = smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_MSG_GetAverageGraphicsActivity);
|
|
|
- if (0 == result) {
|
|
|
- activity_percent = cgs_read_register(hwmgr->device, mmSMU_MP1_SRBM2P_ARG_0);
|
|
|
- activity_percent = activity_percent > 100 ? 100 : activity_percent;
|
|
|
- } else {
|
|
|
- activity_percent = 50;
|
|
|
- }
|
|
|
-
|
|
|
- seq_printf(m, "\n [GPU load]: %u %%\n\n", activity_percent);
|
|
|
-}
|
|
|
-
|
|
|
static void cz_hw_print_display_cfg(
|
|
|
const struct cc6_settings *cc6_settings)
|
|
|
{
|
|
@@ -1947,6 +1875,12 @@ static int cz_read_sensor(struct pp_hwmgr *hwmgr, int idx, int32_t *value)
|
|
|
}
|
|
|
*value = activity_percent;
|
|
|
return 0;
|
|
|
+ case AMDGPU_PP_SENSOR_UVD_POWER:
|
|
|
+ *value = cz_hwmgr->uvd_power_gated ? 0 : 1;
|
|
|
+ return 0;
|
|
|
+ case AMDGPU_PP_SENSOR_VCE_POWER:
|
|
|
+ *value = cz_hwmgr->vce_power_gated ? 0 : 1;
|
|
|
+ return 0;
|
|
|
default:
|
|
|
return -EINVAL;
|
|
|
}
|
|
@@ -1967,7 +1901,6 @@ static const struct pp_hwmgr_func cz_hwmgr_funcs = {
|
|
|
.patch_boot_state = cz_dpm_patch_boot_state,
|
|
|
.get_pp_table_entry = cz_dpm_get_pp_table_entry,
|
|
|
.get_num_of_pp_table_entries = cz_dpm_get_num_of_pp_table_entries,
|
|
|
- .print_current_perforce_level = cz_print_current_perforce_level,
|
|
|
.set_cpu_power_state = cz_set_cpu_power_state,
|
|
|
.store_cc6_data = cz_store_cc6_data,
|
|
|
.force_clock_level = cz_force_clock_level,
|