0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #ifndef __AMD_SHARED_H__
0024 #define __AMD_SHARED_H__
0025
0026 #include <drm/amd_asic_type.h>
0027
0028
0029 #define AMD_MAX_USEC_TIMEOUT 1000000
0030
0031
0032
0033
0034 enum amd_chip_flags {
0035 AMD_ASIC_MASK = 0x0000ffffUL,
0036 AMD_FLAGS_MASK = 0xffff0000UL,
0037 AMD_IS_MOBILITY = 0x00010000UL,
0038 AMD_IS_APU = 0x00020000UL,
0039 AMD_IS_PX = 0x00040000UL,
0040 AMD_EXP_HW_SUPPORT = 0x00080000UL,
0041 };
0042
0043 enum amd_apu_flags {
0044 AMD_APU_IS_RAVEN = 0x00000001UL,
0045 AMD_APU_IS_RAVEN2 = 0x00000002UL,
0046 AMD_APU_IS_PICASSO = 0x00000004UL,
0047 AMD_APU_IS_RENOIR = 0x00000008UL,
0048 AMD_APU_IS_GREEN_SARDINE = 0x00000010UL,
0049 AMD_APU_IS_VANGOGH = 0x00000020UL,
0050 AMD_APU_IS_CYAN_SKILLFISH2 = 0x00000040UL,
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 enum amd_ip_block_type {
0089 AMD_IP_BLOCK_TYPE_COMMON,
0090 AMD_IP_BLOCK_TYPE_GMC,
0091 AMD_IP_BLOCK_TYPE_IH,
0092 AMD_IP_BLOCK_TYPE_SMC,
0093 AMD_IP_BLOCK_TYPE_PSP,
0094 AMD_IP_BLOCK_TYPE_DCE,
0095 AMD_IP_BLOCK_TYPE_GFX,
0096 AMD_IP_BLOCK_TYPE_SDMA,
0097 AMD_IP_BLOCK_TYPE_UVD,
0098 AMD_IP_BLOCK_TYPE_VCE,
0099 AMD_IP_BLOCK_TYPE_ACP,
0100 AMD_IP_BLOCK_TYPE_VCN,
0101 AMD_IP_BLOCK_TYPE_MES,
0102 AMD_IP_BLOCK_TYPE_JPEG,
0103 AMD_IP_BLOCK_TYPE_NUM,
0104 };
0105
0106 enum amd_clockgating_state {
0107 AMD_CG_STATE_GATE = 0,
0108 AMD_CG_STATE_UNGATE,
0109 };
0110
0111
0112 enum amd_powergating_state {
0113 AMD_PG_STATE_GATE = 0,
0114 AMD_PG_STATE_UNGATE,
0115 };
0116
0117
0118
0119 #define AMD_CG_SUPPORT_GFX_MGCG (1ULL << 0)
0120 #define AMD_CG_SUPPORT_GFX_MGLS (1ULL << 1)
0121 #define AMD_CG_SUPPORT_GFX_CGCG (1ULL << 2)
0122 #define AMD_CG_SUPPORT_GFX_CGLS (1ULL << 3)
0123 #define AMD_CG_SUPPORT_GFX_CGTS (1ULL << 4)
0124 #define AMD_CG_SUPPORT_GFX_CGTS_LS (1ULL << 5)
0125 #define AMD_CG_SUPPORT_GFX_CP_LS (1ULL << 6)
0126 #define AMD_CG_SUPPORT_GFX_RLC_LS (1ULL << 7)
0127 #define AMD_CG_SUPPORT_MC_LS (1ULL << 8)
0128 #define AMD_CG_SUPPORT_MC_MGCG (1ULL << 9)
0129 #define AMD_CG_SUPPORT_SDMA_LS (1ULL << 10)
0130 #define AMD_CG_SUPPORT_SDMA_MGCG (1ULL << 11)
0131 #define AMD_CG_SUPPORT_BIF_LS (1ULL << 12)
0132 #define AMD_CG_SUPPORT_UVD_MGCG (1ULL << 13)
0133 #define AMD_CG_SUPPORT_VCE_MGCG (1ULL << 14)
0134 #define AMD_CG_SUPPORT_HDP_LS (1ULL << 15)
0135 #define AMD_CG_SUPPORT_HDP_MGCG (1ULL << 16)
0136 #define AMD_CG_SUPPORT_ROM_MGCG (1ULL << 17)
0137 #define AMD_CG_SUPPORT_DRM_LS (1ULL << 18)
0138 #define AMD_CG_SUPPORT_BIF_MGCG (1ULL << 19)
0139 #define AMD_CG_SUPPORT_GFX_3D_CGCG (1ULL << 20)
0140 #define AMD_CG_SUPPORT_GFX_3D_CGLS (1ULL << 21)
0141 #define AMD_CG_SUPPORT_DRM_MGCG (1ULL << 22)
0142 #define AMD_CG_SUPPORT_DF_MGCG (1ULL << 23)
0143 #define AMD_CG_SUPPORT_VCN_MGCG (1ULL << 24)
0144 #define AMD_CG_SUPPORT_HDP_DS (1ULL << 25)
0145 #define AMD_CG_SUPPORT_HDP_SD (1ULL << 26)
0146 #define AMD_CG_SUPPORT_IH_CG (1ULL << 27)
0147 #define AMD_CG_SUPPORT_ATHUB_LS (1ULL << 28)
0148 #define AMD_CG_SUPPORT_ATHUB_MGCG (1ULL << 29)
0149 #define AMD_CG_SUPPORT_JPEG_MGCG (1ULL << 30)
0150 #define AMD_CG_SUPPORT_GFX_FGCG (1ULL << 31)
0151 #define AMD_CG_SUPPORT_REPEATER_FGCG (1ULL << 32)
0152 #define AMD_CG_SUPPORT_GFX_PERF_CLK (1ULL << 33)
0153
0154 #define AMD_PG_SUPPORT_GFX_PG (1 << 0)
0155 #define AMD_PG_SUPPORT_GFX_SMG (1 << 1)
0156 #define AMD_PG_SUPPORT_GFX_DMG (1 << 2)
0157 #define AMD_PG_SUPPORT_UVD (1 << 3)
0158 #define AMD_PG_SUPPORT_VCE (1 << 4)
0159 #define AMD_PG_SUPPORT_CP (1 << 5)
0160 #define AMD_PG_SUPPORT_GDS (1 << 6)
0161 #define AMD_PG_SUPPORT_RLC_SMU_HS (1 << 7)
0162 #define AMD_PG_SUPPORT_SDMA (1 << 8)
0163 #define AMD_PG_SUPPORT_ACP (1 << 9)
0164 #define AMD_PG_SUPPORT_SAMU (1 << 10)
0165 #define AMD_PG_SUPPORT_GFX_QUICK_MG (1 << 11)
0166 #define AMD_PG_SUPPORT_GFX_PIPELINE (1 << 12)
0167 #define AMD_PG_SUPPORT_MMHUB (1 << 13)
0168 #define AMD_PG_SUPPORT_VCN (1 << 14)
0169 #define AMD_PG_SUPPORT_VCN_DPG (1 << 15)
0170 #define AMD_PG_SUPPORT_ATHUB (1 << 16)
0171 #define AMD_PG_SUPPORT_JPEG (1 << 17)
0172 #define AMD_PG_SUPPORT_IH_SRAM_PG (1 << 18)
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203 enum PP_FEATURE_MASK {
0204 PP_SCLK_DPM_MASK = 0x1,
0205 PP_MCLK_DPM_MASK = 0x2,
0206 PP_PCIE_DPM_MASK = 0x4,
0207 PP_SCLK_DEEP_SLEEP_MASK = 0x8,
0208 PP_POWER_CONTAINMENT_MASK = 0x10,
0209 PP_UVD_HANDSHAKE_MASK = 0x20,
0210 PP_SMC_VOLTAGE_CONTROL_MASK = 0x40,
0211 PP_VBI_TIME_SUPPORT_MASK = 0x80,
0212 PP_ULV_MASK = 0x100,
0213 PP_ENABLE_GFX_CG_THRU_SMU = 0x200,
0214 PP_CLOCK_STRETCH_MASK = 0x400,
0215 PP_OD_FUZZY_FAN_CONTROL_MASK = 0x800,
0216 PP_SOCCLK_DPM_MASK = 0x1000,
0217 PP_DCEFCLK_DPM_MASK = 0x2000,
0218 PP_OVERDRIVE_MASK = 0x4000,
0219 PP_GFXOFF_MASK = 0x8000,
0220 PP_ACG_MASK = 0x10000,
0221 PP_STUTTER_MODE = 0x20000,
0222 PP_AVFS_MASK = 0x40000,
0223 PP_GFX_DCS_MASK = 0x80000,
0224 };
0225
0226 enum amd_harvest_ip_mask {
0227 AMD_HARVEST_IP_VCN_MASK = 0x1,
0228 AMD_HARVEST_IP_JPEG_MASK = 0x2,
0229 AMD_HARVEST_IP_DMU_MASK = 0x4,
0230 };
0231
0232 enum DC_FEATURE_MASK {
0233
0234 DC_FBC_MASK = (1 << 0),
0235 DC_MULTI_MON_PP_MCLK_SWITCH_MASK = (1 << 1),
0236 DC_DISABLE_FRACTIONAL_PWM_MASK = (1 << 2),
0237 DC_PSR_MASK = (1 << 3),
0238 DC_EDP_NO_POWER_SEQUENCING = (1 << 4),
0239 DC_DISABLE_LTTPR_DP1_4A = (1 << 5),
0240 DC_DISABLE_LTTPR_DP2_0 = (1 << 6),
0241 DC_PSR_ALLOW_SMU_OPT = (1 << 7),
0242 DC_PSR_ALLOW_MULTI_DISP_OPT = (1 << 8),
0243 };
0244
0245 enum DC_DEBUG_MASK {
0246 DC_DISABLE_PIPE_SPLIT = 0x1,
0247 DC_DISABLE_STUTTER = 0x2,
0248 DC_DISABLE_DSC = 0x4,
0249 DC_DISABLE_CLOCK_GATING = 0x8,
0250 DC_DISABLE_PSR = 0x10,
0251 DC_FORCE_SUBVP_MCLK_SWITCH = 0x20,
0252 DC_DISABLE_MPO = 0x40,
0253 };
0254
0255 enum amd_dpm_forced_level;
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 struct amd_ip_funcs {
0288 char *name;
0289 int (*early_init)(void *handle);
0290 int (*late_init)(void *handle);
0291 int (*sw_init)(void *handle);
0292 int (*sw_fini)(void *handle);
0293 int (*early_fini)(void *handle);
0294 int (*hw_init)(void *handle);
0295 int (*hw_fini)(void *handle);
0296 void (*late_fini)(void *handle);
0297 int (*suspend)(void *handle);
0298 int (*resume)(void *handle);
0299 bool (*is_idle)(void *handle);
0300 int (*wait_for_idle)(void *handle);
0301 bool (*check_soft_reset)(void *handle);
0302 int (*pre_soft_reset)(void *handle);
0303 int (*soft_reset)(void *handle);
0304 int (*post_soft_reset)(void *handle);
0305 int (*set_clockgating_state)(void *handle,
0306 enum amd_clockgating_state state);
0307 int (*set_powergating_state)(void *handle,
0308 enum amd_powergating_state state);
0309 void (*get_clockgating_state)(void *handle, u64 *flags);
0310 };
0311
0312
0313 #endif