1185377Ssam/* 2185377Ssam * Copyright 2020 Advanced Micro Devices, Inc. 3185377Ssam * 4185377Ssam * Permission is hereby granted, free of charge, to any person obtaining a 5185377Ssam * copy of this software and associated documentation files (the "Software"), 6185377Ssam * to deal in the Software without restriction, including without limitation 7185377Ssam * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8185377Ssam * and/or sell copies of the Software, and to permit persons to whom the 9185377Ssam * Software is furnished to do so, subject to the following conditions: 10185377Ssam * 11185377Ssam * The above copyright notice and this permission notice shall be included in 12185377Ssam * all copies or substantial portions of the Software. 13185377Ssam * 14185377Ssam * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15185377Ssam * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16185377Ssam * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17188968Ssam * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18185377Ssam * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19185377Ssam * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20185377Ssam * OTHER DEALINGS IN THE SOFTWARE. 21185377Ssam * 22188968Ssam */ 23185377Ssam 24185377Ssam#ifndef __SMU11_DRIVER_IF_SIENNA_CICHLID_H__ 25185377Ssam#define __SMU11_DRIVER_IF_SIENNA_CICHLID_H__ 26185377Ssam 27185377Ssam// *** IMPORTANT *** 28185377Ssam// SMU TEAM: Always increment the interface version if 29185377Ssam// any structure is changed in this file 30185377Ssam#define SMU11_DRIVER_IF_VERSION 0x40 31185377Ssam 32185377Ssam#define PPTABLE_Sienna_Cichlid_SMU_VERSION 7 33185377Ssam 34188979Ssam#define NUM_GFXCLK_DPM_LEVELS 16 35188979Ssam#define NUM_SMNCLK_DPM_LEVELS 2 36185377Ssam#define NUM_SOCCLK_DPM_LEVELS 8 37185377Ssam#define NUM_MP0CLK_DPM_LEVELS 2 38185377Ssam#define NUM_DCLK_DPM_LEVELS 8 39185377Ssam#define NUM_VCLK_DPM_LEVELS 8 40185377Ssam#define NUM_DCEFCLK_DPM_LEVELS 8 41185377Ssam#define NUM_PHYCLK_DPM_LEVELS 8 42185377Ssam#define NUM_DISPCLK_DPM_LEVELS 8 43225431Sadrian#define NUM_PIXCLK_DPM_LEVELS 8 44185377Ssam#define NUM_DTBCLK_DPM_LEVELS 8 45185377Ssam#define NUM_UCLK_DPM_LEVELS 4 46185377Ssam#define NUM_MP1CLK_DPM_LEVELS 2 47188976Ssam#define NUM_LINK_LEVELS 2 48188976Ssam#define NUM_FCLK_DPM_LEVELS 8 49188976Ssam#define NUM_XGMI_LEVELS 2 50234692Sadrian#define NUM_XGMI_PSTATE_LEVELS 4 51188976Ssam#define NUM_OD_FAN_MAX_POINTS 6 52234692Sadrian 53234692Sadrian#define MAX_GFXCLK_DPM_LEVEL (NUM_GFXCLK_DPM_LEVELS - 1) 54234692Sadrian#define MAX_SMNCLK_DPM_LEVEL (NUM_SMNCLK_DPM_LEVELS - 1) 55234692Sadrian#define MAX_SOCCLK_DPM_LEVEL (NUM_SOCCLK_DPM_LEVELS - 1) 56234692Sadrian#define MAX_MP0CLK_DPM_LEVEL (NUM_MP0CLK_DPM_LEVELS - 1) 57234692Sadrian#define MAX_DCLK_DPM_LEVEL (NUM_DCLK_DPM_LEVELS - 1) 58234692Sadrian#define MAX_VCLK_DPM_LEVEL (NUM_VCLK_DPM_LEVELS - 1) 59234692Sadrian#define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1) 60234692Sadrian#define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1) 61234692Sadrian#define MAX_PIXCLK_DPM_LEVEL (NUM_PIXCLK_DPM_LEVELS - 1) 62234692Sadrian#define MAX_PHYCLK_DPM_LEVEL (NUM_PHYCLK_DPM_LEVELS - 1) 63234692Sadrian#define MAX_DTBCLK_DPM_LEVEL (NUM_DTBCLK_DPM_LEVELS - 1) 64234692Sadrian#define MAX_UCLK_DPM_LEVEL (NUM_UCLK_DPM_LEVELS - 1) 65234692Sadrian#define MAX_MP1CLK_DPM_LEVEL (NUM_MP1CLK_DPM_LEVELS - 1) 66234692Sadrian#define MAX_LINK_LEVEL (NUM_LINK_LEVELS - 1) 67234692Sadrian#define MAX_FCLK_DPM_LEVEL (NUM_FCLK_DPM_LEVELS - 1) 68234692Sadrian 69234692Sadrian//Gemini Modes 70234692Sadrian#define PPSMC_GeminiModeNone 0 //Single GPU board 71188976Ssam#define PPSMC_GeminiModeMaster 1 //Master GPU on a Gemini board 72234692Sadrian#define PPSMC_GeminiModeSlave 2 //Slave GPU on a Gemini board 73234692Sadrian 74234692Sadrian// Feature Control Defines 75234692Sadrian// DPM 76234692Sadrian#define FEATURE_DPM_PREFETCHER_BIT 0 77234692Sadrian#define FEATURE_DPM_GFXCLK_BIT 1 78234692Sadrian#define FEATURE_DPM_GFX_GPO_BIT 2 79188976Ssam#define FEATURE_DPM_UCLK_BIT 3 80234692Sadrian#define FEATURE_DPM_FCLK_BIT 4 81234692Sadrian#define FEATURE_DPM_SOCCLK_BIT 5 82234692Sadrian#define FEATURE_DPM_MP0CLK_BIT 6 83234692Sadrian#define FEATURE_DPM_LINK_BIT 7 84234692Sadrian#define FEATURE_DPM_DCEFCLK_BIT 8 85234692Sadrian#define FEATURE_DPM_XGMI_BIT 9 86234692Sadrian#define FEATURE_MEM_VDDCI_SCALING_BIT 10 87188976Ssam#define FEATURE_MEM_MVDD_SCALING_BIT 11 88188976Ssam 89188976Ssam//Idle 90234692Sadrian#define FEATURE_DS_GFXCLK_BIT 12 91234692Sadrian#define FEATURE_DS_SOCCLK_BIT 13 92234692Sadrian#define FEATURE_DS_FCLK_BIT 14 93234692Sadrian#define FEATURE_DS_LCLK_BIT 15 94234692Sadrian#define FEATURE_DS_DCEFCLK_BIT 16 95234692Sadrian#define FEATURE_DS_UCLK_BIT 17 96234692Sadrian#define FEATURE_GFX_ULV_BIT 18 97234692Sadrian#define FEATURE_FW_DSTATE_BIT 19 98234692Sadrian#define FEATURE_GFXOFF_BIT 20 99185377Ssam#define FEATURE_BACO_BIT 21 100185377Ssam#define FEATURE_MM_DPM_PG_BIT 22 101234692Sadrian#define FEATURE_SPARE_23_BIT 23 102221163Sadrian//Throttler/Response 103221163Sadrian#define FEATURE_PPT_BIT 24 104221163Sadrian#define FEATURE_TDC_BIT 25 105221163Sadrian#define FEATURE_APCC_PLUS_BIT 26 106221163Sadrian#define FEATURE_GTHR_BIT 27 107221163Sadrian#define FEATURE_ACDC_BIT 28 108221163Sadrian#define FEATURE_VR0HOT_BIT 29 109221163Sadrian#define FEATURE_VR1HOT_BIT 30 110221163Sadrian#define FEATURE_FW_CTF_BIT 31 111221163Sadrian#define FEATURE_FAN_CONTROL_BIT 32 112221163Sadrian#define FEATURE_THERMAL_BIT 33 113221163Sadrian#define FEATURE_GFX_DCS_BIT 34 114221163Sadrian//VF 115221163Sadrian#define FEATURE_RM_BIT 35 116221163Sadrian#define FEATURE_LED_DISPLAY_BIT 36 117221163Sadrian//Other 118221163Sadrian#define FEATURE_GFX_SS_BIT 37 119221163Sadrian#define FEATURE_OUT_OF_BAND_MONITOR_BIT 38 120221163Sadrian#define FEATURE_TEMP_DEPENDENT_VMIN_BIT 39 121221163Sadrian 122221163Sadrian#define FEATURE_MMHUB_PG_BIT 40 123221163Sadrian#define FEATURE_ATHUB_PG_BIT 41 124221163Sadrian#define FEATURE_APCC_DFLL_BIT 42 125221163Sadrian#define FEATURE_DF_SUPERV_BIT 43 126240445Sadrian#define FEATURE_RSMU_SMN_CG_BIT 44 127240445Sadrian#define FEATURE_DF_CSTATE_BIT 45 128240445Sadrian#define FEATURE_2_STEP_PSTATE_BIT 46 129240445Sadrian#define FEATURE_SMNCLK_DPM_BIT 47 130240445Sadrian#define FEATURE_PERLINK_GMIDOWN_BIT 48 131240445Sadrian#define FEATURE_GFX_EDC_BIT 49 132185377Ssam#define FEATURE_GFX_PER_PART_VMIN_BIT 50 133225125Sadrian#define FEATURE_SMART_SHIFT_BIT 51 134225125Sadrian#define FEATURE_APT_BIT 52 135225125Sadrian#define FEATURE_SPARE_53_BIT 53 136225125Sadrian#define FEATURE_SPARE_54_BIT 54 137225125Sadrian#define FEATURE_SPARE_55_BIT 55 138225125Sadrian#define FEATURE_SPARE_56_BIT 56 139225125Sadrian#define FEATURE_SPARE_57_BIT 57 140185377Ssam#define FEATURE_SPARE_58_BIT 58 141185377Ssam#define FEATURE_SPARE_59_BIT 59 142185377Ssam#define FEATURE_SPARE_60_BIT 60 143185377Ssam#define FEATURE_SPARE_61_BIT 61 144185377Ssam#define FEATURE_SPARE_62_BIT 62 145185377Ssam#define FEATURE_SPARE_63_BIT 63 146185377Ssam#define NUM_FEATURES 64 147185377Ssam 148234692Sadrian//For use with feature control messages 149185377Ssamtypedef enum { 150185377Ssam FEATURE_PWR_ALL, 151185377Ssam FEATURE_PWR_S5, 152185377Ssam FEATURE_PWR_BACO, 153185377Ssam FEATURE_PWR_SOC, 154185377Ssam FEATURE_PWR_GFX, 155185377Ssam FEATURE_PWR_DOMAIN_COUNT, 156185377Ssam} FEATURE_PWR_DOMAIN_e; 157185377Ssam 158185377Ssam 159185377Ssam// Debug Overrides Bitmask 160185377Ssam#define DPM_OVERRIDE_DISABLE_FCLK_PID 0x00000001 161185377Ssam#define DPM_OVERRIDE_DISABLE_UCLK_PID 0x00000002 162185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_VCN_FCLK 0x00000004 163185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_FCLK 0x00000008 164185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_FCLK 0x00000010 165185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00000020 166185377Ssam#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK 0x00000040 167185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_DCE_FCLK 0x00000080 168185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_MP0_SOCCLK 0x00000100 169185377Ssam#define DPM_OVERRIDE_DISABLE_DFLL_PLL_SHUTDOWN 0x00000200 170185377Ssam#define DPM_OVERRIDE_DISABLE_MEMORY_TEMPERATURE_READ 0x00000400 171185377Ssam#define DPM_OVERRIDE_DISABLE_VOLT_LINK_VCN_DCEFCLK 0x00000800 172185377Ssam#define DPM_OVERRIDE_DISABLE_FAST_FCLK_TIMER 0x00001000 173185377Ssam#define DPM_OVERRIDE_DISABLE_VCN_PG 0x00002000 174185377Ssam#define DPM_OVERRIDE_DISABLE_FMAX_VMAX 0x00004000 175185377Ssam#define DPM_OVERRIDE_ENABLE_eGPU_USB_WA 0x00008000 176185377Ssam 177185377Ssam// VR Mapping Bit Defines 178185377Ssam#define VR_MAPPING_VR_SELECT_MASK 0x01 179185377Ssam#define VR_MAPPING_VR_SELECT_SHIFT 0x00 180185377Ssam 181185377Ssam#define VR_MAPPING_PLANE_SELECT_MASK 0x02 182244943Sadrian#define VR_MAPPING_PLANE_SELECT_SHIFT 0x01 183185377Ssam 184208711Srpaulo// PSI Bit Defines 185185377Ssam#define PSI_SEL_VR0_PLANE0_PSI0 0x01 186185377Ssam#define PSI_SEL_VR0_PLANE0_PSI1 0x02 187185377Ssam#define PSI_SEL_VR0_PLANE1_PSI0 0x04 188185377Ssam#define PSI_SEL_VR0_PLANE1_PSI1 0x08 189185377Ssam#define PSI_SEL_VR1_PLANE0_PSI0 0x10 190185377Ssam#define PSI_SEL_VR1_PLANE0_PSI1 0x20 191185377Ssam#define PSI_SEL_VR1_PLANE1_PSI0 0x40 192185377Ssam#define PSI_SEL_VR1_PLANE1_PSI1 0x80 193185377Ssam 194185377Ssam// Throttler Control/Status Bits 195185377Ssam#define THROTTLER_PADDING_BIT 0 196185377Ssam#define THROTTLER_TEMP_EDGE_BIT 1 197185377Ssam#define THROTTLER_TEMP_HOTSPOT_BIT 2 198185377Ssam#define THROTTLER_TEMP_MEM_BIT 3 199185377Ssam#define THROTTLER_TEMP_VR_GFX_BIT 4 200185377Ssam#define THROTTLER_TEMP_VR_MEM0_BIT 5 201185377Ssam#define THROTTLER_TEMP_VR_MEM1_BIT 6 202185377Ssam#define THROTTLER_TEMP_VR_SOC_BIT 7 203185377Ssam#define THROTTLER_TEMP_LIQUID0_BIT 8 204185377Ssam#define THROTTLER_TEMP_LIQUID1_BIT 9 205185377Ssam#define THROTTLER_TEMP_PLX_BIT 10 206185377Ssam#define THROTTLER_TDC_GFX_BIT 11 207185377Ssam#define THROTTLER_TDC_SOC_BIT 12 208185377Ssam#define THROTTLER_PPT0_BIT 13 209185377Ssam#define THROTTLER_PPT1_BIT 14 210185377Ssam#define THROTTLER_PPT2_BIT 15 211185377Ssam#define THROTTLER_PPT3_BIT 16 212185377Ssam#define THROTTLER_FIT_BIT 17 213185377Ssam#define THROTTLER_PPM_BIT 18 214185377Ssam#define THROTTLER_APCC_BIT 19 215185377Ssam#define THROTTLER_COUNT 20 216185377Ssam 217185377Ssam// FW DState Features Control Bits 218185377Ssam// FW DState Features Control Bits 219185377Ssam#define FW_DSTATE_SOC_ULV_BIT 0 220185377Ssam#define FW_DSTATE_G6_HSR_BIT 1 221185377Ssam#define FW_DSTATE_G6_PHY_VDDCI_OFF_BIT 2 222185377Ssam#define FW_DSTATE_MP0_DS_BIT 3 223185377Ssam#define FW_DSTATE_SMN_DS_BIT 4 224185377Ssam#define FW_DSTATE_MP1_DS_BIT 5 225185377Ssam#define FW_DSTATE_MP1_WHISPER_MODE_BIT 6 226185377Ssam#define FW_DSTATE_SOC_LIV_MIN_BIT 7 227185377Ssam#define FW_DSTATE_SOC_PLL_PWRDN_BIT 8 228185377Ssam#define FW_DSTATE_MEM_PLL_PWRDN_BIT 9 229185377Ssam#define FW_DSTATE_OPTIMIZE_MALL_REFRESH_BIT 10 230185377Ssam#define FW_DSTATE_MEM_PSI_BIT 11 231185377Ssam#define FW_DSTATE_HSR_NON_STROBE_BIT 12 232185377Ssam#define FW_DSTATE_MP0_ENTER_WFI_BIT 13 233185377Ssam 234185377Ssam#define FW_DSTATE_SOC_ULV_MASK (1 << FW_DSTATE_SOC_ULV_BIT ) 235185377Ssam#define FW_DSTATE_G6_HSR_MASK (1 << FW_DSTATE_G6_HSR_BIT ) 236185377Ssam#define FW_DSTATE_G6_PHY_VDDCI_OFF_MASK (1 << FW_DSTATE_G6_PHY_VDDCI_OFF_BIT ) 237185377Ssam#define FW_DSTATE_MP1_DS_MASK (1 << FW_DSTATE_MP1_DS_BIT ) 238185377Ssam#define FW_DSTATE_MP0_DS_MASK (1 << FW_DSTATE_MP0_DS_BIT ) 239185377Ssam#define FW_DSTATE_SMN_DS_MASK (1 << FW_DSTATE_SMN_DS_BIT ) 240185377Ssam#define FW_DSTATE_MP1_WHISPER_MODE_MASK (1 << FW_DSTATE_MP1_WHISPER_MODE_BIT ) 241221479Sadrian#define FW_DSTATE_SOC_LIV_MIN_MASK (1 << FW_DSTATE_SOC_LIV_MIN_BIT ) 242221479Sadrian#define FW_DSTATE_SOC_PLL_PWRDN_MASK (1 << FW_DSTATE_SOC_PLL_PWRDN_BIT ) 243221479Sadrian#define FW_DSTATE_MEM_PLL_PWRDN_MASK (1 << FW_DSTATE_MEM_PLL_PWRDN_BIT ) 244221479Sadrian#define FW_DSTATE_OPTIMIZE_MALL_REFRESH_MASK (1 << FW_DSTATE_OPTIMIZE_MALL_REFRESH_BIT ) 245221479Sadrian#define FW_DSTATE_MEM_PSI_MASK (1 << FW_DSTATE_MEM_PSI_BIT ) 246221479Sadrian#define FW_DSTATE_HSR_NON_STROBE_MASK (1 << FW_DSTATE_HSR_NON_STROBE_BIT ) 247185377Ssam#define FW_DSTATE_MP0_ENTER_WFI_MASK (1 << FW_DSTATE_MP0_ENTER_WFI_BIT ) 248185377Ssam 249185377Ssam// GFX GPO Feature Contains PACE and DEM sub features 250185377Ssam#define GFX_GPO_PACE_BIT 0 251185377Ssam#define GFX_GPO_DEM_BIT 1 252185377Ssam 253185377Ssam#define GFX_GPO_PACE_MASK (1 << GFX_GPO_PACE_BIT) 254185377Ssam#define GFX_GPO_DEM_MASK (1 << GFX_GPO_DEM_BIT ) 255185377Ssam 256185377Ssam#define GPO_UPDATE_REQ_UCLKDPM_MASK 0x1 257185377Ssam#define GPO_UPDATE_REQ_FCLKDPM_MASK 0x2 258228834Sadrian#define GPO_UPDATE_REQ_MALLHIT_MASK 0x4 259228834Sadrian 260228834Sadrian 261185377Ssam//LED Display Mask & Control Bits 262185377Ssam#define LED_DISPLAY_GFX_DPM_BIT 0 263236009Sadrian#define LED_DISPLAY_PCIE_BIT 1 264236009Sadrian#define LED_DISPLAY_ERROR_BIT 2 265236009Sadrian 266188979Ssam//RLC Pace Table total number of levels 267188979Ssam#define RLC_PACE_TABLE_NUM_LEVELS 16 268188979Ssam#define SIENNA_CICHLID_UMC_CHANNEL_NUM 16 269188979Ssam 270236009Sadriantypedef struct { 271236009Sadrian uint64_t mca_umc_status; 272188979Ssam uint64_t mca_umc_addr; 273188979Ssam 274233885Sadrian uint16_t ce_count_lo_chip; 275188979Ssam uint16_t ce_count_hi_chip; 276188979Ssam 277188979Ssam uint32_t eccPadding; 278188979Ssam} EccInfo_t; 279185377Ssam 280298939Spfgtypedef struct { 281185377Ssam EccInfo_t EccInfo[SIENNA_CICHLID_UMC_CHANNEL_NUM]; 282298939Spfg} EccInfoTable_t; 283298939Spfg 284185377Ssamtypedef enum { 285185377Ssam DRAM_BIT_WIDTH_DISABLED = 0, 286185377Ssam DRAM_BIT_WIDTH_X_8, 287222301Sadrian DRAM_BIT_WIDTH_X_16, 288222301Sadrian DRAM_BIT_WIDTH_X_32, 289222301Sadrian DRAM_BIT_WIDTH_X_64, // NOT USED. 290222301Sadrian DRAM_BIT_WIDTH_X_128, 291185377Ssam DRAM_BIT_WIDTH_COUNT, 292185377Ssam} DRAM_BIT_WIDTH_TYPE_e; 293185377Ssam 294185377Ssam//I2C Interface 295185377Ssam#define NUM_I2C_CONTROLLERS 16 296185377Ssam 297185377Ssam#define I2C_CONTROLLER_ENABLED 1 298185377Ssam#define I2C_CONTROLLER_DISABLED 0 299185377Ssam 300185377Ssam#define MAX_SW_I2C_COMMANDS 24 301185377Ssam 302185377Ssam 303185377Ssamtypedef enum { 304185377Ssam I2C_CONTROLLER_PORT_0 = 0, //CKSVII2C0 305185377Ssam I2C_CONTROLLER_PORT_1 = 1, //CKSVII2C1 306185377Ssam I2C_CONTROLLER_PORT_COUNT, 307185377Ssam} I2cControllerPort_e; 308185377Ssam 309185377Ssamtypedef enum { 310225925Sadrian I2C_CONTROLLER_NAME_VR_GFX = 0, 311185377Ssam I2C_CONTROLLER_NAME_VR_SOC, 312185377Ssam I2C_CONTROLLER_NAME_VR_VDDCI, 313185377Ssam I2C_CONTROLLER_NAME_VR_MVDD, 314185377Ssam I2C_CONTROLLER_NAME_LIQUID0, 315185377Ssam I2C_CONTROLLER_NAME_LIQUID1, 316185377Ssam I2C_CONTROLLER_NAME_PLX, 317185377Ssam I2C_CONTROLLER_NAME_OTHER, 318208711Srpaulo I2C_CONTROLLER_NAME_COUNT, 319208711Srpaulo} I2cControllerName_e; 320226759Sadrian 321226759Sadriantypedef enum { 322226759Sadrian I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0, 323226759Sadrian I2C_CONTROLLER_THROTTLER_VR_GFX, 324226759Sadrian I2C_CONTROLLER_THROTTLER_VR_SOC, 325226759Sadrian I2C_CONTROLLER_THROTTLER_VR_VDDCI, 326226759Sadrian I2C_CONTROLLER_THROTTLER_VR_MVDD, 327208711Srpaulo I2C_CONTROLLER_THROTTLER_LIQUID0, 328185377Ssam I2C_CONTROLLER_THROTTLER_LIQUID1, 329185377Ssam I2C_CONTROLLER_THROTTLER_PLX, 330185377Ssam I2C_CONTROLLER_THROTTLER_INA3221, 331185377Ssam I2C_CONTROLLER_THROTTLER_COUNT, 332185377Ssam} I2cControllerThrottler_e; 333185377Ssam 334185377Ssamtypedef enum { 335185377Ssam I2C_CONTROLLER_PROTOCOL_VR_XPDE132G5, 336185377Ssam I2C_CONTROLLER_PROTOCOL_VR_IR35217, 337185377Ssam I2C_CONTROLLER_PROTOCOL_TMP_TMP102A, 338185377Ssam I2C_CONTROLLER_PROTOCOL_INA3221, 339185377Ssam I2C_CONTROLLER_PROTOCOL_COUNT, 340185377Ssam} I2cControllerProtocol_e; 341185377Ssam 342185377Ssamtypedef struct { 343185377Ssam uint8_t Enabled; 344185377Ssam uint8_t Speed; 345185377Ssam uint8_t SlaveAddress; 346185377Ssam uint8_t ControllerPort; 347185377Ssam uint8_t ControllerName; 348185377Ssam uint8_t ThermalThrotter; 349185377Ssam uint8_t I2cProtocol; 350185377Ssam uint8_t PaddingConfig; 351185377Ssam} I2cControllerConfig_t; 352185377Ssam 353185377Ssamtypedef enum { 354185377Ssam I2C_PORT_SVD_SCL = 0, 355185377Ssam I2C_PORT_GPIO, 356185377Ssam} I2cPort_e; 357185377Ssam 358185377Ssamtypedef enum { 359185377Ssam I2C_SPEED_FAST_50K = 0, //50 Kbits/s 360185377Ssam I2C_SPEED_FAST_100K, //100 Kbits/s 361185377Ssam I2C_SPEED_FAST_400K, //400 Kbits/s 362185377Ssam I2C_SPEED_FAST_PLUS_1M, //1 Mbits/s (in fast mode) 363185377Ssam I2C_SPEED_HIGH_1M, //1 Mbits/s (in high speed mode) 364185377Ssam I2C_SPEED_HIGH_2M, //2.3 Mbits/s 365185377Ssam I2C_SPEED_COUNT, 366185377Ssam} I2cSpeed_e; 367185377Ssam 368185377Ssamtypedef enum { 369185377Ssam I2C_CMD_READ = 0, 370185377Ssam I2C_CMD_WRITE, 371185377Ssam I2C_CMD_COUNT, 372185377Ssam} I2cCmdType_e; 373188976Ssam 374188976Ssamtypedef enum { 375188976Ssam FAN_MODE_AUTO = 0, 376188976Ssam FAN_MODE_MANUAL_LINEAR, 377188976Ssam} FanMode_e; 378188976Ssam 379188976Ssam#define CMDCONFIG_STOP_BIT 0 380188976Ssam#define CMDCONFIG_RESTART_BIT 1 381188976Ssam#define CMDCONFIG_READWRITE_BIT 2 //bit should be 0 for read, 1 for write 382188976Ssam 383188976Ssam#define CMDCONFIG_STOP_MASK (1 << CMDCONFIG_STOP_BIT) 384188976Ssam#define CMDCONFIG_RESTART_MASK (1 << CMDCONFIG_RESTART_BIT) 385188976Ssam#define CMDCONFIG_READWRITE_MASK (1 << CMDCONFIG_READWRITE_BIT) 386188976Ssam 387188976Ssamtypedef struct { 388185377Ssam uint8_t ReadWriteData; //Return data for read. Data to send for write 389185377Ssam uint8_t CmdConfig; //Includes whether associated command should have a stop or restart command, and is a read or write 390185377Ssam} SwI2cCmd_t; //SW I2C Command Table 391185377Ssam 392221163Sadriantypedef struct { 393221163Sadrian uint8_t I2CcontrollerPort; //CKSVII2C0(0) or //CKSVII2C1(1) 394221163Sadrian uint8_t I2CSpeed; //Use I2cSpeed_e to indicate speed to select 395221163Sadrian uint8_t SlaveAddress; //Slave address of device 396185377Ssam uint8_t NumCmds; //Number of commands 397185377Ssam 398185377Ssam SwI2cCmd_t SwI2cCmds[MAX_SW_I2C_COMMANDS]; 399185377Ssam} SwI2cRequest_t; // SW I2C Request Table 400185377Ssam 401185377Ssamtypedef struct { 402185377Ssam SwI2cRequest_t SwI2cRequest; 403185377Ssam 404185377Ssam uint32_t Spare[8]; 405185377Ssam uint32_t MmHubPadding[8]; // SMU internal use 406185377Ssam} SwI2cRequestExternal_t; 407185377Ssam 408185377Ssam//D3HOT sequences 409185377Ssamtypedef enum { 410185377Ssam BACO_SEQUENCE, 411221163Sadrian MSR_SEQUENCE, 412221163Sadrian BAMACO_SEQUENCE, 413221163Sadrian ULPS_SEQUENCE, 414185377Ssam D3HOT_SEQUENCE_COUNT, 415221163Sadrian} D3HOTSequence_e; 416185377Ssam 417185377Ssam//THis is aligned with RSMU PGFSM Register Mapping 418185377Ssamtypedef enum { 419185377Ssam PG_DYNAMIC_MODE = 0, 420185377Ssam PG_STATIC_MODE, 421185377Ssam} PowerGatingMode_e; 422185377Ssam 423185377Ssam//This is aligned with RSMU PGFSM Register Mapping 424185377Ssamtypedef enum { 425185377Ssam PG_POWER_DOWN = 0, 426185377Ssam PG_POWER_UP, 427185377Ssam} PowerGatingSettings_e; 428185377Ssam 429185377Ssamtypedef struct { 430185377Ssam uint32_t a; // store in IEEE float format in this variable 431185377Ssam uint32_t b; // store in IEEE float format in this variable 432221806Sadrian uint32_t c; // store in IEEE float format in this variable 433221806Sadrian} QuadraticInt_t; 434221806Sadrian 435221806Sadriantypedef struct { 436221806Sadrian uint32_t a; // store in fixed point, [31:20] signed integer, [19:0] fractional bits 437221806Sadrian uint32_t b; // store in fixed point, [31:20] signed integer, [19:0] fractional bits 438221806Sadrian uint32_t c; // store in fixed point, [31:20] signed integer, [19:0] fractional bits 439185377Ssam} QuadraticFixedPoint_t; 440185377Ssam 441185377Ssamtypedef struct { 442185377Ssam uint32_t m; // store in IEEE float format in this variable 443185377Ssam uint32_t b; // store in IEEE float format in this variable 444185377Ssam} LinearInt_t; 445185377Ssam 446185377Ssamtypedef struct { 447185377Ssam uint32_t a; // store in IEEE float format in this variable 448185377Ssam uint32_t b; // store in IEEE float format in this variable 449185377Ssam uint32_t c; // store in IEEE float format in this variable 450185377Ssam} DroopInt_t; 451185377Ssam 452185377Ssam//Piecewise linear droop model, Sienna_Cichlid currently used only for GFX DFLL 453185377Ssam#define NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS 5 454185377Ssamtypedef enum { 455185377Ssam PIECEWISE_LINEAR_FUSED_MODEL = 0, 456185377Ssam PIECEWISE_LINEAR_PP_MODEL, 457185377Ssam QUADRATIC_PP_MODEL, 458185377Ssam PERPART_PIECEWISE_LINEAR_PP_MODEL, 459218420Sadrian} DfllDroopModelSelect_e; 460218420Sadrian 461218420Sadriantypedef struct { 462218420Sadrian uint32_t Fset[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //in GHz, store in IEEE float format 463185377Ssam uint32_t Vdroop[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //in V , store in IEEE float format 464185377Ssam}PiecewiseLinearDroopInt_t; 465185377Ssam 466185377Ssamtypedef enum { 467185377Ssam GFXCLK_SOURCE_PLL = 0, 468185377Ssam GFXCLK_SOURCE_DFLL, 469185377Ssam GFXCLK_SOURCE_COUNT, 470185377Ssam} GFXCLK_SOURCE_e; 471185377Ssam 472185377Ssam//Only Clks that have DPM descriptors are listed here 473203159Srpaulotypedef enum { 474203159Srpaulo PPCLK_GFXCLK = 0, 475203159Srpaulo PPCLK_SOCCLK, 476185377Ssam PPCLK_UCLK, 477225125Sadrian PPCLK_FCLK, 478185377Ssam PPCLK_DCLK_0, 479265030Sadrian PPCLK_VCLK_0, 480185377Ssam PPCLK_DCLK_1, 481185377Ssam PPCLK_VCLK_1, 482265030Sadrian PPCLK_DCEFCLK, 483185377Ssam PPCLK_DISPCLK, 484185377Ssam PPCLK_PIXCLK, 485185377Ssam PPCLK_PHYCLK, 486185377Ssam PPCLK_DTBCLK, 487185377Ssam PPCLK_COUNT, 488185377Ssam} PPCLK_e; 489185377Ssam 490185377Ssamtypedef enum { 491185377Ssam VOLTAGE_MODE_AVFS = 0, 492185377Ssam VOLTAGE_MODE_AVFS_SS, 493185377Ssam VOLTAGE_MODE_SS, 494185377Ssam VOLTAGE_MODE_COUNT, 495185377Ssam} VOLTAGE_MODE_e; 496185377Ssam 497185377Ssam 498185377Ssamtypedef enum { 499185377Ssam AVFS_VOLTAGE_GFX = 0, 500185377Ssam AVFS_VOLTAGE_SOC, 501185377Ssam AVFS_VOLTAGE_COUNT, 502185377Ssam} AVFS_VOLTAGE_TYPE_e; 503185377Ssam 504185377Ssamtypedef enum { 505185377Ssam UCLK_DIV_BY_1 = 0, 506185377Ssam UCLK_DIV_BY_2, 507185377Ssam UCLK_DIV_BY_4, 508185377Ssam UCLK_DIV_BY_8, 509185377Ssam} UCLK_DIV_e; 510185377Ssam 511185377Ssamtypedef enum { 512185377Ssam GPIO_INT_POLARITY_ACTIVE_LOW = 0, 513185377Ssam GPIO_INT_POLARITY_ACTIVE_HIGH, 514185377Ssam} GpioIntPolarity_e; 515185377Ssam 516185377Ssamtypedef enum { 517185377Ssam PWR_CONFIG_TDP = 0, 518185377Ssam PWR_CONFIG_TGP, 519234692Sadrian PWR_CONFIG_TCP_ESTIMATED, 520234692Sadrian PWR_CONFIG_TCP_MEASURED, 521298939Spfg} PwrConfig_e; 522185377Ssam 523185377Ssamtypedef enum { 524248129Sadrian XGMI_LINK_RATE_2 = 2, // 2Gbps 525185377Ssam XGMI_LINK_RATE_4 = 4, // 4Gbps 526219978Sadrian XGMI_LINK_RATE_8 = 8, // 8Gbps 527219978Sadrian XGMI_LINK_RATE_12 = 12, // 12Gbps 528221617Sadrian XGMI_LINK_RATE_16 = 16, // 16Gbps 529221617Sadrian XGMI_LINK_RATE_17 = 17, // 17Gbps 530221617Sadrian XGMI_LINK_RATE_18 = 18, // 18Gbps 531221617Sadrian XGMI_LINK_RATE_19 = 19, // 19Gbps 532221617Sadrian XGMI_LINK_RATE_20 = 20, // 20Gbps 533221617Sadrian XGMI_LINK_RATE_21 = 21, // 21Gbps 534222301Sadrian XGMI_LINK_RATE_22 = 22, // 22Gbps 535208711Srpaulo XGMI_LINK_RATE_23 = 23, // 23Gbps 536219217Sadrian XGMI_LINK_RATE_24 = 24, // 24Gbps 537208711Srpaulo XGMI_LINK_RATE_25 = 25, // 25Gbps 538222301Sadrian XGMI_LINK_RATE_COUNT 539222301Sadrian} XGMI_LINK_RATE_e; 540222301Sadrian 541222301Sadriantypedef enum { 542222301Sadrian XGMI_LINK_WIDTH_1 = 0, // x1 543222301Sadrian XGMI_LINK_WIDTH_2, // x2 544222301Sadrian XGMI_LINK_WIDTH_4, // x4 545222301Sadrian XGMI_LINK_WIDTH_8, // x8 546222301Sadrian XGMI_LINK_WIDTH_9, // x9 547222301Sadrian XGMI_LINK_WIDTH_16, // x16 548222301Sadrian XGMI_LINK_WIDTH_COUNT 549222301Sadrian} XGMI_LINK_WIDTH_e; 550222301Sadrian 551185377Ssamtypedef struct { 552185377Ssam uint8_t VoltageMode; // 0 - AVFS only, 1- min(AVFS,SS), 2-SS only 553185377Ssam uint8_t SnapToDiscrete; // 0 - Fine grained DPM, 1 - Discrete DPM 554185377Ssam uint8_t NumDiscreteLevels; // Set to 2 (Fmin, Fmax) when using fine grained DPM, otherwise set to # discrete levels used 555185377Ssam uint8_t Padding; 556185377Ssam LinearInt_t ConversionToAvfsClk; // Transfer function to AVFS Clock (GHz->GHz) 557185377Ssam QuadraticInt_t SsCurve; // Slow-slow curve (GHz->V) 558185377Ssam uint16_t SsFmin; // Fmin for SS curve. If SS curve is selected, will use V@SSFmin for F <= Fmin 559185377Ssam uint16_t Padding16; 560185377Ssam} DpmDescriptor_t; 561188976Ssam 562188976Ssamtypedef enum { 563188976Ssam PPT_THROTTLER_PPT0, 564188976Ssam PPT_THROTTLER_PPT1, 565188976Ssam PPT_THROTTLER_PPT2, 566188976Ssam PPT_THROTTLER_PPT3, 567228834Sadrian PPT_THROTTLER_COUNT 568228834Sadrian} PPT_THROTTLER_e; 569188976Ssam 570188976Ssamtypedef enum { 571188976Ssam TEMP_EDGE, 572188976Ssam TEMP_HOTSPOT, 573188976Ssam TEMP_MEM, 574188976Ssam TEMP_VR_GFX, 575188976Ssam TEMP_VR_MEM0, 576188976Ssam TEMP_VR_MEM1, 577188976Ssam TEMP_VR_SOC, 578188976Ssam TEMP_LIQUID0, 579208711Srpaulo TEMP_LIQUID1, 580208711Srpaulo TEMP_PLX, 581185377Ssam TEMP_COUNT, 582185377Ssam} TEMP_e; 583185377Ssam 584185377Ssamtypedef enum { 585203159Srpaulo TDC_THROTTLER_GFX, 586185377Ssam TDC_THROTTLER_SOC, 587222301Sadrian TDC_THROTTLER_COUNT 588222301Sadrian} TDC_THROTTLER_e; 589222301Sadrian 590222301Sadriantypedef enum { 591222301Sadrian CUSTOMER_VARIANT_ROW, 592222301Sadrian CUSTOMER_VARIANT_FALCON, 593222301Sadrian CUSTOMER_VARIANT_COUNT, 594222301Sadrian} CUSTOMER_VARIANT_e; 595222301Sadrian 596222301Sadrian// Used for 2-step UCLK DPM change workaround 597222301Sadriantypedef struct { 598185377Ssam uint16_t Fmin; 599185377Ssam uint16_t Fmax; 600185377Ssam} UclkDpmChangeRange_t; 601185377Ssam 602185377Ssam#pragma pack(push, 1) 603185377Ssamtypedef struct { 604185377Ssam // MAJOR SECTION: SKU PARAMETERS 605185377Ssam 606249516Sadrian uint32_t Version; 607249516Sadrian 608249516Sadrian // SECTION: Feature Enablement 609249516Sadrian uint32_t FeaturesToRun[NUM_FEATURES / 32]; 610249516Sadrian 611249516Sadrian // SECTION: Infrastructure Limits 612249516Sadrian uint16_t SocketPowerLimitAc[PPT_THROTTLER_COUNT]; // Watts 613249516Sadrian uint16_t SocketPowerLimitAcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms 614249516Sadrian uint16_t SocketPowerLimitDc[PPT_THROTTLER_COUNT]; // Watts 615249516Sadrian uint16_t SocketPowerLimitDcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms 616249516Sadrian 617249516Sadrian uint16_t TdcLimit[TDC_THROTTLER_COUNT]; // Amps 618249516Sadrian uint16_t TdcLimitTau[TDC_THROTTLER_COUNT]; // Time constant of LPF in ms 619249516Sadrian 620249516Sadrian uint16_t TemperatureLimit[TEMP_COUNT]; // Celcius 621249516Sadrian 622249516Sadrian uint32_t FitLimit; // Failures in time (failures per million parts over the defined lifetime) 623249516Sadrian 624249516Sadrian // SECTION: Power Configuration 625221573Sadrian uint8_t TotalPowerConfig; //0-TDP, 1-TGP, 2-TCP Estimated, 3-TCP Measured. Use defines from PwrConfig_e 626221573Sadrian uint8_t TotalPowerPadding[3]; 627221573Sadrian 628221573Sadrian // SECTION: APCC Settings 629221573Sadrian uint32_t ApccPlusResidencyLimit; 630221573Sadrian 631221573Sadrian //SECTION: SMNCLK DPM 632221573Sadrian uint16_t SmnclkDpmFreq [NUM_SMNCLK_DPM_LEVELS]; // in MHz 633221573Sadrian uint16_t SmnclkDpmVoltage [NUM_SMNCLK_DPM_LEVELS]; // mV(Q2) 634221573Sadrian 635221573Sadrian uint32_t PaddingAPCC; 636185377Ssam uint16_t PerPartDroopVsetGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //In mV(Q2) 637185377Ssam uint16_t PaddingPerPartDroop; 638185377Ssam 639185377Ssam // SECTION: Throttler settings 640185377Ssam uint32_t ThrottlerControlMask; // See Throtter masks defines 641185377Ssam 642185377Ssam // SECTION: FW DSTATE Settings 643185377Ssam uint32_t FwDStateMask; // See FW DState masks defines 644185377Ssam 645185377Ssam // SECTION: ULV Settings 646221608Sadrian uint16_t UlvVoltageOffsetSoc; // In mV(Q2) 647221608Sadrian uint16_t UlvVoltageOffsetGfx; // In mV(Q2) 648221608Sadrian 649185377Ssam uint16_t MinVoltageUlvGfx; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX in ULV mode 650221573Sadrian uint16_t MinVoltageUlvSoc; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC in ULV mode 651221573Sadrian 652221573Sadrian uint16_t SocLIVmin; // In mV(Q2) Long Idle Vmin (deep ULV), for VDD_SOC 653221573Sadrian uint16_t PaddingLIVmin; 654185377Ssam 655185377Ssam uint8_t GceaLinkMgrIdleThreshold; //Set by SMU FW during enablment of GFXOFF. Controls delay for GFX SDP port disconnection during idle events 656185377Ssam uint8_t paddingRlcUlvParams[3]; 657185377Ssam 658185377Ssam // SECTION: Voltage Control Parameters 659185377Ssam uint16_t MinVoltageGfx; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX 660185377Ssam uint16_t MinVoltageSoc; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC 661185377Ssam uint16_t MaxVoltageGfx; // In mV(Q2) Maximum Voltage allowable of VDD_GFX 662185377Ssam uint16_t MaxVoltageSoc; // In mV(Q2) Maximum Voltage allowable of VDD_SOC 663185377Ssam 664185377Ssam uint16_t LoadLineResistanceGfx; // In mOhms with 8 fractional bits 665185377Ssam uint16_t LoadLineResistanceSoc; // In mOhms with 8 fractional bits 666185377Ssam 667185377Ssam // SECTION: Temperature Dependent Vmin 668185377Ssam uint16_t VDDGFX_TVmin; //Celcius 669221573Sadrian uint16_t VDDSOC_TVmin; //Celcius 670221573Sadrian uint16_t VDDGFX_Vmin_HiTemp; // mV Q2 671221573Sadrian uint16_t VDDGFX_Vmin_LoTemp; // mV Q2 672221573Sadrian uint16_t VDDSOC_Vmin_HiTemp; // mV Q2 673221573Sadrian uint16_t VDDSOC_Vmin_LoTemp; // mV Q2 674221573Sadrian 675221573Sadrian uint16_t VDDGFX_TVminHystersis; // Celcius 676221573Sadrian uint16_t VDDSOC_TVminHystersis; // Celcius 677221573Sadrian 678185377Ssam //SECTION: DPM Config 1 679185377Ssam DpmDescriptor_t DpmDescriptor[PPCLK_COUNT]; 680185377Ssam 681221573Sadrian uint16_t FreqTableGfx [NUM_GFXCLK_DPM_LEVELS ]; // In MHz 682221573Sadrian uint16_t FreqTableVclk [NUM_VCLK_DPM_LEVELS ]; // In MHz 683219217Sadrian uint16_t FreqTableDclk [NUM_DCLK_DPM_LEVELS ]; // In MHz 684221163Sadrian uint16_t FreqTableSocclk [NUM_SOCCLK_DPM_LEVELS ]; // In MHz 685185377Ssam uint16_t FreqTableUclk [NUM_UCLK_DPM_LEVELS ]; // In MHz 686185377Ssam uint16_t FreqTableDcefclk [NUM_DCEFCLK_DPM_LEVELS ]; // In MHz 687185377Ssam uint16_t FreqTableDispclk [NUM_DISPCLK_DPM_LEVELS ]; // In MHz 688185377Ssam uint16_t FreqTablePixclk [NUM_PIXCLK_DPM_LEVELS ]; // In MHz 689185377Ssam uint16_t FreqTablePhyclk [NUM_PHYCLK_DPM_LEVELS ]; // In MHz 690185377Ssam uint16_t FreqTableDtbclk [NUM_DTBCLK_DPM_LEVELS ]; // In MHz 691185377Ssam uint16_t FreqTableFclk [NUM_FCLK_DPM_LEVELS ]; // In MHz 692185377Ssam uint32_t Paddingclks; 693203159Srpaulo 694203159Srpaulo DroopInt_t PerPartDroopModelGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //GHz ->Vstore in IEEE float format 695222301Sadrian 696227408Sadrian uint32_t DcModeMaxFreq [PPCLK_COUNT ]; // In MHz 697227408Sadrian 698227408Sadrian uint8_t FreqTableUclkDiv [NUM_UCLK_DPM_LEVELS ]; // 0:Div-1, 1:Div-1/2, 2:Div-1/4, 3:Div-1/8 699227408Sadrian 700185377Ssam // Used for MALL performance boost 701221480Sadrian uint16_t FclkBoostFreq; // In Mhz 702217881Sadrian uint16_t FclkParamPadding; 703217881Sadrian 704217881Sadrian // SECTION: DPM Config 2 705217881Sadrian uint16_t Mp0clkFreq [NUM_MP0CLK_DPM_LEVELS]; // in MHz 706185377Ssam uint16_t Mp0DpmVoltage [NUM_MP0CLK_DPM_LEVELS]; // mV(Q2) 707221480Sadrian uint16_t MemVddciVoltage [NUM_UCLK_DPM_LEVELS]; // mV(Q2) 708221573Sadrian uint16_t MemMvddVoltage [NUM_UCLK_DPM_LEVELS]; // mV(Q2) 709221480Sadrian // GFXCLK DPM 710221480Sadrian uint16_t GfxclkFgfxoffEntry; // in Mhz 711185377Ssam uint16_t GfxclkFinit; // in Mhz 712221480Sadrian uint16_t GfxclkFidle; // in MHz 713221573Sadrian uint8_t GfxclkSource; // 0 = PLL, 1 = DFLL 714221480Sadrian uint8_t GfxclkPadding; 715185377Ssam 716221480Sadrian // GFX GPO 717221480Sadrian uint8_t GfxGpoSubFeatureMask; // bit 0 = PACE, bit 1 = DEM 718221163Sadrian uint8_t GfxGpoEnabledWorkPolicyMask; //Any policy that GPO can be enabled 719221163Sadrian uint8_t GfxGpoDisabledWorkPolicyMask; //Any policy that GPO can be disabled 720221480Sadrian uint8_t GfxGpoPadding[1]; 721221163Sadrian uint32_t GfxGpoVotingAllow; //For indicating which feature changes should result in a GPO table recalculation 722221163Sadrian 723221480Sadrian uint32_t GfxGpoPadding32[4]; 724221480Sadrian 725185377Ssam uint16_t GfxDcsFopt; // Optimal GFXCLK for DCS in Mhz 726185377Ssam uint16_t GfxDcsFclkFopt; // Optimal FCLK for DCS in Mhz 727221480Sadrian uint16_t GfxDcsUclkFopt; // Optimal UCLK for DCS in Mhz 728185377Ssam 729185377Ssam uint16_t DcsGfxOffVoltage; //Voltage in mV(Q2) applied to VDDGFX when entering DCS GFXOFF phase 730221480Sadrian 731185377Ssam uint16_t DcsMinGfxOffTime; //Minimum amount of time PMFW shuts GFX OFF as part of GFX DCS phase 732185377Ssam uint16_t DcsMaxGfxOffTime; //Maximum amount of time PMFW can shut GFX OFF as part of GFX DCS phase at a stretch. 733185377Ssam 734185377Ssam uint32_t DcsMinCreditAccum; //Min amount of positive credit accumulation before waking GFX up as part of DCS. 735221480Sadrian 736221480Sadrian uint16_t DcsExitHysteresis; //The min amount of time power credit accumulator should have a value > 0 before SMU exits the DCS throttling phase. 737185377Ssam uint16_t DcsTimeout; //This is the amount of time SMU FW waits for RLC to put GFX into GFXOFF before reverting to the fallback mechanism of throttling GFXCLK to Fmin. 738185377Ssam 739221480Sadrian uint32_t DcsParamPadding[5]; 740185377Ssam 741185377Ssam uint16_t FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS]; // Q8.8 742221480Sadrian 743185377Ssam // UCLK section 744185377Ssam uint8_t LowestUclkReservedForUlv; // Set this to 1 if UCLK DPM0 is reserved for ULV-mode only 745221666Sadrian uint8_t PaddingMem[3]; 746221480Sadrian 747185377Ssam uint8_t UclkDpmPstates [NUM_UCLK_DPM_LEVELS]; // 4 DPM states, 0-P0, 1-P1, 2-P2, 3-P3. 748221480Sadrian 749221480Sadrian // Used for 2-Step UCLK change workaround 750221480Sadrian UclkDpmChangeRange_t UclkDpmSrcFreqRange; // In Mhz 751185377Ssam UclkDpmChangeRange_t UclkDpmTargFreqRange; // In Mhz 752221480Sadrian uint16_t UclkDpmMidstepFreq; // In Mhz 753221480Sadrian uint16_t UclkMidstepPadding; 754185377Ssam 755185377Ssam // Link DPM Settings 756221480Sadrian uint8_t PcieGenSpeed[NUM_LINK_LEVELS]; ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 3:PciE-gen4 757185377Ssam uint8_t PcieLaneCount[NUM_LINK_LEVELS]; ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16 758185377Ssam uint16_t LclkFreq[NUM_LINK_LEVELS]; 759221480Sadrian 760203159Srpaulo // SECTION: Fan Control 761203159Srpaulo uint16_t FanStopTemp; //Celcius 762203159Srpaulo uint16_t FanStartTemp; //Celcius 763221480Sadrian 764203159Srpaulo uint16_t FanGain[TEMP_COUNT]; 765221480Sadrian 766221480Sadrian uint16_t FanPwmMin; 767221480Sadrian uint16_t FanAcousticLimitRpm; 768221480Sadrian uint16_t FanThrottlingRpm; 769203159Srpaulo uint16_t FanMaximumRpm; 770203159Srpaulo uint16_t MGpuFanBoostLimitRpm; 771203959Srpaulo uint16_t FanTargetTemperature; 772221480Sadrian uint16_t FanTargetGfxclk; 773203159Srpaulo uint16_t FanPadding16; 774221480Sadrian uint8_t FanTempInputSelect; 775221480Sadrian uint8_t FanPadding; 776221480Sadrian uint8_t FanZeroRpmEnable; 777221480Sadrian uint8_t FanTachEdgePerRev; 778218061Sadrian 779218061Sadrian // The following are AFC override parameters. Leave at 0 to use FW defaults. 780218061Sadrian int16_t FuzzyFan_ErrorSetDelta; 781218061Sadrian int16_t FuzzyFan_ErrorRateSetDelta; 782222300Sadrian int16_t FuzzyFan_PwmSetDelta; 783222300Sadrian uint16_t FuzzyFan_Reserved; 784222300Sadrian 785227408Sadrian // SECTION: AVFS 786227408Sadrian // Overrides 787227408Sadrian uint8_t OverrideAvfsGb[AVFS_VOLTAGE_COUNT]; 788227408Sadrian uint8_t dBtcGbGfxDfllModelSelect; //0 -> fused piece-wise model, 1 -> piece-wise linear(PPTable), 2 -> quadratic model(PPTable) 789222300Sadrian uint8_t Padding8_Avfs; 790222300Sadrian 791222300Sadrian QuadraticInt_t qAvfsGb[AVFS_VOLTAGE_COUNT]; // GHz->V Override of fused curve 792222300Sadrian DroopInt_t dBtcGbGfxPll; // GHz->V BtcGb 793222300Sadrian DroopInt_t dBtcGbGfxDfll; // GHz->V BtcGb 794222300Sadrian DroopInt_t dBtcGbSoc; // GHz->V BtcGb 795222300Sadrian LinearInt_t qAgingGb[AVFS_VOLTAGE_COUNT]; // GHz->V 796222300Sadrian 797222300Sadrian PiecewiseLinearDroopInt_t PiecewiseLinearDroopIntGfxDfll; //GHz ->Vstore in IEEE float format 798222300Sadrian 799222300Sadrian QuadraticInt_t qStaticVoltageOffset[AVFS_VOLTAGE_COUNT]; // GHz->V 800222300Sadrian 801222300Sadrian uint16_t DcTol[AVFS_VOLTAGE_COUNT]; // mV Q2 802222300Sadrian 803222300Sadrian uint8_t DcBtcEnabled[AVFS_VOLTAGE_COUNT]; 804222300Sadrian uint8_t Padding8_GfxBtc[2]; 805222300Sadrian 806222300Sadrian uint16_t DcBtcMin[AVFS_VOLTAGE_COUNT]; // mV Q2 807222300Sadrian uint16_t DcBtcMax[AVFS_VOLTAGE_COUNT]; // mV Q2 808222300Sadrian 809222300Sadrian uint16_t DcBtcGb[AVFS_VOLTAGE_COUNT]; // mV Q2 810219217Sadrian 811219217Sadrian // SECTION: XGMI 812219217Sadrian uint8_t XgmiDpmPstates[NUM_XGMI_LEVELS]; // 2 DPM states, high and low. 0-P0, 1-P1, 2-P2, 3-P3. 813185377Ssam uint8_t XgmiDpmSpare[2]; 814 815 // SECTION: Advanced Options 816 uint32_t DebugOverrides; 817 QuadraticInt_t ReservedEquation0; 818 QuadraticInt_t ReservedEquation1; 819 QuadraticInt_t ReservedEquation2; 820 QuadraticInt_t ReservedEquation3; 821 822 // SECTION: Sku Reserved 823 uint8_t CustomerVariant; 824 825 //VC BTC parameters are only applicable to VDD_GFX domain 826 uint8_t VcBtcEnabled; 827 uint16_t VcBtcVminT0; // T0_VMIN 828 uint16_t VcBtcFixedVminAgingOffset; // FIXED_VMIN_AGING_OFFSET 829 uint16_t VcBtcVmin2PsmDegrationGb; // VMIN_TO_PSM_DEGRADATION_GB 830 uint32_t VcBtcPsmA; // A_PSM 831 uint32_t VcBtcPsmB; // B_PSM 832 uint32_t VcBtcVminA; // A_VMIN 833 uint32_t VcBtcVminB; // B_VMIN 834 835 //GPIO Board feature 836 uint16_t LedGpio; //GeneriA GPIO flag used to control the radeon LEDs 837 uint16_t GfxPowerStagesGpio; //Genlk_vsync GPIO flag used to control gfx power stages 838 839 uint32_t SkuReserved[8]; 840 841 842 // MAJOR SECTION: BOARD PARAMETERS 843 844 //SECTION: Gaming Clocks 845 uint32_t GamingClk[6]; 846 847 // SECTION: I2C Control 848 I2cControllerConfig_t I2cControllers[NUM_I2C_CONTROLLERS]; 849 850 uint8_t GpioScl; // GPIO Number for SCL Line, used only for CKSVII2C1 851 uint8_t GpioSda; // GPIO Number for SDA Line, used only for CKSVII2C1 852 uint8_t FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off 853 uint8_t I2cSpare[1]; 854 855 // SECTION: SVI2 Board Parameters 856 uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 857 uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 858 uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 859 uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 860 861 uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 862 uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 863 uint8_t VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 864 uint8_t MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 865 866 // SECTION: Telemetry Settings 867 uint16_t GfxMaxCurrent; // in Amps 868 int8_t GfxOffset; // in Amps 869 uint8_t Padding_TelemetryGfx; 870 871 uint16_t SocMaxCurrent; // in Amps 872 int8_t SocOffset; // in Amps 873 uint8_t Padding_TelemetrySoc; 874 875 uint16_t Mem0MaxCurrent; // in Amps 876 int8_t Mem0Offset; // in Amps 877 uint8_t Padding_TelemetryMem0; 878 879 uint16_t Mem1MaxCurrent; // in Amps 880 int8_t Mem1Offset; // in Amps 881 uint8_t Padding_TelemetryMem1; 882 883 uint32_t MvddRatio; // This is used for MVDD Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16) 884 885 // SECTION: GPIO Settings 886 uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 887 uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 888 uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 889 uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 890 891 uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 892 uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 893 uint8_t GthrGpio; // GPIO pin configured for GTHR Event 894 uint8_t GthrPolarity; // replace GPIO polarity for GTHR 895 896 // LED Display Settings 897 uint8_t LedPin0; // GPIO number for LedPin[0] 898 uint8_t LedPin1; // GPIO number for LedPin[1] 899 uint8_t LedPin2; // GPIO number for LedPin[2] 900 uint8_t LedEnableMask; 901 902 uint8_t LedPcie; // GPIO number for PCIE results 903 uint8_t LedError; // GPIO number for Error Cases 904 uint8_t LedSpare1[2]; 905 906 // SECTION: Clock Spread Spectrum 907 908 // GFXCLK PLL Spread Spectrum 909 uint8_t PllGfxclkSpreadEnabled; // on or off 910 uint8_t PllGfxclkSpreadPercent; // Q4.4 911 uint16_t PllGfxclkSpreadFreq; // kHz 912 913 // GFXCLK DFLL Spread Spectrum 914 uint8_t DfllGfxclkSpreadEnabled; // on or off 915 uint8_t DfllGfxclkSpreadPercent; // Q4.4 916 uint16_t DfllGfxclkSpreadFreq; // kHz 917 918 // UCLK Spread Spectrum 919 uint16_t UclkSpreadPadding; 920 uint16_t UclkSpreadFreq; // kHz 921 922 // FCLK Spread Spectrum 923 uint8_t FclkSpreadEnabled; // on or off 924 uint8_t FclkSpreadPercent; // Q4.4 925 uint16_t FclkSpreadFreq; // kHz 926 927 // Section: Memory Config 928 uint32_t MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask. 929 930 uint8_t DramBitWidth; // For DRAM use only. See Dram Bit width type defines 931 uint8_t PaddingMem1[3]; 932 933 // Section: Total Board Power 934 uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 935 uint16_t BoardPowerPadding; 936 937 // SECTION: XGMI Training 938 uint8_t XgmiLinkSpeed [NUM_XGMI_PSTATE_LEVELS]; 939 uint8_t XgmiLinkWidth [NUM_XGMI_PSTATE_LEVELS]; 940 941 uint16_t XgmiFclkFreq [NUM_XGMI_PSTATE_LEVELS]; 942 uint16_t XgmiSocVoltage [NUM_XGMI_PSTATE_LEVELS]; 943 944 // SECTION: UMC feature flags 945 uint8_t HsrEnabled; 946 uint8_t VddqOffEnabled; 947 uint8_t PaddingUmcFlags[2]; 948 949 // UCLK Spread Spectrum 950 uint8_t UclkSpreadPercent[16]; 951 952 // SECTION: Board Reserved 953 uint32_t BoardReserved[11]; 954 955 // SECTION: Structure Padding 956 957 // Padding for MMHUB - do not modify this 958 uint32_t MmHubPadding[8]; // SMU internal use 959 960} PPTable_t; 961#pragma pack(pop) 962 963typedef struct { 964 // MAJOR SECTION: SKU PARAMETERS 965 966 uint32_t Version; 967 968 // SECTION: Feature Enablement 969 uint32_t FeaturesToRun[NUM_FEATURES / 32]; 970 971 // SECTION: Infrastructure Limits 972 uint16_t SocketPowerLimitAc[PPT_THROTTLER_COUNT]; // Watts 973 uint16_t SocketPowerLimitAcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms 974 uint16_t SocketPowerLimitDc[PPT_THROTTLER_COUNT]; // Watts 975 uint16_t SocketPowerLimitDcTau[PPT_THROTTLER_COUNT]; // Time constant of LPF in ms 976 977 uint16_t TdcLimit[TDC_THROTTLER_COUNT]; // Amps 978 uint16_t TdcLimitTau[TDC_THROTTLER_COUNT]; // Time constant of LPF in ms 979 980 uint16_t TemperatureLimit[TEMP_COUNT]; // Celcius 981 982 uint32_t FitLimit; // Failures in time (failures per million parts over the defined lifetime) 983 984 // SECTION: Power Configuration 985 uint8_t TotalPowerConfig; //0-TDP, 1-TGP, 2-TCP Estimated, 3-TCP Measured. Use defines from PwrConfig_e 986 uint8_t TotalPowerPadding[3]; 987 988 // SECTION: APCC Settings 989 uint32_t ApccPlusResidencyLimit; 990 991 //SECTION: SMNCLK DPM 992 uint16_t SmnclkDpmFreq [NUM_SMNCLK_DPM_LEVELS]; // in MHz 993 uint16_t SmnclkDpmVoltage [NUM_SMNCLK_DPM_LEVELS]; // mV(Q2) 994 995 uint32_t PaddingAPCC; 996 uint16_t PerPartDroopVsetGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //In mV(Q2) 997 uint16_t PaddingPerPartDroop; 998 999 // SECTION: Throttler settings 1000 uint32_t ThrottlerControlMask; // See Throtter masks defines 1001 1002 // SECTION: FW DSTATE Settings 1003 uint32_t FwDStateMask; // See FW DState masks defines 1004 1005 // SECTION: ULV Settings 1006 uint16_t UlvVoltageOffsetSoc; // In mV(Q2) 1007 uint16_t UlvVoltageOffsetGfx; // In mV(Q2) 1008 1009 uint16_t MinVoltageUlvGfx; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX in ULV mode 1010 uint16_t MinVoltageUlvSoc; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC in ULV mode 1011 1012 uint16_t SocLIVmin; 1013 uint16_t SocLIVminoffset; 1014 1015 uint8_t GceaLinkMgrIdleThreshold; //Set by SMU FW during enablment of GFXOFF. Controls delay for GFX SDP port disconnection during idle events 1016 uint8_t paddingRlcUlvParams[3]; 1017 1018 // SECTION: Voltage Control Parameters 1019 uint16_t MinVoltageGfx; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_GFX 1020 uint16_t MinVoltageSoc; // In mV(Q2) Minimum Voltage ("Vmin") of VDD_SOC 1021 uint16_t MaxVoltageGfx; // In mV(Q2) Maximum Voltage allowable of VDD_GFX 1022 uint16_t MaxVoltageSoc; // In mV(Q2) Maximum Voltage allowable of VDD_SOC 1023 1024 uint16_t LoadLineResistanceGfx; // In mOhms with 8 fractional bits 1025 uint16_t LoadLineResistanceSoc; // In mOhms with 8 fractional bits 1026 1027 // SECTION: Temperature Dependent Vmin 1028 uint16_t VDDGFX_TVmin; //Celcius 1029 uint16_t VDDSOC_TVmin; //Celcius 1030 uint16_t VDDGFX_Vmin_HiTemp; // mV Q2 1031 uint16_t VDDGFX_Vmin_LoTemp; // mV Q2 1032 uint16_t VDDSOC_Vmin_HiTemp; // mV Q2 1033 uint16_t VDDSOC_Vmin_LoTemp; // mV Q2 1034 1035 uint16_t VDDGFX_TVminHystersis; // Celcius 1036 uint16_t VDDSOC_TVminHystersis; // Celcius 1037 1038 //SECTION: DPM Config 1 1039 DpmDescriptor_t DpmDescriptor[PPCLK_COUNT]; 1040 1041 uint16_t FreqTableGfx [NUM_GFXCLK_DPM_LEVELS ]; // In MHz 1042 uint16_t FreqTableVclk [NUM_VCLK_DPM_LEVELS ]; // In MHz 1043 uint16_t FreqTableDclk [NUM_DCLK_DPM_LEVELS ]; // In MHz 1044 uint16_t FreqTableSocclk [NUM_SOCCLK_DPM_LEVELS ]; // In MHz 1045 uint16_t FreqTableUclk [NUM_UCLK_DPM_LEVELS ]; // In MHz 1046 uint16_t FreqTableDcefclk [NUM_DCEFCLK_DPM_LEVELS ]; // In MHz 1047 uint16_t FreqTableDispclk [NUM_DISPCLK_DPM_LEVELS ]; // In MHz 1048 uint16_t FreqTablePixclk [NUM_PIXCLK_DPM_LEVELS ]; // In MHz 1049 uint16_t FreqTablePhyclk [NUM_PHYCLK_DPM_LEVELS ]; // In MHz 1050 uint16_t FreqTableDtbclk [NUM_DTBCLK_DPM_LEVELS ]; // In MHz 1051 uint16_t FreqTableFclk [NUM_FCLK_DPM_LEVELS ]; // In MHz 1052 uint32_t Paddingclks; 1053 1054 DroopInt_t PerPartDroopModelGfxDfll[NUM_PIECE_WISE_LINEAR_DROOP_MODEL_VF_POINTS]; //GHz ->Vstore in IEEE float format 1055 1056 uint32_t DcModeMaxFreq [PPCLK_COUNT ]; // In MHz 1057 1058 uint8_t FreqTableUclkDiv [NUM_UCLK_DPM_LEVELS ]; // 0:Div-1, 1:Div-1/2, 2:Div-1/4, 3:Div-1/8 1059 1060 // Used for MALL performance boost 1061 uint16_t FclkBoostFreq; // In Mhz 1062 uint16_t FclkParamPadding; 1063 1064 // SECTION: DPM Config 2 1065 uint16_t Mp0clkFreq [NUM_MP0CLK_DPM_LEVELS]; // in MHz 1066 uint16_t Mp0DpmVoltage [NUM_MP0CLK_DPM_LEVELS]; // mV(Q2) 1067 uint16_t MemVddciVoltage [NUM_UCLK_DPM_LEVELS]; // mV(Q2) 1068 uint16_t MemMvddVoltage [NUM_UCLK_DPM_LEVELS]; // mV(Q2) 1069 // GFXCLK DPM 1070 uint16_t GfxclkFgfxoffEntry; // in Mhz 1071 uint16_t GfxclkFinit; // in Mhz 1072 uint16_t GfxclkFidle; // in MHz 1073 uint8_t GfxclkSource; // 0 = PLL, 1 = DFLL 1074 uint8_t GfxclkPadding; 1075 1076 // GFX GPO 1077 uint8_t GfxGpoSubFeatureMask; // bit 0 = PACE, bit 1 = DEM 1078 uint8_t GfxGpoEnabledWorkPolicyMask; //Any policy that GPO can be enabled 1079 uint8_t GfxGpoDisabledWorkPolicyMask; //Any policy that GPO can be disabled 1080 uint8_t GfxGpoPadding[1]; 1081 uint32_t GfxGpoVotingAllow; //For indicating which feature changes should result in a GPO table recalculation 1082 1083 uint32_t GfxGpoPadding32[4]; 1084 1085 uint16_t GfxDcsFopt; // Optimal GFXCLK for DCS in Mhz 1086 uint16_t GfxDcsFclkFopt; // Optimal FCLK for DCS in Mhz 1087 uint16_t GfxDcsUclkFopt; // Optimal UCLK for DCS in Mhz 1088 1089 uint16_t DcsGfxOffVoltage; //Voltage in mV(Q2) applied to VDDGFX when entering DCS GFXOFF phase 1090 1091 uint16_t DcsMinGfxOffTime; //Minimum amount of time PMFW shuts GFX OFF as part of GFX DCS phase 1092 uint16_t DcsMaxGfxOffTime; //Maximum amount of time PMFW can shut GFX OFF as part of GFX DCS phase at a stretch. 1093 1094 uint32_t DcsMinCreditAccum; //Min amount of positive credit accumulation before waking GFX up as part of DCS. 1095 1096 uint16_t DcsExitHysteresis; //The min amount of time power credit accumulator should have a value > 0 before SMU exits the DCS throttling phase. 1097 uint16_t DcsTimeout; //This is the amount of time SMU FW waits for RLC to put GFX into GFXOFF before reverting to the fallback mechanism of throttling GFXCLK to Fmin. 1098 1099 uint32_t DcsParamPadding[5]; 1100 1101 uint16_t FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS]; // Q8.8 1102 1103 // UCLK section 1104 uint8_t LowestUclkReservedForUlv; // Set this to 1 if UCLK DPM0 is reserved for ULV-mode only 1105 uint8_t PaddingMem[3]; 1106 1107 uint8_t UclkDpmPstates [NUM_UCLK_DPM_LEVELS]; // 4 DPM states, 0-P0, 1-P1, 2-P2, 3-P3. 1108 1109 // Used for 2-Step UCLK change workaround 1110 UclkDpmChangeRange_t UclkDpmSrcFreqRange; // In Mhz 1111 UclkDpmChangeRange_t UclkDpmTargFreqRange; // In Mhz 1112 uint16_t UclkDpmMidstepFreq; // In Mhz 1113 uint16_t UclkMidstepPadding; 1114 1115 // Link DPM Settings 1116 uint8_t PcieGenSpeed[NUM_LINK_LEVELS]; ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 3:PciE-gen4 1117 uint8_t PcieLaneCount[NUM_LINK_LEVELS]; ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16 1118 uint16_t LclkFreq[NUM_LINK_LEVELS]; 1119 1120 // SECTION: Fan Control 1121 uint16_t FanStopTemp; //Celcius 1122 uint16_t FanStartTemp; //Celcius 1123 1124 uint16_t FanGain[TEMP_COUNT]; 1125 1126 uint16_t FanPwmMin; 1127 uint16_t FanAcousticLimitRpm; 1128 uint16_t FanThrottlingRpm; 1129 uint16_t FanMaximumRpm; 1130 uint16_t MGpuFanBoostLimitRpm; 1131 uint16_t FanTargetTemperature; 1132 uint16_t FanTargetGfxclk; 1133 uint16_t FanPadding16; 1134 uint8_t FanTempInputSelect; 1135 uint8_t FanPadding; 1136 uint8_t FanZeroRpmEnable; 1137 uint8_t FanTachEdgePerRev; 1138 1139 // The following are AFC override parameters. Leave at 0 to use FW defaults. 1140 int16_t FuzzyFan_ErrorSetDelta; 1141 int16_t FuzzyFan_ErrorRateSetDelta; 1142 int16_t FuzzyFan_PwmSetDelta; 1143 uint16_t FuzzyFan_Reserved; 1144 1145 // SECTION: AVFS 1146 // Overrides 1147 uint8_t OverrideAvfsGb[AVFS_VOLTAGE_COUNT]; 1148 uint8_t dBtcGbGfxDfllModelSelect; //0 -> fused piece-wise model, 1 -> piece-wise linear(PPTable), 2 -> quadratic model(PPTable) 1149 uint8_t Padding8_Avfs; 1150 1151 QuadraticInt_t qAvfsGb[AVFS_VOLTAGE_COUNT]; // GHz->V Override of fused curve 1152 DroopInt_t dBtcGbGfxPll; // GHz->V BtcGb 1153 DroopInt_t dBtcGbGfxDfll; // GHz->V BtcGb 1154 DroopInt_t dBtcGbSoc; // GHz->V BtcGb 1155 LinearInt_t qAgingGb[AVFS_VOLTAGE_COUNT]; // GHz->V 1156 1157 PiecewiseLinearDroopInt_t PiecewiseLinearDroopIntGfxDfll; //GHz ->Vstore in IEEE float format 1158 1159 QuadraticInt_t qStaticVoltageOffset[AVFS_VOLTAGE_COUNT]; // GHz->V 1160 1161 uint16_t DcTol[AVFS_VOLTAGE_COUNT]; // mV Q2 1162 1163 uint8_t DcBtcEnabled[AVFS_VOLTAGE_COUNT]; 1164 uint8_t Padding8_GfxBtc[2]; 1165 1166 uint16_t DcBtcMin[AVFS_VOLTAGE_COUNT]; // mV Q2 1167 uint16_t DcBtcMax[AVFS_VOLTAGE_COUNT]; // mV Q2 1168 1169 uint16_t DcBtcGb[AVFS_VOLTAGE_COUNT]; // mV Q2 1170 1171 // SECTION: XGMI 1172 uint8_t XgmiDpmPstates[NUM_XGMI_LEVELS]; // 2 DPM states, high and low. 0-P0, 1-P1, 2-P2, 3-P3. 1173 uint8_t XgmiDpmSpare[2]; 1174 1175 // SECTION: Advanced Options 1176 uint32_t DebugOverrides; 1177 QuadraticInt_t ReservedEquation0; 1178 QuadraticInt_t ReservedEquation1; 1179 QuadraticInt_t ReservedEquation2; 1180 QuadraticInt_t ReservedEquation3; 1181 1182 // SECTION: Sku Reserved 1183 uint8_t CustomerVariant; 1184 1185 //VC BTC parameters are only applicable to VDD_GFX domain 1186 uint8_t VcBtcEnabled; 1187 uint16_t VcBtcVminT0; // T0_VMIN 1188 uint16_t VcBtcFixedVminAgingOffset; // FIXED_VMIN_AGING_OFFSET 1189 uint16_t VcBtcVmin2PsmDegrationGb; // VMIN_TO_PSM_DEGRADATION_GB 1190 uint32_t VcBtcPsmA; // A_PSM 1191 uint32_t VcBtcPsmB; // B_PSM 1192 uint32_t VcBtcVminA; // A_VMIN 1193 uint32_t VcBtcVminB; // B_VMIN 1194 1195 //GPIO Board feature 1196 uint16_t LedGpio; //GeneriA GPIO flag used to control the radeon LEDs 1197 uint16_t GfxPowerStagesGpio; //Genlk_vsync GPIO flag used to control gfx power stages 1198 1199 uint32_t SkuReserved[63]; 1200 1201 1202 1203 // MAJOR SECTION: BOARD PARAMETERS 1204 1205 //SECTION: Gaming Clocks 1206 uint32_t GamingClk[6]; 1207 1208 // SECTION: I2C Control 1209 I2cControllerConfig_t I2cControllers[NUM_I2C_CONTROLLERS]; 1210 1211 uint8_t GpioScl; // GPIO Number for SCL Line, used only for CKSVII2C1 1212 uint8_t GpioSda; // GPIO Number for SDA Line, used only for CKSVII2C1 1213 uint8_t FchUsbPdSlaveAddr; //For requesting USB PD controller S-states via FCH I2C when entering PME turn off 1214 uint8_t I2cSpare[1]; 1215 1216 // SECTION: SVI2 Board Parameters 1217 uint8_t VddGfxVrMapping; // Use VR_MAPPING* bitfields 1218 uint8_t VddSocVrMapping; // Use VR_MAPPING* bitfields 1219 uint8_t VddMem0VrMapping; // Use VR_MAPPING* bitfields 1220 uint8_t VddMem1VrMapping; // Use VR_MAPPING* bitfields 1221 1222 uint8_t GfxUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1223 uint8_t SocUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1224 uint8_t VddciUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1225 uint8_t MvddUlvPhaseSheddingMask; // set this to 1 to set PSI0/1 to 1 in ULV mode 1226 1227 // SECTION: Telemetry Settings 1228 uint16_t GfxMaxCurrent; // in Amps 1229 int8_t GfxOffset; // in Amps 1230 uint8_t Padding_TelemetryGfx; 1231 1232 uint16_t SocMaxCurrent; // in Amps 1233 int8_t SocOffset; // in Amps 1234 uint8_t Padding_TelemetrySoc; 1235 1236 uint16_t Mem0MaxCurrent; // in Amps 1237 int8_t Mem0Offset; // in Amps 1238 uint8_t Padding_TelemetryMem0; 1239 1240 uint16_t Mem1MaxCurrent; // in Amps 1241 int8_t Mem1Offset; // in Amps 1242 uint8_t Padding_TelemetryMem1; 1243 1244 uint32_t MvddRatio; // This is used for MVDD Svi2 Div Ratio workaround. It has 16 fractional bits (Q16.16) 1245 1246 // SECTION: GPIO Settings 1247 uint8_t AcDcGpio; // GPIO pin configured for AC/DC switching 1248 uint8_t AcDcPolarity; // GPIO polarity for AC/DC switching 1249 uint8_t VR0HotGpio; // GPIO pin configured for VR0 HOT event 1250 uint8_t VR0HotPolarity; // GPIO polarity for VR0 HOT event 1251 1252 uint8_t VR1HotGpio; // GPIO pin configured for VR1 HOT event 1253 uint8_t VR1HotPolarity; // GPIO polarity for VR1 HOT event 1254 uint8_t GthrGpio; // GPIO pin configured for GTHR Event 1255 uint8_t GthrPolarity; // replace GPIO polarity for GTHR 1256 1257 // LED Display Settings 1258 uint8_t LedPin0; // GPIO number for LedPin[0] 1259 uint8_t LedPin1; // GPIO number for LedPin[1] 1260 uint8_t LedPin2; // GPIO number for LedPin[2] 1261 uint8_t LedEnableMask; 1262 1263 uint8_t LedPcie; // GPIO number for PCIE results 1264 uint8_t LedError; // GPIO number for Error Cases 1265 uint8_t LedSpare1[2]; 1266 1267 // SECTION: Clock Spread Spectrum 1268 1269 // GFXCLK PLL Spread Spectrum 1270 uint8_t PllGfxclkSpreadEnabled; // on or off 1271 uint8_t PllGfxclkSpreadPercent; // Q4.4 1272 uint16_t PllGfxclkSpreadFreq; // kHz 1273 1274 // GFXCLK DFLL Spread Spectrum 1275 uint8_t DfllGfxclkSpreadEnabled; // on or off 1276 uint8_t DfllGfxclkSpreadPercent; // Q4.4 1277 uint16_t DfllGfxclkSpreadFreq; // kHz 1278 1279 // UCLK Spread Spectrum 1280 uint16_t UclkSpreadPadding; 1281 uint16_t UclkSpreadFreq; // kHz 1282 1283 // FCLK Spread Spectrum 1284 uint8_t FclkSpreadEnabled; // on or off 1285 uint8_t FclkSpreadPercent; // Q4.4 1286 uint16_t FclkSpreadFreq; // kHz 1287 1288 // Section: Memory Config 1289 uint32_t MemoryChannelEnabled; // For DRAM use only, Max 32 channels enabled bit mask. 1290 1291 uint8_t DramBitWidth; // For DRAM use only. See Dram Bit width type defines 1292 uint8_t PaddingMem1[3]; 1293 1294 // Section: Total Board Power 1295 uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power 1296 uint16_t BoardPowerPadding; 1297 1298 // SECTION: XGMI Training 1299 uint8_t XgmiLinkSpeed [NUM_XGMI_PSTATE_LEVELS]; 1300 uint8_t XgmiLinkWidth [NUM_XGMI_PSTATE_LEVELS]; 1301 1302 uint16_t XgmiFclkFreq [NUM_XGMI_PSTATE_LEVELS]; 1303 uint16_t XgmiSocVoltage [NUM_XGMI_PSTATE_LEVELS]; 1304 1305 // SECTION: UMC feature flags 1306 uint8_t HsrEnabled; 1307 uint8_t VddqOffEnabled; 1308 uint8_t PaddingUmcFlags[2]; 1309 1310 // UCLK Spread Spectrum 1311 uint8_t UclkSpreadPercent[16]; 1312 1313 // SECTION: Board Reserved 1314 uint32_t BoardReserved[11]; 1315 1316 // SECTION: Structure Padding 1317 1318 // Padding for MMHUB - do not modify this 1319 uint32_t MmHubPadding[8]; // SMU internal use 1320 1321 1322} PPTable_beige_goby_t; 1323 1324typedef struct { 1325 // Time constant parameters for clock averages in ms 1326 uint16_t GfxclkAverageLpfTau; 1327 uint16_t FclkAverageLpfTau; 1328 uint16_t UclkAverageLpfTau; 1329 uint16_t GfxActivityLpfTau; 1330 uint16_t UclkActivityLpfTau; 1331 uint16_t SocketPowerLpfTau; 1332 uint16_t VcnClkAverageLpfTau; 1333 uint16_t padding16; 1334} DriverSmuConfig_t; 1335 1336typedef struct { 1337 DriverSmuConfig_t DriverSmuConfig; 1338 1339 uint32_t Spare[7]; 1340 // Padding - ignore 1341 uint32_t MmHubPadding[8]; // SMU internal use 1342} DriverSmuConfigExternal_t; 1343 1344typedef struct { 1345 uint16_t GfxclkFmin; // MHz 1346 uint16_t GfxclkFmax; // MHz 1347 QuadraticInt_t CustomGfxVfCurve; // a: mV/MHz^2, b: mv/MHz, c: mV 1348 uint16_t CustomCurveFmin; // MHz 1349 uint16_t UclkFmin; // MHz 1350 uint16_t UclkFmax; // MHz 1351 int16_t OverDrivePct; // % 1352 uint16_t FanMaximumRpm; 1353 uint16_t FanMinimumPwm; 1354 uint16_t FanAcousticLimitRpm; 1355 uint16_t FanTargetTemperature; // Degree Celcius 1356 uint8_t FanLinearPwmPoints[NUM_OD_FAN_MAX_POINTS]; 1357 uint8_t FanLinearTempPoints[NUM_OD_FAN_MAX_POINTS]; 1358 uint16_t MaxOpTemp; // Degree Celcius 1359 int16_t VddGfxOffset; // in mV 1360 uint8_t FanZeroRpmEnable; 1361 uint8_t FanZeroRpmStopTemp; 1362 uint8_t FanMode; 1363 uint8_t Padding[1]; 1364} OverDriveTable_t; 1365 1366typedef struct { 1367 OverDriveTable_t OverDriveTable; 1368 uint32_t Spare[8]; 1369 1370 uint32_t MmHubPadding[8]; // SMU internal use 1371} OverDriveTableExternal_t; 1372 1373typedef struct { 1374 uint32_t CurrClock[PPCLK_COUNT]; 1375 1376 uint16_t AverageGfxclkFrequencyPreDs; 1377 uint16_t AverageGfxclkFrequencyPostDs; 1378 uint16_t AverageFclkFrequencyPreDs; 1379 uint16_t AverageFclkFrequencyPostDs; 1380 uint16_t AverageUclkFrequencyPreDs ; 1381 uint16_t AverageUclkFrequencyPostDs ; 1382 1383 1384 uint16_t AverageGfxActivity ; 1385 uint16_t AverageUclkActivity ; 1386 uint8_t CurrSocVoltageOffset ; 1387 uint8_t CurrGfxVoltageOffset ; 1388 uint8_t CurrMemVidOffset ; 1389 uint8_t Padding8 ; 1390 uint16_t AverageSocketPower ; 1391 uint16_t TemperatureEdge ; 1392 uint16_t TemperatureHotspot ; 1393 uint16_t TemperatureMem ; 1394 uint16_t TemperatureVrGfx ; 1395 uint16_t TemperatureVrMem0 ; 1396 uint16_t TemperatureVrMem1 ; 1397 uint16_t TemperatureVrSoc ; 1398 uint16_t TemperatureLiquid0 ; 1399 uint16_t TemperatureLiquid1 ; 1400 uint16_t TemperaturePlx ; 1401 uint16_t Padding16 ; 1402 uint32_t ThrottlerStatus ; 1403 1404 uint8_t LinkDpmLevel; 1405 uint8_t CurrFanPwm; 1406 uint16_t CurrFanSpeed; 1407 1408 //BACO metrics, PMFW-1721 1409 //metrics for D3hot entry/exit and driver ARM msgs 1410 uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT]; 1411 uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT]; 1412 uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT]; 1413 1414 //PMFW-4362 1415 uint32_t EnergyAccumulator; 1416 uint16_t AverageVclk0Frequency ; 1417 uint16_t AverageDclk0Frequency ; 1418 uint16_t AverageVclk1Frequency ; 1419 uint16_t AverageDclk1Frequency ; 1420 uint16_t VcnActivityPercentage ; //place holder, David N. to provide full sequence 1421 uint8_t PcieRate ; 1422 uint8_t PcieWidth ; 1423 uint16_t AverageGfxclkFrequencyTarget; 1424 1425 uint16_t Padding16_2; 1426} SmuMetrics_t; 1427 1428typedef struct { 1429 uint32_t CurrClock[PPCLK_COUNT]; 1430 1431 uint16_t AverageGfxclkFrequencyPreDs; 1432 uint16_t AverageGfxclkFrequencyPostDs; 1433 uint16_t AverageFclkFrequencyPreDs; 1434 uint16_t AverageFclkFrequencyPostDs; 1435 uint16_t AverageUclkFrequencyPreDs ; 1436 uint16_t AverageUclkFrequencyPostDs ; 1437 1438 1439 uint16_t AverageGfxActivity ; 1440 uint16_t AverageUclkActivity ; 1441 uint8_t CurrSocVoltageOffset ; 1442 uint8_t CurrGfxVoltageOffset ; 1443 uint8_t CurrMemVidOffset ; 1444 uint8_t Padding8 ; 1445 uint16_t AverageSocketPower ; 1446 uint16_t TemperatureEdge ; 1447 uint16_t TemperatureHotspot ; 1448 uint16_t TemperatureMem ; 1449 uint16_t TemperatureVrGfx ; 1450 uint16_t TemperatureVrMem0 ; 1451 uint16_t TemperatureVrMem1 ; 1452 uint16_t TemperatureVrSoc ; 1453 uint16_t TemperatureLiquid0 ; 1454 uint16_t TemperatureLiquid1 ; 1455 uint16_t TemperaturePlx ; 1456 uint16_t Padding16 ; 1457 uint32_t AccCnt ; 1458 uint8_t ThrottlingPercentage[THROTTLER_COUNT]; 1459 1460 1461 uint8_t LinkDpmLevel; 1462 uint8_t CurrFanPwm; 1463 uint16_t CurrFanSpeed; 1464 1465 //BACO metrics, PMFW-1721 1466 //metrics for D3hot entry/exit and driver ARM msgs 1467 uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT]; 1468 uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT]; 1469 uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT]; 1470 1471 //PMFW-4362 1472 uint32_t EnergyAccumulator; 1473 uint16_t AverageVclk0Frequency ; 1474 uint16_t AverageDclk0Frequency ; 1475 uint16_t AverageVclk1Frequency ; 1476 uint16_t AverageDclk1Frequency ; 1477 uint16_t VcnActivityPercentage ; //place holder, David N. to provide full sequence 1478 uint8_t PcieRate ; 1479 uint8_t PcieWidth ; 1480 uint16_t AverageGfxclkFrequencyTarget; 1481 1482 uint16_t Padding16_2; 1483} SmuMetrics_V2_t; 1484 1485typedef struct { 1486 uint32_t CurrClock[PPCLK_COUNT]; 1487 1488 uint16_t AverageGfxclkFrequencyPreDs; 1489 uint16_t AverageGfxclkFrequencyPostDs; 1490 uint16_t AverageFclkFrequencyPreDs; 1491 uint16_t AverageFclkFrequencyPostDs; 1492 uint16_t AverageUclkFrequencyPreDs; 1493 uint16_t AverageUclkFrequencyPostDs; 1494 1495 1496 uint16_t AverageGfxActivity; 1497 uint16_t AverageUclkActivity; 1498 uint8_t CurrSocVoltageOffset; 1499 uint8_t CurrGfxVoltageOffset; 1500 uint8_t CurrMemVidOffset; 1501 uint8_t Padding8; 1502 uint16_t AverageSocketPower; 1503 uint16_t TemperatureEdge; 1504 uint16_t TemperatureHotspot; 1505 uint16_t TemperatureMem; 1506 uint16_t TemperatureVrGfx; 1507 uint16_t TemperatureVrMem0; 1508 uint16_t TemperatureVrMem1; 1509 uint16_t TemperatureVrSoc; 1510 uint16_t TemperatureLiquid0; 1511 uint16_t TemperatureLiquid1; 1512 uint16_t TemperaturePlx; 1513 uint16_t Padding16; 1514 uint32_t AccCnt; 1515 uint8_t ThrottlingPercentage[THROTTLER_COUNT]; 1516 1517 1518 uint8_t LinkDpmLevel; 1519 uint8_t CurrFanPwm; 1520 uint16_t CurrFanSpeed; 1521 1522 //BACO metrics, PMFW-1721 1523 //metrics for D3hot entry/exit and driver ARM msgs 1524 uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT]; 1525 uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT]; 1526 uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT]; 1527 1528 //PMFW-4362 1529 uint32_t EnergyAccumulator; 1530 uint16_t AverageVclk0Frequency; 1531 uint16_t AverageDclk0Frequency; 1532 uint16_t AverageVclk1Frequency; 1533 uint16_t AverageDclk1Frequency; 1534 uint16_t VcnUsagePercentage0; 1535 uint16_t VcnUsagePercentage1; 1536 uint8_t PcieRate; 1537 uint8_t PcieWidth; 1538 uint16_t AverageGfxclkFrequencyTarget; 1539 1540 uint32_t PublicSerialNumLower32; 1541 uint32_t PublicSerialNumUpper32; 1542 1543} SmuMetrics_V3_t; 1544 1545typedef struct { 1546 uint32_t CurrClock[PPCLK_COUNT]; 1547 1548 uint16_t AverageGfxclkFrequencyPreDs; 1549 uint16_t AverageGfxclkFrequencyPostDs; 1550 uint16_t AverageFclkFrequencyPreDs; 1551 uint16_t AverageFclkFrequencyPostDs; 1552 uint16_t AverageUclkFrequencyPreDs; 1553 uint16_t AverageUclkFrequencyPostDs; 1554 1555 1556 uint16_t AverageGfxActivity; 1557 uint16_t AverageUclkActivity; 1558 uint8_t CurrSocVoltageOffset; 1559 uint8_t CurrGfxVoltageOffset; 1560 uint8_t CurrMemVidOffset; 1561 uint8_t Padding8; 1562 uint16_t AverageSocketPower; 1563 uint16_t TemperatureEdge; 1564 uint16_t TemperatureHotspot; 1565 uint16_t TemperatureMem; 1566 uint16_t TemperatureVrGfx; 1567 uint16_t TemperatureVrMem0; 1568 uint16_t TemperatureVrMem1; 1569 uint16_t TemperatureVrSoc; 1570 uint16_t TemperatureLiquid0; 1571 uint16_t TemperatureLiquid1; 1572 uint16_t TemperaturePlx; 1573 uint16_t Padding16; 1574 uint32_t AccCnt; 1575 uint8_t ThrottlingPercentage[THROTTLER_COUNT]; 1576 1577 1578 uint8_t LinkDpmLevel; 1579 uint8_t CurrFanPwm; 1580 uint16_t CurrFanSpeed; 1581 1582 //BACO metrics, PMFW-1721 1583 //metrics for D3hot entry/exit and driver ARM msgs 1584 uint8_t D3HotEntryCountPerMode[D3HOT_SEQUENCE_COUNT]; 1585 uint8_t D3HotExitCountPerMode[D3HOT_SEQUENCE_COUNT]; 1586 uint8_t ArmMsgReceivedCountPerMode[D3HOT_SEQUENCE_COUNT]; 1587 1588 //PMFW-4362 1589 uint32_t EnergyAccumulator; 1590 uint16_t AverageVclk0Frequency; 1591 uint16_t AverageDclk0Frequency; 1592 uint16_t AverageVclk1Frequency; 1593 uint16_t AverageDclk1Frequency; 1594 uint16_t VcnUsagePercentage0; 1595 uint16_t VcnUsagePercentage1; 1596 uint8_t PcieRate; 1597 uint8_t PcieWidth; 1598 uint16_t AverageGfxclkFrequencyTarget; 1599 1600 uint8_t ApuSTAPMSmartShiftLimit; 1601 uint8_t AverageApuSocketPower; 1602 uint8_t ApuSTAPMLimit; 1603 uint8_t Padding8_2; 1604 1605} SmuMetrics_V4_t; 1606 1607typedef struct { 1608 union { 1609 SmuMetrics_t SmuMetrics; 1610 SmuMetrics_V2_t SmuMetrics_V2; 1611 SmuMetrics_V3_t SmuMetrics_V3; 1612 SmuMetrics_V4_t SmuMetrics_V4; 1613 }; 1614 uint32_t Spare[1]; 1615 1616 // Padding - ignore 1617 uint32_t MmHubPadding[8]; // SMU internal use 1618} SmuMetricsExternal_t; 1619 1620typedef struct { 1621 uint16_t MinClock; // This is either DCEFCLK or SOCCLK (in MHz) 1622 uint16_t MaxClock; // This is either DCEFCLK or SOCCLK (in MHz) 1623 uint16_t MinUclk; 1624 uint16_t MaxUclk; 1625 1626 uint8_t WmSetting; 1627 uint8_t Flags; 1628 uint8_t Padding[2]; 1629 1630} WatermarkRowGeneric_t; 1631 1632#define NUM_WM_RANGES 4 1633 1634typedef enum { 1635 WM_SOCCLK = 0, 1636 WM_DCEFCLK, 1637 WM_COUNT, 1638} WM_CLOCK_e; 1639 1640typedef enum { 1641 WATERMARKS_CLOCK_RANGE = 0, 1642 WATERMARKS_DUMMY_PSTATE, 1643 WATERMARKS_MALL, 1644 WATERMARKS_COUNT, 1645} WATERMARKS_FLAGS_e; 1646 1647typedef struct { 1648 // Watermarks 1649 WatermarkRowGeneric_t WatermarkRow[WM_COUNT][NUM_WM_RANGES]; 1650} Watermarks_t; 1651 1652typedef struct { 1653 Watermarks_t Watermarks; 1654 1655 uint32_t MmHubPadding[8]; // SMU internal use 1656} WatermarksExternal_t; 1657 1658typedef struct { 1659 uint16_t avgPsmCount[67]; 1660 uint16_t minPsmCount[67]; 1661 float avgPsmVoltage[67]; 1662 float minPsmVoltage[67]; 1663} AvfsDebugTable_t; 1664 1665typedef struct { 1666 AvfsDebugTable_t AvfsDebugTable; 1667 1668 uint32_t MmHubPadding[8]; // SMU internal use 1669} AvfsDebugTableExternal_t; 1670 1671typedef struct { 1672 uint8_t AvfsVersion; 1673 uint8_t Padding; 1674 1675 uint8_t AvfsEn[AVFS_VOLTAGE_COUNT]; 1676 1677 uint8_t OverrideVFT[AVFS_VOLTAGE_COUNT]; 1678 uint8_t OverrideAvfsGb[AVFS_VOLTAGE_COUNT]; 1679 1680 uint8_t OverrideTemperatures[AVFS_VOLTAGE_COUNT]; 1681 uint8_t OverrideVInversion[AVFS_VOLTAGE_COUNT]; 1682 uint8_t OverrideP2V[AVFS_VOLTAGE_COUNT]; 1683 uint8_t OverrideP2VCharzFreq[AVFS_VOLTAGE_COUNT]; 1684 1685 int32_t VFT0_m1[AVFS_VOLTAGE_COUNT]; // Q8.24 1686 int32_t VFT0_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1687 int32_t VFT0_b[AVFS_VOLTAGE_COUNT]; // Q32 1688 1689 int32_t VFT1_m1[AVFS_VOLTAGE_COUNT]; // Q8.16 1690 int32_t VFT1_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1691 int32_t VFT1_b[AVFS_VOLTAGE_COUNT]; // Q32 1692 1693 int32_t VFT2_m1[AVFS_VOLTAGE_COUNT]; // Q8.16 1694 int32_t VFT2_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1695 int32_t VFT2_b[AVFS_VOLTAGE_COUNT]; // Q32 1696 1697 int32_t AvfsGb0_m1[AVFS_VOLTAGE_COUNT]; // Q8.24 1698 int32_t AvfsGb0_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1699 int32_t AvfsGb0_b[AVFS_VOLTAGE_COUNT]; // Q32 1700 1701 int32_t AcBtcGb_m1[AVFS_VOLTAGE_COUNT]; // Q8.24 1702 int32_t AcBtcGb_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1703 int32_t AcBtcGb_b[AVFS_VOLTAGE_COUNT]; // Q32 1704 1705 uint32_t AvfsTempCold[AVFS_VOLTAGE_COUNT]; 1706 uint32_t AvfsTempMid[AVFS_VOLTAGE_COUNT]; 1707 uint32_t AvfsTempHot[AVFS_VOLTAGE_COUNT]; 1708 1709 uint32_t VInversion[AVFS_VOLTAGE_COUNT]; // in mV with 2 fractional bits 1710 1711 1712 int32_t P2V_m1[AVFS_VOLTAGE_COUNT]; // Q8.24 1713 int32_t P2V_m2[AVFS_VOLTAGE_COUNT]; // Q12.12 1714 int32_t P2V_b[AVFS_VOLTAGE_COUNT]; // Q32 1715 1716 uint32_t P2VCharzFreq[AVFS_VOLTAGE_COUNT]; // in 10KHz units 1717 1718 uint32_t EnabledAvfsModules[3]; //Sienna_Cichlid - 67 AVFS modules 1719} AvfsFuseOverride_t; 1720 1721typedef struct { 1722 AvfsFuseOverride_t AvfsFuseOverride; 1723 1724 uint32_t MmHubPadding[8]; // SMU internal use 1725} AvfsFuseOverrideExternal_t; 1726 1727typedef struct { 1728 uint8_t Gfx_ActiveHystLimit; 1729 uint8_t Gfx_IdleHystLimit; 1730 uint8_t Gfx_FPS; 1731 uint8_t Gfx_MinActiveFreqType; 1732 uint8_t Gfx_BoosterFreqType; 1733 uint8_t Gfx_MinFreqStep; // Minimum delta between current and target frequeny in order for FW to change clock. 1734 uint16_t Gfx_MinActiveFreq; // MHz 1735 uint16_t Gfx_BoosterFreq; // MHz 1736 uint16_t Gfx_PD_Data_time_constant; // Time constant of PD controller in ms 1737 uint32_t Gfx_PD_Data_limit_a; // Q16 1738 uint32_t Gfx_PD_Data_limit_b; // Q16 1739 uint32_t Gfx_PD_Data_limit_c; // Q16 1740 uint32_t Gfx_PD_Data_error_coeff; // Q16 1741 uint32_t Gfx_PD_Data_error_rate_coeff; // Q16 1742 1743 uint8_t Fclk_ActiveHystLimit; 1744 uint8_t Fclk_IdleHystLimit; 1745 uint8_t Fclk_FPS; 1746 uint8_t Fclk_MinActiveFreqType; 1747 uint8_t Fclk_BoosterFreqType; 1748 uint8_t Fclk_MinFreqStep; // Minimum delta between current and target frequeny in order for FW to change clock. 1749 uint16_t Fclk_MinActiveFreq; // MHz 1750 uint16_t Fclk_BoosterFreq; // MHz 1751 uint16_t Fclk_PD_Data_time_constant; // Time constant of PD controller in ms 1752 uint32_t Fclk_PD_Data_limit_a; // Q16 1753 uint32_t Fclk_PD_Data_limit_b; // Q16 1754 uint32_t Fclk_PD_Data_limit_c; // Q16 1755 uint32_t Fclk_PD_Data_error_coeff; // Q16 1756 uint32_t Fclk_PD_Data_error_rate_coeff; // Q16 1757 1758 uint8_t Mem_ActiveHystLimit; 1759 uint8_t Mem_IdleHystLimit; 1760 uint8_t Mem_FPS; 1761 uint8_t Mem_MinActiveFreqType; 1762 uint8_t Mem_BoosterFreqType; 1763 uint8_t Mem_MinFreqStep; // Minimum delta between current and target frequeny in order for FW to change clock. 1764 uint16_t Mem_MinActiveFreq; // MHz 1765 uint16_t Mem_BoosterFreq; // MHz 1766 uint16_t Mem_PD_Data_time_constant; // Time constant of PD controller in ms 1767 uint32_t Mem_PD_Data_limit_a; // Q16 1768 uint32_t Mem_PD_Data_limit_b; // Q16 1769 uint32_t Mem_PD_Data_limit_c; // Q16 1770 uint32_t Mem_PD_Data_error_coeff; // Q16 1771 uint32_t Mem_PD_Data_error_rate_coeff; // Q16 1772 1773 uint32_t Mem_UpThreshold_Limit; // Q16 1774 uint8_t Mem_UpHystLimit; 1775 uint8_t Mem_DownHystLimit; 1776 uint16_t Mem_Fps; 1777 1778} DpmActivityMonitorCoeffInt_t; 1779 1780 1781typedef struct { 1782 DpmActivityMonitorCoeffInt_t DpmActivityMonitorCoeffInt; 1783 uint32_t MmHubPadding[8]; // SMU internal use 1784} DpmActivityMonitorCoeffIntExternal_t; 1785 1786// Workload bits 1787#define WORKLOAD_PPLIB_DEFAULT_BIT 0 1788#define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1 1789#define WORKLOAD_PPLIB_POWER_SAVING_BIT 2 1790#define WORKLOAD_PPLIB_VIDEO_BIT 3 1791#define WORKLOAD_PPLIB_VR_BIT 4 1792#define WORKLOAD_PPLIB_COMPUTE_BIT 5 1793#define WORKLOAD_PPLIB_CUSTOM_BIT 6 1794#define WORKLOAD_PPLIB_W3D_BIT 7 1795#define WORKLOAD_PPLIB_COUNT 8 1796 1797 1798// These defines are used with the following messages: 1799// SMC_MSG_TransferTableDram2Smu 1800// SMC_MSG_TransferTableSmu2Dram 1801 1802// Table transfer status 1803#define TABLE_TRANSFER_OK 0x0 1804#define TABLE_TRANSFER_FAILED 0xFF 1805 1806// Table types 1807#define TABLE_PPTABLE 0 1808#define TABLE_WATERMARKS 1 1809#define TABLE_AVFS_PSM_DEBUG 2 1810#define TABLE_AVFS_FUSE_OVERRIDE 3 1811#define TABLE_PMSTATUSLOG 4 1812#define TABLE_SMU_METRICS 5 1813#define TABLE_DRIVER_SMU_CONFIG 6 1814#define TABLE_ACTIVITY_MONITOR_COEFF 7 1815#define TABLE_OVERDRIVE 8 1816#define TABLE_I2C_COMMANDS 9 1817#define TABLE_PACE 10 1818#define TABLE_ECCINFO 11 1819#define TABLE_COUNT 12 1820 1821typedef struct { 1822 float FlopsPerByteTable[RLC_PACE_TABLE_NUM_LEVELS]; 1823} RlcPaceFlopsPerByteOverride_t; 1824 1825typedef struct { 1826 RlcPaceFlopsPerByteOverride_t RlcPaceFlopsPerByteOverride; 1827 1828 uint32_t MmHubPadding[8]; // SMU internal use 1829} RlcPaceFlopsPerByteOverrideExternal_t; 1830 1831// These defines are used with the SMC_MSG_SetUclkFastSwitch message. 1832#define UCLK_SWITCH_SLOW 0 1833#define UCLK_SWITCH_FAST 1 1834#define UCLK_SWITCH_DUMMY 2 1835#endif 1836