162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright 2013 Advanced Micro Devices, Inc.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
562306a36Sopenharmony_ci * copy of this software and associated documentation files (the "Software"),
662306a36Sopenharmony_ci * to deal in the Software without restriction, including without limitation
762306a36Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense,
862306a36Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
962306a36Sopenharmony_ci * Software is furnished to do so, subject to the following conditions:
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci * The above copyright notice and this permission notice shall be included in
1262306a36Sopenharmony_ci * all copies or substantial portions of the Software.
1362306a36Sopenharmony_ci *
1462306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1562306a36Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1662306a36Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1762306a36Sopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1862306a36Sopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1962306a36Sopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2062306a36Sopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE.
2162306a36Sopenharmony_ci *
2262306a36Sopenharmony_ci */
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#ifndef SMU7_DISCRETE_H
2562306a36Sopenharmony_ci#define SMU7_DISCRETE_H
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#include "smu7.h"
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#pragma pack(push, 1)
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define SMU7_DTE_ITERATIONS 5
3262306a36Sopenharmony_ci#define SMU7_DTE_SOURCES 3
3362306a36Sopenharmony_ci#define SMU7_DTE_SINKS 1
3462306a36Sopenharmony_ci#define SMU7_NUM_CPU_TES 0
3562306a36Sopenharmony_ci#define SMU7_NUM_GPU_TES 1
3662306a36Sopenharmony_ci#define SMU7_NUM_NON_TES 2
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct SMU7_SoftRegisters
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci    uint32_t        RefClockFrequency;
4162306a36Sopenharmony_ci    uint32_t        PmTimerP;
4262306a36Sopenharmony_ci    uint32_t        FeatureEnables;
4362306a36Sopenharmony_ci    uint32_t        PreVBlankGap;
4462306a36Sopenharmony_ci    uint32_t        VBlankTimeout;
4562306a36Sopenharmony_ci    uint32_t        TrainTimeGap;
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci    uint32_t        MvddSwitchTime;
4862306a36Sopenharmony_ci    uint32_t        LongestAcpiTrainTime;
4962306a36Sopenharmony_ci    uint32_t        AcpiDelay;
5062306a36Sopenharmony_ci    uint32_t        G5TrainTime;
5162306a36Sopenharmony_ci    uint32_t        DelayMpllPwron;
5262306a36Sopenharmony_ci    uint32_t        VoltageChangeTimeout;
5362306a36Sopenharmony_ci    uint32_t        HandshakeDisables;
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci    uint8_t         DisplayPhy1Config;
5662306a36Sopenharmony_ci    uint8_t         DisplayPhy2Config;
5762306a36Sopenharmony_ci    uint8_t         DisplayPhy3Config;
5862306a36Sopenharmony_ci    uint8_t         DisplayPhy4Config;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci    uint8_t         DisplayPhy5Config;
6162306a36Sopenharmony_ci    uint8_t         DisplayPhy6Config;
6262306a36Sopenharmony_ci    uint8_t         DisplayPhy7Config;
6362306a36Sopenharmony_ci    uint8_t         DisplayPhy8Config;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci    uint32_t        AverageGraphicsA;
6662306a36Sopenharmony_ci    uint32_t        AverageMemoryA;
6762306a36Sopenharmony_ci    uint32_t        AverageGioA;
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci    uint8_t         SClkDpmEnabledLevels;
7062306a36Sopenharmony_ci    uint8_t         MClkDpmEnabledLevels;
7162306a36Sopenharmony_ci    uint8_t         LClkDpmEnabledLevels;
7262306a36Sopenharmony_ci    uint8_t         PCIeDpmEnabledLevels;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci    uint8_t         UVDDpmEnabledLevels;
7562306a36Sopenharmony_ci    uint8_t         SAMUDpmEnabledLevels;
7662306a36Sopenharmony_ci    uint8_t         ACPDpmEnabledLevels;
7762306a36Sopenharmony_ci    uint8_t         VCEDpmEnabledLevels;
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci    uint32_t        DRAM_LOG_ADDR_H;
8062306a36Sopenharmony_ci    uint32_t        DRAM_LOG_ADDR_L;
8162306a36Sopenharmony_ci    uint32_t        DRAM_LOG_PHY_ADDR_H;
8262306a36Sopenharmony_ci    uint32_t        DRAM_LOG_PHY_ADDR_L;
8362306a36Sopenharmony_ci    uint32_t        DRAM_LOG_BUFF_SIZE;
8462306a36Sopenharmony_ci    uint32_t        UlvEnterC;
8562306a36Sopenharmony_ci    uint32_t        UlvTime;
8662306a36Sopenharmony_ci    uint32_t        Reserved[3];
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_citypedef struct SMU7_SoftRegisters SMU7_SoftRegisters;
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_cistruct SMU7_Discrete_VoltageLevel
9362306a36Sopenharmony_ci{
9462306a36Sopenharmony_ci    uint16_t    Voltage;
9562306a36Sopenharmony_ci    uint16_t    StdVoltageHiSidd;
9662306a36Sopenharmony_ci    uint16_t    StdVoltageLoSidd;
9762306a36Sopenharmony_ci    uint8_t     Smio;
9862306a36Sopenharmony_ci    uint8_t     padding;
9962306a36Sopenharmony_ci};
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_citypedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel;
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cistruct SMU7_Discrete_GraphicsLevel
10462306a36Sopenharmony_ci{
10562306a36Sopenharmony_ci    uint32_t    Flags;
10662306a36Sopenharmony_ci    uint32_t    MinVddc;
10762306a36Sopenharmony_ci    uint32_t    MinVddcPhases;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci    uint32_t    SclkFrequency;
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci    uint8_t     padding1[2];
11262306a36Sopenharmony_ci    uint16_t    ActivityLevel;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl3;
11562306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl4;
11662306a36Sopenharmony_ci    uint32_t    SpllSpreadSpectrum;
11762306a36Sopenharmony_ci    uint32_t    SpllSpreadSpectrum2;
11862306a36Sopenharmony_ci    uint32_t    CcPwrDynRm;
11962306a36Sopenharmony_ci    uint32_t    CcPwrDynRm1;
12062306a36Sopenharmony_ci    uint8_t     SclkDid;
12162306a36Sopenharmony_ci    uint8_t     DisplayWatermark;
12262306a36Sopenharmony_ci    uint8_t     EnabledForActivity;
12362306a36Sopenharmony_ci    uint8_t     EnabledForThrottle;
12462306a36Sopenharmony_ci    uint8_t     UpH;
12562306a36Sopenharmony_ci    uint8_t     DownH;
12662306a36Sopenharmony_ci    uint8_t     VoltageDownH;
12762306a36Sopenharmony_ci    uint8_t     PowerThrottle;
12862306a36Sopenharmony_ci    uint8_t     DeepSleepDivId;
12962306a36Sopenharmony_ci    uint8_t     padding[3];
13062306a36Sopenharmony_ci};
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_citypedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_cistruct SMU7_Discrete_ACPILevel
13562306a36Sopenharmony_ci{
13662306a36Sopenharmony_ci    uint32_t    Flags;
13762306a36Sopenharmony_ci    uint32_t    MinVddc;
13862306a36Sopenharmony_ci    uint32_t    MinVddcPhases;
13962306a36Sopenharmony_ci    uint32_t    SclkFrequency;
14062306a36Sopenharmony_ci    uint8_t     SclkDid;
14162306a36Sopenharmony_ci    uint8_t     DisplayWatermark;
14262306a36Sopenharmony_ci    uint8_t     DeepSleepDivId;
14362306a36Sopenharmony_ci    uint8_t     padding;
14462306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl;
14562306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl2;
14662306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl3;
14762306a36Sopenharmony_ci    uint32_t    CgSpllFuncCntl4;
14862306a36Sopenharmony_ci    uint32_t    SpllSpreadSpectrum;
14962306a36Sopenharmony_ci    uint32_t    SpllSpreadSpectrum2;
15062306a36Sopenharmony_ci    uint32_t    CcPwrDynRm;
15162306a36Sopenharmony_ci    uint32_t    CcPwrDynRm1;
15262306a36Sopenharmony_ci};
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_citypedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel;
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_cistruct SMU7_Discrete_Ulv
15762306a36Sopenharmony_ci{
15862306a36Sopenharmony_ci    uint32_t    CcPwrDynRm;
15962306a36Sopenharmony_ci    uint32_t    CcPwrDynRm1;
16062306a36Sopenharmony_ci    uint16_t    VddcOffset;
16162306a36Sopenharmony_ci    uint8_t     VddcOffsetVid;
16262306a36Sopenharmony_ci    uint8_t     VddcPhase;
16362306a36Sopenharmony_ci    uint32_t    Reserved;
16462306a36Sopenharmony_ci};
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_citypedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv;
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_cistruct SMU7_Discrete_MemoryLevel
16962306a36Sopenharmony_ci{
17062306a36Sopenharmony_ci    uint32_t    MinVddc;
17162306a36Sopenharmony_ci    uint32_t    MinVddcPhases;
17262306a36Sopenharmony_ci    uint32_t    MinVddci;
17362306a36Sopenharmony_ci    uint32_t    MinMvdd;
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci    uint32_t    MclkFrequency;
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci    uint8_t     EdcReadEnable;
17862306a36Sopenharmony_ci    uint8_t     EdcWriteEnable;
17962306a36Sopenharmony_ci    uint8_t     RttEnable;
18062306a36Sopenharmony_ci    uint8_t     StutterEnable;
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci    uint8_t     StrobeEnable;
18362306a36Sopenharmony_ci    uint8_t     StrobeRatio;
18462306a36Sopenharmony_ci    uint8_t     EnabledForThrottle;
18562306a36Sopenharmony_ci    uint8_t     EnabledForActivity;
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci    uint8_t     UpH;
18862306a36Sopenharmony_ci    uint8_t     DownH;
18962306a36Sopenharmony_ci    uint8_t     VoltageDownH;
19062306a36Sopenharmony_ci    uint8_t     padding;
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci    uint16_t    ActivityLevel;
19362306a36Sopenharmony_ci    uint8_t     DisplayWatermark;
19462306a36Sopenharmony_ci    uint8_t     padding1;
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci    uint32_t    MpllFuncCntl;
19762306a36Sopenharmony_ci    uint32_t    MpllFuncCntl_1;
19862306a36Sopenharmony_ci    uint32_t    MpllFuncCntl_2;
19962306a36Sopenharmony_ci    uint32_t    MpllAdFuncCntl;
20062306a36Sopenharmony_ci    uint32_t    MpllDqFuncCntl;
20162306a36Sopenharmony_ci    uint32_t    MclkPwrmgtCntl;
20262306a36Sopenharmony_ci    uint32_t    DllCntl;
20362306a36Sopenharmony_ci    uint32_t    MpllSs1;
20462306a36Sopenharmony_ci    uint32_t    MpllSs2;
20562306a36Sopenharmony_ci};
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_citypedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel;
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_cistruct SMU7_Discrete_LinkLevel
21062306a36Sopenharmony_ci{
21162306a36Sopenharmony_ci    uint8_t     PcieGenSpeed;
21262306a36Sopenharmony_ci    uint8_t     PcieLaneCount;
21362306a36Sopenharmony_ci    uint8_t     EnabledForActivity;
21462306a36Sopenharmony_ci    uint8_t     Padding;
21562306a36Sopenharmony_ci    uint32_t    DownT;
21662306a36Sopenharmony_ci    uint32_t    UpT;
21762306a36Sopenharmony_ci    uint32_t    Reserved;
21862306a36Sopenharmony_ci};
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_citypedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel;
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_cistruct SMU7_Discrete_MCArbDramTimingTableEntry
22462306a36Sopenharmony_ci{
22562306a36Sopenharmony_ci    uint32_t McArbDramTiming;
22662306a36Sopenharmony_ci    uint32_t McArbDramTiming2;
22762306a36Sopenharmony_ci    uint8_t  McArbBurstTime;
22862306a36Sopenharmony_ci    uint8_t  padding[3];
22962306a36Sopenharmony_ci};
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_citypedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry;
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_cistruct SMU7_Discrete_MCArbDramTimingTable
23462306a36Sopenharmony_ci{
23562306a36Sopenharmony_ci    SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
23662306a36Sopenharmony_ci};
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_citypedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable;
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_cistruct SMU7_Discrete_UvdLevel
24162306a36Sopenharmony_ci{
24262306a36Sopenharmony_ci    uint32_t VclkFrequency;
24362306a36Sopenharmony_ci    uint32_t DclkFrequency;
24462306a36Sopenharmony_ci    uint16_t MinVddc;
24562306a36Sopenharmony_ci    uint8_t  MinVddcPhases;
24662306a36Sopenharmony_ci    uint8_t  VclkDivider;
24762306a36Sopenharmony_ci    uint8_t  DclkDivider;
24862306a36Sopenharmony_ci    uint8_t  padding[3];
24962306a36Sopenharmony_ci};
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_citypedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel;
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_cistruct SMU7_Discrete_ExtClkLevel
25462306a36Sopenharmony_ci{
25562306a36Sopenharmony_ci    uint32_t Frequency;
25662306a36Sopenharmony_ci    uint16_t MinVoltage;
25762306a36Sopenharmony_ci    uint8_t  MinPhases;
25862306a36Sopenharmony_ci    uint8_t  Divider;
25962306a36Sopenharmony_ci};
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_citypedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel;
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_cistruct SMU7_Discrete_StateInfo
26462306a36Sopenharmony_ci{
26562306a36Sopenharmony_ci    uint32_t SclkFrequency;
26662306a36Sopenharmony_ci    uint32_t MclkFrequency;
26762306a36Sopenharmony_ci    uint32_t VclkFrequency;
26862306a36Sopenharmony_ci    uint32_t DclkFrequency;
26962306a36Sopenharmony_ci    uint32_t SamclkFrequency;
27062306a36Sopenharmony_ci    uint32_t AclkFrequency;
27162306a36Sopenharmony_ci    uint32_t EclkFrequency;
27262306a36Sopenharmony_ci    uint16_t MvddVoltage;
27362306a36Sopenharmony_ci    uint16_t padding16;
27462306a36Sopenharmony_ci    uint8_t  DisplayWatermark;
27562306a36Sopenharmony_ci    uint8_t  McArbIndex;
27662306a36Sopenharmony_ci    uint8_t  McRegIndex;
27762306a36Sopenharmony_ci    uint8_t  SeqIndex;
27862306a36Sopenharmony_ci    uint8_t  SclkDid;
27962306a36Sopenharmony_ci    int8_t   SclkIndex;
28062306a36Sopenharmony_ci    int8_t   MclkIndex;
28162306a36Sopenharmony_ci    uint8_t  PCIeGen;
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci};
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_citypedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo;
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_cistruct SMU7_Discrete_DpmTable
28962306a36Sopenharmony_ci{
29062306a36Sopenharmony_ci    SMU7_PIDController                  GraphicsPIDController;
29162306a36Sopenharmony_ci    SMU7_PIDController                  MemoryPIDController;
29262306a36Sopenharmony_ci    SMU7_PIDController                  LinkPIDController;
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci    uint32_t                            SystemFlags;
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci    uint32_t                            SmioMaskVddcVid;
29862306a36Sopenharmony_ci    uint32_t                            SmioMaskVddcPhase;
29962306a36Sopenharmony_ci    uint32_t                            SmioMaskVddciVid;
30062306a36Sopenharmony_ci    uint32_t                            SmioMaskMvddVid;
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci    uint32_t                            VddcLevelCount;
30362306a36Sopenharmony_ci    uint32_t                            VddciLevelCount;
30462306a36Sopenharmony_ci    uint32_t                            MvddLevelCount;
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci    SMU7_Discrete_VoltageLevel          VddcLevel               [SMU7_MAX_LEVELS_VDDC];
30762306a36Sopenharmony_ci//    SMU7_Discrete_VoltageLevel          VddcStandardReference   [SMU7_MAX_LEVELS_VDDC];
30862306a36Sopenharmony_ci    SMU7_Discrete_VoltageLevel          VddciLevel              [SMU7_MAX_LEVELS_VDDCI];
30962306a36Sopenharmony_ci    SMU7_Discrete_VoltageLevel          MvddLevel               [SMU7_MAX_LEVELS_MVDD];
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci    uint8_t                             GraphicsDpmLevelCount;
31262306a36Sopenharmony_ci    uint8_t                             MemoryDpmLevelCount;
31362306a36Sopenharmony_ci    uint8_t                             LinkLevelCount;
31462306a36Sopenharmony_ci    uint8_t                             UvdLevelCount;
31562306a36Sopenharmony_ci    uint8_t                             VceLevelCount;
31662306a36Sopenharmony_ci    uint8_t                             AcpLevelCount;
31762306a36Sopenharmony_ci    uint8_t                             SamuLevelCount;
31862306a36Sopenharmony_ci    uint8_t                             MasterDeepSleepControl;
31962306a36Sopenharmony_ci    uint32_t                            Reserved[5];
32062306a36Sopenharmony_ci//    uint32_t                            SamuDefaultLevel;
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci    SMU7_Discrete_GraphicsLevel         GraphicsLevel           [SMU7_MAX_LEVELS_GRAPHICS];
32362306a36Sopenharmony_ci    SMU7_Discrete_MemoryLevel           MemoryACPILevel;
32462306a36Sopenharmony_ci    SMU7_Discrete_MemoryLevel           MemoryLevel             [SMU7_MAX_LEVELS_MEMORY];
32562306a36Sopenharmony_ci    SMU7_Discrete_LinkLevel             LinkLevel               [SMU7_MAX_LEVELS_LINK];
32662306a36Sopenharmony_ci    SMU7_Discrete_ACPILevel             ACPILevel;
32762306a36Sopenharmony_ci    SMU7_Discrete_UvdLevel              UvdLevel                [SMU7_MAX_LEVELS_UVD];
32862306a36Sopenharmony_ci    SMU7_Discrete_ExtClkLevel           VceLevel                [SMU7_MAX_LEVELS_VCE];
32962306a36Sopenharmony_ci    SMU7_Discrete_ExtClkLevel           AcpLevel                [SMU7_MAX_LEVELS_ACP];
33062306a36Sopenharmony_ci    SMU7_Discrete_ExtClkLevel           SamuLevel               [SMU7_MAX_LEVELS_SAMU];
33162306a36Sopenharmony_ci    SMU7_Discrete_Ulv                   Ulv;
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci    uint32_t                            SclkStepSize;
33462306a36Sopenharmony_ci    uint32_t                            Smio                    [SMU7_MAX_ENTRIES_SMIO];
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci    uint8_t                             UvdBootLevel;
33762306a36Sopenharmony_ci    uint8_t                             VceBootLevel;
33862306a36Sopenharmony_ci    uint8_t                             AcpBootLevel;
33962306a36Sopenharmony_ci    uint8_t                             SamuBootLevel;
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci    uint8_t                             UVDInterval;
34262306a36Sopenharmony_ci    uint8_t                             VCEInterval;
34362306a36Sopenharmony_ci    uint8_t                             ACPInterval;
34462306a36Sopenharmony_ci    uint8_t                             SAMUInterval;
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_ci    uint8_t                             GraphicsBootLevel;
34762306a36Sopenharmony_ci    uint8_t                             GraphicsVoltageChangeEnable;
34862306a36Sopenharmony_ci    uint8_t                             GraphicsThermThrottleEnable;
34962306a36Sopenharmony_ci    uint8_t                             GraphicsInterval;
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci    uint8_t                             VoltageInterval;
35262306a36Sopenharmony_ci    uint8_t                             ThermalInterval;
35362306a36Sopenharmony_ci    uint16_t                            TemperatureLimitHigh;
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci    uint16_t                            TemperatureLimitLow;
35662306a36Sopenharmony_ci    uint8_t                             MemoryBootLevel;
35762306a36Sopenharmony_ci    uint8_t                             MemoryVoltageChangeEnable;
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci    uint8_t                             MemoryInterval;
36062306a36Sopenharmony_ci    uint8_t                             MemoryThermThrottleEnable;
36162306a36Sopenharmony_ci    uint16_t                            VddcVddciDelta;
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci    uint16_t                            VoltageResponseTime;
36462306a36Sopenharmony_ci    uint16_t                            PhaseResponseTime;
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci    uint8_t                             PCIeBootLinkLevel;
36762306a36Sopenharmony_ci    uint8_t                             PCIeGenInterval;
36862306a36Sopenharmony_ci    uint8_t                             DTEInterval;
36962306a36Sopenharmony_ci    uint8_t                             DTEMode;
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci    uint8_t                             SVI2Enable;
37262306a36Sopenharmony_ci    uint8_t                             VRHotGpio;
37362306a36Sopenharmony_ci    uint8_t                             AcDcGpio;
37462306a36Sopenharmony_ci    uint8_t                             ThermGpio;
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ci    uint16_t                            PPM_PkgPwrLimit;
37762306a36Sopenharmony_ci    uint16_t                            PPM_TemperatureLimit;
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ci    uint16_t                            DefaultTdp;
38062306a36Sopenharmony_ci    uint16_t                            TargetTdp;
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ci    uint16_t                            FpsHighT;
38362306a36Sopenharmony_ci    uint16_t                            FpsLowT;
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci    uint16_t                            BAPMTI_R  [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
38662306a36Sopenharmony_ci    uint16_t                            BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci    uint8_t                             DTEAmbientTempBase;
38962306a36Sopenharmony_ci    uint8_t                             DTETjOffset;
39062306a36Sopenharmony_ci    uint8_t                             GpuTjMax;
39162306a36Sopenharmony_ci    uint8_t                             GpuTjHyst;
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ci    uint16_t                            BootVddc;
39462306a36Sopenharmony_ci    uint16_t                            BootVddci;
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci    uint16_t                            BootMVdd;
39762306a36Sopenharmony_ci    uint16_t                            padding;
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci    uint32_t                            BAPM_TEMP_GRADIENT;
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ci    uint32_t                            LowSclkInterruptT;
40262306a36Sopenharmony_ci};
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_citypedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable;
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ci#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16
40762306a36Sopenharmony_ci#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_cistruct SMU7_Discrete_MCRegisterAddress
41062306a36Sopenharmony_ci{
41162306a36Sopenharmony_ci    uint16_t s0;
41262306a36Sopenharmony_ci    uint16_t s1;
41362306a36Sopenharmony_ci};
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_citypedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress;
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_cistruct SMU7_Discrete_MCRegisterSet
41862306a36Sopenharmony_ci{
41962306a36Sopenharmony_ci    uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
42062306a36Sopenharmony_ci};
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_citypedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet;
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_cistruct SMU7_Discrete_MCRegisters
42562306a36Sopenharmony_ci{
42662306a36Sopenharmony_ci    uint8_t                             last;
42762306a36Sopenharmony_ci    uint8_t                             reserved[3];
42862306a36Sopenharmony_ci    SMU7_Discrete_MCRegisterAddress     address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
42962306a36Sopenharmony_ci    SMU7_Discrete_MCRegisterSet         data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT];
43062306a36Sopenharmony_ci};
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_citypedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters;
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_cistruct SMU7_Discrete_FanTable
43562306a36Sopenharmony_ci{
43662306a36Sopenharmony_ci	uint16_t FdoMode;
43762306a36Sopenharmony_ci	int16_t  TempMin;
43862306a36Sopenharmony_ci	int16_t  TempMed;
43962306a36Sopenharmony_ci	int16_t  TempMax;
44062306a36Sopenharmony_ci	int16_t  Slope1;
44162306a36Sopenharmony_ci	int16_t  Slope2;
44262306a36Sopenharmony_ci	int16_t  FdoMin;
44362306a36Sopenharmony_ci	int16_t  HystUp;
44462306a36Sopenharmony_ci	int16_t  HystDown;
44562306a36Sopenharmony_ci	int16_t  HystSlope;
44662306a36Sopenharmony_ci	int16_t  TempRespLim;
44762306a36Sopenharmony_ci	int16_t  TempCurr;
44862306a36Sopenharmony_ci	int16_t  SlopeCurr;
44962306a36Sopenharmony_ci	int16_t  PwmCurr;
45062306a36Sopenharmony_ci	uint32_t RefreshPeriod;
45162306a36Sopenharmony_ci	int16_t  FdoMax;
45262306a36Sopenharmony_ci	uint8_t  TempSrc;
45362306a36Sopenharmony_ci	int8_t   Padding;
45462306a36Sopenharmony_ci};
45562306a36Sopenharmony_ci
45662306a36Sopenharmony_citypedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable;
45762306a36Sopenharmony_ci
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_cistruct SMU7_Discrete_PmFuses {
46062306a36Sopenharmony_ci  // dw0-dw1
46162306a36Sopenharmony_ci  uint8_t BapmVddCVidHiSidd[8];
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ci  // dw2-dw3
46462306a36Sopenharmony_ci  uint8_t BapmVddCVidLoSidd[8];
46562306a36Sopenharmony_ci
46662306a36Sopenharmony_ci  // dw4-dw5
46762306a36Sopenharmony_ci  uint8_t VddCVid[8];
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ci  // dw6
47062306a36Sopenharmony_ci  uint8_t SviLoadLineEn;
47162306a36Sopenharmony_ci  uint8_t SviLoadLineVddC;
47262306a36Sopenharmony_ci  uint8_t SviLoadLineTrimVddC;
47362306a36Sopenharmony_ci  uint8_t SviLoadLineOffsetVddC;
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ci  // dw7
47662306a36Sopenharmony_ci  uint16_t TDC_VDDC_PkgLimit;
47762306a36Sopenharmony_ci  uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
47862306a36Sopenharmony_ci  uint8_t TDC_MAWt;
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_ci  // dw8
48162306a36Sopenharmony_ci  uint8_t TdcWaterfallCtl;
48262306a36Sopenharmony_ci  uint8_t LPMLTemperatureMin;
48362306a36Sopenharmony_ci  uint8_t LPMLTemperatureMax;
48462306a36Sopenharmony_ci  uint8_t Reserved;
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ci  // dw9-dw10
48762306a36Sopenharmony_ci  uint8_t BapmVddCVidHiSidd2[8];
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ci  // dw11-dw12
49062306a36Sopenharmony_ci  int16_t FuzzyFan_ErrorSetDelta;
49162306a36Sopenharmony_ci  int16_t FuzzyFan_ErrorRateSetDelta;
49262306a36Sopenharmony_ci  int16_t FuzzyFan_PwmSetDelta;
49362306a36Sopenharmony_ci  uint16_t CalcMeasPowerBlend;
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ci  // dw13-dw16
49662306a36Sopenharmony_ci  uint8_t GnbLPML[16];
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ci  // dw17
49962306a36Sopenharmony_ci  uint8_t GnbLPMLMaxVid;
50062306a36Sopenharmony_ci  uint8_t GnbLPMLMinVid;
50162306a36Sopenharmony_ci  uint8_t Reserved1[2];
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci  // dw18
50462306a36Sopenharmony_ci  uint16_t BapmVddCBaseLeakageHiSidd;
50562306a36Sopenharmony_ci  uint16_t BapmVddCBaseLeakageLoSidd;
50662306a36Sopenharmony_ci};
50762306a36Sopenharmony_ci
50862306a36Sopenharmony_citypedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses;
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci#pragma pack(pop)
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci#endif
51462306a36Sopenharmony_ci
515