xref: /linux/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.h (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
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