xref: /linux/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_6.h (revision 0ea5c948cb64bab5bc7a5516774eb8536f05aa0d)
1 /*
2  * Copyright 2021 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 #ifndef SMU_13_0_6_DRIVER_IF_H
24 #define SMU_13_0_6_DRIVER_IF_H
25 
26 // *** IMPORTANT ***
27 // PMFW TEAM: Always increment the interface version if
28 // anything is changed in this file
29 #define SMU13_0_6_DRIVER_IF_VERSION 0x08042024
30 
31 //I2C Interface
32 #define NUM_I2C_CONTROLLERS                8
33 #define I2C_CONTROLLER_ENABLED             1
34 #define I2C_CONTROLLER_DISABLED            0
35 
36 #define MAX_SW_I2C_COMMANDS                24
37 
38 typedef enum {
39   I2C_CONTROLLER_PORT_0, //CKSVII2C0
40   I2C_CONTROLLER_PORT_1, //CKSVII2C1
41   I2C_CONTROLLER_PORT_COUNT,
42 } I2cControllerPort_e;
43 
44 typedef enum {
45   UNSUPPORTED_1,              //50  Kbits/s not supported anymore!
46   I2C_SPEED_STANDARD_100K,    //100 Kbits/s
47   I2C_SPEED_FAST_400K,        //400 Kbits/s
48   I2C_SPEED_FAST_PLUS_1M,     //1   Mbits/s (in fast mode)
49   UNSUPPORTED_2,              //1   Mbits/s (in high speed mode)  not supported anymore!
50   UNSUPPORTED_3,              //2.3 Mbits/s  not supported anymore!
51   I2C_SPEED_COUNT,
52 } I2cSpeed_e;
53 
54 typedef enum {
55   I2C_CMD_READ,
56   I2C_CMD_WRITE,
57   I2C_CMD_COUNT,
58 } I2cCmdType_e;
59 
60 #define CMDCONFIG_STOP_BIT             0
61 #define CMDCONFIG_RESTART_BIT          1
62 #define CMDCONFIG_READWRITE_BIT        2 //bit should be 0 for read, 1 for write
63 
64 #define CMDCONFIG_STOP_MASK           (1 << CMDCONFIG_STOP_BIT)
65 #define CMDCONFIG_RESTART_MASK        (1 << CMDCONFIG_RESTART_BIT)
66 #define CMDCONFIG_READWRITE_MASK      (1 << CMDCONFIG_READWRITE_BIT)
67 
68 typedef enum {
69   // MMHUB
70   CODE_DAGB0,
71   CODE_EA0 = 5,
72   CODE_UTCL2_ROUTER = 10,
73   CODE_VML2,
74   CODE_VML2_WALKER,
75   CODE_MMCANE,
76 
77   // VCN
78   // VCN VCPU
79   CODE_VIDD,
80   CODE_VIDV,
81   // VCN JPEG
82   CODE_JPEG0S,
83   CODE_JPEG0D,
84   CODE_JPEG1S,
85   CODE_JPEG1D,
86   CODE_JPEG2S,
87   CODE_JPEG2D,
88   CODE_JPEG3S,
89   CODE_JPEG3D,
90   CODE_JPEG4S,
91   CODE_JPEG4D,
92   CODE_JPEG5S,
93   CODE_JPEG5D,
94   CODE_JPEG6S,
95   CODE_JPEG6D,
96   CODE_JPEG7S,
97   CODE_JPEG7D,
98   // VCN MMSCH
99   CODE_MMSCHD,
100 
101   // SDMA
102   CODE_SDMA0,
103   CODE_SDMA1,
104   CODE_SDMA2,
105   CODE_SDMA3,
106 
107   // SOC
108   CODE_HDP,
109   CODE_ATHUB,
110   CODE_IH,
111   CODE_XHUB_POISON,
112   CODE_SMN_SLVERR = 40,
113   CODE_WDT,
114 
115   CODE_UNKNOWN = 42,
116   CODE_COUNT,
117 } ERR_CODE_e;
118 
119 typedef enum {
120   // SH POISON FED
121   SH_FED_CODE,
122   // GCEA Pin UE_ERR regs
123   GCEA_CODE,
124   SQ_CODE,
125   LDS_CODE,
126   GDS_CODE,
127   SP0_CODE,
128   SP1_CODE,
129   TCC_CODE,
130   TCA_CODE,
131   TCX_CODE,
132   CPC_CODE,
133   CPF_CODE,
134   CPG_CODE,
135   SPI_CODE,
136   RLC_CODE,
137   // GCEA Pin, UE_EDC regs
138   SQC_CODE,
139   TA_CODE,
140   TD_CODE,
141   TCP_CODE,
142   TCI_CODE,
143   // GC Router
144   GC_ROUTER_CODE,
145   VML2_CODE,
146   VML2_WALKER_CODE,
147   ATCL2_CODE,
148   GC_CANE_CODE,
149 
150   // SOC error codes 40-42 are common with ERR_CODE_e
151   MP5_CODE_SMN_SLVERR = 40,
152   MP5_CODE_UNKNOWN = 42,
153 } GC_ERROR_CODE_e;
154 
155 
156 typedef struct {
157   uint8_t ReadWriteData;  //Return data for read. Data to send for write
158   uint8_t CmdConfig; //Includes whether associated command should have a stop or restart command, and is a read or write
159 } SwI2cCmd_t; //SW I2C Command Table
160 
161 typedef struct {
162   uint8_t    I2CcontrollerPort; //CKSVII2C0(0) or //CKSVII2C1(1)
163   uint8_t    I2CSpeed;          //Use I2cSpeed_e to indicate speed to select
164   uint8_t    SlaveAddress;      //Slave address of device
165   uint8_t    NumCmds;           //Number of commands
166   SwI2cCmd_t SwI2cCmds[MAX_SW_I2C_COMMANDS];
167 } SwI2cRequest_t; // SW I2C Request Table
168 
169 typedef struct {
170   SwI2cRequest_t SwI2cRequest;
171   uint32_t       Spare[8];
172   uint32_t       MmHubPadding[8]; // SMU internal use
173 } SwI2cRequestExternal_t;
174 
175 typedef enum {
176   PPCLK_VCLK,
177   PPCLK_DCLK,
178   PPCLK_SOCCLK,
179   PPCLK_UCLK,
180   PPCLK_FCLK,
181   PPCLK_LCLK,
182   PPCLK_COUNT,
183 } PPCLK_e;
184 
185 typedef enum {
186   GPIO_INT_POLARITY_ACTIVE_LOW,
187   GPIO_INT_POLARITY_ACTIVE_HIGH,
188 } GpioIntPolarity_e;
189 
190 //TODO confirm if this is used in SMU_13_0_6 PPSMC_MSG_SetUclkDpmMode
191 typedef enum {
192   UCLK_DPM_MODE_BANDWIDTH,
193   UCLK_DPM_MODE_LATENCY,
194 } UCLK_DPM_MODE_e;
195 
196 typedef struct {
197   //0-23 SOC, 24-26 SOCIO, 27-29 SOC
198   uint16_t avgPsmCount[30];
199   uint16_t minPsmCount[30];
200   float    avgPsmVoltage[30];
201   float    minPsmVoltage[30];
202 } AvfsDebugTableAid_t;
203 
204 typedef struct {
205   //0-27 GFX, 28-29 SOC
206   uint16_t avgPsmCount[30];
207   uint16_t minPsmCount[30];
208   float    avgPsmVoltage[30];
209   float    minPsmVoltage[30];
210 } AvfsDebugTableXcd_t;
211 
212 // Defines used for IH-based thermal interrupts to GFX driver - A/X only
213 #define IH_INTERRUPT_ID_TO_DRIVER                   0xFE
214 #define IH_INTERRUPT_CONTEXT_ID_THERMAL_THROTTLING  0x7
215 
216 //thermal over-temp mask defines for IH interrupt to host
217 #define THROTTLER_PROCHOT_BIT           0
218 #define THROTTLER_PPT_BIT               1
219 #define THROTTLER_THERMAL_SOCKET_BIT    2//AID, XCD, CCD throttling
220 #define THROTTLER_THERMAL_VR_BIT        3//VRHOT
221 #define THROTTLER_THERMAL_HBM_BIT       4
222 
223 #define ClearMcaOnRead_UE_FLAG_MASK              0x1
224 #define ClearMcaOnRead_CE_POLL_MASK              0x2
225 
226 // These defines are used with the following messages:
227 // SMC_MSG_TransferTableDram2Smu
228 // SMC_MSG_TransferTableSmu2Dram
229 // #define TABLE_PPTABLE                 0
230 // #define TABLE_AVFS_PSM_DEBUG          1
231 // #define TABLE_AVFS_FUSE_OVERRIDE      2
232 // #define TABLE_PMSTATUSLOG             3
233 // #define TABLE_SMU_METRICS             4
234 // #define TABLE_DRIVER_SMU_CONFIG       5
235 // #define TABLE_I2C_COMMANDS            6
236 // #define TABLE_COUNT                   7
237 
238 // // Table transfer status
239 // #define TABLE_TRANSFER_OK         0x0
240 // #define TABLE_TRANSFER_FAILED     0xFF
241 // #define TABLE_TRANSFER_PENDING    0xAB
242 
243 #endif
244