12cac05deSEvan Quan /* 22cac05deSEvan Quan * Copyright 2017 Advanced Micro Devices, Inc. 32cac05deSEvan Quan * 42cac05deSEvan Quan * Permission is hereby granted, free of charge, to any person obtaining a 52cac05deSEvan Quan * copy of this software and associated documentation files (the "Software"), 62cac05deSEvan Quan * to deal in the Software without restriction, including without limitation 72cac05deSEvan Quan * the rights to use, copy, modify, merge, publish, distribute, sublicense, 82cac05deSEvan Quan * and/or sell copies of the Software, and to permit persons to whom the 92cac05deSEvan Quan * Software is furnished to do so, subject to the following conditions: 102cac05deSEvan Quan * 112cac05deSEvan Quan * The above copyright notice and this permission notice shall be included in 122cac05deSEvan Quan * all copies or substantial portions of the Software. 132cac05deSEvan Quan * 142cac05deSEvan Quan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 152cac05deSEvan Quan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 162cac05deSEvan Quan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 172cac05deSEvan Quan * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 182cac05deSEvan Quan * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 192cac05deSEvan Quan * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 202cac05deSEvan Quan * OTHER DEALINGS IN THE SOFTWARE. 212cac05deSEvan Quan * 222cac05deSEvan Quan */ 232cac05deSEvan Quan 242cac05deSEvan Quan #ifndef _VEGA12_HWMGR_H_ 252cac05deSEvan Quan #define _VEGA12_HWMGR_H_ 262cac05deSEvan Quan 272cac05deSEvan Quan #include "hwmgr.h" 282cac05deSEvan Quan #include "vega12/smu9_driver_if.h" 292cac05deSEvan Quan #include "ppatomfwctrl.h" 302cac05deSEvan Quan 312cac05deSEvan Quan #define VEGA12_MAX_HARDWARE_POWERLEVELS 2 322cac05deSEvan Quan 332cac05deSEvan Quan #define WaterMarksExist 1 342cac05deSEvan Quan #define WaterMarksLoaded 2 352cac05deSEvan Quan 36564be2fcSKenneth Feng #define VG12_PSUEDO_NUM_GFXCLK_DPM_LEVELS 16 372cac05deSEvan Quan #define VG12_PSUEDO_NUM_SOCCLK_DPM_LEVELS 8 382cac05deSEvan Quan #define VG12_PSUEDO_NUM_DCEFCLK_DPM_LEVELS 8 392cac05deSEvan Quan #define VG12_PSUEDO_NUM_UCLK_DPM_LEVELS 4 402cac05deSEvan Quan 41485e3fe8SRan Sun enum { 422cac05deSEvan Quan GNLD_DPM_PREFETCHER = 0, 432cac05deSEvan Quan GNLD_DPM_GFXCLK, 442cac05deSEvan Quan GNLD_DPM_UCLK, 452cac05deSEvan Quan GNLD_DPM_SOCCLK, 462cac05deSEvan Quan GNLD_DPM_UVD, 472cac05deSEvan Quan GNLD_DPM_VCE, 482cac05deSEvan Quan GNLD_ULV, 492cac05deSEvan Quan GNLD_DPM_MP0CLK, 502cac05deSEvan Quan GNLD_DPM_LINK, 512cac05deSEvan Quan GNLD_DPM_DCEFCLK, 522cac05deSEvan Quan GNLD_DS_GFXCLK, 532cac05deSEvan Quan GNLD_DS_SOCCLK, 542cac05deSEvan Quan GNLD_DS_LCLK, 552cac05deSEvan Quan GNLD_PPT, 562cac05deSEvan Quan GNLD_TDC, 572cac05deSEvan Quan GNLD_THERMAL, 582cac05deSEvan Quan GNLD_GFX_PER_CU_CG, 592cac05deSEvan Quan GNLD_RM, 602cac05deSEvan Quan GNLD_DS_DCEFCLK, 612cac05deSEvan Quan GNLD_ACDC, 622cac05deSEvan Quan GNLD_VR0HOT, 632cac05deSEvan Quan GNLD_VR1HOT, 642cac05deSEvan Quan GNLD_FW_CTF, 652cac05deSEvan Quan GNLD_LED_DISPLAY, 662cac05deSEvan Quan GNLD_FAN_CONTROL, 672cac05deSEvan Quan GNLD_DIDT, 682cac05deSEvan Quan GNLD_GFXOFF, 692cac05deSEvan Quan GNLD_CG, 702cac05deSEvan Quan GNLD_ACG, 712cac05deSEvan Quan 722cac05deSEvan Quan GNLD_FEATURES_MAX 732cac05deSEvan Quan }; 742cac05deSEvan Quan 752cac05deSEvan Quan 762cac05deSEvan Quan #define GNLD_DPM_MAX (GNLD_DPM_DCEFCLK + 1) 772cac05deSEvan Quan 782cac05deSEvan Quan #define SMC_DPM_FEATURES 0x30F 792cac05deSEvan Quan 802cac05deSEvan Quan struct smu_features { 812cac05deSEvan Quan bool supported; 822cac05deSEvan Quan bool enabled; 832cac05deSEvan Quan bool allowed; 842cac05deSEvan Quan uint32_t smu_feature_id; 852cac05deSEvan Quan uint64_t smu_feature_bitmap; 862cac05deSEvan Quan }; 872cac05deSEvan Quan 882cac05deSEvan Quan struct vega12_dpm_level { 892cac05deSEvan Quan bool enabled; 902cac05deSEvan Quan uint32_t value; 912cac05deSEvan Quan uint32_t param1; 922cac05deSEvan Quan }; 932cac05deSEvan Quan 942cac05deSEvan Quan #define VEGA12_MAX_DEEPSLEEP_DIVIDER_ID 5 957436854eSKenneth Feng #define MAX_REGULAR_DPM_NUMBER 16 962cac05deSEvan Quan #define MAX_PCIE_CONF 2 972cac05deSEvan Quan #define VEGA12_MINIMUM_ENGINE_CLOCK 2500 982cac05deSEvan Quan 992cac05deSEvan Quan struct vega12_dpm_state { 1002cac05deSEvan Quan uint32_t soft_min_level; 1012cac05deSEvan Quan uint32_t soft_max_level; 1022cac05deSEvan Quan uint32_t hard_min_level; 1032cac05deSEvan Quan uint32_t hard_max_level; 1042cac05deSEvan Quan }; 1052cac05deSEvan Quan 1062cac05deSEvan Quan struct vega12_single_dpm_table { 1072cac05deSEvan Quan uint32_t count; 1082cac05deSEvan Quan struct vega12_dpm_state dpm_state; 1092cac05deSEvan Quan struct vega12_dpm_level dpm_levels[MAX_REGULAR_DPM_NUMBER]; 1102cac05deSEvan Quan }; 1112cac05deSEvan Quan 1122cac05deSEvan Quan struct vega12_odn_dpm_control { 1132cac05deSEvan Quan uint32_t count; 1142cac05deSEvan Quan uint32_t entries[MAX_REGULAR_DPM_NUMBER]; 1152cac05deSEvan Quan }; 1162cac05deSEvan Quan 1172cac05deSEvan Quan struct vega12_pcie_table { 1182cac05deSEvan Quan uint16_t count; 1192cac05deSEvan Quan uint8_t pcie_gen[MAX_PCIE_CONF]; 1202cac05deSEvan Quan uint8_t pcie_lane[MAX_PCIE_CONF]; 1212cac05deSEvan Quan uint32_t lclk[MAX_PCIE_CONF]; 1222cac05deSEvan Quan }; 1232cac05deSEvan Quan 1242cac05deSEvan Quan struct vega12_dpm_table { 1252cac05deSEvan Quan struct vega12_single_dpm_table soc_table; 1262cac05deSEvan Quan struct vega12_single_dpm_table gfx_table; 1272cac05deSEvan Quan struct vega12_single_dpm_table mem_table; 1282cac05deSEvan Quan struct vega12_single_dpm_table eclk_table; 1292cac05deSEvan Quan struct vega12_single_dpm_table vclk_table; 1302cac05deSEvan Quan struct vega12_single_dpm_table dclk_table; 1312cac05deSEvan Quan struct vega12_single_dpm_table dcef_table; 1322cac05deSEvan Quan struct vega12_single_dpm_table pixel_table; 1332cac05deSEvan Quan struct vega12_single_dpm_table display_table; 1342cac05deSEvan Quan struct vega12_single_dpm_table phy_table; 1352cac05deSEvan Quan struct vega12_pcie_table pcie_table; 1362cac05deSEvan Quan }; 1372cac05deSEvan Quan 1382cac05deSEvan Quan #define VEGA12_MAX_LEAKAGE_COUNT 8 1392cac05deSEvan Quan struct vega12_leakage_voltage { 1402cac05deSEvan Quan uint16_t count; 1412cac05deSEvan Quan uint16_t leakage_id[VEGA12_MAX_LEAKAGE_COUNT]; 1422cac05deSEvan Quan uint16_t actual_voltage[VEGA12_MAX_LEAKAGE_COUNT]; 1432cac05deSEvan Quan }; 1442cac05deSEvan Quan 1452cac05deSEvan Quan struct vega12_display_timing { 1462cac05deSEvan Quan uint32_t min_clock_in_sr; 1472cac05deSEvan Quan uint32_t num_existing_displays; 1482cac05deSEvan Quan }; 1492cac05deSEvan Quan 1502cac05deSEvan Quan struct vega12_dpmlevel_enable_mask { 1512cac05deSEvan Quan uint32_t uvd_dpm_enable_mask; 1522cac05deSEvan Quan uint32_t vce_dpm_enable_mask; 1532cac05deSEvan Quan uint32_t samu_dpm_enable_mask; 1542cac05deSEvan Quan uint32_t sclk_dpm_enable_mask; 1552cac05deSEvan Quan uint32_t mclk_dpm_enable_mask; 1562cac05deSEvan Quan }; 1572cac05deSEvan Quan 1582cac05deSEvan Quan struct vega12_vbios_boot_state { 1592cac05deSEvan Quan bool bsoc_vddc_lock; 1602cac05deSEvan Quan uint8_t uc_cooling_id; 1612cac05deSEvan Quan uint16_t vddc; 1622cac05deSEvan Quan uint16_t vddci; 1632cac05deSEvan Quan uint16_t mvddc; 1642cac05deSEvan Quan uint16_t vdd_gfx; 1652cac05deSEvan Quan uint32_t gfx_clock; 1662cac05deSEvan Quan uint32_t mem_clock; 1672cac05deSEvan Quan uint32_t soc_clock; 1682cac05deSEvan Quan uint32_t dcef_clock; 169acee16f4SEvan Quan uint32_t eclock; 170acee16f4SEvan Quan uint32_t dclock; 171acee16f4SEvan Quan uint32_t vclock; 1722cac05deSEvan Quan }; 1732cac05deSEvan Quan 1742cac05deSEvan Quan #define DPMTABLE_OD_UPDATE_SCLK 0x00000001 1752cac05deSEvan Quan #define DPMTABLE_OD_UPDATE_MCLK 0x00000002 1762cac05deSEvan Quan #define DPMTABLE_UPDATE_SCLK 0x00000004 1772cac05deSEvan Quan #define DPMTABLE_UPDATE_MCLK 0x00000008 1782cac05deSEvan Quan #define DPMTABLE_OD_UPDATE_VDDC 0x00000010 1792cac05deSEvan Quan 1802cac05deSEvan Quan struct vega12_smc_state_table { 1812cac05deSEvan Quan uint32_t soc_boot_level; 1822cac05deSEvan Quan uint32_t gfx_boot_level; 1832cac05deSEvan Quan uint32_t dcef_boot_level; 1842cac05deSEvan Quan uint32_t mem_boot_level; 1852cac05deSEvan Quan uint32_t uvd_boot_level; 1862cac05deSEvan Quan uint32_t vce_boot_level; 1872cac05deSEvan Quan uint32_t gfx_max_level; 1882cac05deSEvan Quan uint32_t mem_max_level; 1892cac05deSEvan Quan uint8_t vr_hot_gpio; 1902cac05deSEvan Quan uint8_t ac_dc_gpio; 1912cac05deSEvan Quan uint8_t therm_out_gpio; 1922cac05deSEvan Quan uint8_t therm_out_polarity; 1932cac05deSEvan Quan uint8_t therm_out_mode; 1942cac05deSEvan Quan PPTable_t pp_table; 1952cac05deSEvan Quan Watermarks_t water_marks_table; 1962cac05deSEvan Quan AvfsDebugTable_t avfs_debug_table; 1972cac05deSEvan Quan AvfsFuseOverride_t avfs_fuse_override_table; 1982cac05deSEvan Quan SmuMetrics_t smu_metrics; 1992cac05deSEvan Quan DriverSmuConfig_t driver_smu_config; 2002cac05deSEvan Quan DpmActivityMonitorCoeffInt_t dpm_activity_monitor_coeffint; 2012cac05deSEvan Quan OverDriveTable_t overdrive_table; 2022cac05deSEvan Quan }; 2032cac05deSEvan Quan 2042cac05deSEvan Quan struct vega12_mclk_latency_entries { 2052cac05deSEvan Quan uint32_t frequency; 2062cac05deSEvan Quan uint32_t latency; 2072cac05deSEvan Quan }; 2082cac05deSEvan Quan 2092cac05deSEvan Quan struct vega12_mclk_latency_table { 2102cac05deSEvan Quan uint32_t count; 2112cac05deSEvan Quan struct vega12_mclk_latency_entries entries[MAX_REGULAR_DPM_NUMBER]; 2122cac05deSEvan Quan }; 2132cac05deSEvan Quan 2142cac05deSEvan Quan struct vega12_registry_data { 2152cac05deSEvan Quan uint64_t disallowed_features; 2162cac05deSEvan Quan uint8_t ac_dc_switch_gpio_support; 2172cac05deSEvan Quan uint8_t acg_loop_support; 2182cac05deSEvan Quan uint8_t clock_stretcher_support; 2192cac05deSEvan Quan uint8_t db_ramping_support; 2202cac05deSEvan Quan uint8_t didt_mode; 2212cac05deSEvan Quan uint8_t didt_support; 2222cac05deSEvan Quan uint8_t edc_didt_support; 2232cac05deSEvan Quan uint8_t force_dpm_high; 2242cac05deSEvan Quan uint8_t fuzzy_fan_control_support; 2252cac05deSEvan Quan uint8_t mclk_dpm_key_disabled; 2262cac05deSEvan Quan uint8_t od_state_in_dc_support; 2272cac05deSEvan Quan uint8_t pcie_lane_override; 2282cac05deSEvan Quan uint8_t pcie_speed_override; 2292cac05deSEvan Quan uint32_t pcie_clock_override; 2302cac05deSEvan Quan uint8_t pcie_dpm_key_disabled; 2312cac05deSEvan Quan uint8_t dcefclk_dpm_key_disabled; 2322cac05deSEvan Quan uint8_t prefetcher_dpm_key_disabled; 2332cac05deSEvan Quan uint8_t quick_transition_support; 2342cac05deSEvan Quan uint8_t regulator_hot_gpio_support; 2352cac05deSEvan Quan uint8_t master_deep_sleep_support; 2362cac05deSEvan Quan uint8_t gfx_clk_deep_sleep_support; 2372cac05deSEvan Quan uint8_t sclk_deep_sleep_support; 2382cac05deSEvan Quan uint8_t lclk_deep_sleep_support; 2392cac05deSEvan Quan uint8_t dce_fclk_deep_sleep_support; 2402cac05deSEvan Quan uint8_t sclk_dpm_key_disabled; 2412cac05deSEvan Quan uint8_t sclk_throttle_low_notification; 2422cac05deSEvan Quan uint8_t skip_baco_hardware; 2432cac05deSEvan Quan uint8_t socclk_dpm_key_disabled; 2442cac05deSEvan Quan uint8_t sq_ramping_support; 2452cac05deSEvan Quan uint8_t tcp_ramping_support; 2462cac05deSEvan Quan uint8_t td_ramping_support; 2472cac05deSEvan Quan uint8_t dbr_ramping_support; 2482cac05deSEvan Quan uint8_t gc_didt_support; 2492cac05deSEvan Quan uint8_t psm_didt_support; 2502cac05deSEvan Quan uint8_t thermal_support; 2512cac05deSEvan Quan uint8_t fw_ctf_enabled; 2522cac05deSEvan Quan uint8_t led_dpm_enabled; 2532cac05deSEvan Quan uint8_t fan_control_support; 2542cac05deSEvan Quan uint8_t ulv_support; 2552cac05deSEvan Quan uint8_t odn_feature_enable; 2562cac05deSEvan Quan uint8_t disable_water_mark; 2572cac05deSEvan Quan uint8_t disable_workload_policy; 2582cac05deSEvan Quan uint32_t force_workload_policy_mask; 2592cac05deSEvan Quan uint8_t disable_3d_fs_detection; 2602cac05deSEvan Quan uint8_t disable_pp_tuning; 2612cac05deSEvan Quan uint8_t disable_xlpp_tuning; 2622cac05deSEvan Quan uint32_t perf_ui_tuning_profile_turbo; 2632cac05deSEvan Quan uint32_t perf_ui_tuning_profile_powerSave; 2642cac05deSEvan Quan uint32_t perf_ui_tuning_profile_xl; 2652cac05deSEvan Quan uint16_t zrpm_stop_temp; 2662cac05deSEvan Quan uint16_t zrpm_start_temp; 2672cac05deSEvan Quan uint32_t stable_pstate_sclk_dpm_percentage; 2682cac05deSEvan Quan uint8_t fps_support; 2692cac05deSEvan Quan uint8_t vr0hot; 2702cac05deSEvan Quan uint8_t vr1hot; 2712cac05deSEvan Quan uint8_t disable_auto_wattman; 2722cac05deSEvan Quan uint32_t auto_wattman_debug; 2732cac05deSEvan Quan uint32_t auto_wattman_sample_period; 2742cac05deSEvan Quan uint8_t auto_wattman_threshold; 2752cac05deSEvan Quan uint8_t log_avfs_param; 2762cac05deSEvan Quan uint8_t enable_enginess; 2772cac05deSEvan Quan uint8_t custom_fan_support; 2782cac05deSEvan Quan uint8_t disable_pcc_limit_control; 2792cac05deSEvan Quan }; 2802cac05deSEvan Quan 2812cac05deSEvan Quan struct vega12_odn_clock_voltage_dependency_table { 2822cac05deSEvan Quan uint32_t count; 2832cac05deSEvan Quan struct phm_ppt_v1_clock_voltage_dependency_record 2842cac05deSEvan Quan entries[MAX_REGULAR_DPM_NUMBER]; 2852cac05deSEvan Quan }; 2862cac05deSEvan Quan 2872cac05deSEvan Quan struct vega12_odn_dpm_table { 2882cac05deSEvan Quan struct vega12_odn_dpm_control control_gfxclk_state; 2892cac05deSEvan Quan struct vega12_odn_dpm_control control_memclk_state; 2902cac05deSEvan Quan struct phm_odn_clock_levels odn_core_clock_dpm_levels; 2912cac05deSEvan Quan struct phm_odn_clock_levels odn_memory_clock_dpm_levels; 2922cac05deSEvan Quan struct vega12_odn_clock_voltage_dependency_table vdd_dependency_on_sclk; 2932cac05deSEvan Quan struct vega12_odn_clock_voltage_dependency_table vdd_dependency_on_mclk; 2942cac05deSEvan Quan struct vega12_odn_clock_voltage_dependency_table vdd_dependency_on_socclk; 2952cac05deSEvan Quan uint32_t odn_mclk_min_limit; 2962cac05deSEvan Quan }; 2972cac05deSEvan Quan 2982cac05deSEvan Quan struct vega12_odn_fan_table { 2992cac05deSEvan Quan uint32_t target_fan_speed; 3002cac05deSEvan Quan uint32_t target_temperature; 3012cac05deSEvan Quan uint32_t min_performance_clock; 3022cac05deSEvan Quan uint32_t min_fan_limit; 3032cac05deSEvan Quan bool force_fan_pwm; 3042cac05deSEvan Quan }; 3052cac05deSEvan Quan 30670fef574SEvan Quan struct vega12_clock_range { 30770fef574SEvan Quan uint32_t ACMax; 30870fef574SEvan Quan uint32_t ACMin; 30970fef574SEvan Quan uint32_t DCMax; 31070fef574SEvan Quan }; 31170fef574SEvan Quan 3122cac05deSEvan Quan struct vega12_hwmgr { 3132cac05deSEvan Quan struct vega12_dpm_table dpm_table; 3142cac05deSEvan Quan struct vega12_dpm_table golden_dpm_table; 3152cac05deSEvan Quan struct vega12_registry_data registry_data; 3162cac05deSEvan Quan struct vega12_vbios_boot_state vbios_boot_state; 3172cac05deSEvan Quan struct vega12_mclk_latency_table mclk_latency_table; 3182cac05deSEvan Quan 3192cac05deSEvan Quan struct vega12_leakage_voltage vddc_leakage; 3202cac05deSEvan Quan 3212cac05deSEvan Quan uint32_t vddc_control; 3222cac05deSEvan Quan struct pp_atomfwctrl_voltage_table vddc_voltage_table; 3232cac05deSEvan Quan uint32_t mvdd_control; 3242cac05deSEvan Quan struct pp_atomfwctrl_voltage_table mvdd_voltage_table; 3252cac05deSEvan Quan uint32_t vddci_control; 3262cac05deSEvan Quan struct pp_atomfwctrl_voltage_table vddci_voltage_table; 3272cac05deSEvan Quan 3282cac05deSEvan Quan uint32_t active_auto_throttle_sources; 3292cac05deSEvan Quan uint32_t water_marks_bitmap; 3302cac05deSEvan Quan 3312cac05deSEvan Quan struct vega12_odn_dpm_table odn_dpm_table; 3322cac05deSEvan Quan struct vega12_odn_fan_table odn_fan_table; 3332cac05deSEvan Quan 3342cac05deSEvan Quan /* ---- General data ---- */ 3352cac05deSEvan Quan uint8_t need_update_dpm_table; 3362cac05deSEvan Quan 3372cac05deSEvan Quan bool cac_enabled; 3382cac05deSEvan Quan bool battery_state; 3392cac05deSEvan Quan bool is_tlu_enabled; 3402cac05deSEvan Quan bool avfs_exist; 3412cac05deSEvan Quan 3422cac05deSEvan Quan uint32_t low_sclk_interrupt_threshold; 3432cac05deSEvan Quan 3442cac05deSEvan Quan uint32_t total_active_cus; 3452cac05deSEvan Quan 3462cac05deSEvan Quan struct vega12_display_timing display_timing; 3472cac05deSEvan Quan 3482cac05deSEvan Quan /* ---- Vega12 Dyn Register Settings ---- */ 3492cac05deSEvan Quan 3502cac05deSEvan Quan uint32_t debug_settings; 3512cac05deSEvan Quan uint32_t lowest_uclk_reserved_for_ulv; 3522cac05deSEvan Quan uint32_t gfxclk_average_alpha; 3532cac05deSEvan Quan uint32_t socclk_average_alpha; 3542cac05deSEvan Quan uint32_t uclk_average_alpha; 3552cac05deSEvan Quan uint32_t gfx_activity_average_alpha; 3562cac05deSEvan Quan uint32_t display_voltage_mode; 3572cac05deSEvan Quan uint32_t dcef_clk_quad_eqn_a; 3582cac05deSEvan Quan uint32_t dcef_clk_quad_eqn_b; 3592cac05deSEvan Quan uint32_t dcef_clk_quad_eqn_c; 3602cac05deSEvan Quan uint32_t disp_clk_quad_eqn_a; 3612cac05deSEvan Quan uint32_t disp_clk_quad_eqn_b; 3622cac05deSEvan Quan uint32_t disp_clk_quad_eqn_c; 3632cac05deSEvan Quan uint32_t pixel_clk_quad_eqn_a; 3642cac05deSEvan Quan uint32_t pixel_clk_quad_eqn_b; 3652cac05deSEvan Quan uint32_t pixel_clk_quad_eqn_c; 3662cac05deSEvan Quan uint32_t phy_clk_quad_eqn_a; 3672cac05deSEvan Quan uint32_t phy_clk_quad_eqn_b; 3682cac05deSEvan Quan uint32_t phy_clk_quad_eqn_c; 3692cac05deSEvan Quan 3702cac05deSEvan Quan /* ---- Thermal Temperature Setting ---- */ 3712cac05deSEvan Quan struct vega12_dpmlevel_enable_mask dpm_level_enable_mask; 3722cac05deSEvan Quan 3732cac05deSEvan Quan /* ---- Power Gating States ---- */ 3742cac05deSEvan Quan bool uvd_power_gated; 3752cac05deSEvan Quan bool vce_power_gated; 3762cac05deSEvan Quan bool samu_power_gated; 3772cac05deSEvan Quan bool need_long_memory_training; 3782cac05deSEvan Quan 3792cac05deSEvan Quan /* Internal settings to apply the application power optimization parameters */ 3802cac05deSEvan Quan bool apply_optimized_settings; 3812cac05deSEvan Quan uint32_t disable_dpm_mask; 3822cac05deSEvan Quan 3832cac05deSEvan Quan /* ---- Overdrive next setting ---- */ 3842cac05deSEvan Quan uint32_t apply_overdrive_next_settings_mask; 3852cac05deSEvan Quan 3862cac05deSEvan Quan /* ---- Workload Mask ---- */ 3872cac05deSEvan Quan uint32_t workload_mask; 3882cac05deSEvan Quan 3892cac05deSEvan Quan /* ---- SMU9 ---- */ 3902cac05deSEvan Quan uint32_t smu_version; 3912cac05deSEvan Quan struct smu_features smu_features[GNLD_FEATURES_MAX]; 3922cac05deSEvan Quan struct vega12_smc_state_table smc_state_table; 39370fef574SEvan Quan 39470fef574SEvan Quan struct vega12_clock_range clk_range[PPCLK_COUNT]; 395991a6b32SEvan Quan 396991a6b32SEvan Quan /* ---- Gfxoff ---- */ 397991a6b32SEvan Quan bool gfxoff_controlled_by_driver; 398ada2b8f1SEvan Quan 399ada2b8f1SEvan Quan unsigned long metrics_time; 400ada2b8f1SEvan Quan SmuMetrics_t metrics_table; 4010fbc6533SEvan Quan struct gpu_metrics_v1_0 gpu_metrics_table; 4022cac05deSEvan Quan }; 4032cac05deSEvan Quan 4042cac05deSEvan Quan #define VEGA12_DPM2_NEAR_TDP_DEC 10 4052cac05deSEvan Quan #define VEGA12_DPM2_ABOVE_SAFE_INC 5 4062cac05deSEvan Quan #define VEGA12_DPM2_BELOW_SAFE_INC 20 4072cac05deSEvan Quan 4082cac05deSEvan Quan #define VEGA12_DPM2_LTA_WINDOW_SIZE 7 4092cac05deSEvan Quan 4102cac05deSEvan Quan #define VEGA12_DPM2_LTS_TRUNCATE 0 4112cac05deSEvan Quan 4122cac05deSEvan Quan #define VEGA12_DPM2_TDP_SAFE_LIMIT_PERCENT 80 4132cac05deSEvan Quan 4142cac05deSEvan Quan #define VEGA12_DPM2_MAXPS_PERCENT_M 90 4152cac05deSEvan Quan #define VEGA12_DPM2_MAXPS_PERCENT_H 90 4162cac05deSEvan Quan 4172cac05deSEvan Quan #define VEGA12_DPM2_PWREFFICIENCYRATIO_MARGIN 50 4182cac05deSEvan Quan 4192cac05deSEvan Quan #define VEGA12_DPM2_SQ_RAMP_MAX_POWER 0x3FFF 4202cac05deSEvan Quan #define VEGA12_DPM2_SQ_RAMP_MIN_POWER 0x12 4212cac05deSEvan Quan #define VEGA12_DPM2_SQ_RAMP_MAX_POWER_DELTA 0x15 4222cac05deSEvan Quan #define VEGA12_DPM2_SQ_RAMP_SHORT_TERM_INTERVAL_SIZE 0x1E 4232cac05deSEvan Quan #define VEGA12_DPM2_SQ_RAMP_LONG_TERM_INTERVAL_RATIO 0xF 4242cac05deSEvan Quan 4252cac05deSEvan Quan #define VEGA12_VOLTAGE_CONTROL_NONE 0x0 4262cac05deSEvan Quan #define VEGA12_VOLTAGE_CONTROL_BY_GPIO 0x1 4272cac05deSEvan Quan #define VEGA12_VOLTAGE_CONTROL_BY_SVID2 0x2 4282cac05deSEvan Quan #define VEGA12_VOLTAGE_CONTROL_MERGED 0x3 4292cac05deSEvan Quan /* To convert to Q8.8 format for firmware */ 4302cac05deSEvan Quan #define VEGA12_Q88_FORMAT_CONVERSION_UNIT 256 4312cac05deSEvan Quan 4322cac05deSEvan Quan #define VEGA12_UNUSED_GPIO_PIN 0x7F 4332cac05deSEvan Quan 4342cac05deSEvan Quan #define VEGA12_THERM_OUT_MODE_DISABLE 0x0 4352cac05deSEvan Quan #define VEGA12_THERM_OUT_MODE_THERM_ONLY 0x1 4362cac05deSEvan Quan #define VEGA12_THERM_OUT_MODE_THERM_VRHOT 0x2 4372cac05deSEvan Quan 4382cac05deSEvan Quan #define PPVEGA12_VEGA12DISPLAYVOLTAGEMODE_DFLT 0xffffffff 4392cac05deSEvan Quan #define PPREGKEY_VEGA12QUADRATICEQUATION_DFLT 0xffffffff 4402cac05deSEvan Quan 4412cac05deSEvan Quan #define PPVEGA12_VEGA12GFXCLKAVERAGEALPHA_DFLT 25 /* 10% * 255 = 25 */ 4422cac05deSEvan Quan #define PPVEGA12_VEGA12SOCCLKAVERAGEALPHA_DFLT 25 /* 10% * 255 = 25 */ 4432cac05deSEvan Quan #define PPVEGA12_VEGA12UCLKCLKAVERAGEALPHA_DFLT 25 /* 10% * 255 = 25 */ 4442cac05deSEvan Quan #define PPVEGA12_VEGA12GFXACTIVITYAVERAGEALPHA_DFLT 25 /* 10% * 255 = 25 */ 4452cac05deSEvan Quan #define PPVEGA12_VEGA12LOWESTUCLKRESERVEDFORULV_DFLT 0xffffffff 4462cac05deSEvan Quan #define PPVEGA12_VEGA12DISPLAYVOLTAGEMODE_DFLT 0xffffffff 4472cac05deSEvan Quan #define PPREGKEY_VEGA12QUADRATICEQUATION_DFLT 0xffffffff 4482cac05deSEvan Quan 4492cac05deSEvan Quan #define VEGA12_UMD_PSTATE_GFXCLK_LEVEL 0x3 4502cac05deSEvan Quan #define VEGA12_UMD_PSTATE_SOCCLK_LEVEL 0x3 4512cac05deSEvan Quan #define VEGA12_UMD_PSTATE_MCLK_LEVEL 0x2 452e17c7f92SEvan Quan #define VEGA12_UMD_PSTATE_UVDCLK_LEVEL 0x3 453e17c7f92SEvan Quan #define VEGA12_UMD_PSTATE_VCEMCLK_LEVEL 0x3 4542cac05deSEvan Quan 4552cac05deSEvan Quan int vega12_enable_disable_vce_dpm(struct pp_hwmgr *hwmgr, bool enable); 4562cac05deSEvan Quan 4572cac05deSEvan Quan #endif /* _VEGA12_HWMGR_H_ */ 458