xref: /linux/drivers/gpu/drm/amd/pm/powerplay/inc/smu11_driver_if.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
15fef5b1eSEvan Quan /*
25fef5b1eSEvan Quan  * Copyright 2018 Advanced Micro Devices, Inc.
35fef5b1eSEvan Quan  *
45fef5b1eSEvan Quan  * Permission is hereby granted, free of charge, to any person obtaining a
55fef5b1eSEvan Quan  * copy of this software and associated documentation files (the "Software"),
65fef5b1eSEvan Quan  * to deal in the Software without restriction, including without limitation
75fef5b1eSEvan Quan  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
85fef5b1eSEvan Quan  * and/or sell copies of the Software, and to permit persons to whom the
95fef5b1eSEvan Quan  * Software is furnished to do so, subject to the following conditions:
105fef5b1eSEvan Quan  *
115fef5b1eSEvan Quan  * The above copyright notice and this permission notice shall be included in
125fef5b1eSEvan Quan  * all copies or substantial portions of the Software.
135fef5b1eSEvan Quan  *
145fef5b1eSEvan Quan  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155fef5b1eSEvan Quan  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
165fef5b1eSEvan Quan  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
175fef5b1eSEvan Quan  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
185fef5b1eSEvan Quan  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
195fef5b1eSEvan Quan  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
205fef5b1eSEvan Quan  * OTHER DEALINGS IN THE SOFTWARE.
215fef5b1eSEvan Quan  *
225fef5b1eSEvan Quan  */
235fef5b1eSEvan Quan 
245fef5b1eSEvan Quan #ifndef SMU11_DRIVER_IF_H
255fef5b1eSEvan Quan #define SMU11_DRIVER_IF_H
265fef5b1eSEvan Quan 
275fef5b1eSEvan Quan // *** IMPORTANT ***
285fef5b1eSEvan Quan // SMU TEAM: Always increment the interface version if
295fef5b1eSEvan Quan // any structure is changed in this file
301b41b769Stiancyin // Be aware of that the version should be updated in
311b41b769Stiancyin // smu_v11_0.h, rename is also needed.
321b41b769Stiancyin // #define SMU11_DRIVER_IF_VERSION 0x13
335fef5b1eSEvan Quan 
343b2ad16dSEvan Quan #define PPTABLE_V20_SMU_VERSION 3
355fef5b1eSEvan Quan 
365fef5b1eSEvan Quan #define NUM_GFXCLK_DPM_LEVELS  16
375fef5b1eSEvan Quan #define NUM_VCLK_DPM_LEVELS    8
385fef5b1eSEvan Quan #define NUM_DCLK_DPM_LEVELS    8
395fef5b1eSEvan Quan #define NUM_ECLK_DPM_LEVELS    8
405fef5b1eSEvan Quan #define NUM_MP0CLK_DPM_LEVELS  2
415fef5b1eSEvan Quan #define NUM_SOCCLK_DPM_LEVELS  8
425fef5b1eSEvan Quan #define NUM_UCLK_DPM_LEVELS    4
435fef5b1eSEvan Quan #define NUM_FCLK_DPM_LEVELS    8
445fef5b1eSEvan Quan #define NUM_DCEFCLK_DPM_LEVELS 8
455fef5b1eSEvan Quan #define NUM_DISPCLK_DPM_LEVELS 8
465fef5b1eSEvan Quan #define NUM_PIXCLK_DPM_LEVELS  8
475fef5b1eSEvan Quan #define NUM_PHYCLK_DPM_LEVELS  8
485fef5b1eSEvan Quan #define NUM_LINK_LEVELS        2
495fef5b1eSEvan Quan #define NUM_XGMI_LEVELS        2
505fef5b1eSEvan Quan 
515fef5b1eSEvan Quan #define MAX_GFXCLK_DPM_LEVEL  (NUM_GFXCLK_DPM_LEVELS  - 1)
525fef5b1eSEvan Quan #define MAX_VCLK_DPM_LEVEL    (NUM_VCLK_DPM_LEVELS    - 1)
535fef5b1eSEvan Quan #define MAX_DCLK_DPM_LEVEL    (NUM_DCLK_DPM_LEVELS    - 1)
545fef5b1eSEvan Quan #define MAX_ECLK_DPM_LEVEL    (NUM_ECLK_DPM_LEVELS    - 1)
555fef5b1eSEvan Quan #define MAX_MP0CLK_DPM_LEVEL  (NUM_MP0CLK_DPM_LEVELS  - 1)
565fef5b1eSEvan Quan #define MAX_SOCCLK_DPM_LEVEL  (NUM_SOCCLK_DPM_LEVELS  - 1)
575fef5b1eSEvan Quan #define MAX_UCLK_DPM_LEVEL    (NUM_UCLK_DPM_LEVELS    - 1)
585fef5b1eSEvan Quan #define MAX_FCLK_DPM_LEVEL    (NUM_FCLK_DPM_LEVELS    - 1)
595fef5b1eSEvan Quan #define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
605fef5b1eSEvan Quan #define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
615fef5b1eSEvan Quan #define MAX_PIXCLK_DPM_LEVEL  (NUM_PIXCLK_DPM_LEVELS  - 1)
625fef5b1eSEvan Quan #define MAX_PHYCLK_DPM_LEVEL  (NUM_PHYCLK_DPM_LEVELS  - 1)
635fef5b1eSEvan Quan #define MAX_LINK_LEVEL        (NUM_LINK_LEVELS        - 1)
645fef5b1eSEvan Quan #define MAX_XGMI_LEVEL        (NUM_XGMI_LEVELS        - 1)
655fef5b1eSEvan Quan 
665fef5b1eSEvan Quan #define PPSMC_GeminiModeNone   0
675fef5b1eSEvan Quan #define PPSMC_GeminiModeMaster 1
685fef5b1eSEvan Quan #define PPSMC_GeminiModeSlave  2
695fef5b1eSEvan Quan 
705fef5b1eSEvan Quan 
715fef5b1eSEvan Quan #define FEATURE_DPM_PREFETCHER_BIT      0
725fef5b1eSEvan Quan #define FEATURE_DPM_GFXCLK_BIT          1
735fef5b1eSEvan Quan #define FEATURE_DPM_UCLK_BIT            2
745fef5b1eSEvan Quan #define FEATURE_DPM_SOCCLK_BIT          3
755fef5b1eSEvan Quan #define FEATURE_DPM_UVD_BIT             4
765fef5b1eSEvan Quan #define FEATURE_DPM_VCE_BIT             5
775fef5b1eSEvan Quan #define FEATURE_ULV_BIT                 6
785fef5b1eSEvan Quan #define FEATURE_DPM_MP0CLK_BIT          7
795fef5b1eSEvan Quan #define FEATURE_DPM_LINK_BIT            8
805fef5b1eSEvan Quan #define FEATURE_DPM_DCEFCLK_BIT         9
815fef5b1eSEvan Quan #define FEATURE_DS_GFXCLK_BIT           10
825fef5b1eSEvan Quan #define FEATURE_DS_SOCCLK_BIT           11
835fef5b1eSEvan Quan #define FEATURE_DS_LCLK_BIT             12
845fef5b1eSEvan Quan #define FEATURE_PPT_BIT                 13
855fef5b1eSEvan Quan #define FEATURE_TDC_BIT                 14
865fef5b1eSEvan Quan #define FEATURE_THERMAL_BIT             15
875fef5b1eSEvan Quan #define FEATURE_GFX_PER_CU_CG_BIT       16
885fef5b1eSEvan Quan #define FEATURE_RM_BIT                  17
895fef5b1eSEvan Quan #define FEATURE_DS_DCEFCLK_BIT          18
905fef5b1eSEvan Quan #define FEATURE_ACDC_BIT                19
915fef5b1eSEvan Quan #define FEATURE_VR0HOT_BIT              20
925fef5b1eSEvan Quan #define FEATURE_VR1HOT_BIT              21
935fef5b1eSEvan Quan #define FEATURE_FW_CTF_BIT              22
945fef5b1eSEvan Quan #define FEATURE_LED_DISPLAY_BIT         23
955fef5b1eSEvan Quan #define FEATURE_FAN_CONTROL_BIT         24
965fef5b1eSEvan Quan #define FEATURE_GFX_EDC_BIT             25
975fef5b1eSEvan Quan #define FEATURE_GFXOFF_BIT              26
985fef5b1eSEvan Quan #define FEATURE_CG_BIT                  27
995fef5b1eSEvan Quan #define FEATURE_DPM_FCLK_BIT            28
1005fef5b1eSEvan Quan #define FEATURE_DS_FCLK_BIT             29
1015fef5b1eSEvan Quan #define FEATURE_DS_MP1CLK_BIT           30
1025fef5b1eSEvan Quan #define FEATURE_DS_MP0CLK_BIT           31
1035fef5b1eSEvan Quan #define FEATURE_XGMI_BIT                32
1046f5d29ffSEvan Quan #define FEATURE_ECC_BIT                 33
1055fef5b1eSEvan Quan #define FEATURE_SPARE_34_BIT            34
1065fef5b1eSEvan Quan #define FEATURE_SPARE_35_BIT            35
1075fef5b1eSEvan Quan #define FEATURE_SPARE_36_BIT            36
1085fef5b1eSEvan Quan #define FEATURE_SPARE_37_BIT            37
1095fef5b1eSEvan Quan #define FEATURE_SPARE_38_BIT            38
1105fef5b1eSEvan Quan #define FEATURE_SPARE_39_BIT            39
1115fef5b1eSEvan Quan #define FEATURE_SPARE_40_BIT            40
1125fef5b1eSEvan Quan #define FEATURE_SPARE_41_BIT            41
1135fef5b1eSEvan Quan #define FEATURE_SPARE_42_BIT            42
1145fef5b1eSEvan Quan #define FEATURE_SPARE_43_BIT            43
1155fef5b1eSEvan Quan #define FEATURE_SPARE_44_BIT            44
1165fef5b1eSEvan Quan #define FEATURE_SPARE_45_BIT            45
1175fef5b1eSEvan Quan #define FEATURE_SPARE_46_BIT            46
1185fef5b1eSEvan Quan #define FEATURE_SPARE_47_BIT            47
1195fef5b1eSEvan Quan #define FEATURE_SPARE_48_BIT            48
1205fef5b1eSEvan Quan #define FEATURE_SPARE_49_BIT            49
1215fef5b1eSEvan Quan #define FEATURE_SPARE_50_BIT            50
1225fef5b1eSEvan Quan #define FEATURE_SPARE_51_BIT            51
1235fef5b1eSEvan Quan #define FEATURE_SPARE_52_BIT            52
1245fef5b1eSEvan Quan #define FEATURE_SPARE_53_BIT            53
1255fef5b1eSEvan Quan #define FEATURE_SPARE_54_BIT            54
1265fef5b1eSEvan Quan #define FEATURE_SPARE_55_BIT            55
1275fef5b1eSEvan Quan #define FEATURE_SPARE_56_BIT            56
1285fef5b1eSEvan Quan #define FEATURE_SPARE_57_BIT            57
1295fef5b1eSEvan Quan #define FEATURE_SPARE_58_BIT            58
1305fef5b1eSEvan Quan #define FEATURE_SPARE_59_BIT            59
1315fef5b1eSEvan Quan #define FEATURE_SPARE_60_BIT            60
1325fef5b1eSEvan Quan #define FEATURE_SPARE_61_BIT            61
1335fef5b1eSEvan Quan #define FEATURE_SPARE_62_BIT            62
1345fef5b1eSEvan Quan #define FEATURE_SPARE_63_BIT            63
1355fef5b1eSEvan Quan 
1365fef5b1eSEvan Quan #define NUM_FEATURES                    64
1375fef5b1eSEvan Quan 
1385fef5b1eSEvan Quan #define FEATURE_DPM_PREFETCHER_MASK     (1 << FEATURE_DPM_PREFETCHER_BIT     )
1395fef5b1eSEvan Quan #define FEATURE_DPM_GFXCLK_MASK         (1 << FEATURE_DPM_GFXCLK_BIT         )
1405fef5b1eSEvan Quan #define FEATURE_DPM_UCLK_MASK           (1 << FEATURE_DPM_UCLK_BIT           )
1415fef5b1eSEvan Quan #define FEATURE_DPM_SOCCLK_MASK         (1 << FEATURE_DPM_SOCCLK_BIT         )
1425fef5b1eSEvan Quan #define FEATURE_DPM_UVD_MASK            (1 << FEATURE_DPM_UVD_BIT            )
1435fef5b1eSEvan Quan #define FEATURE_DPM_VCE_MASK            (1 << FEATURE_DPM_VCE_BIT            )
1445fef5b1eSEvan Quan #define FEATURE_ULV_MASK                (1 << FEATURE_ULV_BIT                )
1455fef5b1eSEvan Quan #define FEATURE_DPM_MP0CLK_MASK         (1 << FEATURE_DPM_MP0CLK_BIT         )
1465fef5b1eSEvan Quan #define FEATURE_DPM_LINK_MASK           (1 << FEATURE_DPM_LINK_BIT           )
1475fef5b1eSEvan Quan #define FEATURE_DPM_DCEFCLK_MASK        (1 << FEATURE_DPM_DCEFCLK_BIT        )
1485fef5b1eSEvan Quan #define FEATURE_DS_GFXCLK_MASK          (1 << FEATURE_DS_GFXCLK_BIT          )
1495fef5b1eSEvan Quan #define FEATURE_DS_SOCCLK_MASK          (1 << FEATURE_DS_SOCCLK_BIT          )
1505fef5b1eSEvan Quan #define FEATURE_DS_LCLK_MASK            (1 << FEATURE_DS_LCLK_BIT            )
1515fef5b1eSEvan Quan #define FEATURE_PPT_MASK                (1 << FEATURE_PPT_BIT                )
1525fef5b1eSEvan Quan #define FEATURE_TDC_MASK                (1 << FEATURE_TDC_BIT                )
1535fef5b1eSEvan Quan #define FEATURE_THERMAL_MASK            (1 << FEATURE_THERMAL_BIT            )
1545fef5b1eSEvan Quan #define FEATURE_GFX_PER_CU_CG_MASK      (1 << FEATURE_GFX_PER_CU_CG_BIT      )
1555fef5b1eSEvan Quan #define FEATURE_RM_MASK                 (1 << FEATURE_RM_BIT                 )
1565fef5b1eSEvan Quan #define FEATURE_DS_DCEFCLK_MASK         (1 << FEATURE_DS_DCEFCLK_BIT         )
1575fef5b1eSEvan Quan #define FEATURE_ACDC_MASK               (1 << FEATURE_ACDC_BIT               )
1585fef5b1eSEvan Quan #define FEATURE_VR0HOT_MASK             (1 << FEATURE_VR0HOT_BIT             )
1595fef5b1eSEvan Quan #define FEATURE_VR1HOT_MASK             (1 << FEATURE_VR1HOT_BIT             )
1605fef5b1eSEvan Quan #define FEATURE_FW_CTF_MASK             (1 << FEATURE_FW_CTF_BIT             )
1615fef5b1eSEvan Quan #define FEATURE_LED_DISPLAY_MASK        (1 << FEATURE_LED_DISPLAY_BIT        )
1625fef5b1eSEvan Quan #define FEATURE_FAN_CONTROL_MASK        (1 << FEATURE_FAN_CONTROL_BIT        )
1635fef5b1eSEvan Quan #define FEATURE_GFX_EDC_MASK            (1 << FEATURE_GFX_EDC_BIT            )
1645fef5b1eSEvan Quan #define FEATURE_GFXOFF_MASK             (1 << FEATURE_GFXOFF_BIT             )
1655fef5b1eSEvan Quan #define FEATURE_CG_MASK                 (1 << FEATURE_CG_BIT                 )
1665fef5b1eSEvan Quan #define FEATURE_DPM_FCLK_MASK           (1 << FEATURE_DPM_FCLK_BIT           )
1675fef5b1eSEvan Quan #define FEATURE_DS_FCLK_MASK            (1 << FEATURE_DS_FCLK_BIT            )
1685fef5b1eSEvan Quan #define FEATURE_DS_MP1CLK_MASK          (1 << FEATURE_DS_MP1CLK_BIT          )
1695fef5b1eSEvan Quan #define FEATURE_DS_MP0CLK_MASK          (1 << FEATURE_DS_MP0CLK_BIT          )
170aaaba51bSEvan Quan #define FEATURE_XGMI_MASK               (1ULL << FEATURE_XGMI_BIT               )
1716f5d29ffSEvan Quan #define FEATURE_ECC_MASK                (1ULL << FEATURE_ECC_BIT                )
1725fef5b1eSEvan Quan 
1735fef5b1eSEvan Quan #define DPM_OVERRIDE_DISABLE_SOCCLK_PID             0x00000001
1745fef5b1eSEvan Quan #define DPM_OVERRIDE_DISABLE_UCLK_PID               0x00000002
1755fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_SOCCLK    0x00000004
1765fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_UCLK      0x00000008
1775fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_SOCCLK   0x00000010
1785fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_UCLK     0x00000020
1795fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_SOCCLK   0x00000040
1805fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_UCLK     0x00000080
1815fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_SOCCLK    0x00000100
1825fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_UCLK      0x00000200
1835fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_SOCCLK   0x00000400
1845fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_UCLK     0x00000800
1855fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00001000
1865fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK   0x00002000
1875fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_GFXOFF_GFXCLK_SWITCH    0x00004000
1885fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_GFXOFF_SOCCLK_SWITCH    0x00008000
1895fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_GFXOFF_UCLK_SWITCH      0x00010000
1905fef5b1eSEvan Quan #define DPM_OVERRIDE_ENABLE_GFXOFF_FCLK_SWITCH      0x00020000
1915fef5b1eSEvan Quan 
192d579fd82SEvan Quan #define I2C_CONTROLLER_ENABLED     1
193d579fd82SEvan Quan #define I2C_CONTROLLER_DISABLED    0
194d579fd82SEvan Quan 
1955fef5b1eSEvan Quan #define VR_MAPPING_VR_SELECT_MASK  0x01
1965fef5b1eSEvan Quan #define VR_MAPPING_VR_SELECT_SHIFT 0x00
1975fef5b1eSEvan Quan 
1985fef5b1eSEvan Quan #define VR_MAPPING_PLANE_SELECT_MASK  0x02
1995fef5b1eSEvan Quan #define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
2005fef5b1eSEvan Quan 
2015fef5b1eSEvan Quan 
2025fef5b1eSEvan Quan #define PSI_SEL_VR0_PLANE0_PSI0  0x01
2035fef5b1eSEvan Quan #define PSI_SEL_VR0_PLANE0_PSI1  0x02
2045fef5b1eSEvan Quan #define PSI_SEL_VR0_PLANE1_PSI0  0x04
2055fef5b1eSEvan Quan #define PSI_SEL_VR0_PLANE1_PSI1  0x08
2065fef5b1eSEvan Quan #define PSI_SEL_VR1_PLANE0_PSI0  0x10
2075fef5b1eSEvan Quan #define PSI_SEL_VR1_PLANE0_PSI1  0x20
2085fef5b1eSEvan Quan #define PSI_SEL_VR1_PLANE1_PSI0  0x40
2095fef5b1eSEvan Quan #define PSI_SEL_VR1_PLANE1_PSI1  0x80
2105fef5b1eSEvan Quan 
2115fef5b1eSEvan Quan 
2125fef5b1eSEvan Quan #define THROTTLER_STATUS_PADDING_BIT      0
2135fef5b1eSEvan Quan #define THROTTLER_STATUS_TEMP_EDGE_BIT    1
2145fef5b1eSEvan Quan #define THROTTLER_STATUS_TEMP_HOTSPOT_BIT 2
2155fef5b1eSEvan Quan #define THROTTLER_STATUS_TEMP_HBM_BIT     3
2165fef5b1eSEvan Quan #define THROTTLER_STATUS_TEMP_VR_GFX_BIT  4
217d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_VR_SOC_BIT  5
218d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_VR_MEM0_BIT 6
219d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_VR_MEM1_BIT 7
220d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_LIQUID_BIT  8
221d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_PLX_BIT     9
222d579fd82SEvan Quan #define THROTTLER_STATUS_TEMP_SKIN_BIT    10
223d579fd82SEvan Quan #define THROTTLER_STATUS_TDC_GFX_BIT      11
224d579fd82SEvan Quan #define THROTTLER_STATUS_TDC_SOC_BIT      12
225d579fd82SEvan Quan #define THROTTLER_STATUS_PPT_BIT          13
226d579fd82SEvan Quan #define THROTTLER_STATUS_FIT_BIT          14
227d579fd82SEvan Quan #define THROTTLER_STATUS_PPM_BIT          15
2285fef5b1eSEvan Quan 
2295fef5b1eSEvan Quan 
2305fef5b1eSEvan Quan #define TABLE_TRANSFER_OK         0x0
2315fef5b1eSEvan Quan #define TABLE_TRANSFER_FAILED     0xFF
2325fef5b1eSEvan Quan 
2335fef5b1eSEvan Quan 
2345fef5b1eSEvan Quan #define WORKLOAD_DEFAULT_BIT              0
2355fef5b1eSEvan Quan #define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
2365fef5b1eSEvan Quan #define WORKLOAD_PPLIB_POWER_SAVING_BIT   2
2375fef5b1eSEvan Quan #define WORKLOAD_PPLIB_VIDEO_BIT          3
2385fef5b1eSEvan Quan #define WORKLOAD_PPLIB_VR_BIT             4
2395fef5b1eSEvan Quan #define WORKLOAD_PPLIB_COMPUTE_BIT        5
2405fef5b1eSEvan Quan #define WORKLOAD_PPLIB_CUSTOM_BIT         6
2415fef5b1eSEvan Quan #define WORKLOAD_PPLIB_COUNT              7
2425fef5b1eSEvan Quan 
2435fef5b1eSEvan Quan 
2445fef5b1eSEvan Quan #define XGMI_STATE_D0 1
2455fef5b1eSEvan Quan #define XGMI_STATE_D3 0
2465fef5b1eSEvan Quan 
247d579fd82SEvan Quan typedef enum {
248d579fd82SEvan Quan   I2C_CONTROLLER_PORT_0 = 0,
249d579fd82SEvan Quan   I2C_CONTROLLER_PORT_1 = 1,
250d579fd82SEvan Quan } I2cControllerPort_e;
251d579fd82SEvan Quan 
252d579fd82SEvan Quan typedef enum {
253d579fd82SEvan Quan   I2C_CONTROLLER_NAME_VR_GFX = 0,
254d579fd82SEvan Quan   I2C_CONTROLLER_NAME_VR_SOC,
255d579fd82SEvan Quan   I2C_CONTROLLER_NAME_VR_VDDCI,
256d579fd82SEvan Quan   I2C_CONTROLLER_NAME_VR_HBM,
257d579fd82SEvan Quan   I2C_CONTROLLER_NAME_LIQUID_0,
258d579fd82SEvan Quan   I2C_CONTROLLER_NAME_LIQUID_1,
259d579fd82SEvan Quan   I2C_CONTROLLER_NAME_PLX,
260d579fd82SEvan Quan   I2C_CONTROLLER_NAME_COUNT,
261d579fd82SEvan Quan } I2cControllerName_e;
262d579fd82SEvan Quan 
263d579fd82SEvan Quan typedef enum {
264d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0,
265d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_VR_GFX,
266d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_VR_SOC,
267d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_VR_VDDCI,
268d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_VR_HBM,
269d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_LIQUID_0,
270d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_LIQUID_1,
271d579fd82SEvan Quan   I2C_CONTROLLER_THROTTLER_PLX,
272d579fd82SEvan Quan } I2cControllerThrottler_e;
273d579fd82SEvan Quan 
274d579fd82SEvan Quan typedef enum {
275d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_VR_XPDE132G5,
276d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_VR_IR35217,
277d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_TMP_TMP102A,
278d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_SPARE_0,
279d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_SPARE_1,
280d579fd82SEvan Quan   I2C_CONTROLLER_PROTOCOL_SPARE_2,
281d579fd82SEvan Quan } I2cControllerProtocol_e;
282d579fd82SEvan Quan 
283d579fd82SEvan Quan typedef enum {
284d579fd82SEvan Quan   I2C_CONTROLLER_SPEED_SLOW = 0,
285d579fd82SEvan Quan   I2C_CONTROLLER_SPEED_FAST = 1,
286d579fd82SEvan Quan } I2cControllerSpeed_e;
287d579fd82SEvan Quan 
288d579fd82SEvan Quan typedef struct {
289d579fd82SEvan Quan   uint32_t Enabled;
290d579fd82SEvan Quan   uint32_t SlaveAddress;
291d579fd82SEvan Quan   uint32_t ControllerPort;
292d579fd82SEvan Quan   uint32_t ControllerName;
293d579fd82SEvan Quan 
294d579fd82SEvan Quan   uint32_t ThermalThrottler;
295d579fd82SEvan Quan   uint32_t I2cProtocol;
296d579fd82SEvan Quan   uint32_t I2cSpeed;
297d579fd82SEvan Quan } I2cControllerConfig_t;
298d579fd82SEvan Quan 
2995fef5b1eSEvan Quan typedef struct {
3005fef5b1eSEvan Quan   uint32_t a;
3015fef5b1eSEvan Quan   uint32_t b;
3025fef5b1eSEvan Quan   uint32_t c;
3035fef5b1eSEvan Quan } QuadraticInt_t;
3045fef5b1eSEvan Quan 
3055fef5b1eSEvan Quan typedef struct {
3065fef5b1eSEvan Quan   uint32_t m;
3075fef5b1eSEvan Quan   uint32_t b;
3085fef5b1eSEvan Quan } LinearInt_t;
3095fef5b1eSEvan Quan 
3105fef5b1eSEvan Quan typedef struct {
3115fef5b1eSEvan Quan   uint32_t a;
3125fef5b1eSEvan Quan   uint32_t b;
3135fef5b1eSEvan Quan   uint32_t c;
3145fef5b1eSEvan Quan } DroopInt_t;
3155fef5b1eSEvan Quan 
3165fef5b1eSEvan Quan typedef enum {
3175fef5b1eSEvan Quan   PPCLK_GFXCLK,
3185fef5b1eSEvan Quan   PPCLK_VCLK,
3195fef5b1eSEvan Quan   PPCLK_DCLK,
3205fef5b1eSEvan Quan   PPCLK_ECLK,
3215fef5b1eSEvan Quan   PPCLK_SOCCLK,
3225fef5b1eSEvan Quan   PPCLK_UCLK,
3235fef5b1eSEvan Quan   PPCLK_DCEFCLK,
3245fef5b1eSEvan Quan   PPCLK_DISPCLK,
3255fef5b1eSEvan Quan   PPCLK_PIXCLK,
3265fef5b1eSEvan Quan   PPCLK_PHYCLK,
3275fef5b1eSEvan Quan   PPCLK_FCLK,
3285fef5b1eSEvan Quan   PPCLK_COUNT,
3295fef5b1eSEvan Quan } PPCLK_e;
3305fef5b1eSEvan Quan 
3315fef5b1eSEvan Quan typedef enum {
3323546916fSEvan Quan   POWER_SOURCE_AC,
3333546916fSEvan Quan   POWER_SOURCE_DC,
3343546916fSEvan Quan   POWER_SOURCE_COUNT,
3353546916fSEvan Quan } POWER_SOURCE_e;
3363546916fSEvan Quan 
3373546916fSEvan Quan typedef enum {
3385fef5b1eSEvan Quan   VOLTAGE_MODE_AVFS = 0,
3395fef5b1eSEvan Quan   VOLTAGE_MODE_AVFS_SS,
3405fef5b1eSEvan Quan   VOLTAGE_MODE_SS,
3415fef5b1eSEvan Quan   VOLTAGE_MODE_COUNT,
3425fef5b1eSEvan Quan } VOLTAGE_MODE_e;
3435fef5b1eSEvan Quan 
3445fef5b1eSEvan Quan 
3455fef5b1eSEvan Quan typedef enum {
3465fef5b1eSEvan Quan   AVFS_VOLTAGE_GFX = 0,
3475fef5b1eSEvan Quan   AVFS_VOLTAGE_SOC,
3485fef5b1eSEvan Quan   AVFS_VOLTAGE_COUNT,
3495fef5b1eSEvan Quan } AVFS_VOLTAGE_TYPE_e;
3505fef5b1eSEvan Quan 
3515fef5b1eSEvan Quan 
3525fef5b1eSEvan Quan typedef struct {
3535fef5b1eSEvan Quan   uint8_t        VoltageMode;
3545fef5b1eSEvan Quan   uint8_t        SnapToDiscrete;
3555fef5b1eSEvan Quan   uint8_t        NumDiscreteLevels;
3565fef5b1eSEvan Quan   uint8_t        padding;
3575fef5b1eSEvan Quan   LinearInt_t    ConversionToAvfsClk;
3585fef5b1eSEvan Quan   QuadraticInt_t SsCurve;
3595fef5b1eSEvan Quan } DpmDescriptor_t;
3605fef5b1eSEvan Quan 
361*f989fa29SJonathan Gray #pragma pack(push, 1)
3625fef5b1eSEvan Quan typedef struct {
3635fef5b1eSEvan Quan   uint32_t Version;
3645fef5b1eSEvan Quan 
3655fef5b1eSEvan Quan 
3665fef5b1eSEvan Quan   uint32_t FeaturesToRun[2];
3675fef5b1eSEvan Quan 
3685fef5b1eSEvan Quan 
3695fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc0;
3705fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc0Tau;
3715fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc1;
3725fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc1Tau;
3735fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc2;
3745fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc2Tau;
3755fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc3;
3765fef5b1eSEvan Quan   uint16_t SocketPowerLimitAc3Tau;
3775fef5b1eSEvan Quan   uint16_t SocketPowerLimitDc;
3785fef5b1eSEvan Quan   uint16_t SocketPowerLimitDcTau;
3795fef5b1eSEvan Quan   uint16_t TdcLimitSoc;
3805fef5b1eSEvan Quan   uint16_t TdcLimitSocTau;
3815fef5b1eSEvan Quan   uint16_t TdcLimitGfx;
3825fef5b1eSEvan Quan   uint16_t TdcLimitGfxTau;
3835fef5b1eSEvan Quan 
3845fef5b1eSEvan Quan   uint16_t TedgeLimit;
3855fef5b1eSEvan Quan   uint16_t ThotspotLimit;
3865fef5b1eSEvan Quan   uint16_t ThbmLimit;
3875fef5b1eSEvan Quan   uint16_t Tvr_gfxLimit;
3885fef5b1eSEvan Quan   uint16_t Tvr_memLimit;
3895fef5b1eSEvan Quan   uint16_t Tliquid1Limit;
3905fef5b1eSEvan Quan   uint16_t Tliquid2Limit;
3915fef5b1eSEvan Quan   uint16_t TplxLimit;
3925fef5b1eSEvan Quan   uint32_t FitLimit;
3935fef5b1eSEvan Quan 
3945fef5b1eSEvan Quan   uint16_t PpmPowerLimit;
3955fef5b1eSEvan Quan   uint16_t PpmTemperatureThreshold;
3965fef5b1eSEvan Quan 
3975fef5b1eSEvan Quan   uint8_t  MemoryOnPackage;
398e26f70a6SEvan Quan   uint8_t  padding8_limits;
399e26f70a6SEvan Quan   uint16_t Tvr_SocLimit;
4005fef5b1eSEvan Quan 
4015fef5b1eSEvan Quan   uint16_t  UlvVoltageOffsetSoc;
4025fef5b1eSEvan Quan   uint16_t  UlvVoltageOffsetGfx;
4035fef5b1eSEvan Quan 
4045fef5b1eSEvan Quan   uint8_t  UlvSmnclkDid;
4055fef5b1eSEvan Quan   uint8_t  UlvMp1clkDid;
4065fef5b1eSEvan Quan   uint8_t  UlvGfxclkBypass;
4075fef5b1eSEvan Quan   uint8_t  Padding234;
4085fef5b1eSEvan Quan 
4095fef5b1eSEvan Quan 
4105fef5b1eSEvan Quan   uint16_t     MinVoltageGfx;
4115fef5b1eSEvan Quan   uint16_t     MinVoltageSoc;
4125fef5b1eSEvan Quan   uint16_t     MaxVoltageGfx;
4135fef5b1eSEvan Quan   uint16_t     MaxVoltageSoc;
4145fef5b1eSEvan Quan 
4155fef5b1eSEvan Quan   uint16_t     LoadLineResistanceGfx;
4165fef5b1eSEvan Quan   uint16_t     LoadLineResistanceSoc;
4175fef5b1eSEvan Quan 
4185fef5b1eSEvan Quan   DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
4195fef5b1eSEvan Quan 
4205fef5b1eSEvan Quan   uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];
4215fef5b1eSEvan Quan   uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];
4225fef5b1eSEvan Quan   uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];
4235fef5b1eSEvan Quan   uint16_t       FreqTableEclk     [NUM_ECLK_DPM_LEVELS    ];
4245fef5b1eSEvan Quan   uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];
4255fef5b1eSEvan Quan   uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];
4265fef5b1eSEvan Quan   uint16_t       FreqTableFclk     [NUM_FCLK_DPM_LEVELS    ];
4275fef5b1eSEvan Quan   uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];
4285fef5b1eSEvan Quan   uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];
4295fef5b1eSEvan Quan   uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];
4305fef5b1eSEvan Quan   uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];
4315fef5b1eSEvan Quan 
4325fef5b1eSEvan Quan   uint16_t       DcModeMaxFreq     [PPCLK_COUNT            ];
4335fef5b1eSEvan Quan   uint16_t       Padding8_Clks;
4345fef5b1eSEvan Quan 
4355fef5b1eSEvan Quan   uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];
4365fef5b1eSEvan Quan   uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];
4375fef5b1eSEvan Quan 
4385fef5b1eSEvan Quan 
4395fef5b1eSEvan Quan   uint16_t        GfxclkFidle;
4405fef5b1eSEvan Quan   uint16_t        GfxclkSlewRate;
4415fef5b1eSEvan Quan   uint16_t        CksEnableFreq;
4425fef5b1eSEvan Quan   uint16_t        Padding789;
4435fef5b1eSEvan Quan   QuadraticInt_t  CksVoltageOffset;
4445fef5b1eSEvan Quan   uint8_t         Padding567[4];
4455fef5b1eSEvan Quan   uint16_t        GfxclkDsMaxFreq;
4465fef5b1eSEvan Quan   uint8_t         GfxclkSource;
4475fef5b1eSEvan Quan   uint8_t         Padding456;
4485fef5b1eSEvan Quan 
4495fef5b1eSEvan Quan   uint8_t      LowestUclkReservedForUlv;
4505fef5b1eSEvan Quan   uint8_t      Padding8_Uclk[3];
4515fef5b1eSEvan Quan 
4525fef5b1eSEvan Quan 
4535fef5b1eSEvan Quan   uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];
4545fef5b1eSEvan Quan   uint8_t      PcieLaneCount[NUM_LINK_LEVELS];
4555fef5b1eSEvan Quan   uint16_t     LclkFreq[NUM_LINK_LEVELS];
4565fef5b1eSEvan Quan 
4575fef5b1eSEvan Quan 
4585fef5b1eSEvan Quan   uint16_t     EnableTdpm;
4595fef5b1eSEvan Quan   uint16_t     TdpmHighHystTemperature;
4605fef5b1eSEvan Quan   uint16_t     TdpmLowHystTemperature;
4615fef5b1eSEvan Quan   uint16_t     GfxclkFreqHighTempLimit;
4625fef5b1eSEvan Quan 
4635fef5b1eSEvan Quan 
4645fef5b1eSEvan Quan   uint16_t     FanStopTemp;
4655fef5b1eSEvan Quan   uint16_t     FanStartTemp;
4665fef5b1eSEvan Quan 
4675fef5b1eSEvan Quan   uint16_t     FanGainEdge;
4685fef5b1eSEvan Quan   uint16_t     FanGainHotspot;
4695fef5b1eSEvan Quan   uint16_t     FanGainLiquid;
470d579fd82SEvan Quan   uint16_t     FanGainVrGfx;
471d579fd82SEvan Quan   uint16_t     FanGainVrSoc;
4725fef5b1eSEvan Quan   uint16_t     FanGainPlx;
4735fef5b1eSEvan Quan   uint16_t     FanGainHbm;
4745fef5b1eSEvan Quan   uint16_t     FanPwmMin;
4755fef5b1eSEvan Quan   uint16_t     FanAcousticLimitRpm;
4765fef5b1eSEvan Quan   uint16_t     FanThrottlingRpm;
4775fef5b1eSEvan Quan   uint16_t     FanMaximumRpm;
4785fef5b1eSEvan Quan   uint16_t     FanTargetTemperature;
4795fef5b1eSEvan Quan   uint16_t     FanTargetGfxclk;
4805fef5b1eSEvan Quan   uint8_t      FanZeroRpmEnable;
4815fef5b1eSEvan Quan   uint8_t      FanTachEdgePerRev;
4825fef5b1eSEvan Quan 
4835fef5b1eSEvan Quan 
4845fef5b1eSEvan Quan 
4855fef5b1eSEvan Quan   int16_t      FuzzyFan_ErrorSetDelta;
4865fef5b1eSEvan Quan   int16_t      FuzzyFan_ErrorRateSetDelta;
4875fef5b1eSEvan Quan   int16_t      FuzzyFan_PwmSetDelta;
4885fef5b1eSEvan Quan   uint16_t     FuzzyFan_Reserved;
4895fef5b1eSEvan Quan 
4905fef5b1eSEvan Quan 
4915fef5b1eSEvan Quan   uint8_t           OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
4925fef5b1eSEvan Quan   uint8_t           Padding8_Avfs[2];
4935fef5b1eSEvan Quan 
4945fef5b1eSEvan Quan   QuadraticInt_t    qAvfsGb[AVFS_VOLTAGE_COUNT];
4955fef5b1eSEvan Quan   DroopInt_t        dBtcGbGfxCksOn;
4965fef5b1eSEvan Quan   DroopInt_t        dBtcGbGfxCksOff;
4975fef5b1eSEvan Quan   DroopInt_t        dBtcGbGfxAfll;
4985fef5b1eSEvan Quan   DroopInt_t        dBtcGbSoc;
4995fef5b1eSEvan Quan   LinearInt_t       qAgingGb[AVFS_VOLTAGE_COUNT];
5005fef5b1eSEvan Quan 
5015fef5b1eSEvan Quan   QuadraticInt_t    qStaticVoltageOffset[AVFS_VOLTAGE_COUNT];
5025fef5b1eSEvan Quan 
5035fef5b1eSEvan Quan   uint16_t          DcTol[AVFS_VOLTAGE_COUNT];
5045fef5b1eSEvan Quan 
5055fef5b1eSEvan Quan   uint8_t           DcBtcEnabled[AVFS_VOLTAGE_COUNT];
5065fef5b1eSEvan Quan   uint8_t           Padding8_GfxBtc[2];
5075fef5b1eSEvan Quan 
508e26f70a6SEvan Quan   int16_t           DcBtcMin[AVFS_VOLTAGE_COUNT];
5095fef5b1eSEvan Quan   uint16_t          DcBtcMax[AVFS_VOLTAGE_COUNT];
5105fef5b1eSEvan Quan 
5115fef5b1eSEvan Quan 
5125fef5b1eSEvan Quan   uint8_t           XgmiLinkSpeed   [NUM_XGMI_LEVELS];
5135fef5b1eSEvan Quan   uint8_t           XgmiLinkWidth   [NUM_XGMI_LEVELS];
5145fef5b1eSEvan Quan   uint16_t          XgmiFclkFreq    [NUM_XGMI_LEVELS];
5155fef5b1eSEvan Quan   uint16_t          XgmiUclkFreq    [NUM_XGMI_LEVELS];
5165fef5b1eSEvan Quan   uint16_t          XgmiSocclkFreq  [NUM_XGMI_LEVELS];
5175fef5b1eSEvan Quan   uint16_t          XgmiSocVoltage  [NUM_XGMI_LEVELS];
5185fef5b1eSEvan Quan 
5195fef5b1eSEvan Quan   uint32_t          DebugOverrides;
5205fef5b1eSEvan Quan   QuadraticInt_t    ReservedEquation0;
5215fef5b1eSEvan Quan   QuadraticInt_t    ReservedEquation1;
5225fef5b1eSEvan Quan   QuadraticInt_t    ReservedEquation2;
5235fef5b1eSEvan Quan   QuadraticInt_t    ReservedEquation3;
5245fef5b1eSEvan Quan 
5255fef5b1eSEvan Quan   uint16_t     MinVoltageUlvGfx;
5265fef5b1eSEvan Quan   uint16_t     MinVoltageUlvSoc;
5275fef5b1eSEvan Quan 
5285fef5b1eSEvan Quan   uint16_t     MGpuFanBoostLimitRpm;
5295fef5b1eSEvan Quan   uint16_t     padding16_Fan;
5305fef5b1eSEvan Quan 
531d579fd82SEvan Quan   uint16_t     FanGainVrMem0;
532d579fd82SEvan Quan   uint16_t     FanGainVrMem1;
533e26f70a6SEvan Quan 
534e26f70a6SEvan Quan   uint16_t     DcBtcGb[AVFS_VOLTAGE_COUNT];
535e26f70a6SEvan Quan 
536e26f70a6SEvan Quan   uint32_t     Reserved[11];
5375fef5b1eSEvan Quan 
538d579fd82SEvan Quan   uint32_t     Padding32[3];
5395fef5b1eSEvan Quan 
5405fef5b1eSEvan Quan   uint16_t     MaxVoltageStepGfx;
5415fef5b1eSEvan Quan   uint16_t     MaxVoltageStepSoc;
5425fef5b1eSEvan Quan 
5435fef5b1eSEvan Quan   uint8_t      VddGfxVrMapping;
5445fef5b1eSEvan Quan   uint8_t      VddSocVrMapping;
5455fef5b1eSEvan Quan   uint8_t      VddMem0VrMapping;
5465fef5b1eSEvan Quan   uint8_t      VddMem1VrMapping;
5475fef5b1eSEvan Quan 
5485fef5b1eSEvan Quan   uint8_t      GfxUlvPhaseSheddingMask;
5495fef5b1eSEvan Quan   uint8_t      SocUlvPhaseSheddingMask;
5505fef5b1eSEvan Quan   uint8_t      ExternalSensorPresent;
5515fef5b1eSEvan Quan   uint8_t      Padding8_V;
5525fef5b1eSEvan Quan 
5535fef5b1eSEvan Quan 
5545fef5b1eSEvan Quan   uint16_t     GfxMaxCurrent;
5555fef5b1eSEvan Quan   int8_t       GfxOffset;
5565fef5b1eSEvan Quan   uint8_t      Padding_TelemetryGfx;
5575fef5b1eSEvan Quan 
5585fef5b1eSEvan Quan   uint16_t     SocMaxCurrent;
5595fef5b1eSEvan Quan   int8_t       SocOffset;
5605fef5b1eSEvan Quan   uint8_t      Padding_TelemetrySoc;
5615fef5b1eSEvan Quan 
5625fef5b1eSEvan Quan   uint16_t     Mem0MaxCurrent;
5635fef5b1eSEvan Quan   int8_t       Mem0Offset;
5645fef5b1eSEvan Quan   uint8_t      Padding_TelemetryMem0;
5655fef5b1eSEvan Quan 
5665fef5b1eSEvan Quan   uint16_t     Mem1MaxCurrent;
5675fef5b1eSEvan Quan   int8_t       Mem1Offset;
5685fef5b1eSEvan Quan   uint8_t      Padding_TelemetryMem1;
5695fef5b1eSEvan Quan 
5705fef5b1eSEvan Quan 
5715fef5b1eSEvan Quan   uint8_t      AcDcGpio;
5725fef5b1eSEvan Quan   uint8_t      AcDcPolarity;
5735fef5b1eSEvan Quan   uint8_t      VR0HotGpio;
5745fef5b1eSEvan Quan   uint8_t      VR0HotPolarity;
5755fef5b1eSEvan Quan 
5765fef5b1eSEvan Quan   uint8_t      VR1HotGpio;
5775fef5b1eSEvan Quan   uint8_t      VR1HotPolarity;
5785fef5b1eSEvan Quan   uint8_t      Padding1;
5795fef5b1eSEvan Quan   uint8_t      Padding2;
5805fef5b1eSEvan Quan 
5815fef5b1eSEvan Quan 
5825fef5b1eSEvan Quan 
5835fef5b1eSEvan Quan   uint8_t      LedPin0;
5845fef5b1eSEvan Quan   uint8_t      LedPin1;
5855fef5b1eSEvan Quan   uint8_t      LedPin2;
5865fef5b1eSEvan Quan   uint8_t      padding8_4;
5875fef5b1eSEvan Quan 
5885fef5b1eSEvan Quan 
5895fef5b1eSEvan Quan   uint8_t      PllGfxclkSpreadEnabled;
5905fef5b1eSEvan Quan   uint8_t      PllGfxclkSpreadPercent;
5915fef5b1eSEvan Quan   uint16_t     PllGfxclkSpreadFreq;
5925fef5b1eSEvan Quan 
5935fef5b1eSEvan Quan   uint8_t      UclkSpreadEnabled;
5945fef5b1eSEvan Quan   uint8_t      UclkSpreadPercent;
5955fef5b1eSEvan Quan   uint16_t     UclkSpreadFreq;
5965fef5b1eSEvan Quan 
5975fef5b1eSEvan Quan   uint8_t      FclkSpreadEnabled;
5985fef5b1eSEvan Quan   uint8_t      FclkSpreadPercent;
5995fef5b1eSEvan Quan   uint16_t     FclkSpreadFreq;
6005fef5b1eSEvan Quan 
6015fef5b1eSEvan Quan   uint8_t      FllGfxclkSpreadEnabled;
6025fef5b1eSEvan Quan   uint8_t      FllGfxclkSpreadPercent;
6035fef5b1eSEvan Quan   uint16_t     FllGfxclkSpreadFreq;
6045fef5b1eSEvan Quan 
605d579fd82SEvan Quan   I2cControllerConfig_t I2cControllers[I2C_CONTROLLER_NAME_COUNT];
606d579fd82SEvan Quan 
6075fef5b1eSEvan Quan   uint32_t     BoardReserved[10];
6085fef5b1eSEvan Quan 
6095fef5b1eSEvan Quan 
6105fef5b1eSEvan Quan   uint32_t     MmHubPadding[8];
6115fef5b1eSEvan Quan 
6125fef5b1eSEvan Quan } PPTable_t;
613*f989fa29SJonathan Gray #pragma pack(pop)
6145fef5b1eSEvan Quan 
6155fef5b1eSEvan Quan typedef struct {
6165fef5b1eSEvan Quan 
6175fef5b1eSEvan Quan   uint16_t     GfxclkAverageLpfTau;
6185fef5b1eSEvan Quan   uint16_t     SocclkAverageLpfTau;
6195fef5b1eSEvan Quan   uint16_t     UclkAverageLpfTau;
6205fef5b1eSEvan Quan   uint16_t     GfxActivityLpfTau;
6215fef5b1eSEvan Quan   uint16_t     UclkActivityLpfTau;
622cd6e0c4bSEvan Quan   uint16_t     SocketPowerLpfTau;
6235fef5b1eSEvan Quan 
6245fef5b1eSEvan Quan 
6255fef5b1eSEvan Quan   uint32_t     MmHubPadding[8];
6265fef5b1eSEvan Quan } DriverSmuConfig_t;
6275fef5b1eSEvan Quan 
6285fef5b1eSEvan Quan typedef struct {
6295fef5b1eSEvan Quan 
6305fef5b1eSEvan Quan   uint16_t      GfxclkFmin;
6315fef5b1eSEvan Quan   uint16_t      GfxclkFmax;
6325fef5b1eSEvan Quan   uint16_t      GfxclkFreq1;
633b1f82cb2SEvan Quan   uint16_t      GfxclkVolt1;
6345fef5b1eSEvan Quan   uint16_t      GfxclkFreq2;
635b1f82cb2SEvan Quan   uint16_t      GfxclkVolt2;
6365fef5b1eSEvan Quan   uint16_t      GfxclkFreq3;
637b1f82cb2SEvan Quan   uint16_t      GfxclkVolt3;
6385fef5b1eSEvan Quan   uint16_t      UclkFmax;
6395fef5b1eSEvan Quan   int16_t       OverDrivePct;
6405fef5b1eSEvan Quan   uint16_t      FanMaximumRpm;
6415fef5b1eSEvan Quan   uint16_t      FanMinimumPwm;
6425fef5b1eSEvan Quan   uint16_t      FanTargetTemperature;
6435fef5b1eSEvan Quan   uint16_t      MaxOpTemp;
6445fef5b1eSEvan Quan   uint16_t      FanZeroRpmEnable;
6455fef5b1eSEvan Quan   uint16_t      Padding;
6465fef5b1eSEvan Quan 
6475fef5b1eSEvan Quan } OverDriveTable_t;
6485fef5b1eSEvan Quan 
6495fef5b1eSEvan Quan typedef struct {
6505fef5b1eSEvan Quan   uint16_t CurrClock[PPCLK_COUNT];
6515fef5b1eSEvan Quan   uint16_t AverageGfxclkFrequency;
6525fef5b1eSEvan Quan   uint16_t AverageSocclkFrequency;
6535fef5b1eSEvan Quan   uint16_t AverageUclkFrequency  ;
6545fef5b1eSEvan Quan   uint16_t AverageGfxActivity    ;
6555fef5b1eSEvan Quan   uint16_t AverageUclkActivity   ;
6565fef5b1eSEvan Quan   uint8_t  CurrSocVoltageOffset  ;
6575fef5b1eSEvan Quan   uint8_t  CurrGfxVoltageOffset  ;
6585fef5b1eSEvan Quan   uint8_t  CurrMemVidOffset      ;
6595fef5b1eSEvan Quan   uint8_t  Padding8              ;
6605fef5b1eSEvan Quan   uint16_t CurrSocketPower       ;
6615fef5b1eSEvan Quan   uint16_t TemperatureEdge       ;
6625fef5b1eSEvan Quan   uint16_t TemperatureHotspot    ;
6635fef5b1eSEvan Quan   uint16_t TemperatureHBM        ;
6645fef5b1eSEvan Quan   uint16_t TemperatureVrGfx      ;
665d579fd82SEvan Quan   uint16_t TemperatureVrSoc      ;
666d579fd82SEvan Quan   uint16_t TemperatureVrMem0     ;
667d579fd82SEvan Quan   uint16_t TemperatureVrMem1     ;
6685fef5b1eSEvan Quan   uint16_t TemperatureLiquid     ;
6695fef5b1eSEvan Quan   uint16_t TemperaturePlx        ;
6705fef5b1eSEvan Quan   uint32_t ThrottlerStatus       ;
6715fef5b1eSEvan Quan 
6725fef5b1eSEvan Quan   uint8_t  LinkDpmLevel;
673cd6e0c4bSEvan Quan   uint16_t AverageSocketPower;
674cd6e0c4bSEvan Quan   uint8_t  Padding;
6755fef5b1eSEvan Quan 
6765fef5b1eSEvan Quan 
6775fef5b1eSEvan Quan   uint32_t     MmHubPadding[7];
6785fef5b1eSEvan Quan } SmuMetrics_t;
6795fef5b1eSEvan Quan 
6805fef5b1eSEvan Quan typedef struct {
6815fef5b1eSEvan Quan   uint16_t MinClock;
6825fef5b1eSEvan Quan   uint16_t MaxClock;
6835fef5b1eSEvan Quan   uint16_t MinUclk;
6845fef5b1eSEvan Quan   uint16_t MaxUclk;
6855fef5b1eSEvan Quan 
6865fef5b1eSEvan Quan   uint8_t  WmSetting;
6875fef5b1eSEvan Quan   uint8_t  Padding[3];
6885fef5b1eSEvan Quan } WatermarkRowGeneric_t;
6895fef5b1eSEvan Quan 
6905fef5b1eSEvan Quan #define NUM_WM_RANGES 4
6915fef5b1eSEvan Quan 
6925fef5b1eSEvan Quan typedef enum {
6935fef5b1eSEvan Quan   WM_SOCCLK = 0,
6945fef5b1eSEvan Quan   WM_DCEFCLK,
6955fef5b1eSEvan Quan   WM_COUNT_PP,
6965fef5b1eSEvan Quan } WM_CLOCK_e;
6975fef5b1eSEvan Quan 
6985fef5b1eSEvan Quan typedef struct {
6995fef5b1eSEvan Quan 
7005fef5b1eSEvan Quan   WatermarkRowGeneric_t WatermarkRow[WM_COUNT_PP][NUM_WM_RANGES];
7015fef5b1eSEvan Quan 
7025fef5b1eSEvan Quan   uint32_t     MmHubPadding[7];
7035fef5b1eSEvan Quan } Watermarks_t;
7045fef5b1eSEvan Quan 
7055fef5b1eSEvan Quan typedef struct {
7065fef5b1eSEvan Quan   uint16_t avgPsmCount[45];
7075fef5b1eSEvan Quan   uint16_t minPsmCount[45];
7085fef5b1eSEvan Quan   float    avgPsmVoltage[45];
7095fef5b1eSEvan Quan   float    minPsmVoltage[45];
7105fef5b1eSEvan Quan 
7115fef5b1eSEvan Quan   uint16_t avgScsPsmCount;
7125fef5b1eSEvan Quan   uint16_t minScsPsmCount;
7135fef5b1eSEvan Quan   float    avgScsPsmVoltage;
7145fef5b1eSEvan Quan   float    minScsPsmVoltage;
7155fef5b1eSEvan Quan 
7165fef5b1eSEvan Quan 
7175fef5b1eSEvan Quan   uint32_t MmHubPadding[6];
7185fef5b1eSEvan Quan } AvfsDebugTable_t;
7195fef5b1eSEvan Quan 
7205fef5b1eSEvan Quan typedef struct {
7215fef5b1eSEvan Quan   uint8_t  AvfsVersion;
7225fef5b1eSEvan Quan   uint8_t  AvfsEn[AVFS_VOLTAGE_COUNT];
7235fef5b1eSEvan Quan 
7245fef5b1eSEvan Quan   uint8_t  OverrideVFT[AVFS_VOLTAGE_COUNT];
7255fef5b1eSEvan Quan   uint8_t  OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
7265fef5b1eSEvan Quan 
7275fef5b1eSEvan Quan   uint8_t  OverrideTemperatures[AVFS_VOLTAGE_COUNT];
7285fef5b1eSEvan Quan   uint8_t  OverrideVInversion[AVFS_VOLTAGE_COUNT];
7295fef5b1eSEvan Quan   uint8_t  OverrideP2V[AVFS_VOLTAGE_COUNT];
7305fef5b1eSEvan Quan   uint8_t  OverrideP2VCharzFreq[AVFS_VOLTAGE_COUNT];
7315fef5b1eSEvan Quan 
7325fef5b1eSEvan Quan   int32_t VFT0_m1[AVFS_VOLTAGE_COUNT];
7335fef5b1eSEvan Quan   int32_t VFT0_m2[AVFS_VOLTAGE_COUNT];
7345fef5b1eSEvan Quan   int32_t VFT0_b[AVFS_VOLTAGE_COUNT];
7355fef5b1eSEvan Quan 
7365fef5b1eSEvan Quan   int32_t VFT1_m1[AVFS_VOLTAGE_COUNT];
7375fef5b1eSEvan Quan   int32_t VFT1_m2[AVFS_VOLTAGE_COUNT];
7385fef5b1eSEvan Quan   int32_t VFT1_b[AVFS_VOLTAGE_COUNT];
7395fef5b1eSEvan Quan 
7405fef5b1eSEvan Quan   int32_t VFT2_m1[AVFS_VOLTAGE_COUNT];
7415fef5b1eSEvan Quan   int32_t VFT2_m2[AVFS_VOLTAGE_COUNT];
7425fef5b1eSEvan Quan   int32_t VFT2_b[AVFS_VOLTAGE_COUNT];
7435fef5b1eSEvan Quan 
7445fef5b1eSEvan Quan   int32_t AvfsGb0_m1[AVFS_VOLTAGE_COUNT];
7455fef5b1eSEvan Quan   int32_t AvfsGb0_m2[AVFS_VOLTAGE_COUNT];
7465fef5b1eSEvan Quan   int32_t AvfsGb0_b[AVFS_VOLTAGE_COUNT];
7475fef5b1eSEvan Quan 
7485fef5b1eSEvan Quan   int32_t AcBtcGb_m1[AVFS_VOLTAGE_COUNT];
7495fef5b1eSEvan Quan   int32_t AcBtcGb_m2[AVFS_VOLTAGE_COUNT];
7505fef5b1eSEvan Quan   int32_t AcBtcGb_b[AVFS_VOLTAGE_COUNT];
7515fef5b1eSEvan Quan 
7525fef5b1eSEvan Quan   uint32_t AvfsTempCold[AVFS_VOLTAGE_COUNT];
7535fef5b1eSEvan Quan   uint32_t AvfsTempMid[AVFS_VOLTAGE_COUNT];
7545fef5b1eSEvan Quan   uint32_t AvfsTempHot[AVFS_VOLTAGE_COUNT];
7555fef5b1eSEvan Quan 
7565fef5b1eSEvan Quan   uint32_t VInversion[AVFS_VOLTAGE_COUNT];
7575fef5b1eSEvan Quan 
7585fef5b1eSEvan Quan 
7595fef5b1eSEvan Quan   int32_t P2V_m1[AVFS_VOLTAGE_COUNT];
7605fef5b1eSEvan Quan   int32_t P2V_m2[AVFS_VOLTAGE_COUNT];
7615fef5b1eSEvan Quan   int32_t P2V_b[AVFS_VOLTAGE_COUNT];
7625fef5b1eSEvan Quan 
7635fef5b1eSEvan Quan   uint32_t P2VCharzFreq[AVFS_VOLTAGE_COUNT];
7645fef5b1eSEvan Quan 
7655fef5b1eSEvan Quan   uint32_t EnabledAvfsModules;
7665fef5b1eSEvan Quan 
7675fef5b1eSEvan Quan   uint32_t MmHubPadding[7];
7685fef5b1eSEvan Quan } AvfsFuseOverride_t;
7695fef5b1eSEvan Quan 
7705fef5b1eSEvan Quan typedef struct {
7715fef5b1eSEvan Quan 
7725fef5b1eSEvan Quan   uint8_t   Gfx_ActiveHystLimit;
7735fef5b1eSEvan Quan   uint8_t   Gfx_IdleHystLimit;
7745fef5b1eSEvan Quan   uint8_t   Gfx_FPS;
7755fef5b1eSEvan Quan   uint8_t   Gfx_MinActiveFreqType;
7765fef5b1eSEvan Quan   uint8_t   Gfx_BoosterFreqType;
7775fef5b1eSEvan Quan   uint8_t   Gfx_UseRlcBusy;
7785fef5b1eSEvan Quan   uint16_t  Gfx_MinActiveFreq;
7795fef5b1eSEvan Quan   uint16_t  Gfx_BoosterFreq;
7805fef5b1eSEvan Quan   uint16_t  Gfx_PD_Data_time_constant;
7815fef5b1eSEvan Quan   uint32_t  Gfx_PD_Data_limit_a;
7825fef5b1eSEvan Quan   uint32_t  Gfx_PD_Data_limit_b;
7835fef5b1eSEvan Quan   uint32_t  Gfx_PD_Data_limit_c;
7845fef5b1eSEvan Quan   uint32_t  Gfx_PD_Data_error_coeff;
7855fef5b1eSEvan Quan   uint32_t  Gfx_PD_Data_error_rate_coeff;
7865fef5b1eSEvan Quan 
7875fef5b1eSEvan Quan   uint8_t   Soc_ActiveHystLimit;
7885fef5b1eSEvan Quan   uint8_t   Soc_IdleHystLimit;
7895fef5b1eSEvan Quan   uint8_t   Soc_FPS;
7905fef5b1eSEvan Quan   uint8_t   Soc_MinActiveFreqType;
7915fef5b1eSEvan Quan   uint8_t   Soc_BoosterFreqType;
7925fef5b1eSEvan Quan   uint8_t   Soc_UseRlcBusy;
7935fef5b1eSEvan Quan   uint16_t  Soc_MinActiveFreq;
7945fef5b1eSEvan Quan   uint16_t  Soc_BoosterFreq;
7955fef5b1eSEvan Quan   uint16_t  Soc_PD_Data_time_constant;
7965fef5b1eSEvan Quan   uint32_t  Soc_PD_Data_limit_a;
7975fef5b1eSEvan Quan   uint32_t  Soc_PD_Data_limit_b;
7985fef5b1eSEvan Quan   uint32_t  Soc_PD_Data_limit_c;
7995fef5b1eSEvan Quan   uint32_t  Soc_PD_Data_error_coeff;
8005fef5b1eSEvan Quan   uint32_t  Soc_PD_Data_error_rate_coeff;
8015fef5b1eSEvan Quan 
8025fef5b1eSEvan Quan   uint8_t   Mem_ActiveHystLimit;
8035fef5b1eSEvan Quan   uint8_t   Mem_IdleHystLimit;
8045fef5b1eSEvan Quan   uint8_t   Mem_FPS;
8055fef5b1eSEvan Quan   uint8_t   Mem_MinActiveFreqType;
8065fef5b1eSEvan Quan   uint8_t   Mem_BoosterFreqType;
8075fef5b1eSEvan Quan   uint8_t   Mem_UseRlcBusy;
8085fef5b1eSEvan Quan   uint16_t  Mem_MinActiveFreq;
8095fef5b1eSEvan Quan   uint16_t  Mem_BoosterFreq;
8105fef5b1eSEvan Quan   uint16_t  Mem_PD_Data_time_constant;
8115fef5b1eSEvan Quan   uint32_t  Mem_PD_Data_limit_a;
8125fef5b1eSEvan Quan   uint32_t  Mem_PD_Data_limit_b;
8135fef5b1eSEvan Quan   uint32_t  Mem_PD_Data_limit_c;
8145fef5b1eSEvan Quan   uint32_t  Mem_PD_Data_error_coeff;
8155fef5b1eSEvan Quan   uint32_t  Mem_PD_Data_error_rate_coeff;
8165fef5b1eSEvan Quan 
8175fef5b1eSEvan Quan   uint8_t   Fclk_ActiveHystLimit;
8185fef5b1eSEvan Quan   uint8_t   Fclk_IdleHystLimit;
8195fef5b1eSEvan Quan   uint8_t   Fclk_FPS;
8205fef5b1eSEvan Quan   uint8_t   Fclk_MinActiveFreqType;
8215fef5b1eSEvan Quan   uint8_t   Fclk_BoosterFreqType;
8225fef5b1eSEvan Quan   uint8_t   Fclk_UseRlcBusy;
8235fef5b1eSEvan Quan   uint16_t  Fclk_MinActiveFreq;
8245fef5b1eSEvan Quan   uint16_t  Fclk_BoosterFreq;
8255fef5b1eSEvan Quan   uint16_t  Fclk_PD_Data_time_constant;
8265fef5b1eSEvan Quan   uint32_t  Fclk_PD_Data_limit_a;
8275fef5b1eSEvan Quan   uint32_t  Fclk_PD_Data_limit_b;
8285fef5b1eSEvan Quan   uint32_t  Fclk_PD_Data_limit_c;
8295fef5b1eSEvan Quan   uint32_t  Fclk_PD_Data_error_coeff;
8305fef5b1eSEvan Quan   uint32_t  Fclk_PD_Data_error_rate_coeff;
8315fef5b1eSEvan Quan 
8325fef5b1eSEvan Quan } DpmActivityMonitorCoeffInt_t;
8335fef5b1eSEvan Quan 
8345fef5b1eSEvan Quan #define TABLE_PPTABLE                 0
8355fef5b1eSEvan Quan #define TABLE_WATERMARKS              1
8365fef5b1eSEvan Quan #define TABLE_AVFS                    2
8375fef5b1eSEvan Quan #define TABLE_AVFS_PSM_DEBUG          3
8385fef5b1eSEvan Quan #define TABLE_AVFS_FUSE_OVERRIDE      4
8395fef5b1eSEvan Quan #define TABLE_PMSTATUSLOG             5
8405fef5b1eSEvan Quan #define TABLE_SMU_METRICS             6
8415fef5b1eSEvan Quan #define TABLE_DRIVER_SMU_CONFIG       7
8425fef5b1eSEvan Quan #define TABLE_ACTIVITY_MONITOR_COEFF  8
8435fef5b1eSEvan Quan #define TABLE_OVERDRIVE               9
8445fef5b1eSEvan Quan #define TABLE_COUNT                  10
8455fef5b1eSEvan Quan 
8465fef5b1eSEvan Quan 
8475fef5b1eSEvan Quan #define UCLK_SWITCH_SLOW 0
8485fef5b1eSEvan Quan #define UCLK_SWITCH_FAST 1
8495fef5b1eSEvan Quan 
8505fef5b1eSEvan Quan 
8515fef5b1eSEvan Quan #define SQ_Enable_MASK 0x1
8525fef5b1eSEvan Quan #define SQ_IR_MASK 0x2
8535fef5b1eSEvan Quan #define SQ_PCC_MASK 0x4
8545fef5b1eSEvan Quan #define SQ_EDC_MASK 0x8
8555fef5b1eSEvan Quan 
8565fef5b1eSEvan Quan #define TCP_Enable_MASK 0x100
8575fef5b1eSEvan Quan #define TCP_IR_MASK 0x200
8585fef5b1eSEvan Quan #define TCP_PCC_MASK 0x400
8595fef5b1eSEvan Quan #define TCP_EDC_MASK 0x800
8605fef5b1eSEvan Quan 
8615fef5b1eSEvan Quan #define TD_Enable_MASK 0x10000
8625fef5b1eSEvan Quan #define TD_IR_MASK 0x20000
8635fef5b1eSEvan Quan #define TD_PCC_MASK 0x40000
8645fef5b1eSEvan Quan #define TD_EDC_MASK 0x80000
8655fef5b1eSEvan Quan 
8665fef5b1eSEvan Quan #define DB_Enable_MASK 0x1000000
8675fef5b1eSEvan Quan #define DB_IR_MASK 0x2000000
8685fef5b1eSEvan Quan #define DB_PCC_MASK 0x4000000
8695fef5b1eSEvan Quan #define DB_EDC_MASK 0x8000000
8705fef5b1eSEvan Quan 
8715fef5b1eSEvan Quan #define SQ_Enable_SHIFT 0
8725fef5b1eSEvan Quan #define SQ_IR_SHIFT 1
8735fef5b1eSEvan Quan #define SQ_PCC_SHIFT 2
8745fef5b1eSEvan Quan #define SQ_EDC_SHIFT 3
8755fef5b1eSEvan Quan 
8765fef5b1eSEvan Quan #define TCP_Enable_SHIFT 8
8775fef5b1eSEvan Quan #define TCP_IR_SHIFT 9
8785fef5b1eSEvan Quan #define TCP_PCC_SHIFT 10
8795fef5b1eSEvan Quan #define TCP_EDC_SHIFT 11
8805fef5b1eSEvan Quan 
8815fef5b1eSEvan Quan #define TD_Enable_SHIFT 16
8825fef5b1eSEvan Quan #define TD_IR_SHIFT 17
8835fef5b1eSEvan Quan #define TD_PCC_SHIFT 18
8845fef5b1eSEvan Quan #define TD_EDC_SHIFT 19
8855fef5b1eSEvan Quan 
8865fef5b1eSEvan Quan #define DB_Enable_SHIFT 24
8875fef5b1eSEvan Quan #define DB_IR_SHIFT 25
8885fef5b1eSEvan Quan #define DB_PCC_SHIFT 26
8895fef5b1eSEvan Quan #define DB_EDC_SHIFT 27
8905fef5b1eSEvan Quan 
8915fef5b1eSEvan Quan #define REMOVE_FMAX_MARGIN_BIT     0x0
8925fef5b1eSEvan Quan #define REMOVE_DCTOL_MARGIN_BIT    0x1
8935fef5b1eSEvan Quan #define REMOVE_PLATFORM_MARGIN_BIT 0x2
8945fef5b1eSEvan Quan 
8955fef5b1eSEvan Quan #endif
896