15fc3aeebSyanyang1 /*
25fc3aeebSyanyang1  * Copyright 2015 Advanced Micro Devices, Inc.
35fc3aeebSyanyang1  *
45fc3aeebSyanyang1  * Permission is hereby granted, free of charge, to any person obtaining a
55fc3aeebSyanyang1  * copy of this software and associated documentation files (the "Software"),
65fc3aeebSyanyang1  * to deal in the Software without restriction, including without limitation
75fc3aeebSyanyang1  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
85fc3aeebSyanyang1  * and/or sell copies of the Software, and to permit persons to whom the
95fc3aeebSyanyang1  * Software is furnished to do so, subject to the following conditions:
105fc3aeebSyanyang1  *
115fc3aeebSyanyang1  * The above copyright notice and this permission notice shall be included in
125fc3aeebSyanyang1  * all copies or substantial portions of the Software.
135fc3aeebSyanyang1  *
145fc3aeebSyanyang1  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155fc3aeebSyanyang1  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
165fc3aeebSyanyang1  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
175fc3aeebSyanyang1  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
185fc3aeebSyanyang1  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
195fc3aeebSyanyang1  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
205fc3aeebSyanyang1  * OTHER DEALINGS IN THE SOFTWARE.
215fc3aeebSyanyang1  */
225fc3aeebSyanyang1 
235fc3aeebSyanyang1 #ifndef __AMD_SHARED_H__
245fc3aeebSyanyang1 #define __AMD_SHARED_H__
255fc3aeebSyanyang1 
26f674bd28SAkshu Agrawal #include <drm/amd_asic_type.h>
2740356542SSunil Khatri #include <drm/drm_print.h>
280b2daf09SJammy Zhou 
29cfa289fdSRex Zhu 
30617a64dcSEvan Quan #define AMD_MAX_USEC_TIMEOUT		1000000  /* 1000 ms */
3190b97b16SSunil Khatri struct amdgpu_ip_block;
3290b97b16SSunil Khatri 
332f7d10b3SJammy Zhou 
342f7d10b3SJammy Zhou /*
352f7d10b3SJammy Zhou  * Chip flags
362f7d10b3SJammy Zhou  */
372f7d10b3SJammy Zhou enum amd_chip_flags {
382f7d10b3SJammy Zhou 	AMD_ASIC_MASK = 0x0000ffffUL,
392f7d10b3SJammy Zhou 	AMD_FLAGS_MASK  = 0xffff0000UL,
402f7d10b3SJammy Zhou 	AMD_IS_MOBILITY = 0x00010000UL,
412f7d10b3SJammy Zhou 	AMD_IS_APU      = 0x00020000UL,
422f7d10b3SJammy Zhou 	AMD_IS_PX       = 0x00040000UL,
432f7d10b3SJammy Zhou 	AMD_EXP_HW_SUPPORT = 0x00080000UL,
442f7d10b3SJammy Zhou };
452f7d10b3SJammy Zhou 
4654f78a76SAlex Deucher enum amd_apu_flags {
4754f78a76SAlex Deucher 	AMD_APU_IS_RAVEN = 0x00000001UL,
4854f78a76SAlex Deucher 	AMD_APU_IS_RAVEN2 = 0x00000002UL,
4954f78a76SAlex Deucher 	AMD_APU_IS_PICASSO = 0x00000004UL,
5054f78a76SAlex Deucher 	AMD_APU_IS_RENOIR = 0x00000008UL,
51d205c3ccSAlex Deucher 	AMD_APU_IS_GREEN_SARDINE = 0x00000010UL,
52c345c89bSHuang Rui 	AMD_APU_IS_VANGOGH = 0x00000020UL,
53d0f56dc2STao Zhou 	AMD_APU_IS_CYAN_SKILLFISH2 = 0x00000040UL,
5454f78a76SAlex Deucher };
5554f78a76SAlex Deucher 
5652ef3a1aSRyan Taylor /**
5752ef3a1aSRyan Taylor * DOC: IP Blocks
5852ef3a1aSRyan Taylor *
5952ef3a1aSRyan Taylor * GPUs are composed of IP (intellectual property) blocks. These
6052ef3a1aSRyan Taylor * IP blocks provide various functionalities: display, graphics,
6152ef3a1aSRyan Taylor * video decode, etc. The IP blocks that comprise a particular GPU
6252ef3a1aSRyan Taylor * are listed in the GPU's respective SoC file. amdgpu_device.c
6352ef3a1aSRyan Taylor * acquires the list of IP blocks for the GPU in use on initialization.
6452ef3a1aSRyan Taylor * It can then operate on this list to perform standard driver operations
6552ef3a1aSRyan Taylor * such as: init, fini, suspend, resume, etc.
6652ef3a1aSRyan Taylor *
6752ef3a1aSRyan Taylor *
6852ef3a1aSRyan Taylor * IP block implementations are named using the following convention:
6952ef3a1aSRyan Taylor * <functionality>_v<version> (E.g.: gfx_v6_0).
7052ef3a1aSRyan Taylor */
7152ef3a1aSRyan Taylor 
7252ef3a1aSRyan Taylor /**
7352ef3a1aSRyan Taylor * enum amd_ip_block_type - Used to classify IP blocks by functionality.
7452ef3a1aSRyan Taylor *
7552ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_COMMON: GPU Family
7652ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_GMC: Graphics Memory Controller
7752ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_IH: Interrupt Handler
7852ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_SMC: System Management Controller
7952ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_PSP: Platform Security Processor
8052ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_DCE: Display and Compositing Engine
8152ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_GFX: Graphics and Compute Engine
8252ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_SDMA: System DMA Engine
8352ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_UVD: Unified Video Decoder
8452ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_VCE: Video Compression Engine
8552ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_ACP: Audio Co-Processor
8652ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_VCN: Video Core/Codec Next
8752ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_MES: Micro-Engine Scheduler
8852ef3a1aSRyan Taylor * @AMD_IP_BLOCK_TYPE_JPEG: JPEG Engine
89e1133ac8SJuntong Deng * @AMD_IP_BLOCK_TYPE_VPE: Video Processing Engine
90902b4027SAlex Deucher * @AMD_IP_BLOCK_TYPE_UMSCH_MM: User Mode Scheduler for Multimedia
91772e4d56SPratap Nirujogi * @AMD_IP_BLOCK_TYPE_ISP: Image Signal Processor
92239d6de3SEvan Quan * @AMD_IP_BLOCK_TYPE_NUM: Total number of IP block types
9352ef3a1aSRyan Taylor */
945fc3aeebSyanyang1 enum amd_ip_block_type {
955fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_COMMON,
965fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_GMC,
975fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_IH,
985fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_SMC,
990e5ca0d1SHuang Rui 	AMD_IP_BLOCK_TYPE_PSP,
1005fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_DCE,
1015fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_GFX,
1025fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_SDMA,
1035fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_UVD,
1045fc3aeebSyanyang1 	AMD_IP_BLOCK_TYPE_VCE,
105a8fe58ceSMaruthi Bayyavarapu 	AMD_IP_BLOCK_TYPE_ACP,
106886f82aaSJack Xiao 	AMD_IP_BLOCK_TYPE_VCN,
1078d1b04a6SLeo Liu 	AMD_IP_BLOCK_TYPE_MES,
1086c08e0efSEvan Quan 	AMD_IP_BLOCK_TYPE_JPEG,
109e784199cSHuang Rui 	AMD_IP_BLOCK_TYPE_VPE,
1102cd1f65dSLang Yu 	AMD_IP_BLOCK_TYPE_UMSCH_MM,
111772e4d56SPratap Nirujogi 	AMD_IP_BLOCK_TYPE_ISP,
1126c08e0efSEvan Quan 	AMD_IP_BLOCK_TYPE_NUM,
1135fc3aeebSyanyang1 };
1145fc3aeebSyanyang1 
1155fc3aeebSyanyang1 enum amd_clockgating_state {
1165fc3aeebSyanyang1 	AMD_CG_STATE_GATE = 0,
1175fc3aeebSyanyang1 	AMD_CG_STATE_UNGATE,
1185fc3aeebSyanyang1 };
1195fc3aeebSyanyang1 
120e5d03ac2SRex Zhu 
1215fc3aeebSyanyang1 enum amd_powergating_state {
1225fc3aeebSyanyang1 	AMD_PG_STATE_GATE = 0,
1235fc3aeebSyanyang1 	AMD_PG_STATE_UNGATE,
1245fc3aeebSyanyang1 };
1255fc3aeebSyanyang1 
126cfa289fdSRex Zhu 
127e3b04bc7SAlex Deucher /* CG flags */
12825faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_MGCG			(1ULL << 0)
12925faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_MGLS			(1ULL << 1)
13025faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_CGCG			(1ULL << 2)
13125faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_CGLS			(1ULL << 3)
13225faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_CGTS			(1ULL << 4)
13325faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_CGTS_LS		(1ULL << 5)
13425faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_CP_LS		(1ULL << 6)
13525faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_RLC_LS		(1ULL << 7)
13625faeddcSEvan Quan #define AMD_CG_SUPPORT_MC_LS			(1ULL << 8)
13725faeddcSEvan Quan #define AMD_CG_SUPPORT_MC_MGCG			(1ULL << 9)
13825faeddcSEvan Quan #define AMD_CG_SUPPORT_SDMA_LS			(1ULL << 10)
13925faeddcSEvan Quan #define AMD_CG_SUPPORT_SDMA_MGCG		(1ULL << 11)
14025faeddcSEvan Quan #define AMD_CG_SUPPORT_BIF_LS			(1ULL << 12)
14125faeddcSEvan Quan #define AMD_CG_SUPPORT_UVD_MGCG			(1ULL << 13)
14225faeddcSEvan Quan #define AMD_CG_SUPPORT_VCE_MGCG			(1ULL << 14)
14325faeddcSEvan Quan #define AMD_CG_SUPPORT_HDP_LS			(1ULL << 15)
14425faeddcSEvan Quan #define AMD_CG_SUPPORT_HDP_MGCG			(1ULL << 16)
14525faeddcSEvan Quan #define AMD_CG_SUPPORT_ROM_MGCG			(1ULL << 17)
14625faeddcSEvan Quan #define AMD_CG_SUPPORT_DRM_LS			(1ULL << 18)
14725faeddcSEvan Quan #define AMD_CG_SUPPORT_BIF_MGCG			(1ULL << 19)
14825faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_3D_CGCG		(1ULL << 20)
14925faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_3D_CGLS		(1ULL << 21)
15025faeddcSEvan Quan #define AMD_CG_SUPPORT_DRM_MGCG			(1ULL << 22)
15125faeddcSEvan Quan #define AMD_CG_SUPPORT_DF_MGCG			(1ULL << 23)
15225faeddcSEvan Quan #define AMD_CG_SUPPORT_VCN_MGCG			(1ULL << 24)
15325faeddcSEvan Quan #define AMD_CG_SUPPORT_HDP_DS			(1ULL << 25)
15425faeddcSEvan Quan #define AMD_CG_SUPPORT_HDP_SD			(1ULL << 26)
15525faeddcSEvan Quan #define AMD_CG_SUPPORT_IH_CG			(1ULL << 27)
15625faeddcSEvan Quan #define AMD_CG_SUPPORT_ATHUB_LS			(1ULL << 28)
15725faeddcSEvan Quan #define AMD_CG_SUPPORT_ATHUB_MGCG		(1ULL << 29)
15825faeddcSEvan Quan #define AMD_CG_SUPPORT_JPEG_MGCG		(1ULL << 30)
15925faeddcSEvan Quan #define AMD_CG_SUPPORT_GFX_FGCG			(1ULL << 31)
160d6b9a91fSEvan Quan #define AMD_CG_SUPPORT_REPEATER_FGCG		(1ULL << 32)
161915b5ce7SEvan Quan #define AMD_CG_SUPPORT_GFX_PERF_CLK		(1ULL << 33)
162e3b04bc7SAlex Deucher /* PG flags */
163e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_GFX_PG			(1 << 0)
164e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_GFX_SMG			(1 << 1)
165e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_GFX_DMG			(1 << 2)
166e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_UVD			(1 << 3)
167e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_VCE			(1 << 4)
168e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_CP			(1 << 5)
169e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_GDS			(1 << 6)
170e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_RLC_SMU_HS		(1 << 7)
171e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_SDMA			(1 << 8)
172e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_ACP			(1 << 9)
173e3b04bc7SAlex Deucher #define AMD_PG_SUPPORT_SAMU			(1 << 10)
1746b0432b7SAlex Deucher #define AMD_PG_SUPPORT_GFX_QUICK_MG		(1 << 11)
1756b0432b7SAlex Deucher #define AMD_PG_SUPPORT_GFX_PIPELINE		(1 << 12)
176f8386b35SHawking Zhang #define AMD_PG_SUPPORT_MMHUB			(1 << 13)
1778dbb8cdfSRex Zhu #define AMD_PG_SUPPORT_VCN			(1 << 14)
178f28ff062SJames Zhu #define AMD_PG_SUPPORT_VCN_DPG			(1 << 15)
179a201b6acSHuang Rui #define AMD_PG_SUPPORT_ATHUB			(1 << 16)
18018e6d414SLeo Liu #define AMD_PG_SUPPORT_JPEG			(1 << 17)
1816e02c0edSStanley.Yang #define AMD_PG_SUPPORT_IH_SRAM_PG		(1 << 18)
1820a119d53SSaleemkhan Jamadar #define AMD_PG_SUPPORT_JPEG_DPG		(1 << 19)
183e3b04bc7SAlex Deucher 
184549750a3SRyan Taylor /**
185549750a3SRyan Taylor  * enum PP_FEATURE_MASK - Used to mask power play features.
186549750a3SRyan Taylor  *
187549750a3SRyan Taylor  * @PP_SCLK_DPM_MASK: Dynamic adjustment of the system (graphics) clock.
188549750a3SRyan Taylor  * @PP_MCLK_DPM_MASK: Dynamic adjustment of the memory clock.
189549750a3SRyan Taylor  * @PP_PCIE_DPM_MASK: Dynamic adjustment of PCIE clocks and lanes.
190549750a3SRyan Taylor  * @PP_SCLK_DEEP_SLEEP_MASK: System (graphics) clock deep sleep.
191549750a3SRyan Taylor  * @PP_POWER_CONTAINMENT_MASK: Power containment.
192549750a3SRyan Taylor  * @PP_UVD_HANDSHAKE_MASK: Unified video decoder handshake.
193549750a3SRyan Taylor  * @PP_SMC_VOLTAGE_CONTROL_MASK: Dynamic voltage control.
194549750a3SRyan Taylor  * @PP_VBI_TIME_SUPPORT_MASK: Vertical blank interval support.
195549750a3SRyan Taylor  * @PP_ULV_MASK: Ultra low voltage.
196549750a3SRyan Taylor  * @PP_ENABLE_GFX_CG_THRU_SMU: SMU control of GFX engine clockgating.
197549750a3SRyan Taylor  * @PP_CLOCK_STRETCH_MASK: Clock stretching.
198549750a3SRyan Taylor  * @PP_OD_FUZZY_FAN_CONTROL_MASK: Overdrive fuzzy fan control.
199549750a3SRyan Taylor  * @PP_SOCCLK_DPM_MASK: Dynamic adjustment of the SoC clock.
200549750a3SRyan Taylor  * @PP_DCEFCLK_DPM_MASK: Dynamic adjustment of the Display Controller Engine Fabric clock.
201549750a3SRyan Taylor  * @PP_OVERDRIVE_MASK: Over- and under-clocking support.
202549750a3SRyan Taylor  * @PP_GFXOFF_MASK: Dynamic graphics engine power control.
203549750a3SRyan Taylor  * @PP_ACG_MASK: Adaptive clock generator.
204549750a3SRyan Taylor  * @PP_STUTTER_MODE: Stutter mode.
205549750a3SRyan Taylor  * @PP_AVFS_MASK: Adaptive voltage and frequency scaling.
20646d44516SMauro Carvalho Chehab  * @PP_GFX_DCS_MASK: GFX Async DCS.
207549750a3SRyan Taylor  *
208549750a3SRyan Taylor  * To override these settings on boot, append amdgpu.ppfeaturemask=<mask> to
209549750a3SRyan Taylor  * the kernel's command line parameters. This is usually done through a system's
210549750a3SRyan Taylor  * boot loader (E.g. GRUB). If manually loading the driver, pass
211549750a3SRyan Taylor  * ppfeaturemask=<mask> as a modprobe parameter.
212549750a3SRyan Taylor  */
213fa7bd27dSHuang Rui enum PP_FEATURE_MASK {
214fa7bd27dSHuang Rui 	PP_SCLK_DPM_MASK = 0x1,
215fa7bd27dSHuang Rui 	PP_MCLK_DPM_MASK = 0x2,
216fa7bd27dSHuang Rui 	PP_PCIE_DPM_MASK = 0x4,
217fa7bd27dSHuang Rui 	PP_SCLK_DEEP_SLEEP_MASK = 0x8,
218fa7bd27dSHuang Rui 	PP_POWER_CONTAINMENT_MASK = 0x10,
219fa7bd27dSHuang Rui 	PP_UVD_HANDSHAKE_MASK = 0x20,
220fa7bd27dSHuang Rui 	PP_SMC_VOLTAGE_CONTROL_MASK = 0x40,
221fa7bd27dSHuang Rui 	PP_VBI_TIME_SUPPORT_MASK = 0x80,
222fa7bd27dSHuang Rui 	PP_ULV_MASK = 0x100,
223fa7bd27dSHuang Rui 	PP_ENABLE_GFX_CG_THRU_SMU = 0x200,
224fa7bd27dSHuang Rui 	PP_CLOCK_STRETCH_MASK = 0x400,
225fa7bd27dSHuang Rui 	PP_OD_FUZZY_FAN_CONTROL_MASK = 0x800,
226fa7bd27dSHuang Rui 	PP_SOCCLK_DPM_MASK = 0x1000,
227fa7bd27dSHuang Rui 	PP_DCEFCLK_DPM_MASK = 0x2000,
228fa7bd27dSHuang Rui 	PP_OVERDRIVE_MASK = 0x4000,
2296f92ad2aSHuang Rui 	PP_GFXOFF_MASK = 0x8000,
230fa7bd27dSHuang Rui 	PP_ACG_MASK = 0x10000,
23122994e16Srex zhu 	PP_STUTTER_MODE = 0x20000,
232a4ead3e5SAlex Deucher 	PP_AVFS_MASK = 0x40000,
233680602d6SKenneth Feng 	PP_GFX_DCS_MASK = 0x80000,
234fa7bd27dSHuang Rui };
235fa7bd27dSHuang Rui 
23683a0b863SLikun GAO enum amd_harvest_ip_mask {
23783a0b863SLikun GAO     AMD_HARVEST_IP_VCN_MASK = 0x1,
23883a0b863SLikun GAO     AMD_HARVEST_IP_JPEG_MASK = 0x2,
23983a0b863SLikun GAO     AMD_HARVEST_IP_DMU_MASK = 0x4,
24083a0b863SLikun GAO };
24183a0b863SLikun GAO 
2427875a226SAlex Deucher enum DC_FEATURE_MASK {
243a5148245SZhan Liu 	//Default value can be found at "uint amdgpu_dc_feature_mask"
244a5148245SZhan Liu 	DC_FBC_MASK = (1 << 0), //0x1, disabled by default
245a5148245SZhan Liu 	DC_MULTI_MON_PP_MCLK_SWITCH_MASK = (1 << 1), //0x2, enabled by default
246a5148245SZhan Liu 	DC_DISABLE_FRACTIONAL_PWM_MASK = (1 << 2), //0x4, disabled by default
2479470620eSNicholas Kazlauskas 	DC_PSR_MASK = (1 << 3), //0x8, disabled by default for dcn < 3.1
248a5148245SZhan Liu 	DC_EDP_NO_POWER_SEQUENCING = (1 << 4), //0x10, disabled by default
24912320274SAurabindo Pillai 	DC_DISABLE_LTTPR_DP1_4A = (1 << 5), //0x20, disabled by default
25012320274SAurabindo Pillai 	DC_DISABLE_LTTPR_DP2_0 = (1 << 6), //0x40, disabled by default
2515533347dSDavid Zhang 	DC_PSR_ALLOW_SMU_OPT = (1 << 7), //0x80, disabled by default
2525533347dSDavid Zhang 	DC_PSR_ALLOW_MULTI_DISP_OPT = (1 << 8), //0x100, disabled by default
2535950efe2STom Chung 	DC_REPLAY_MASK = (1 << 9), //0x200, disabled by default for dcn < 3.1.4
2547875a226SAlex Deucher };
2557875a226SAlex Deucher 
256a08d7592SLeo Li /**
257a08d7592SLeo Li  * enum DC_DEBUG_MASK - Bits that are useful for debugging the Display Core IP
258a08d7592SLeo Li  */
2598a791dabSHarry Wentland enum DC_DEBUG_MASK {
260a08d7592SLeo Li 	/**
261a08d7592SLeo Li 	 * @DC_DISABLE_PIPE_SPLIT: If set, disable pipe-splitting
262a08d7592SLeo Li 	 */
2638a791dabSHarry Wentland 	DC_DISABLE_PIPE_SPLIT = 0x1,
264a08d7592SLeo Li 
265a08d7592SLeo Li 	/**
266a08d7592SLeo Li 	 * @DC_DISABLE_STUTTER: If set, disable memory stutter mode
267a08d7592SLeo Li 	 */
2688a791dabSHarry Wentland 	DC_DISABLE_STUTTER = 0x2,
269a08d7592SLeo Li 
270a08d7592SLeo Li 	/**
271a08d7592SLeo Li 	 * @DC_DISABLE_DSC: If set, disable display stream compression
272a08d7592SLeo Li 	 */
2738a791dabSHarry Wentland 	DC_DISABLE_DSC = 0x4,
274a08d7592SLeo Li 
275a08d7592SLeo Li 	/**
276a08d7592SLeo Li 	 * @DC_DISABLE_CLOCK_GATING: If set, disable clock gating optimizations
277a08d7592SLeo Li 	 */
2789470620eSNicholas Kazlauskas 	DC_DISABLE_CLOCK_GATING = 0x8,
279a08d7592SLeo Li 
280a08d7592SLeo Li 	/**
281a08d7592SLeo Li 	 * @DC_DISABLE_PSR: If set, disable Panel self refresh v1 and PSR-SU
282a08d7592SLeo Li 	 */
2839470620eSNicholas Kazlauskas 	DC_DISABLE_PSR = 0x10,
284a08d7592SLeo Li 
285a08d7592SLeo Li 	/**
286a08d7592SLeo Li 	 * @DC_FORCE_SUBVP_MCLK_SWITCH: If set, force mclk switch in subvp, even
287a08d7592SLeo Li 	 * if mclk switch in vblank is possible
288a08d7592SLeo Li 	 */
289cfb979f7SAurabindo Pillai 	DC_FORCE_SUBVP_MCLK_SWITCH = 0x20,
290a08d7592SLeo Li 
291a08d7592SLeo Li 	/**
292a08d7592SLeo Li 	 * @DC_DISABLE_MPO: If set, disable multi-plane offloading
293a08d7592SLeo Li 	 */
2948813381aSLeo Li 	DC_DISABLE_MPO = 0x40,
295a08d7592SLeo Li 
296a08d7592SLeo Li 	/**
297a08d7592SLeo Li 	 * @DC_ENABLE_DPIA_TRACE: If set, enable trace logging for DPIA
298a08d7592SLeo Li 	 */
299b2225568SStylon Wang 	DC_ENABLE_DPIA_TRACE = 0x80,
300a08d7592SLeo Li 
301a08d7592SLeo Li 	/**
302a08d7592SLeo Li 	 * @DC_ENABLE_DML2: If set, force usage of DML2, even if the DCN version
303a08d7592SLeo Li 	 * does not default to it.
304a08d7592SLeo Li 	 */
3053b35dd87SAurabindo Pillai 	DC_ENABLE_DML2 = 0x100,
306a08d7592SLeo Li 
307a08d7592SLeo Li 	/**
308a08d7592SLeo Li 	 * @DC_DISABLE_PSR_SU: If set, disable PSR SU
309a08d7592SLeo Li 	 */
3104e08378bSMario Limonciello 	DC_DISABLE_PSR_SU = 0x200,
311a08d7592SLeo Li 
312a08d7592SLeo Li 	/**
313a08d7592SLeo Li 	 * @DC_DISABLE_REPLAY: If set, disable Panel Replay
314a08d7592SLeo Li 	 */
315e379787cSTom Chung 	DC_DISABLE_REPLAY = 0x400,
316a08d7592SLeo Li 
317a08d7592SLeo Li 	/**
318a08d7592SLeo Li 	 * @DC_DISABLE_IPS: If set, disable all Idle Power States, all the time.
319a08d7592SLeo Li 	 * If more than one IPS debug bit is set, the lowest bit takes
320a08d7592SLeo Li 	 * precedence. For example, if DC_FORCE_IPS_ENABLE and
321a08d7592SLeo Li 	 * DC_DISABLE_IPS_DYNAMIC are set, then DC_DISABLE_IPS_DYNAMIC takes
322a08d7592SLeo Li 	 * precedence.
323a08d7592SLeo Li 	 */
32485155f5bSRoman Li 	DC_DISABLE_IPS = 0x800,
325a08d7592SLeo Li 
326a08d7592SLeo Li 	/**
327a08d7592SLeo Li 	 * @DC_DISABLE_IPS_DYNAMIC: If set, disable all IPS, all the time,
328a08d7592SLeo Li 	 * *except* when driver goes into suspend.
329a08d7592SLeo Li 	 */
330a08d7592SLeo Li 	DC_DISABLE_IPS_DYNAMIC = 0x1000,
331a08d7592SLeo Li 
332a08d7592SLeo Li 	/**
333a08d7592SLeo Li 	 * @DC_DISABLE_IPS2_DYNAMIC: If set, disable IPS2 (IPS1 allowed) if
334a08d7592SLeo Li 	 * there is an enabled display. Otherwise, enable all IPS.
335a08d7592SLeo Li 	 */
336a08d7592SLeo Li 	DC_DISABLE_IPS2_DYNAMIC = 0x2000,
337a08d7592SLeo Li 
338a08d7592SLeo Li 	/**
339a08d7592SLeo Li 	 * @DC_FORCE_IPS_ENABLE: If set, force enable all IPS, all the time.
340a08d7592SLeo Li 	 */
341a08d7592SLeo Li 	DC_FORCE_IPS_ENABLE = 0x4000,
342c6a83708SMario Limonciello 	/**
343c6a83708SMario Limonciello 	 * @DC_DISABLE_ACPI_EDID: If set, don't attempt to fetch EDID for
344c6a83708SMario Limonciello 	 * eDP display from ACPI _DDC method.
345c6a83708SMario Limonciello 	 */
346c6a83708SMario Limonciello 	DC_DISABLE_ACPI_EDID = 0x8000,
34775948742SKun Liu 
34885172c80SAlex Deucher 	/**
34975948742SKun Liu 	 * @DC_DISABLE_HDMI_CEC: If set, disable HDMI-CEC feature in amdgpu driver.
35075948742SKun Liu 	 */
35175948742SKun Liu 	DC_DISABLE_HDMI_CEC = 0x10000,
3529d63fbf7SAurabindo Pillai 
353aedf498aSAlex Deucher 	/**
3549d63fbf7SAurabindo Pillai 	 * @DC_DISABLE_SUBVP: If set, disable DCN Sub-Viewport feature in amdgpu driver.
3559d63fbf7SAurabindo Pillai 	 */
3569d63fbf7SAurabindo Pillai 	DC_DISABLE_SUBVP = 0x20000,
35736d63ce5SMario Limonciello 	/**
35836d63ce5SMario Limonciello 	 * @DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE: If set, disable support for custom brightness curves
35936d63ce5SMario Limonciello 	 */
36036d63ce5SMario Limonciello 	DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE = 0x40000,
361*84ff5895SDominik Kaszewski 
362*84ff5895SDominik Kaszewski 	/**
363*84ff5895SDominik Kaszewski 	 * @DC_HDCP_LC_FORCE_FW_ENABLE: If set, use HDCP Locality Check FW
364*84ff5895SDominik Kaszewski 	 * path regardless of reported HW capabilities.
365*84ff5895SDominik Kaszewski 	 */
366*84ff5895SDominik Kaszewski 	DC_HDCP_LC_FORCE_FW_ENABLE = 0x80000,
367*84ff5895SDominik Kaszewski 
368*84ff5895SDominik Kaszewski 	/**
369*84ff5895SDominik Kaszewski 	 * @DC_HDCP_LC_ENABLE_SW_FALLBACK If set, upon HDCP Locality Check FW
370*84ff5895SDominik Kaszewski 	 * path failure, retry using legacy SW path.
371*84ff5895SDominik Kaszewski 	 */
372*84ff5895SDominik Kaszewski 	DC_HDCP_LC_ENABLE_SW_FALLBACK = 0x100000,
3738a791dabSHarry Wentland };
3748a791dabSHarry Wentland 
37549d27e91SChengming Gui enum amd_dpm_forced_level;
37652ef3a1aSRyan Taylor 
37743911fb6SDarren Powell /**
37843911fb6SDarren Powell  * struct amd_ip_funcs - general hooks for managing amdgpu IP Blocks
37952ef3a1aSRyan Taylor  * @name: Name of IP block
38052ef3a1aSRyan Taylor  * @early_init: sets up early driver state (pre sw_init),
38152ef3a1aSRyan Taylor  *              does not configure hw - Optional
38252ef3a1aSRyan Taylor  * @late_init: sets up late driver/hw state (post hw_init) - Optional
38352ef3a1aSRyan Taylor  * @sw_init: sets up driver state, does not configure hw
38452ef3a1aSRyan Taylor  * @sw_fini: tears down driver state, does not configure hw
385e9669fb7SAndrey Grodzovsky  * @early_fini: tears down stuff before dev detached from driver
38652ef3a1aSRyan Taylor  * @hw_init: sets up the hw state
38752ef3a1aSRyan Taylor  * @hw_fini: tears down the hw state
38852ef3a1aSRyan Taylor  * @late_fini: final cleanup
3892ceec37bSMario Limonciello  * @prepare_suspend: handle IP specific changes to prepare for suspend
3902ceec37bSMario Limonciello  *                   (such as allocating any required memory)
39152ef3a1aSRyan Taylor  * @suspend: handles IP specific hw/sw changes for suspend
39252ef3a1aSRyan Taylor  * @resume: handles IP specific hw/sw changes for resume
39352ef3a1aSRyan Taylor  * @is_idle: returns current IP block idle status
39452ef3a1aSRyan Taylor  * @wait_for_idle: poll for idle
39552ef3a1aSRyan Taylor  * @check_soft_reset: check soft reset the IP block
39652ef3a1aSRyan Taylor  * @pre_soft_reset: pre soft reset the IP block
39752ef3a1aSRyan Taylor  * @soft_reset: soft reset the IP block
39852ef3a1aSRyan Taylor  * @post_soft_reset: post soft reset the IP block
39952ef3a1aSRyan Taylor  * @set_clockgating_state: enable/disable cg for the IP block
40052ef3a1aSRyan Taylor  * @set_powergating_state: enable/disable pg for the IP block
40152ef3a1aSRyan Taylor  * @get_clockgating_state: get current clockgating status
402fbbbf6fbSSunil Khatri  * @dump_ip_state: dump the IP state of the ASIC during a gpu hang
403fbbbf6fbSSunil Khatri  * @print_ip_state: print the IP state in devcoredump for each IP of the ASIC
40452ef3a1aSRyan Taylor  *
40552ef3a1aSRyan Taylor  * These hooks provide an interface for controlling the operational state
40652ef3a1aSRyan Taylor  * of IP blocks. After acquiring a list of IP blocks for the GPU in use,
40752ef3a1aSRyan Taylor  * the driver can make chip-wide state changes by walking this list and
40852ef3a1aSRyan Taylor  * making calls to hooks from each IP block. This list is ordered to ensure
40952ef3a1aSRyan Taylor  * that the driver initializes the IP blocks in a safe sequence.
41043911fb6SDarren Powell  */
4115fc3aeebSyanyang1 struct amd_ip_funcs {
41288a907d6STom St Denis 	char *name;
413146b085eSSunil Khatri 	int (*early_init)(struct amdgpu_ip_block *ip_block);
4143138ab2cSSunil Khatri 	int (*late_init)(struct amdgpu_ip_block *ip_block);
415d5347e8dSSunil Khatri 	int (*sw_init)(struct amdgpu_ip_block *ip_block);
41636aa9ab9SSunil Khatri 	int (*sw_fini)(struct amdgpu_ip_block *ip_block);
41790410d39SSunil Khatri 	int (*early_fini)(struct amdgpu_ip_block *ip_block);
41858608034SSunil Khatri 	int (*hw_init)(struct amdgpu_ip_block *ip_block);
419692d2cd1SSunil Khatri 	int (*hw_fini)(struct amdgpu_ip_block *ip_block);
42047d827f9SSunil Khatri 	void (*late_fini)(struct amdgpu_ip_block *ip_block);
42194b2e07aSSunil Khatri 	int (*prepare_suspend)(struct amdgpu_ip_block *ip_block);
422982d7f9bSSunil Khatri 	int (*suspend)(struct amdgpu_ip_block *ip_block);
4237feb4f3aSSunil Khatri 	int (*resume)(struct amdgpu_ip_block *ip_block);
4247dc34054SSunil Khatri 	bool (*is_idle)(struct amdgpu_ip_block *ip_block);
42582ae6619SSunil Khatri 	int (*wait_for_idle)(struct amdgpu_ip_block *ip_block);
4266a9456e0SSunil Khatri 	bool (*check_soft_reset)(struct amdgpu_ip_block *ip_block);
4279d5ee7ceSSunil Khatri 	int (*pre_soft_reset)(struct amdgpu_ip_block *ip_block);
4280ef2a1e7SSunil Khatri 	int (*soft_reset)(struct amdgpu_ip_block *ip_block);
429e15ec812SSunil Khatri 	int (*post_soft_reset)(struct amdgpu_ip_block *ip_block);
430f2ba8c3dSBoyuan Zhang 	int (*set_clockgating_state)(struct amdgpu_ip_block *ip_block,
4315fc3aeebSyanyang1 				     enum amd_clockgating_state state);
43280d80511SBoyuan Zhang 	int (*set_powergating_state)(struct amdgpu_ip_block *ip_block,
4335fc3aeebSyanyang1 				     enum amd_powergating_state state);
4343521276aSSunil Khatri 	void (*get_clockgating_state)(struct amdgpu_ip_block *ip_block, u64 *flags);
435fa73462dSSunil Khatri 	void (*dump_ip_state)(struct amdgpu_ip_block *ip_block);
436d60e78bdSSunil Khatri 	void (*print_ip_state)(struct amdgpu_ip_block *ip_block, struct drm_printer *p);
4375fc3aeebSyanyang1 };
4385fc3aeebSyanyang1 
439f93f0c3aSRex Zhu 
4405fc3aeebSyanyang1 #endif /* __AMD_SHARED_H__ */
441