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_FUSION_H
2562306a36Sopenharmony_ci#define SMU7_FUSION_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 5
3362306a36Sopenharmony_ci#define SMU7_DTE_SINKS 3
3462306a36Sopenharmony_ci#define SMU7_NUM_CPU_TES 2
3562306a36Sopenharmony_ci#define SMU7_NUM_GPU_TES 1
3662306a36Sopenharmony_ci#define SMU7_NUM_NON_TES 2
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci// All 'soft registers' should be uint32_t.
3962306a36Sopenharmony_cistruct SMU7_SoftRegisters
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci    uint32_t        RefClockFrequency;
4262306a36Sopenharmony_ci    uint32_t        PmTimerP;
4362306a36Sopenharmony_ci    uint32_t        FeatureEnables;
4462306a36Sopenharmony_ci    uint32_t        HandshakeDisables;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci    uint8_t         DisplayPhy1Config;
4762306a36Sopenharmony_ci    uint8_t         DisplayPhy2Config;
4862306a36Sopenharmony_ci    uint8_t         DisplayPhy3Config;
4962306a36Sopenharmony_ci    uint8_t         DisplayPhy4Config;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci    uint8_t         DisplayPhy5Config;
5262306a36Sopenharmony_ci    uint8_t         DisplayPhy6Config;
5362306a36Sopenharmony_ci    uint8_t         DisplayPhy7Config;
5462306a36Sopenharmony_ci    uint8_t         DisplayPhy8Config;
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci    uint32_t        AverageGraphicsA;
5762306a36Sopenharmony_ci    uint32_t        AverageMemoryA;
5862306a36Sopenharmony_ci    uint32_t        AverageGioA;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci    uint8_t         SClkDpmEnabledLevels;
6162306a36Sopenharmony_ci    uint8_t         MClkDpmEnabledLevels;
6262306a36Sopenharmony_ci    uint8_t         LClkDpmEnabledLevels;
6362306a36Sopenharmony_ci    uint8_t         PCIeDpmEnabledLevels;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci    uint8_t         UVDDpmEnabledLevels;
6662306a36Sopenharmony_ci    uint8_t         SAMUDpmEnabledLevels;
6762306a36Sopenharmony_ci    uint8_t         ACPDpmEnabledLevels;
6862306a36Sopenharmony_ci    uint8_t         VCEDpmEnabledLevels;
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci    uint32_t        DRAM_LOG_ADDR_H;
7162306a36Sopenharmony_ci    uint32_t        DRAM_LOG_ADDR_L;
7262306a36Sopenharmony_ci    uint32_t        DRAM_LOG_PHY_ADDR_H;
7362306a36Sopenharmony_ci    uint32_t        DRAM_LOG_PHY_ADDR_L;
7462306a36Sopenharmony_ci    uint32_t        DRAM_LOG_BUFF_SIZE;
7562306a36Sopenharmony_ci    uint32_t        UlvEnterC;
7662306a36Sopenharmony_ci    uint32_t        UlvTime;
7762306a36Sopenharmony_ci    uint32_t        Reserved[3];
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci};
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_citypedef struct SMU7_SoftRegisters SMU7_SoftRegisters;
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cistruct SMU7_Fusion_GraphicsLevel
8462306a36Sopenharmony_ci{
8562306a36Sopenharmony_ci    uint32_t    MinVddNb;
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci    uint32_t    SclkFrequency;
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci    uint8_t     Vid;
9062306a36Sopenharmony_ci    uint8_t     VidOffset;
9162306a36Sopenharmony_ci    uint16_t    AT;
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci    uint8_t     PowerThrottle;
9462306a36Sopenharmony_ci    uint8_t     GnbSlow;
9562306a36Sopenharmony_ci    uint8_t     ForceNbPs1;
9662306a36Sopenharmony_ci    uint8_t     SclkDid;
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci    uint8_t     DisplayWatermark;
9962306a36Sopenharmony_ci    uint8_t     EnabledForActivity;
10062306a36Sopenharmony_ci    uint8_t     EnabledForThrottle;
10162306a36Sopenharmony_ci    uint8_t     UpH;
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci    uint8_t     DownH;
10462306a36Sopenharmony_ci    uint8_t     VoltageDownH;
10562306a36Sopenharmony_ci    uint8_t     DeepSleepDivId;
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci    uint8_t     ClkBypassCntl;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci    uint32_t    reserved;
11062306a36Sopenharmony_ci};
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_citypedef struct SMU7_Fusion_GraphicsLevel SMU7_Fusion_GraphicsLevel;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_cistruct SMU7_Fusion_GIOLevel
11562306a36Sopenharmony_ci{
11662306a36Sopenharmony_ci    uint8_t     EnabledForActivity;
11762306a36Sopenharmony_ci    uint8_t     LclkDid;
11862306a36Sopenharmony_ci    uint8_t     Vid;
11962306a36Sopenharmony_ci    uint8_t     VoltageDownH;
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci    uint32_t    MinVddNb;
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci    uint16_t    ResidencyCounter;
12462306a36Sopenharmony_ci    uint8_t     UpH;
12562306a36Sopenharmony_ci    uint8_t     DownH;
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci    uint32_t    LclkFrequency;
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci    uint8_t     ActivityLevel;
13062306a36Sopenharmony_ci    uint8_t     EnabledForThrottle;
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci    uint8_t     ClkBypassCntl;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci    uint8_t     padding;
13562306a36Sopenharmony_ci};
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_citypedef struct SMU7_Fusion_GIOLevel SMU7_Fusion_GIOLevel;
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci// UVD VCLK/DCLK state (level) definition.
14062306a36Sopenharmony_cistruct SMU7_Fusion_UvdLevel
14162306a36Sopenharmony_ci{
14262306a36Sopenharmony_ci    uint32_t VclkFrequency;
14362306a36Sopenharmony_ci    uint32_t DclkFrequency;
14462306a36Sopenharmony_ci    uint16_t MinVddNb;
14562306a36Sopenharmony_ci    uint8_t  VclkDivider;
14662306a36Sopenharmony_ci    uint8_t  DclkDivider;
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci    uint8_t     VClkBypassCntl;
14962306a36Sopenharmony_ci    uint8_t     DClkBypassCntl;
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci    uint8_t     padding[2];
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci};
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_citypedef struct SMU7_Fusion_UvdLevel SMU7_Fusion_UvdLevel;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci// Clocks for other external blocks (VCE, ACP, SAMU).
15862306a36Sopenharmony_cistruct SMU7_Fusion_ExtClkLevel
15962306a36Sopenharmony_ci{
16062306a36Sopenharmony_ci    uint32_t Frequency;
16162306a36Sopenharmony_ci    uint16_t MinVoltage;
16262306a36Sopenharmony_ci    uint8_t  Divider;
16362306a36Sopenharmony_ci    uint8_t  ClkBypassCntl;
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci    uint32_t Reserved;
16662306a36Sopenharmony_ci};
16762306a36Sopenharmony_citypedef struct SMU7_Fusion_ExtClkLevel SMU7_Fusion_ExtClkLevel;
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_cistruct SMU7_Fusion_ACPILevel
17062306a36Sopenharmony_ci{
17162306a36Sopenharmony_ci    uint32_t    Flags;
17262306a36Sopenharmony_ci    uint32_t    MinVddNb;
17362306a36Sopenharmony_ci    uint32_t    SclkFrequency;
17462306a36Sopenharmony_ci    uint8_t     SclkDid;
17562306a36Sopenharmony_ci    uint8_t     GnbSlow;
17662306a36Sopenharmony_ci    uint8_t     ForceNbPs1;
17762306a36Sopenharmony_ci    uint8_t     DisplayWatermark;
17862306a36Sopenharmony_ci    uint8_t     DeepSleepDivId;
17962306a36Sopenharmony_ci    uint8_t     padding[3];
18062306a36Sopenharmony_ci};
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_citypedef struct SMU7_Fusion_ACPILevel SMU7_Fusion_ACPILevel;
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_cistruct SMU7_Fusion_NbDpm
18562306a36Sopenharmony_ci{
18662306a36Sopenharmony_ci    uint8_t DpmXNbPsHi;
18762306a36Sopenharmony_ci    uint8_t DpmXNbPsLo;
18862306a36Sopenharmony_ci    uint8_t Dpm0PgNbPsHi;
18962306a36Sopenharmony_ci    uint8_t Dpm0PgNbPsLo;
19062306a36Sopenharmony_ci    uint8_t EnablePsi1;
19162306a36Sopenharmony_ci    uint8_t SkipDPM0;
19262306a36Sopenharmony_ci    uint8_t SkipPG;
19362306a36Sopenharmony_ci    uint8_t Hysteresis;
19462306a36Sopenharmony_ci    uint8_t EnableDpmPstatePoll;
19562306a36Sopenharmony_ci    uint8_t padding[3];
19662306a36Sopenharmony_ci};
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_citypedef struct SMU7_Fusion_NbDpm SMU7_Fusion_NbDpm;
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_cistruct SMU7_Fusion_StateInfo
20162306a36Sopenharmony_ci{
20262306a36Sopenharmony_ci    uint32_t SclkFrequency;
20362306a36Sopenharmony_ci    uint32_t LclkFrequency;
20462306a36Sopenharmony_ci    uint32_t VclkFrequency;
20562306a36Sopenharmony_ci    uint32_t DclkFrequency;
20662306a36Sopenharmony_ci    uint32_t SamclkFrequency;
20762306a36Sopenharmony_ci    uint32_t AclkFrequency;
20862306a36Sopenharmony_ci    uint32_t EclkFrequency;
20962306a36Sopenharmony_ci    uint8_t  DisplayWatermark;
21062306a36Sopenharmony_ci    uint8_t  McArbIndex;
21162306a36Sopenharmony_ci    int8_t   SclkIndex;
21262306a36Sopenharmony_ci    int8_t   MclkIndex;
21362306a36Sopenharmony_ci};
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_citypedef struct SMU7_Fusion_StateInfo SMU7_Fusion_StateInfo;
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_cistruct SMU7_Fusion_DpmTable
21862306a36Sopenharmony_ci{
21962306a36Sopenharmony_ci    uint32_t                            SystemFlags;
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci    SMU7_PIDController                  GraphicsPIDController;
22262306a36Sopenharmony_ci    SMU7_PIDController                  GioPIDController;
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci    uint8_t                            GraphicsDpmLevelCount;
22562306a36Sopenharmony_ci    uint8_t                            GIOLevelCount;
22662306a36Sopenharmony_ci    uint8_t                            UvdLevelCount;
22762306a36Sopenharmony_ci    uint8_t                            VceLevelCount;
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci    uint8_t                            AcpLevelCount;
23062306a36Sopenharmony_ci    uint8_t                            SamuLevelCount;
23162306a36Sopenharmony_ci    uint16_t                           FpsHighT;
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci    SMU7_Fusion_GraphicsLevel         GraphicsLevel           [SMU__NUM_SCLK_DPM_STATE];
23462306a36Sopenharmony_ci    SMU7_Fusion_ACPILevel             ACPILevel;
23562306a36Sopenharmony_ci    SMU7_Fusion_UvdLevel              UvdLevel                [SMU7_MAX_LEVELS_UVD];
23662306a36Sopenharmony_ci    SMU7_Fusion_ExtClkLevel           VceLevel                [SMU7_MAX_LEVELS_VCE];
23762306a36Sopenharmony_ci    SMU7_Fusion_ExtClkLevel           AcpLevel                [SMU7_MAX_LEVELS_ACP];
23862306a36Sopenharmony_ci    SMU7_Fusion_ExtClkLevel           SamuLevel               [SMU7_MAX_LEVELS_SAMU];
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci    uint8_t                           UvdBootLevel;
24162306a36Sopenharmony_ci    uint8_t                           VceBootLevel;
24262306a36Sopenharmony_ci    uint8_t                           AcpBootLevel;
24362306a36Sopenharmony_ci    uint8_t                           SamuBootLevel;
24462306a36Sopenharmony_ci    uint8_t                           UVDInterval;
24562306a36Sopenharmony_ci    uint8_t                           VCEInterval;
24662306a36Sopenharmony_ci    uint8_t                           ACPInterval;
24762306a36Sopenharmony_ci    uint8_t                           SAMUInterval;
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci    uint8_t                           GraphicsBootLevel;
25062306a36Sopenharmony_ci    uint8_t                           GraphicsInterval;
25162306a36Sopenharmony_ci    uint8_t                           GraphicsThermThrottleEnable;
25262306a36Sopenharmony_ci    uint8_t                           GraphicsVoltageChangeEnable;
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci    uint8_t                           GraphicsClkSlowEnable;
25562306a36Sopenharmony_ci    uint8_t                           GraphicsClkSlowDivider;
25662306a36Sopenharmony_ci    uint16_t                          FpsLowT;
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci    uint32_t                          DisplayCac;
25962306a36Sopenharmony_ci    uint32_t                          LowSclkInterruptT;
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci    uint32_t                          DRAM_LOG_ADDR_H;
26262306a36Sopenharmony_ci    uint32_t                          DRAM_LOG_ADDR_L;
26362306a36Sopenharmony_ci    uint32_t                          DRAM_LOG_PHY_ADDR_H;
26462306a36Sopenharmony_ci    uint32_t                          DRAM_LOG_PHY_ADDR_L;
26562306a36Sopenharmony_ci    uint32_t                          DRAM_LOG_BUFF_SIZE;
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci};
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_cistruct SMU7_Fusion_GIODpmTable
27062306a36Sopenharmony_ci{
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ci    SMU7_Fusion_GIOLevel              GIOLevel                [SMU7_MAX_LEVELS_GIO];
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci    SMU7_PIDController                GioPIDController;
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ci    uint32_t                          GIOLevelCount;
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci    uint8_t                           Enable;
27962306a36Sopenharmony_ci    uint8_t                           GIOVoltageChangeEnable;
28062306a36Sopenharmony_ci    uint8_t                           GIOBootLevel;
28162306a36Sopenharmony_ci    uint8_t                           padding;
28262306a36Sopenharmony_ci    uint8_t                           padding1[2];
28362306a36Sopenharmony_ci    uint8_t                           TargetState;
28462306a36Sopenharmony_ci    uint8_t                           CurrenttState;
28562306a36Sopenharmony_ci    uint8_t                           ThrottleOnHtc;
28662306a36Sopenharmony_ci    uint8_t                           ThermThrottleStatus;
28762306a36Sopenharmony_ci    uint8_t                           ThermThrottleTempSelect;
28862306a36Sopenharmony_ci    uint8_t                           ThermThrottleEnable;
28962306a36Sopenharmony_ci    uint16_t                          TemperatureLimitHigh;
29062306a36Sopenharmony_ci    uint16_t                          TemperatureLimitLow;
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci};
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_citypedef struct SMU7_Fusion_DpmTable SMU7_Fusion_DpmTable;
29562306a36Sopenharmony_citypedef struct SMU7_Fusion_GIODpmTable SMU7_Fusion_GIODpmTable;
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci#pragma pack(pop)
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci#endif
30062306a36Sopenharmony_ci
301