• Home
  • Raw
  • Download

Lines Matching refs:adev

46 static void kv_dpm_set_irq_funcs(struct amdgpu_device *adev);
47 static int kv_enable_nb_dpm(struct amdgpu_device *adev,
49 static void kv_init_graphics_levels(struct amdgpu_device *adev);
50 static int kv_calculate_ds_divider(struct amdgpu_device *adev);
51 static int kv_calculate_nbps_level_settings(struct amdgpu_device *adev);
52 static int kv_calculate_dpm_settings(struct amdgpu_device *adev);
53 static void kv_enable_new_levels(struct amdgpu_device *adev);
54 static void kv_program_nbps_index_settings(struct amdgpu_device *adev,
56 static int kv_set_enabled_level(struct amdgpu_device *adev, u32 level);
57 static int kv_set_enabled_levels(struct amdgpu_device *adev);
58 static int kv_force_dpm_highest(struct amdgpu_device *adev);
59 static int kv_force_dpm_lowest(struct amdgpu_device *adev);
60 static void kv_apply_state_adjust_rules(struct amdgpu_device *adev,
63 static int kv_set_thermal_temperature_range(struct amdgpu_device *adev,
65 static int kv_init_fps_limits(struct amdgpu_device *adev);
67 static void kv_dpm_powergate_samu(struct amdgpu_device *adev, bool gate);
68 static void kv_dpm_powergate_acp(struct amdgpu_device *adev, bool gate);
71 static u32 kv_convert_vid2_to_vid7(struct amdgpu_device *adev, in kv_convert_vid2_to_vid7() argument
76 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_convert_vid2_to_vid7()
93 static u32 kv_convert_vid7_to_vid2(struct amdgpu_device *adev, in kv_convert_vid7_to_vid2() argument
98 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_convert_vid7_to_vid2()
117 static void sumo_take_smu_control(struct amdgpu_device *adev, bool enable) in sumo_take_smu_control() argument
136 static void sumo_construct_sclk_voltage_mapping_table(struct amdgpu_device *adev, in sumo_construct_sclk_voltage_mapping_table() argument
158 static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev, in sumo_construct_vid_mapping_table() argument
377 static struct kv_power_info *kv_get_pi(struct amdgpu_device *adev) in kv_get_pi() argument
379 struct kv_power_info *pi = adev->pm.dpm.priv; in kv_get_pi()
385 static void kv_program_local_cac_table(struct amdgpu_device *adev,
410 static int kv_program_pt_config_registers(struct amdgpu_device *adev, in kv_program_pt_config_registers() argument
459 static void kv_do_enable_didt(struct amdgpu_device *adev, bool enable) in kv_do_enable_didt() argument
461 struct kv_power_info *pi = kv_get_pi(adev); in kv_do_enable_didt()
501 static int kv_enable_didt(struct amdgpu_device *adev, bool enable) in kv_enable_didt() argument
503 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_didt()
510 amdgpu_gfx_rlc_enter_safe_mode(adev); in kv_enable_didt()
513 ret = kv_program_pt_config_registers(adev, didt_config_kv); in kv_enable_didt()
515 amdgpu_gfx_rlc_exit_safe_mode(adev); in kv_enable_didt()
520 kv_do_enable_didt(adev, enable); in kv_enable_didt()
522 amdgpu_gfx_rlc_exit_safe_mode(adev); in kv_enable_didt()
529 static void kv_initialize_hardware_cac_manager(struct amdgpu_device *adev)
531 struct kv_power_info *pi = kv_get_pi(adev);
536 kv_program_local_cac_table(adev, sx_local_cac_cfg_kv, sx0_cac_config_reg);
540 kv_program_local_cac_table(adev, mc0_local_cac_cfg_kv, mc0_cac_config_reg);
544 kv_program_local_cac_table(adev, mc1_local_cac_cfg_kv, mc1_cac_config_reg);
548 kv_program_local_cac_table(adev, mc2_local_cac_cfg_kv, mc2_cac_config_reg);
552 kv_program_local_cac_table(adev, mc3_local_cac_cfg_kv, mc3_cac_config_reg);
556 kv_program_local_cac_table(adev, cpl_local_cac_cfg_kv, cpl_cac_config_reg);
561 static int kv_enable_smc_cac(struct amdgpu_device *adev, bool enable) in kv_enable_smc_cac() argument
563 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_smc_cac()
568 ret = amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_EnableCac); in kv_enable_smc_cac()
574 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_DisableCac); in kv_enable_smc_cac()
582 static int kv_process_firmware_header(struct amdgpu_device *adev) in kv_process_firmware_header() argument
584 struct kv_power_info *pi = kv_get_pi(adev); in kv_process_firmware_header()
588 ret = amdgpu_kv_read_smc_sram_dword(adev, SMU7_FIRMWARE_HEADER_LOCATION + in kv_process_firmware_header()
595 ret = amdgpu_kv_read_smc_sram_dword(adev, SMU7_FIRMWARE_HEADER_LOCATION + in kv_process_firmware_header()
605 static int kv_enable_dpm_voltage_scaling(struct amdgpu_device *adev) in kv_enable_dpm_voltage_scaling() argument
607 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_dpm_voltage_scaling()
612 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_enable_dpm_voltage_scaling()
621 static int kv_set_dpm_interval(struct amdgpu_device *adev) in kv_set_dpm_interval() argument
623 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_dpm_interval()
628 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_set_dpm_interval()
637 static int kv_set_dpm_boot_state(struct amdgpu_device *adev) in kv_set_dpm_boot_state() argument
639 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_dpm_boot_state()
642 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_set_dpm_boot_state()
651 static void kv_program_vc(struct amdgpu_device *adev) in kv_program_vc() argument
656 static void kv_clear_vc(struct amdgpu_device *adev) in kv_clear_vc() argument
661 static int kv_set_divider_value(struct amdgpu_device *adev, in kv_set_divider_value() argument
664 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_divider_value()
668 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_set_divider_value()
679 static u16 kv_convert_8bit_index_to_voltage(struct amdgpu_device *adev, in kv_convert_8bit_index_to_voltage() argument
685 static u16 kv_convert_2bit_index_to_voltage(struct amdgpu_device *adev, in kv_convert_2bit_index_to_voltage() argument
688 struct kv_power_info *pi = kv_get_pi(adev); in kv_convert_2bit_index_to_voltage()
689 u32 vid_8bit = kv_convert_vid2_to_vid7(adev, in kv_convert_2bit_index_to_voltage()
693 return kv_convert_8bit_index_to_voltage(adev, (u16)vid_8bit); in kv_convert_2bit_index_to_voltage()
697 static int kv_set_vid(struct amdgpu_device *adev, u32 index, u32 vid) in kv_set_vid() argument
699 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_vid()
703 cpu_to_be32(kv_convert_2bit_index_to_voltage(adev, vid)); in kv_set_vid()
708 static int kv_set_at(struct amdgpu_device *adev, u32 index, u32 at) in kv_set_at() argument
710 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_at()
717 static void kv_dpm_power_level_enable(struct amdgpu_device *adev, in kv_dpm_power_level_enable() argument
720 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_power_level_enable()
725 static void kv_start_dpm(struct amdgpu_device *adev) in kv_start_dpm() argument
732 amdgpu_kv_smc_dpm_enable(adev, true); in kv_start_dpm()
735 static void kv_stop_dpm(struct amdgpu_device *adev) in kv_stop_dpm() argument
737 amdgpu_kv_smc_dpm_enable(adev, false); in kv_stop_dpm()
740 static void kv_start_am(struct amdgpu_device *adev) in kv_start_am() argument
751 static void kv_reset_am(struct amdgpu_device *adev) in kv_reset_am() argument
761 static int kv_freeze_sclk_dpm(struct amdgpu_device *adev, bool freeze) in kv_freeze_sclk_dpm() argument
763 return amdgpu_kv_notify_message_to_smu(adev, freeze ? in kv_freeze_sclk_dpm()
767 static int kv_force_lowest_valid(struct amdgpu_device *adev) in kv_force_lowest_valid() argument
769 return kv_force_dpm_lowest(adev); in kv_force_lowest_valid()
772 static int kv_unforce_levels(struct amdgpu_device *adev) in kv_unforce_levels() argument
774 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) in kv_unforce_levels()
775 return amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_NoForcedLevel); in kv_unforce_levels()
777 return kv_set_enabled_levels(adev); in kv_unforce_levels()
780 static int kv_update_sclk_t(struct amdgpu_device *adev) in kv_update_sclk_t() argument
782 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_sclk_t()
789 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_sclk_t()
798 static int kv_program_bootup_state(struct amdgpu_device *adev) in kv_program_bootup_state() argument
800 struct kv_power_info *pi = kv_get_pi(adev); in kv_program_bootup_state()
803 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_program_bootup_state()
812 kv_dpm_power_level_enable(adev, i, true); in kv_program_bootup_state()
826 kv_dpm_power_level_enable(adev, i, true); in kv_program_bootup_state()
831 static int kv_enable_auto_thermal_throttling(struct amdgpu_device *adev) in kv_enable_auto_thermal_throttling() argument
833 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_auto_thermal_throttling()
838 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_enable_auto_thermal_throttling()
847 static int kv_upload_dpm_settings(struct amdgpu_device *adev) in kv_upload_dpm_settings() argument
849 struct kv_power_info *pi = kv_get_pi(adev); in kv_upload_dpm_settings()
852 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_upload_dpm_settings()
862 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_upload_dpm_settings()
876 static u32 kv_get_clk_bypass(struct amdgpu_device *adev, u32 clk) in kv_get_clk_bypass() argument
878 struct kv_power_info *pi = kv_get_pi(adev); in kv_get_clk_bypass()
901 static int kv_populate_uvd_table(struct amdgpu_device *adev) in kv_populate_uvd_table() argument
903 struct kv_power_info *pi = kv_get_pi(adev); in kv_populate_uvd_table()
905 &adev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table; in kv_populate_uvd_table()
924 (u8)kv_get_clk_bypass(adev, table->entries[i].vclk); in kv_populate_uvd_table()
926 (u8)kv_get_clk_bypass(adev, table->entries[i].dclk); in kv_populate_uvd_table()
928 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_populate_uvd_table()
934 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_populate_uvd_table()
943 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_uvd_table()
953 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_uvd_table()
961 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_uvd_table()
972 static int kv_populate_vce_table(struct amdgpu_device *adev) in kv_populate_vce_table() argument
974 struct kv_power_info *pi = kv_get_pi(adev); in kv_populate_vce_table()
978 &adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; in kv_populate_vce_table()
994 (u8)kv_get_clk_bypass(adev, table->entries[i].evclk); in kv_populate_vce_table()
996 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_populate_vce_table()
1005 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_vce_table()
1016 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_vce_table()
1025 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_vce_table()
1035 static int kv_populate_samu_table(struct amdgpu_device *adev) in kv_populate_samu_table() argument
1037 struct kv_power_info *pi = kv_get_pi(adev); in kv_populate_samu_table()
1039 &adev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table; in kv_populate_samu_table()
1057 (u8)kv_get_clk_bypass(adev, table->entries[i].clk); in kv_populate_samu_table()
1059 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_populate_samu_table()
1068 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_samu_table()
1079 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_samu_table()
1088 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_samu_table()
1101 static int kv_populate_acp_table(struct amdgpu_device *adev) in kv_populate_acp_table() argument
1103 struct kv_power_info *pi = kv_get_pi(adev); in kv_populate_acp_table()
1105 &adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table; in kv_populate_acp_table()
1118 ret = amdgpu_atombios_get_clock_dividers(adev, COMPUTE_ENGINE_PLL_PARAM, in kv_populate_acp_table()
1127 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_acp_table()
1138 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_acp_table()
1147 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_populate_acp_table()
1159 static void kv_calculate_dfs_bypass_settings(struct amdgpu_device *adev) in kv_calculate_dfs_bypass_settings() argument
1161 struct kv_power_info *pi = kv_get_pi(adev); in kv_calculate_dfs_bypass_settings()
1164 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_calculate_dfs_bypass_settings()
1209 static int kv_enable_ulv(struct amdgpu_device *adev, bool enable) in kv_enable_ulv() argument
1211 return amdgpu_kv_notify_message_to_smu(adev, enable ? in kv_enable_ulv()
1215 static void kv_reset_acp_boot_level(struct amdgpu_device *adev) in kv_reset_acp_boot_level() argument
1217 struct kv_power_info *pi = kv_get_pi(adev); in kv_reset_acp_boot_level()
1222 static void kv_update_current_ps(struct amdgpu_device *adev, in kv_update_current_ps() argument
1226 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_current_ps()
1231 adev->pm.dpm.current_ps = &pi->current_rps; in kv_update_current_ps()
1234 static void kv_update_requested_ps(struct amdgpu_device *adev, in kv_update_requested_ps() argument
1238 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_requested_ps()
1243 adev->pm.dpm.requested_ps = &pi->requested_rps; in kv_update_requested_ps()
1248 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_enable_bapm() local
1249 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_enable_bapm()
1253 ret = amdgpu_kv_smc_bapm_enable(adev, enable); in kv_dpm_enable_bapm()
1259 static int kv_dpm_enable(struct amdgpu_device *adev) in kv_dpm_enable() argument
1261 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_enable()
1264 ret = kv_process_firmware_header(adev); in kv_dpm_enable()
1269 kv_init_fps_limits(adev); in kv_dpm_enable()
1270 kv_init_graphics_levels(adev); in kv_dpm_enable()
1271 ret = kv_program_bootup_state(adev); in kv_dpm_enable()
1276 kv_calculate_dfs_bypass_settings(adev); in kv_dpm_enable()
1277 ret = kv_upload_dpm_settings(adev); in kv_dpm_enable()
1282 ret = kv_populate_uvd_table(adev); in kv_dpm_enable()
1287 ret = kv_populate_vce_table(adev); in kv_dpm_enable()
1292 ret = kv_populate_samu_table(adev); in kv_dpm_enable()
1297 ret = kv_populate_acp_table(adev); in kv_dpm_enable()
1302 kv_program_vc(adev); in kv_dpm_enable()
1304 kv_initialize_hardware_cac_manager(adev); in kv_dpm_enable()
1306 kv_start_am(adev); in kv_dpm_enable()
1308 ret = kv_enable_auto_thermal_throttling(adev); in kv_dpm_enable()
1314 ret = kv_enable_dpm_voltage_scaling(adev); in kv_dpm_enable()
1319 ret = kv_set_dpm_interval(adev); in kv_dpm_enable()
1324 ret = kv_set_dpm_boot_state(adev); in kv_dpm_enable()
1329 ret = kv_enable_ulv(adev, true); in kv_dpm_enable()
1334 kv_start_dpm(adev); in kv_dpm_enable()
1335 ret = kv_enable_didt(adev, true); in kv_dpm_enable()
1340 ret = kv_enable_smc_cac(adev, true); in kv_dpm_enable()
1346 kv_reset_acp_boot_level(adev); in kv_dpm_enable()
1348 ret = amdgpu_kv_smc_bapm_enable(adev, false); in kv_dpm_enable()
1354 if (adev->irq.installed && in kv_dpm_enable()
1355 amdgpu_is_internal_thermal_sensor(adev->pm.int_thermal_type)) { in kv_dpm_enable()
1356 ret = kv_set_thermal_temperature_range(adev, KV_TEMP_RANGE_MIN, KV_TEMP_RANGE_MAX); in kv_dpm_enable()
1361 amdgpu_irq_get(adev, &adev->pm.dpm.thermal.irq, in kv_dpm_enable()
1363 amdgpu_irq_get(adev, &adev->pm.dpm.thermal.irq, in kv_dpm_enable()
1370 static void kv_dpm_disable(struct amdgpu_device *adev) in kv_dpm_disable() argument
1372 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_disable()
1374 amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq, in kv_dpm_disable()
1376 amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq, in kv_dpm_disable()
1379 amdgpu_kv_smc_bapm_enable(adev, false); in kv_dpm_disable()
1381 if (adev->asic_type == CHIP_MULLINS) in kv_dpm_disable()
1382 kv_enable_nb_dpm(adev, false); in kv_dpm_disable()
1385 kv_dpm_powergate_acp(adev, false); in kv_dpm_disable()
1386 kv_dpm_powergate_samu(adev, false); in kv_dpm_disable()
1388 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_VCEPowerON); in kv_dpm_disable()
1390 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_UVDPowerON); in kv_dpm_disable()
1392 kv_enable_smc_cac(adev, false); in kv_dpm_disable()
1393 kv_enable_didt(adev, false); in kv_dpm_disable()
1394 kv_clear_vc(adev); in kv_dpm_disable()
1395 kv_stop_dpm(adev); in kv_dpm_disable()
1396 kv_enable_ulv(adev, false); in kv_dpm_disable()
1397 kv_reset_am(adev); in kv_dpm_disable()
1399 kv_update_current_ps(adev, adev->pm.dpm.boot_ps); in kv_dpm_disable()
1403 static int kv_write_smc_soft_register(struct amdgpu_device *adev,
1406 struct kv_power_info *pi = kv_get_pi(adev);
1408 return amdgpu_kv_copy_bytes_to_smc(adev, pi->soft_regs_start + reg_offset,
1412 static int kv_read_smc_soft_register(struct amdgpu_device *adev,
1415 struct kv_power_info *pi = kv_get_pi(adev);
1417 return amdgpu_kv_read_smc_sram_dword(adev, pi->soft_regs_start + reg_offset,
1422 static void kv_init_sclk_t(struct amdgpu_device *adev) in kv_init_sclk_t() argument
1424 struct kv_power_info *pi = kv_get_pi(adev); in kv_init_sclk_t()
1429 static int kv_init_fps_limits(struct amdgpu_device *adev) in kv_init_fps_limits() argument
1431 struct kv_power_info *pi = kv_get_pi(adev); in kv_init_fps_limits()
1439 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_init_fps_limits()
1448 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_init_fps_limits()
1458 static void kv_init_powergate_state(struct amdgpu_device *adev) in kv_init_powergate_state() argument
1460 struct kv_power_info *pi = kv_get_pi(adev); in kv_init_powergate_state()
1469 static int kv_enable_uvd_dpm(struct amdgpu_device *adev, bool enable) in kv_enable_uvd_dpm() argument
1471 return amdgpu_kv_notify_message_to_smu(adev, enable ? in kv_enable_uvd_dpm()
1475 static int kv_enable_vce_dpm(struct amdgpu_device *adev, bool enable) in kv_enable_vce_dpm() argument
1477 return amdgpu_kv_notify_message_to_smu(adev, enable ? in kv_enable_vce_dpm()
1481 static int kv_enable_samu_dpm(struct amdgpu_device *adev, bool enable) in kv_enable_samu_dpm() argument
1483 return amdgpu_kv_notify_message_to_smu(adev, enable ? in kv_enable_samu_dpm()
1487 static int kv_enable_acp_dpm(struct amdgpu_device *adev, bool enable) in kv_enable_acp_dpm() argument
1489 return amdgpu_kv_notify_message_to_smu(adev, enable ? in kv_enable_acp_dpm()
1493 static int kv_update_uvd_dpm(struct amdgpu_device *adev, bool gate) in kv_update_uvd_dpm() argument
1495 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_uvd_dpm()
1497 &adev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table; in kv_update_uvd_dpm()
1513 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_uvd_dpm()
1521 amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_update_uvd_dpm()
1526 return kv_enable_uvd_dpm(adev, !gate); in kv_update_uvd_dpm()
1529 static u8 kv_get_vce_boot_level(struct amdgpu_device *adev, u32 evclk) in kv_get_vce_boot_level() argument
1533 &adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; in kv_get_vce_boot_level()
1543 static int kv_update_vce_dpm(struct amdgpu_device *adev, in kv_update_vce_dpm() argument
1547 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_vce_dpm()
1549 &adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; in kv_update_vce_dpm()
1556 pi->vce_boot_level = kv_get_vce_boot_level(adev, amdgpu_new_state->evclk); in kv_update_vce_dpm()
1558 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_vce_dpm()
1568 amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_update_vce_dpm()
1571 kv_enable_vce_dpm(adev, true); in kv_update_vce_dpm()
1573 kv_enable_vce_dpm(adev, false); in kv_update_vce_dpm()
1579 static int kv_update_samu_dpm(struct amdgpu_device *adev, bool gate) in kv_update_samu_dpm() argument
1581 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_samu_dpm()
1583 &adev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table; in kv_update_samu_dpm()
1592 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_samu_dpm()
1602 amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_update_samu_dpm()
1607 return kv_enable_samu_dpm(adev, !gate); in kv_update_samu_dpm()
1610 static u8 kv_get_acp_boot_level(struct amdgpu_device *adev) in kv_get_acp_boot_level() argument
1615 static void kv_update_acp_boot_level(struct amdgpu_device *adev) in kv_update_acp_boot_level() argument
1617 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_acp_boot_level()
1621 acp_boot_level = kv_get_acp_boot_level(adev); in kv_update_acp_boot_level()
1624 amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_update_acp_boot_level()
1631 static int kv_update_acp_dpm(struct amdgpu_device *adev, bool gate) in kv_update_acp_dpm() argument
1633 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_acp_dpm()
1635 &adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table; in kv_update_acp_dpm()
1642 pi->acp_boot_level = kv_get_acp_boot_level(adev); in kv_update_acp_dpm()
1644 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_acp_dpm()
1654 amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_update_acp_dpm()
1659 return kv_enable_acp_dpm(adev, !gate); in kv_update_acp_dpm()
1664 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_powergate_uvd() local
1665 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_powergate_uvd()
1671 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_UVD, in kv_dpm_powergate_uvd()
1673 kv_update_uvd_dpm(adev, gate); in kv_dpm_powergate_uvd()
1676 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_UVDPowerOFF); in kv_dpm_powergate_uvd()
1680 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_UVDPowerON); in kv_dpm_powergate_uvd()
1682 kv_update_uvd_dpm(adev, gate); in kv_dpm_powergate_uvd()
1684 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_UVD, in kv_dpm_powergate_uvd()
1691 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_powergate_vce() local
1692 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_powergate_vce()
1698 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCE, in kv_dpm_powergate_vce()
1700 kv_enable_vce_dpm(adev, false); in kv_dpm_powergate_vce()
1702 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_VCEPowerOFF); in kv_dpm_powergate_vce()
1705 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_VCEPowerON); in kv_dpm_powergate_vce()
1706 kv_enable_vce_dpm(adev, true); in kv_dpm_powergate_vce()
1708 amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCE, in kv_dpm_powergate_vce()
1714 static void kv_dpm_powergate_samu(struct amdgpu_device *adev, bool gate) in kv_dpm_powergate_samu() argument
1716 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_powergate_samu()
1724 kv_update_samu_dpm(adev, true); in kv_dpm_powergate_samu()
1726 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_SAMPowerOFF); in kv_dpm_powergate_samu()
1729 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_SAMPowerON); in kv_dpm_powergate_samu()
1730 kv_update_samu_dpm(adev, false); in kv_dpm_powergate_samu()
1734 static void kv_dpm_powergate_acp(struct amdgpu_device *adev, bool gate) in kv_dpm_powergate_acp() argument
1736 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_powergate_acp()
1741 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) in kv_dpm_powergate_acp()
1747 kv_update_acp_dpm(adev, true); in kv_dpm_powergate_acp()
1749 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_ACPPowerOFF); in kv_dpm_powergate_acp()
1752 amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_ACPPowerON); in kv_dpm_powergate_acp()
1753 kv_update_acp_dpm(adev, false); in kv_dpm_powergate_acp()
1757 static void kv_set_valid_clock_range(struct amdgpu_device *adev, in kv_set_valid_clock_range() argument
1761 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_valid_clock_range()
1764 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_set_valid_clock_range()
1819 static int kv_update_dfs_bypass_settings(struct amdgpu_device *adev, in kv_update_dfs_bypass_settings() argument
1823 struct kv_power_info *pi = kv_get_pi(adev); in kv_update_dfs_bypass_settings()
1830 ret = amdgpu_kv_copy_bytes_to_smc(adev, in kv_update_dfs_bypass_settings()
1842 static int kv_enable_nb_dpm(struct amdgpu_device *adev, in kv_enable_nb_dpm() argument
1845 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_nb_dpm()
1850 ret = amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_NBDPM_Enable); in kv_enable_nb_dpm()
1856 ret = amdgpu_kv_notify_message_to_smu(adev, PPSMC_MSG_NBDPM_Disable); in kv_enable_nb_dpm()
1869 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_force_performance_level() local
1872 ret = kv_force_dpm_highest(adev); in kv_dpm_force_performance_level()
1876 ret = kv_force_dpm_lowest(adev); in kv_dpm_force_performance_level()
1880 ret = kv_unforce_levels(adev); in kv_dpm_force_performance_level()
1885 adev->pm.dpm.forced_level = level; in kv_dpm_force_performance_level()
1892 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_pre_set_power_state() local
1893 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_pre_set_power_state()
1894 struct amdgpu_ps requested_ps = *adev->pm.dpm.requested_ps; in kv_dpm_pre_set_power_state()
1897 kv_update_requested_ps(adev, new_ps); in kv_dpm_pre_set_power_state()
1899 kv_apply_state_adjust_rules(adev, in kv_dpm_pre_set_power_state()
1908 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_set_power_state() local
1909 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_set_power_state()
1915 ret = amdgpu_kv_smc_bapm_enable(adev, adev->pm.ac_power); in kv_dpm_set_power_state()
1922 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) { in kv_dpm_set_power_state()
1924 kv_set_valid_clock_range(adev, new_ps); in kv_dpm_set_power_state()
1925 kv_update_dfs_bypass_settings(adev, new_ps); in kv_dpm_set_power_state()
1926 ret = kv_calculate_ds_divider(adev); in kv_dpm_set_power_state()
1931 kv_calculate_nbps_level_settings(adev); in kv_dpm_set_power_state()
1932 kv_calculate_dpm_settings(adev); in kv_dpm_set_power_state()
1933 kv_force_lowest_valid(adev); in kv_dpm_set_power_state()
1934 kv_enable_new_levels(adev); in kv_dpm_set_power_state()
1935 kv_upload_dpm_settings(adev); in kv_dpm_set_power_state()
1936 kv_program_nbps_index_settings(adev, new_ps); in kv_dpm_set_power_state()
1937 kv_unforce_levels(adev); in kv_dpm_set_power_state()
1938 kv_set_enabled_levels(adev); in kv_dpm_set_power_state()
1939 kv_force_lowest_valid(adev); in kv_dpm_set_power_state()
1940 kv_unforce_levels(adev); in kv_dpm_set_power_state()
1942 ret = kv_update_vce_dpm(adev, new_ps, old_ps); in kv_dpm_set_power_state()
1947 kv_update_sclk_t(adev); in kv_dpm_set_power_state()
1948 if (adev->asic_type == CHIP_MULLINS) in kv_dpm_set_power_state()
1949 kv_enable_nb_dpm(adev, true); in kv_dpm_set_power_state()
1953 kv_set_valid_clock_range(adev, new_ps); in kv_dpm_set_power_state()
1954 kv_update_dfs_bypass_settings(adev, new_ps); in kv_dpm_set_power_state()
1955 ret = kv_calculate_ds_divider(adev); in kv_dpm_set_power_state()
1960 kv_calculate_nbps_level_settings(adev); in kv_dpm_set_power_state()
1961 kv_calculate_dpm_settings(adev); in kv_dpm_set_power_state()
1962 kv_freeze_sclk_dpm(adev, true); in kv_dpm_set_power_state()
1963 kv_upload_dpm_settings(adev); in kv_dpm_set_power_state()
1964 kv_program_nbps_index_settings(adev, new_ps); in kv_dpm_set_power_state()
1965 kv_freeze_sclk_dpm(adev, false); in kv_dpm_set_power_state()
1966 kv_set_enabled_levels(adev); in kv_dpm_set_power_state()
1967 ret = kv_update_vce_dpm(adev, new_ps, old_ps); in kv_dpm_set_power_state()
1972 kv_update_acp_boot_level(adev); in kv_dpm_set_power_state()
1973 kv_update_sclk_t(adev); in kv_dpm_set_power_state()
1974 kv_enable_nb_dpm(adev, true); in kv_dpm_set_power_state()
1983 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_post_set_power_state() local
1984 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_post_set_power_state()
1987 kv_update_current_ps(adev, new_ps); in kv_dpm_post_set_power_state()
1990 static void kv_dpm_setup_asic(struct amdgpu_device *adev) in kv_dpm_setup_asic() argument
1992 sumo_take_smu_control(adev, true); in kv_dpm_setup_asic()
1993 kv_init_powergate_state(adev); in kv_dpm_setup_asic()
1994 kv_init_sclk_t(adev); in kv_dpm_setup_asic()
1998 static void kv_dpm_reset_asic(struct amdgpu_device *adev)
2000 struct kv_power_info *pi = kv_get_pi(adev);
2002 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) {
2003 kv_force_lowest_valid(adev);
2004 kv_init_graphics_levels(adev);
2005 kv_program_bootup_state(adev);
2006 kv_upload_dpm_settings(adev);
2007 kv_force_lowest_valid(adev);
2008 kv_unforce_levels(adev);
2010 kv_init_graphics_levels(adev);
2011 kv_program_bootup_state(adev);
2012 kv_freeze_sclk_dpm(adev, true);
2013 kv_upload_dpm_settings(adev);
2014 kv_freeze_sclk_dpm(adev, false);
2015 kv_set_enabled_level(adev, pi->graphics_boot_level);
2020 static void kv_construct_max_power_limits_table(struct amdgpu_device *adev, in kv_construct_max_power_limits_table() argument
2023 struct kv_power_info *pi = kv_get_pi(adev); in kv_construct_max_power_limits_table()
2030 kv_convert_2bit_index_to_voltage(adev, in kv_construct_max_power_limits_table()
2037 static void kv_patch_voltage_values(struct amdgpu_device *adev) in kv_patch_voltage_values() argument
2041 &adev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table; in kv_patch_voltage_values()
2043 &adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; in kv_patch_voltage_values()
2045 &adev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table; in kv_patch_voltage_values()
2047 &adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table; in kv_patch_voltage_values()
2052 kv_convert_8bit_index_to_voltage(adev, in kv_patch_voltage_values()
2059 kv_convert_8bit_index_to_voltage(adev, in kv_patch_voltage_values()
2066 kv_convert_8bit_index_to_voltage(adev, in kv_patch_voltage_values()
2073 kv_convert_8bit_index_to_voltage(adev, in kv_patch_voltage_values()
2079 static void kv_construct_boot_state(struct amdgpu_device *adev) in kv_construct_boot_state() argument
2081 struct kv_power_info *pi = kv_get_pi(adev); in kv_construct_boot_state()
2093 static int kv_force_dpm_highest(struct amdgpu_device *adev) in kv_force_dpm_highest() argument
2098 ret = amdgpu_kv_dpm_get_enable_mask(adev, &enable_mask); in kv_force_dpm_highest()
2107 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) in kv_force_dpm_highest()
2108 return amdgpu_kv_send_msg_to_smc_with_parameter(adev, PPSMC_MSG_DPM_ForceState, i); in kv_force_dpm_highest()
2110 return kv_set_enabled_level(adev, i); in kv_force_dpm_highest()
2113 static int kv_force_dpm_lowest(struct amdgpu_device *adev) in kv_force_dpm_lowest() argument
2118 ret = amdgpu_kv_dpm_get_enable_mask(adev, &enable_mask); in kv_force_dpm_lowest()
2127 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) in kv_force_dpm_lowest()
2128 return amdgpu_kv_send_msg_to_smc_with_parameter(adev, PPSMC_MSG_DPM_ForceState, i); in kv_force_dpm_lowest()
2130 return kv_set_enabled_level(adev, i); in kv_force_dpm_lowest()
2133 static u8 kv_get_sleep_divider_id_from_clock(struct amdgpu_device *adev, in kv_get_sleep_divider_id_from_clock() argument
2136 struct kv_power_info *pi = kv_get_pi(adev); in kv_get_sleep_divider_id_from_clock()
2156 static int kv_get_high_voltage_limit(struct amdgpu_device *adev, int *limit) in kv_get_high_voltage_limit() argument
2158 struct kv_power_info *pi = kv_get_pi(adev); in kv_get_high_voltage_limit()
2160 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_get_high_voltage_limit()
2166 (kv_convert_8bit_index_to_voltage(adev, table->entries[i].v) <= in kv_get_high_voltage_limit()
2178 (kv_convert_2bit_index_to_voltage(adev, table->entries[i].vid_2bit) <= in kv_get_high_voltage_limit()
2190 static void kv_apply_state_adjust_rules(struct amdgpu_device *adev, in kv_apply_state_adjust_rules() argument
2195 struct kv_power_info *pi = kv_get_pi(adev); in kv_apply_state_adjust_rules()
2201 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_apply_state_adjust_rules()
2204 &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in kv_apply_state_adjust_rules()
2207 new_rps->evclk = adev->pm.dpm.vce_states[adev->pm.dpm.vce_level].evclk; in kv_apply_state_adjust_rules()
2208 new_rps->ecclk = adev->pm.dpm.vce_states[adev->pm.dpm.vce_level].ecclk; in kv_apply_state_adjust_rules()
2234 if (sclk < adev->pm.dpm.vce_states[adev->pm.dpm.vce_level].sclk) in kv_apply_state_adjust_rules()
2235 sclk = adev->pm.dpm.vce_states[adev->pm.dpm.vce_level].sclk; in kv_apply_state_adjust_rules()
2249 kv_convert_8bit_index_to_voltage(adev, ps->levels[i].vddc_index))) { in kv_apply_state_adjust_rules()
2250 kv_get_high_voltage_limit(adev, &limit); in kv_apply_state_adjust_rules()
2261 kv_convert_8bit_index_to_voltage(adev, ps->levels[i].vddc_index))) { in kv_apply_state_adjust_rules()
2262 kv_get_high_voltage_limit(adev, &limit); in kv_apply_state_adjust_rules()
2283 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) { in kv_apply_state_adjust_rules()
2296 pi->video_start || (adev->pm.dpm.new_active_crtc_count >= 3) || in kv_apply_state_adjust_rules()
2306 static void kv_dpm_power_level_enabled_for_throttle(struct amdgpu_device *adev, in kv_dpm_power_level_enabled_for_throttle() argument
2309 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_power_level_enabled_for_throttle()
2314 static int kv_calculate_ds_divider(struct amdgpu_device *adev) in kv_calculate_ds_divider() argument
2316 struct kv_power_info *pi = kv_get_pi(adev); in kv_calculate_ds_divider()
2325 kv_get_sleep_divider_id_from_clock(adev, in kv_calculate_ds_divider()
2332 static int kv_calculate_nbps_level_settings(struct amdgpu_device *adev) in kv_calculate_nbps_level_settings() argument
2334 struct kv_power_info *pi = kv_get_pi(adev); in kv_calculate_nbps_level_settings()
2338 &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in kv_calculate_nbps_level_settings()
2344 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) { in kv_calculate_nbps_level_settings()
2355 (adev->pm.dpm.new_active_crtc_count >= 3) || pi->video_start); in kv_calculate_nbps_level_settings()
2386 static int kv_calculate_dpm_settings(struct amdgpu_device *adev) in kv_calculate_dpm_settings() argument
2388 struct kv_power_info *pi = kv_get_pi(adev); in kv_calculate_dpm_settings()
2400 static void kv_init_graphics_levels(struct amdgpu_device *adev) in kv_init_graphics_levels() argument
2402 struct kv_power_info *pi = kv_get_pi(adev); in kv_init_graphics_levels()
2405 &adev->pm.dpm.dyn_state.vddc_dependency_on_sclk; in kv_init_graphics_levels()
2414 kv_convert_8bit_index_to_voltage(adev, table->entries[i].v))) in kv_init_graphics_levels()
2417 kv_set_divider_value(adev, i, table->entries[i].clk); in kv_init_graphics_levels()
2418 vid_2bit = kv_convert_vid7_to_vid2(adev, in kv_init_graphics_levels()
2421 kv_set_vid(adev, i, vid_2bit); in kv_init_graphics_levels()
2422 kv_set_at(adev, i, pi->at[i]); in kv_init_graphics_levels()
2423 kv_dpm_power_level_enabled_for_throttle(adev, i, true); in kv_init_graphics_levels()
2434 kv_convert_2bit_index_to_voltage(adev, table->entries[i].vid_2bit)) in kv_init_graphics_levels()
2437 kv_set_divider_value(adev, i, table->entries[i].sclk_frequency); in kv_init_graphics_levels()
2438 kv_set_vid(adev, i, table->entries[i].vid_2bit); in kv_init_graphics_levels()
2439 kv_set_at(adev, i, pi->at[i]); in kv_init_graphics_levels()
2440 kv_dpm_power_level_enabled_for_throttle(adev, i, true); in kv_init_graphics_levels()
2446 kv_dpm_power_level_enable(adev, i, false); in kv_init_graphics_levels()
2449 static void kv_enable_new_levels(struct amdgpu_device *adev) in kv_enable_new_levels() argument
2451 struct kv_power_info *pi = kv_get_pi(adev); in kv_enable_new_levels()
2456 kv_dpm_power_level_enable(adev, i, true); in kv_enable_new_levels()
2460 static int kv_set_enabled_level(struct amdgpu_device *adev, u32 level) in kv_set_enabled_level() argument
2464 return amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_set_enabled_level()
2469 static int kv_set_enabled_levels(struct amdgpu_device *adev) in kv_set_enabled_levels() argument
2471 struct kv_power_info *pi = kv_get_pi(adev); in kv_set_enabled_levels()
2477 return amdgpu_kv_send_msg_to_smc_with_parameter(adev, in kv_set_enabled_levels()
2482 static void kv_program_nbps_index_settings(struct amdgpu_device *adev, in kv_program_nbps_index_settings() argument
2486 struct kv_power_info *pi = kv_get_pi(adev); in kv_program_nbps_index_settings()
2489 if (adev->asic_type == CHIP_KABINI || adev->asic_type == CHIP_MULLINS) in kv_program_nbps_index_settings()
2506 static int kv_set_thermal_temperature_range(struct amdgpu_device *adev, in kv_set_thermal_temperature_range() argument
2529 adev->pm.dpm.thermal.min_temp = low_temp; in kv_set_thermal_temperature_range()
2530 adev->pm.dpm.thermal.max_temp = high_temp; in kv_set_thermal_temperature_range()
2544 static int kv_parse_sys_info_table(struct amdgpu_device *adev) in kv_parse_sys_info_table() argument
2546 struct kv_power_info *pi = kv_get_pi(adev); in kv_parse_sys_info_table()
2547 struct amdgpu_mode_info *mode_info = &adev->mode_info; in kv_parse_sys_info_table()
2594 sumo_construct_sclk_voltage_mapping_table(adev, in kv_parse_sys_info_table()
2598 sumo_construct_vid_mapping_table(adev, in kv_parse_sys_info_table()
2602 kv_construct_max_power_limits_table(adev, in kv_parse_sys_info_table()
2603 &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac); in kv_parse_sys_info_table()
2629 static void kv_patch_boot_state(struct amdgpu_device *adev, in kv_patch_boot_state() argument
2632 struct kv_power_info *pi = kv_get_pi(adev); in kv_patch_boot_state()
2638 static void kv_parse_pplib_non_clock_info(struct amdgpu_device *adev, in kv_parse_pplib_non_clock_info() argument
2658 adev->pm.dpm.boot_ps = rps; in kv_parse_pplib_non_clock_info()
2659 kv_patch_boot_state(adev, ps); in kv_parse_pplib_non_clock_info()
2662 adev->pm.dpm.uvd_ps = rps; in kv_parse_pplib_non_clock_info()
2665 static void kv_parse_pplib_clock_info(struct amdgpu_device *adev, in kv_parse_pplib_clock_info() argument
2669 struct kv_power_info *pi = kv_get_pi(adev); in kv_parse_pplib_clock_info()
2687 static int kv_parse_power_table(struct amdgpu_device *adev) in kv_parse_power_table() argument
2689 struct amdgpu_mode_info *mode_info = &adev->mode_info; in kv_parse_power_table()
2709 amdgpu_add_thermal_controller(adev); in kv_parse_power_table()
2721 adev->pm.dpm.ps = kcalloc(state_array->ucNumEntries, in kv_parse_power_table()
2724 if (!adev->pm.dpm.ps) in kv_parse_power_table()
2736 adev->pm.dpm.ps[i].ps_priv = ps; in kv_parse_power_table()
2748 kv_parse_pplib_clock_info(adev, in kv_parse_power_table()
2749 &adev->pm.dpm.ps[i], k, in kv_parse_power_table()
2753 kv_parse_pplib_non_clock_info(adev, &adev->pm.dpm.ps[i], in kv_parse_power_table()
2758 adev->pm.dpm.num_ps = state_array->ucNumEntries; in kv_parse_power_table()
2761 for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) { in kv_parse_power_table()
2763 clock_array_index = adev->pm.dpm.vce_states[i].clk_idx; in kv_parse_power_table()
2768 adev->pm.dpm.vce_states[i].sclk = sclk; in kv_parse_power_table()
2769 adev->pm.dpm.vce_states[i].mclk = 0; in kv_parse_power_table()
2775 static int kv_dpm_init(struct amdgpu_device *adev) in kv_dpm_init() argument
2783 adev->pm.dpm.priv = pi; in kv_dpm_init()
2785 ret = amdgpu_get_platform_caps(adev); in kv_dpm_init()
2789 ret = amdgpu_parse_extended_power_table(adev); in kv_dpm_init()
2810 if (adev->pm.pp_feature & PP_SCLK_DEEP_SLEEP_MASK) in kv_dpm_init()
2824 pi->caps_uvd_pg = (adev->pg_flags & AMD_PG_SUPPORT_UVD) ? true : false; in kv_dpm_init()
2826 pi->caps_vce_pg = (adev->pg_flags & AMD_PG_SUPPORT_VCE) ? true : false; in kv_dpm_init()
2827 pi->caps_samu_pg = (adev->pg_flags & AMD_PG_SUPPORT_SAMU) ? true : false; in kv_dpm_init()
2828 pi->caps_acp_pg = (adev->pg_flags & AMD_PG_SUPPORT_ACP) ? true : false; in kv_dpm_init()
2831 ret = kv_parse_sys_info_table(adev); in kv_dpm_init()
2835 kv_patch_voltage_values(adev); in kv_dpm_init()
2836 kv_construct_boot_state(adev); in kv_dpm_init()
2838 ret = kv_parse_power_table(adev); in kv_dpm_init()
2851 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_debugfs_print_current_performance_level() local
2852 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_debugfs_print_current_performance_level()
2867 vddc = kv_convert_8bit_index_to_voltage(adev, (u16)tmp); in kv_dpm_debugfs_print_current_performance_level()
2881 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_print_power_state() local
2890 kv_convert_8bit_index_to_voltage(adev, pl->vddc_index)); in kv_dpm_print_power_state()
2892 amdgpu_dpm_print_ps_status(adev, rps); in kv_dpm_print_power_state()
2895 static void kv_dpm_fini(struct amdgpu_device *adev) in kv_dpm_fini() argument
2899 for (i = 0; i < adev->pm.dpm.num_ps; i++) { in kv_dpm_fini()
2900 kfree(adev->pm.dpm.ps[i].ps_priv); in kv_dpm_fini()
2902 kfree(adev->pm.dpm.ps); in kv_dpm_fini()
2903 kfree(adev->pm.dpm.priv); in kv_dpm_fini()
2904 amdgpu_free_extended_power_table(adev); in kv_dpm_fini()
2914 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_get_sclk() local
2915 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_get_sclk()
2926 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_get_mclk() local
2927 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_get_mclk()
2937 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_get_temp() local
2953 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_early_init() local
2955 adev->powerplay.pp_funcs = &kv_dpm_funcs; in kv_dpm_early_init()
2956 adev->powerplay.pp_handle = adev; in kv_dpm_early_init()
2957 kv_dpm_set_irq_funcs(adev); in kv_dpm_early_init()
2965 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_late_init() local
2967 if (!adev->pm.dpm_enabled) in kv_dpm_late_init()
2970 kv_dpm_powergate_acp(adev, true); in kv_dpm_late_init()
2971 kv_dpm_powergate_samu(adev, true); in kv_dpm_late_init()
2979 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_sw_init() local
2981 ret = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, 230, in kv_dpm_sw_init()
2982 &adev->pm.dpm.thermal.irq); in kv_dpm_sw_init()
2986 ret = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, 231, in kv_dpm_sw_init()
2987 &adev->pm.dpm.thermal.irq); in kv_dpm_sw_init()
2992 adev->pm.dpm.state = POWER_STATE_TYPE_BALANCED; in kv_dpm_sw_init()
2993 adev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED; in kv_dpm_sw_init()
2994 adev->pm.dpm.forced_level = AMD_DPM_FORCED_LEVEL_AUTO; in kv_dpm_sw_init()
2995 adev->pm.default_sclk = adev->clock.default_sclk; in kv_dpm_sw_init()
2996 adev->pm.default_mclk = adev->clock.default_mclk; in kv_dpm_sw_init()
2997 adev->pm.current_sclk = adev->clock.default_sclk; in kv_dpm_sw_init()
2998 adev->pm.current_mclk = adev->clock.default_mclk; in kv_dpm_sw_init()
2999 adev->pm.int_thermal_type = THERMAL_TYPE_NONE; in kv_dpm_sw_init()
3004 INIT_WORK(&adev->pm.dpm.thermal.work, amdgpu_dpm_thermal_work_handler); in kv_dpm_sw_init()
3005 mutex_lock(&adev->pm.mutex); in kv_dpm_sw_init()
3006 ret = kv_dpm_init(adev); in kv_dpm_sw_init()
3009 adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; in kv_dpm_sw_init()
3011 amdgpu_pm_print_power_states(adev); in kv_dpm_sw_init()
3012 mutex_unlock(&adev->pm.mutex); in kv_dpm_sw_init()
3018 kv_dpm_fini(adev); in kv_dpm_sw_init()
3019 mutex_unlock(&adev->pm.mutex); in kv_dpm_sw_init()
3026 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_sw_fini() local
3028 flush_work(&adev->pm.dpm.thermal.work); in kv_dpm_sw_fini()
3030 mutex_lock(&adev->pm.mutex); in kv_dpm_sw_fini()
3031 kv_dpm_fini(adev); in kv_dpm_sw_fini()
3032 mutex_unlock(&adev->pm.mutex); in kv_dpm_sw_fini()
3040 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_hw_init() local
3045 mutex_lock(&adev->pm.mutex); in kv_dpm_hw_init()
3046 kv_dpm_setup_asic(adev); in kv_dpm_hw_init()
3047 ret = kv_dpm_enable(adev); in kv_dpm_hw_init()
3049 adev->pm.dpm_enabled = false; in kv_dpm_hw_init()
3051 adev->pm.dpm_enabled = true; in kv_dpm_hw_init()
3052 mutex_unlock(&adev->pm.mutex); in kv_dpm_hw_init()
3053 amdgpu_pm_compute_clocks(adev); in kv_dpm_hw_init()
3059 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_hw_fini() local
3061 if (adev->pm.dpm_enabled) { in kv_dpm_hw_fini()
3062 mutex_lock(&adev->pm.mutex); in kv_dpm_hw_fini()
3063 kv_dpm_disable(adev); in kv_dpm_hw_fini()
3064 mutex_unlock(&adev->pm.mutex); in kv_dpm_hw_fini()
3072 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_suspend() local
3074 if (adev->pm.dpm_enabled) { in kv_dpm_suspend()
3075 mutex_lock(&adev->pm.mutex); in kv_dpm_suspend()
3077 kv_dpm_disable(adev); in kv_dpm_suspend()
3079 adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; in kv_dpm_suspend()
3080 mutex_unlock(&adev->pm.mutex); in kv_dpm_suspend()
3088 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_resume() local
3090 if (adev->pm.dpm_enabled) { in kv_dpm_resume()
3092 mutex_lock(&adev->pm.mutex); in kv_dpm_resume()
3093 kv_dpm_setup_asic(adev); in kv_dpm_resume()
3094 ret = kv_dpm_enable(adev); in kv_dpm_resume()
3096 adev->pm.dpm_enabled = false; in kv_dpm_resume()
3098 adev->pm.dpm_enabled = true; in kv_dpm_resume()
3099 mutex_unlock(&adev->pm.mutex); in kv_dpm_resume()
3100 if (adev->pm.dpm_enabled) in kv_dpm_resume()
3101 amdgpu_pm_compute_clocks(adev); in kv_dpm_resume()
3122 static int kv_dpm_set_interrupt_state(struct amdgpu_device *adev, in kv_dpm_set_interrupt_state() argument
3170 static int kv_dpm_process_interrupt(struct amdgpu_device *adev, in kv_dpm_process_interrupt() argument
3182 adev->pm.dpm.thermal.high_to_low = false; in kv_dpm_process_interrupt()
3187 adev->pm.dpm.thermal.high_to_low = true; in kv_dpm_process_interrupt()
3195 schedule_work(&adev->pm.dpm.thermal.work); in kv_dpm_process_interrupt()
3231 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_check_state_equal() local
3233 if (adev == NULL || cps == NULL || rps == NULL || equal == NULL) in kv_check_state_equal()
3267 struct amdgpu_device *adev = (struct amdgpu_device *)handle; in kv_dpm_read_sensor() local
3268 struct kv_power_info *pi = kv_get_pi(adev); in kv_dpm_read_sensor()
3290 *((uint32_t *)value) = kv_dpm_get_temp(adev); in kv_dpm_read_sensor()
3362 static void kv_dpm_set_irq_funcs(struct amdgpu_device *adev) in kv_dpm_set_irq_funcs() argument
3364 adev->pm.dpm.thermal.irq.num_types = AMDGPU_THERMAL_IRQ_LAST; in kv_dpm_set_irq_funcs()
3365 adev->pm.dpm.thermal.irq.funcs = &kv_dpm_irq_funcs; in kv_dpm_set_irq_funcs()