1 1.1 riastrad /* $NetBSD: smu_internal.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* 4 1.1 riastrad * Copyright 2019 Advanced Micro Devices, Inc. 5 1.1 riastrad * 6 1.1 riastrad * Permission is hereby granted, free of charge, to any person obtaining a 7 1.1 riastrad * copy of this software and associated documentation files (the "Software"), 8 1.1 riastrad * to deal in the Software without restriction, including without limitation 9 1.1 riastrad * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 1.1 riastrad * and/or sell copies of the Software, and to permit persons to whom the 11 1.1 riastrad * Software is furnished to do so, subject to the following conditions: 12 1.1 riastrad * 13 1.1 riastrad * The above copyright notice and this permission notice shall be included in 14 1.1 riastrad * all copies or substantial portions of the Software. 15 1.1 riastrad * 16 1.1 riastrad * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 1.1 riastrad * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 1.1 riastrad * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 1.1 riastrad * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 1.1 riastrad * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 1.1 riastrad * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 1.1 riastrad * OTHER DEALINGS IN THE SOFTWARE. 23 1.1 riastrad */ 24 1.1 riastrad 25 1.1 riastrad #ifndef __SMU_INTERNAL_H__ 26 1.1 riastrad #define __SMU_INTERNAL_H__ 27 1.1 riastrad 28 1.1 riastrad #include "amdgpu_smu.h" 29 1.1 riastrad 30 1.1 riastrad #define smu_init_microcode(smu) \ 31 1.1 riastrad ((smu)->ppt_funcs->init_microcode ? (smu)->ppt_funcs->init_microcode((smu)) : 0) 32 1.1 riastrad #define smu_init_smc_tables(smu) \ 33 1.1 riastrad ((smu)->ppt_funcs->init_smc_tables ? (smu)->ppt_funcs->init_smc_tables((smu)) : 0) 34 1.1 riastrad #define smu_fini_smc_tables(smu) \ 35 1.1 riastrad ((smu)->ppt_funcs->fini_smc_tables ? (smu)->ppt_funcs->fini_smc_tables((smu)) : 0) 36 1.1 riastrad #define smu_init_power(smu) \ 37 1.1 riastrad ((smu)->ppt_funcs->init_power ? (smu)->ppt_funcs->init_power((smu)) : 0) 38 1.1 riastrad #define smu_fini_power(smu) \ 39 1.1 riastrad ((smu)->ppt_funcs->fini_power ? (smu)->ppt_funcs->fini_power((smu)) : 0) 40 1.1 riastrad 41 1.1 riastrad #define smu_setup_pptable(smu) \ 42 1.1 riastrad ((smu)->ppt_funcs->setup_pptable ? (smu)->ppt_funcs->setup_pptable((smu)) : 0) 43 1.1 riastrad #define smu_powergate_sdma(smu, gate) \ 44 1.1 riastrad ((smu)->ppt_funcs->powergate_sdma ? (smu)->ppt_funcs->powergate_sdma((smu), (gate)) : 0) 45 1.1 riastrad #define smu_powergate_vcn(smu, gate) \ 46 1.1 riastrad ((smu)->ppt_funcs->powergate_vcn ? (smu)->ppt_funcs->powergate_vcn((smu), (gate)) : 0) 47 1.1 riastrad #define smu_powergate_jpeg(smu, gate) \ 48 1.1 riastrad ((smu)->ppt_funcs->powergate_jpeg ? (smu)->ppt_funcs->powergate_jpeg((smu), (gate)) : 0) 49 1.1 riastrad 50 1.1 riastrad #define smu_get_vbios_bootup_values(smu) \ 51 1.1 riastrad ((smu)->ppt_funcs->get_vbios_bootup_values ? (smu)->ppt_funcs->get_vbios_bootup_values((smu)) : 0) 52 1.1 riastrad #define smu_get_clk_info_from_vbios(smu) \ 53 1.1 riastrad ((smu)->ppt_funcs->get_clk_info_from_vbios ? (smu)->ppt_funcs->get_clk_info_from_vbios((smu)) : 0) 54 1.1 riastrad #define smu_check_pptable(smu) \ 55 1.1 riastrad ((smu)->ppt_funcs->check_pptable ? (smu)->ppt_funcs->check_pptable((smu)) : 0) 56 1.1 riastrad #define smu_parse_pptable(smu) \ 57 1.1 riastrad ((smu)->ppt_funcs->parse_pptable ? (smu)->ppt_funcs->parse_pptable((smu)) : 0) 58 1.1 riastrad #define smu_populate_smc_tables(smu) \ 59 1.1 riastrad ((smu)->ppt_funcs->populate_smc_tables ? (smu)->ppt_funcs->populate_smc_tables((smu)) : 0) 60 1.1 riastrad #define smu_check_fw_version(smu) \ 61 1.1 riastrad ((smu)->ppt_funcs->check_fw_version ? (smu)->ppt_funcs->check_fw_version((smu)) : 0) 62 1.1 riastrad #define smu_write_pptable(smu) \ 63 1.1 riastrad ((smu)->ppt_funcs->write_pptable ? (smu)->ppt_funcs->write_pptable((smu)) : 0) 64 1.1 riastrad #define smu_set_min_dcef_deep_sleep(smu) \ 65 1.1 riastrad ((smu)->ppt_funcs->set_min_dcef_deep_sleep ? (smu)->ppt_funcs->set_min_dcef_deep_sleep((smu)) : 0) 66 1.1 riastrad #define smu_set_driver_table_location(smu) \ 67 1.1 riastrad ((smu)->ppt_funcs->set_driver_table_location ? (smu)->ppt_funcs->set_driver_table_location((smu)) : 0) 68 1.1 riastrad #define smu_set_tool_table_location(smu) \ 69 1.1 riastrad ((smu)->ppt_funcs->set_tool_table_location ? (smu)->ppt_funcs->set_tool_table_location((smu)) : 0) 70 1.1 riastrad #define smu_notify_memory_pool_location(smu) \ 71 1.1 riastrad ((smu)->ppt_funcs->notify_memory_pool_location ? (smu)->ppt_funcs->notify_memory_pool_location((smu)) : 0) 72 1.1 riastrad #define smu_gfx_off_control(smu, enable) \ 73 1.1 riastrad ((smu)->ppt_funcs->gfx_off_control ? (smu)->ppt_funcs->gfx_off_control((smu), (enable)) : 0) 74 1.1 riastrad 75 1.1 riastrad #define smu_set_last_dcef_min_deep_sleep_clk(smu) \ 76 1.1 riastrad ((smu)->ppt_funcs->set_last_dcef_min_deep_sleep_clk ? (smu)->ppt_funcs->set_last_dcef_min_deep_sleep_clk((smu)) : 0) 77 1.1 riastrad #define smu_system_features_control(smu, en) \ 78 1.1 riastrad ((smu)->ppt_funcs->system_features_control ? (smu)->ppt_funcs->system_features_control((smu), (en)) : 0) 79 1.1 riastrad #define smu_init_max_sustainable_clocks(smu) \ 80 1.1 riastrad ((smu)->ppt_funcs->init_max_sustainable_clocks ? (smu)->ppt_funcs->init_max_sustainable_clocks((smu)) : 0) 81 1.1 riastrad #define smu_set_default_od_settings(smu, initialize) \ 82 1.1 riastrad ((smu)->ppt_funcs->set_default_od_settings ? (smu)->ppt_funcs->set_default_od_settings((smu), (initialize)) : 0) 83 1.1 riastrad 84 1.1 riastrad int smu_send_smc_msg(struct smu_context *smu, enum smu_message_type msg); 85 1.1 riastrad 86 1.1 riastrad #define smu_send_smc_msg_with_param(smu, msg, param) \ 87 1.1 riastrad ((smu)->ppt_funcs->send_smc_msg_with_param? (smu)->ppt_funcs->send_smc_msg_with_param((smu), (msg), (param)) : 0) 88 1.1 riastrad #define smu_read_smc_arg(smu, arg) \ 89 1.1 riastrad ((smu)->ppt_funcs->read_smc_arg? (smu)->ppt_funcs->read_smc_arg((smu), (arg)) : 0) 90 1.1 riastrad #define smu_alloc_dpm_context(smu) \ 91 1.1 riastrad ((smu)->ppt_funcs->alloc_dpm_context ? (smu)->ppt_funcs->alloc_dpm_context((smu)) : 0) 92 1.1 riastrad #define smu_init_display_count(smu, count) \ 93 1.1 riastrad ((smu)->ppt_funcs->init_display_count ? (smu)->ppt_funcs->init_display_count((smu), (count)) : 0) 94 1.1 riastrad #define smu_feature_set_allowed_mask(smu) \ 95 1.1 riastrad ((smu)->ppt_funcs->set_allowed_mask? (smu)->ppt_funcs->set_allowed_mask((smu)) : 0) 96 1.1 riastrad #define smu_feature_get_enabled_mask(smu, mask, num) \ 97 1.1 riastrad ((smu)->ppt_funcs->get_enabled_mask? (smu)->ppt_funcs->get_enabled_mask((smu), (mask), (num)) : 0) 98 1.1 riastrad #define smu_is_dpm_running(smu) \ 99 1.1 riastrad ((smu)->ppt_funcs->is_dpm_running ? (smu)->ppt_funcs->is_dpm_running((smu)) : 0) 100 1.1 riastrad #define smu_notify_display_change(smu) \ 101 1.1 riastrad ((smu)->ppt_funcs->notify_display_change? (smu)->ppt_funcs->notify_display_change((smu)) : 0) 102 1.1 riastrad #define smu_store_powerplay_table(smu) \ 103 1.1 riastrad ((smu)->ppt_funcs->store_powerplay_table ? (smu)->ppt_funcs->store_powerplay_table((smu)) : 0) 104 1.1 riastrad #define smu_check_powerplay_table(smu) \ 105 1.1 riastrad ((smu)->ppt_funcs->check_powerplay_table ? (smu)->ppt_funcs->check_powerplay_table((smu)) : 0) 106 1.1 riastrad #define smu_append_powerplay_table(smu) \ 107 1.1 riastrad ((smu)->ppt_funcs->append_powerplay_table ? (smu)->ppt_funcs->append_powerplay_table((smu)) : 0) 108 1.1 riastrad #define smu_set_default_dpm_table(smu) \ 109 1.1 riastrad ((smu)->ppt_funcs->set_default_dpm_table ? (smu)->ppt_funcs->set_default_dpm_table((smu)) : 0) 110 1.1 riastrad #define smu_populate_umd_state_clk(smu) \ 111 1.1 riastrad ((smu)->ppt_funcs->populate_umd_state_clk ? (smu)->ppt_funcs->populate_umd_state_clk((smu)) : 0) 112 1.1 riastrad #define smu_set_default_od8_settings(smu) \ 113 1.1 riastrad ((smu)->ppt_funcs->set_default_od8_settings ? (smu)->ppt_funcs->set_default_od8_settings((smu)) : 0) 114 1.1 riastrad 115 1.1 riastrad #define smu_get_current_clk_freq(smu, clk_id, value) \ 116 1.1 riastrad ((smu)->ppt_funcs->get_current_clk_freq? (smu)->ppt_funcs->get_current_clk_freq((smu), (clk_id), (value)) : 0) 117 1.1 riastrad 118 1.1 riastrad #define smu_tables_init(smu, tab) \ 119 1.1 riastrad ((smu)->ppt_funcs->tables_init ? (smu)->ppt_funcs->tables_init((smu), (tab)) : 0) 120 1.1 riastrad #define smu_set_thermal_fan_table(smu) \ 121 1.1 riastrad ((smu)->ppt_funcs->set_thermal_fan_table ? (smu)->ppt_funcs->set_thermal_fan_table((smu)) : 0) 122 1.1 riastrad #define smu_start_thermal_control(smu) \ 123 1.1 riastrad ((smu)->ppt_funcs->start_thermal_control? (smu)->ppt_funcs->start_thermal_control((smu)) : 0) 124 1.1 riastrad #define smu_stop_thermal_control(smu) \ 125 1.1 riastrad ((smu)->ppt_funcs->stop_thermal_control? (smu)->ppt_funcs->stop_thermal_control((smu)) : 0) 126 1.1 riastrad 127 1.1 riastrad #define smu_smc_read_sensor(smu, sensor, data, size) \ 128 1.1 riastrad ((smu)->ppt_funcs->read_sensor? (smu)->ppt_funcs->read_sensor((smu), (sensor), (data), (size)) : -EINVAL) 129 1.1 riastrad 130 1.1 riastrad #define smu_pre_display_config_changed(smu) \ 131 1.1 riastrad ((smu)->ppt_funcs->pre_display_config_changed ? (smu)->ppt_funcs->pre_display_config_changed((smu)) : 0) 132 1.1 riastrad #define smu_display_config_changed(smu) \ 133 1.1 riastrad ((smu)->ppt_funcs->display_config_changed ? (smu)->ppt_funcs->display_config_changed((smu)) : 0) 134 1.1 riastrad #define smu_apply_clocks_adjust_rules(smu) \ 135 1.1 riastrad ((smu)->ppt_funcs->apply_clocks_adjust_rules ? (smu)->ppt_funcs->apply_clocks_adjust_rules((smu)) : 0) 136 1.1 riastrad #define smu_notify_smc_display_config(smu) \ 137 1.1 riastrad ((smu)->ppt_funcs->notify_smc_display_config ? (smu)->ppt_funcs->notify_smc_display_config((smu)) : 0) 138 1.1 riastrad #define smu_force_dpm_limit_value(smu, highest) \ 139 1.1 riastrad ((smu)->ppt_funcs->force_dpm_limit_value ? (smu)->ppt_funcs->force_dpm_limit_value((smu), (highest)) : 0) 140 1.1 riastrad #define smu_unforce_dpm_levels(smu) \ 141 1.1 riastrad ((smu)->ppt_funcs->unforce_dpm_levels ? (smu)->ppt_funcs->unforce_dpm_levels((smu)) : 0) 142 1.1 riastrad #define smu_get_profiling_clk_mask(smu, level, sclk_mask, mclk_mask, soc_mask) \ 143 1.1 riastrad ((smu)->ppt_funcs->get_profiling_clk_mask ? (smu)->ppt_funcs->get_profiling_clk_mask((smu), (level), (sclk_mask), (mclk_mask), (soc_mask)) : 0) 144 1.1 riastrad #define smu_set_cpu_power_state(smu) \ 145 1.1 riastrad ((smu)->ppt_funcs->set_cpu_power_state ? (smu)->ppt_funcs->set_cpu_power_state((smu)) : 0) 146 1.1 riastrad 147 1.1 riastrad #define smu_msg_get_index(smu, msg) \ 148 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_smu_msg_index? (smu)->ppt_funcs->get_smu_msg_index((smu), (msg)) : -EINVAL) : -EINVAL) 149 1.1 riastrad #define smu_clk_get_index(smu, msg) \ 150 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_smu_clk_index? (smu)->ppt_funcs->get_smu_clk_index((smu), (msg)) : -EINVAL) : -EINVAL) 151 1.1 riastrad #define smu_feature_get_index(smu, msg) \ 152 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_smu_feature_index? (smu)->ppt_funcs->get_smu_feature_index((smu), (msg)) : -EINVAL) : -EINVAL) 153 1.1 riastrad #define smu_table_get_index(smu, tab) \ 154 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_smu_table_index? (smu)->ppt_funcs->get_smu_table_index((smu), (tab)) : -EINVAL) : -EINVAL) 155 1.1 riastrad #define smu_power_get_index(smu, src) \ 156 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_smu_power_index? (smu)->ppt_funcs->get_smu_power_index((smu), (src)) : -EINVAL) : -EINVAL) 157 1.1 riastrad #define smu_workload_get_type(smu, profile) \ 158 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_workload_type? (smu)->ppt_funcs->get_workload_type((smu), (profile)) : -EINVAL) : -EINVAL) 159 1.1 riastrad #define smu_run_btc(smu) \ 160 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->run_btc? (smu)->ppt_funcs->run_btc((smu)) : 0) : 0) 161 1.1 riastrad #define smu_get_allowed_feature_mask(smu, feature_mask, num) \ 162 1.1 riastrad ((smu)->ppt_funcs? ((smu)->ppt_funcs->get_allowed_feature_mask? (smu)->ppt_funcs->get_allowed_feature_mask((smu), (feature_mask), (num)) : 0) : 0) 163 1.1 riastrad 164 1.1 riastrad 165 1.1 riastrad #define smu_store_cc6_data(smu, st, cc6_dis, pst_dis, pst_sw_dis) \ 166 1.1 riastrad ((smu)->ppt_funcs->store_cc6_data ? (smu)->ppt_funcs->store_cc6_data((smu), (st), (cc6_dis), (pst_dis), (pst_sw_dis)) : 0) 167 1.1 riastrad 168 1.1 riastrad #define smu_get_dal_power_level(smu, clocks) \ 169 1.1 riastrad ((smu)->ppt_funcs->get_dal_power_level ? (smu)->ppt_funcs->get_dal_power_level((smu), (clocks)) : 0) 170 1.1 riastrad #define smu_get_perf_level(smu, designation, level) \ 171 1.1 riastrad ((smu)->ppt_funcs->get_perf_level ? (smu)->ppt_funcs->get_perf_level((smu), (designation), (level)) : 0) 172 1.1 riastrad #define smu_get_current_shallow_sleep_clocks(smu, clocks) \ 173 1.1 riastrad ((smu)->ppt_funcs->get_current_shallow_sleep_clocks ? (smu)->ppt_funcs->get_current_shallow_sleep_clocks((smu), (clocks)) : 0) 174 1.1 riastrad 175 1.1 riastrad #define smu_dpm_set_uvd_enable(smu, enable) \ 176 1.1 riastrad ((smu)->ppt_funcs->dpm_set_uvd_enable ? (smu)->ppt_funcs->dpm_set_uvd_enable((smu), (enable)) : 0) 177 1.1 riastrad #define smu_dpm_set_vce_enable(smu, enable) \ 178 1.1 riastrad ((smu)->ppt_funcs->dpm_set_vce_enable ? (smu)->ppt_funcs->dpm_set_vce_enable((smu), (enable)) : 0) 179 1.1 riastrad #define smu_dpm_set_jpeg_enable(smu, enable) \ 180 1.1 riastrad ((smu)->ppt_funcs->dpm_set_jpeg_enable ? (smu)->ppt_funcs->dpm_set_jpeg_enable((smu), (enable)) : 0) 181 1.1 riastrad 182 1.1 riastrad #define smu_set_watermarks_table(smu, tab, clock_ranges) \ 183 1.1 riastrad ((smu)->ppt_funcs->set_watermarks_table ? (smu)->ppt_funcs->set_watermarks_table((smu), (tab), (clock_ranges)) : 0) 184 1.1 riastrad #define smu_get_current_clk_freq_by_table(smu, clk_type, value) \ 185 1.1 riastrad ((smu)->ppt_funcs->get_current_clk_freq_by_table ? (smu)->ppt_funcs->get_current_clk_freq_by_table((smu), (clk_type), (value)) : 0) 186 1.1 riastrad #define smu_thermal_temperature_range_update(smu, range, rw) \ 187 1.1 riastrad ((smu)->ppt_funcs->thermal_temperature_range_update? (smu)->ppt_funcs->thermal_temperature_range_update((smu), (range), (rw)) : 0) 188 1.1 riastrad #define smu_get_thermal_temperature_range(smu, range) \ 189 1.1 riastrad ((smu)->ppt_funcs->get_thermal_temperature_range? (smu)->ppt_funcs->get_thermal_temperature_range((smu), (range)) : 0) 190 1.1 riastrad #define smu_register_irq_handler(smu) \ 191 1.1 riastrad ((smu)->ppt_funcs->register_irq_handler ? (smu)->ppt_funcs->register_irq_handler(smu) : 0) 192 1.1 riastrad 193 1.1 riastrad #define smu_get_dpm_ultimate_freq(smu, param, min, max) \ 194 1.1 riastrad ((smu)->ppt_funcs->get_dpm_ultimate_freq ? (smu)->ppt_funcs->get_dpm_ultimate_freq((smu), (param), (min), (max)) : 0) 195 1.1 riastrad 196 1.1 riastrad #define smu_asic_set_performance_level(smu, level) \ 197 1.1 riastrad ((smu)->ppt_funcs->set_performance_level? (smu)->ppt_funcs->set_performance_level((smu), (level)) : -EINVAL); 198 1.1 riastrad #define smu_dump_pptable(smu) \ 199 1.1 riastrad ((smu)->ppt_funcs->dump_pptable ? (smu)->ppt_funcs->dump_pptable((smu)) : 0) 200 1.1 riastrad #define smu_get_dpm_clk_limited(smu, clk_type, dpm_level, freq) \ 201 1.1 riastrad ((smu)->ppt_funcs->get_dpm_clk_limited ? (smu)->ppt_funcs->get_dpm_clk_limited((smu), (clk_type), (dpm_level), (freq)) : -EINVAL) 202 1.1 riastrad 203 1.1 riastrad #define smu_set_soft_freq_limited_range(smu, clk_type, min, max) \ 204 1.1 riastrad ((smu)->ppt_funcs->set_soft_freq_limited_range ? (smu)->ppt_funcs->set_soft_freq_limited_range((smu), (clk_type), (min), (max)) : -EINVAL) 205 1.1 riastrad 206 1.1 riastrad #define smu_override_pcie_parameters(smu) \ 207 1.1 riastrad ((smu)->ppt_funcs->override_pcie_parameters ? (smu)->ppt_funcs->override_pcie_parameters((smu)) : 0) 208 1.1 riastrad 209 1.1 riastrad #define smu_update_pcie_parameters(smu, pcie_gen_cap, pcie_width_cap) \ 210 1.1 riastrad ((smu)->ppt_funcs->update_pcie_parameters ? (smu)->ppt_funcs->update_pcie_parameters((smu), (pcie_gen_cap), (pcie_width_cap)) : 0) 211 1.1 riastrad 212 1.1 riastrad #define smu_disable_umc_cdr_12gbps_workaround(smu) \ 213 1.1 riastrad ((smu)->ppt_funcs->disable_umc_cdr_12gbps_workaround ? (smu)->ppt_funcs->disable_umc_cdr_12gbps_workaround((smu)) : 0) 214 1.1 riastrad 215 1.1 riastrad #endif 216