Commit | Line | Data |
---|---|---|
585fb111 JB |
1 | /* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. |
2 | * All Rights Reserved. | |
3 | * | |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | |
5 | * copy of this software and associated documentation files (the | |
6 | * "Software"), to deal in the Software without restriction, including | |
7 | * without limitation the rights to use, copy, modify, merge, publish, | |
8 | * distribute, sub license, and/or sell copies of the Software, and to | |
9 | * permit persons to whom the Software is furnished to do so, subject to | |
10 | * the following conditions: | |
11 | * | |
12 | * The above copyright notice and this permission notice (including the | |
13 | * next paragraph) shall be included in all copies or substantial portions | |
14 | * of the Software. | |
15 | * | |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. | |
19 | * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR | |
20 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
21 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
22 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
23 | */ | |
24 | ||
25 | #ifndef _I915_REG_H_ | |
26 | #define _I915_REG_H_ | |
27 | ||
2b25a93b | 28 | #include "i915_reg_defs.h" |
e563531a | 29 | #include "display/intel_display_reg_defs.h" |
09b434d4 | 30 | |
1aa920ea JN |
31 | /** |
32 | * DOC: The i915 register macro definition style guide | |
33 | * | |
34 | * Follow the style described here for new macros, and while changing existing | |
35 | * macros. Do **not** mass change existing definitions just to update the style. | |
36 | * | |
27be41de JN |
37 | * File Layout |
38 | * ~~~~~~~~~~~ | |
1aa920ea JN |
39 | * |
40 | * Keep helper macros near the top. For example, _PIPE() and friends. | |
41 | * | |
42 | * Prefix macros that generally should not be used outside of this file with | |
43 | * underscore '_'. For example, _PIPE() and friends, single instances of | |
44 | * registers that are defined solely for the use by function-like macros. | |
45 | * | |
46 | * Avoid using the underscore prefixed macros outside of this file. There are | |
47 | * exceptions, but keep them to a minimum. | |
48 | * | |
49 | * There are two basic types of register definitions: Single registers and | |
50 | * register groups. Register groups are registers which have two or more | |
51 | * instances, for example one per pipe, port, transcoder, etc. Register groups | |
52 | * should be defined using function-like macros. | |
53 | * | |
54 | * For single registers, define the register offset first, followed by register | |
55 | * contents. | |
56 | * | |
57 | * For register groups, define the register instance offsets first, prefixed | |
58 | * with underscore, followed by a function-like macro choosing the right | |
59 | * instance based on the parameter, followed by register contents. | |
60 | * | |
61 | * Define the register contents (i.e. bit and bit field macros) from most | |
62 | * significant to least significant bit. Indent the register content macros | |
63 | * using two extra spaces between ``#define`` and the macro name. | |
64 | * | |
baa09e7d JN |
65 | * Define bit fields using ``REG_GENMASK(h, l)``. Define bit field contents |
66 | * using ``REG_FIELD_PREP(mask, value)``. This will define the values already | |
67 | * shifted in place, so they can be directly OR'd together. For convenience, | |
68 | * function-like macros may be used to define bit fields, but do note that the | |
69 | * macros may be needed to read as well as write the register contents. | |
1aa920ea | 70 | * |
09b434d4 | 71 | * Define bits using ``REG_BIT(N)``. Do **not** add ``_BIT`` suffix to the name. |
1aa920ea JN |
72 | * |
73 | * Group the register and its contents together without blank lines, separate | |
74 | * from other registers and their contents with one blank line. | |
75 | * | |
76 | * Indent macro values from macro names using TABs. Align values vertically. Use | |
77 | * braces in macro values as needed to avoid unintended precedence after macro | |
78 | * substitution. Use spaces in macro values according to kernel coding | |
79 | * style. Use lower case in hexadecimal values. | |
80 | * | |
81 | * Naming | |
551bd336 | 82 | * ~~~~~~ |
1aa920ea JN |
83 | * |
84 | * Try to name registers according to the specs. If the register name changes in | |
85 | * the specs from platform to another, stick to the original name. | |
86 | * | |
381ab12d | 87 | * Try to reuse existing register macro definitions. Only add new macros for |
1aa920ea JN |
88 | * new register offsets, or when the register contents have changed enough to |
89 | * warrant a full redefinition. | |
90 | * | |
91 | * When a register macro changes for a new platform, prefix the new macro using | |
92 | * the platform acronym or generation. For example, ``SKL_`` or ``GEN8_``. The | |
93 | * prefix signifies the start platform/generation using the register. | |
94 | * | |
95 | * When a bit (field) macro changes or gets added for a new platform, while | |
96 | * retaining the existing register macro, add a platform acronym or generation | |
97 | * suffix to the name. For example, ``_SKL`` or ``_GEN8``. | |
98 | * | |
99 | * Examples | |
551bd336 | 100 | * ~~~~~~~~ |
1aa920ea JN |
101 | * |
102 | * (Note that the values in the example are indented using spaces instead of | |
103 | * TABs to avoid misalignment in generated documentation. Use TABs in the | |
104 | * definitions.):: | |
105 | * | |
106 | * #define _FOO_A 0xf000 | |
107 | * #define _FOO_B 0xf001 | |
108 | * #define FOO(pipe) _MMIO_PIPE(pipe, _FOO_A, _FOO_B) | |
09b434d4 JN |
109 | * #define FOO_ENABLE REG_BIT(31) |
110 | * #define FOO_MODE_MASK REG_GENMASK(19, 16) | |
baa09e7d JN |
111 | * #define FOO_MODE_BAR REG_FIELD_PREP(FOO_MODE_MASK, 0) |
112 | * #define FOO_MODE_BAZ REG_FIELD_PREP(FOO_MODE_MASK, 1) | |
113 | * #define FOO_MODE_QUX_SNB REG_FIELD_PREP(FOO_MODE_MASK, 2) | |
1aa920ea JN |
114 | * |
115 | * #define BAR _MMIO(0xb000) | |
116 | * #define GEN8_BAR _MMIO(0xb888) | |
117 | */ | |
118 | ||
273e1daa ID |
119 | #define GU_CNTL_PROTECTED _MMIO(0x10100C) |
120 | #define DEPRESENT REG_BIT(9) | |
121 | ||
c256af0d MR |
122 | #define GU_CNTL _MMIO(0x101010) |
123 | #define LMEM_INIT REG_BIT(7) | |
5a44fcd7 DCS |
124 | #define DRIVERFLR REG_BIT(31) |
125 | #define GU_DEBUG _MMIO(0x101018) | |
126 | #define DRIVERFLR_STATUS REG_BIT(31) | |
c256af0d | 127 | |
f0f59a00 | 128 | #define GEN6_STOLEN_RESERVED _MMIO(0x1082C0) |
3774eb50 PZ |
129 | #define GEN6_STOLEN_RESERVED_ADDR_MASK (0xFFF << 20) |
130 | #define GEN7_STOLEN_RESERVED_ADDR_MASK (0x3FFF << 18) | |
131 | #define GEN6_STOLEN_RESERVED_SIZE_MASK (3 << 4) | |
132 | #define GEN6_STOLEN_RESERVED_1M (0 << 4) | |
133 | #define GEN6_STOLEN_RESERVED_512K (1 << 4) | |
134 | #define GEN6_STOLEN_RESERVED_256K (2 << 4) | |
135 | #define GEN6_STOLEN_RESERVED_128K (3 << 4) | |
136 | #define GEN7_STOLEN_RESERVED_SIZE_MASK (1 << 5) | |
137 | #define GEN7_STOLEN_RESERVED_1M (0 << 5) | |
138 | #define GEN7_STOLEN_RESERVED_256K (1 << 5) | |
139 | #define GEN8_STOLEN_RESERVED_SIZE_MASK (3 << 7) | |
140 | #define GEN8_STOLEN_RESERVED_1M (0 << 7) | |
141 | #define GEN8_STOLEN_RESERVED_2M (1 << 7) | |
142 | #define GEN8_STOLEN_RESERVED_4M (2 << 7) | |
143 | #define GEN8_STOLEN_RESERVED_8M (3 << 7) | |
db7fb605 | 144 | #define GEN6_STOLEN_RESERVED_ENABLE (1 << 0) |
185441e0 | 145 | #define GEN11_STOLEN_RESERVED_ADDR_MASK (0xFFFFFFFFFFFULL << 20) |
585fb111 | 146 | |
220375aa BV |
147 | #define _GEN7_PIPEA_DE_LOAD_SL 0x70068 |
148 | #define _GEN7_PIPEB_DE_LOAD_SL 0x71068 | |
f0f59a00 | 149 | #define GEN7_PIPE_DE_LOAD_SL(pipe) _MMIO_PIPE(pipe, _GEN7_PIPEA_DE_LOAD_SL, _GEN7_PIPEB_DE_LOAD_SL) |
220375aa | 150 | |
dc96e9b8 CW |
151 | /* |
152 | * Reset registers | |
153 | */ | |
f0f59a00 | 154 | #define DEBUG_RESET_I830 _MMIO(0x6070) |
5ee8ee86 PZ |
155 | #define DEBUG_RESET_FULL (1 << 7) |
156 | #define DEBUG_RESET_RENDER (1 << 8) | |
157 | #define DEBUG_RESET_DISPLAY (1 << 9) | |
dc96e9b8 | 158 | |
57f350b6 | 159 | /* |
5a09ae9f JN |
160 | * IOSF sideband |
161 | */ | |
f0f59a00 | 162 | #define VLV_IOSF_DOORBELL_REQ _MMIO(VLV_DISPLAY_BASE + 0x2100) |
5a09ae9f JN |
163 | #define IOSF_DEVFN_SHIFT 24 |
164 | #define IOSF_OPCODE_SHIFT 16 | |
165 | #define IOSF_PORT_SHIFT 8 | |
166 | #define IOSF_BYTE_ENABLES_SHIFT 4 | |
167 | #define IOSF_BAR_SHIFT 1 | |
5ee8ee86 | 168 | #define IOSF_SB_BUSY (1 << 0) |
4688d45f JN |
169 | #define IOSF_PORT_BUNIT 0x03 |
170 | #define IOSF_PORT_PUNIT 0x04 | |
5a09ae9f JN |
171 | #define IOSF_PORT_NC 0x11 |
172 | #define IOSF_PORT_DPIO 0x12 | |
e9f882a3 JN |
173 | #define IOSF_PORT_GPIO_NC 0x13 |
174 | #define IOSF_PORT_CCK 0x14 | |
4688d45f JN |
175 | #define IOSF_PORT_DPIO_2 0x1a |
176 | #define IOSF_PORT_FLISDSI 0x1b | |
dfb19ed2 D |
177 | #define IOSF_PORT_GPIO_SC 0x48 |
178 | #define IOSF_PORT_GPIO_SUS 0xa8 | |
4688d45f | 179 | #define IOSF_PORT_CCU 0xa9 |
7071af97 JN |
180 | #define CHV_IOSF_PORT_GPIO_N 0x13 |
181 | #define CHV_IOSF_PORT_GPIO_SE 0x48 | |
182 | #define CHV_IOSF_PORT_GPIO_E 0xa8 | |
183 | #define CHV_IOSF_PORT_GPIO_SW 0xb2 | |
f0f59a00 VS |
184 | #define VLV_IOSF_DATA _MMIO(VLV_DISPLAY_BASE + 0x2104) |
185 | #define VLV_IOSF_ADDR _MMIO(VLV_DISPLAY_BASE + 0x2108) | |
5a09ae9f | 186 | |
f38861b8 | 187 | /* DPIO registers */ |
5a09ae9f | 188 | #define DPIO_DEVFN 0 |
5a09ae9f | 189 | |
f0f59a00 | 190 | #define DPIO_CTL _MMIO(VLV_DISPLAY_BASE + 0x2110) |
5ee8ee86 PZ |
191 | #define DPIO_MODSEL1 (1 << 3) /* if ref clk b == 27 */ |
192 | #define DPIO_MODSEL0 (1 << 2) /* if ref clk a == 27 */ | |
193 | #define DPIO_SFR_BYPASS (1 << 1) | |
194 | #define DPIO_CMNRST (1 << 0) | |
57f350b6 | 195 | |
f0f59a00 | 196 | #define BXT_P_CR_GT_DISP_PWRON _MMIO(0x138090) |
1881a423 | 197 | #define MIPIO_RST_CTRL (1 << 2) |
5c6706e5 | 198 | |
e93da0a0 ID |
199 | #define _BXT_PHY_CTL_DDI_A 0x64C00 |
200 | #define _BXT_PHY_CTL_DDI_B 0x64C10 | |
201 | #define _BXT_PHY_CTL_DDI_C 0x64C20 | |
202 | #define BXT_PHY_CMNLANE_POWERDOWN_ACK (1 << 10) | |
203 | #define BXT_PHY_LANE_POWERDOWN_ACK (1 << 9) | |
204 | #define BXT_PHY_LANE_ENABLED (1 << 8) | |
205 | #define BXT_PHY_CTL(port) _MMIO_PORT(port, _BXT_PHY_CTL_DDI_A, \ | |
206 | _BXT_PHY_CTL_DDI_B) | |
207 | ||
5c6706e5 | 208 | #define _PHY_CTL_FAMILY_DDI 0x64C90 |
7b775d36 | 209 | #define _PHY_CTL_FAMILY_EDP 0x64C80 |
0a116ce8 | 210 | #define _PHY_CTL_FAMILY_DDI_C 0x64CA0 |
5c6706e5 | 211 | #define COMMON_RESET_DIS (1 << 31) |
7b775d36 LDM |
212 | #define BXT_PHY_CTL_FAMILY(phy) \ |
213 | _MMIO(_PICK_EVEN_2RANGES(phy, 1, \ | |
214 | _PHY_CTL_FAMILY_DDI, _PHY_CTL_FAMILY_DDI, \ | |
215 | _PHY_CTL_FAMILY_EDP, _PHY_CTL_FAMILY_DDI_C)) | |
5c6706e5 | 216 | |
f8896f5d | 217 | /* UAIMI scratch pad register 1 */ |
f0f59a00 | 218 | #define UAIMI_SPR1 _MMIO(0x4F074) |
f8896f5d DW |
219 | /* SKL VccIO mask */ |
220 | #define SKL_VCCIO_MASK 0x1 | |
221 | /* SKL balance leg register */ | |
f0f59a00 | 222 | #define DISPIO_CR_TX_BMU_CR0 _MMIO(0x6C00C) |
f8896f5d | 223 | /* I_boost values */ |
5ee8ee86 PZ |
224 | #define BALANCE_LEG_SHIFT(port) (8 + 3 * (port)) |
225 | #define BALANCE_LEG_MASK(port) (7 << (8 + 3 * (port))) | |
f8896f5d DW |
226 | /* Balance leg disable bits */ |
227 | #define BALANCE_LEG_DISABLE_SHIFT 23 | |
a7d8dbc0 | 228 | #define BALANCE_LEG_DISABLE(port) (1 << (23 + (port))) |
f8896f5d | 229 | |
585fb111 | 230 | /* |
de151cf6 | 231 | * Fence registers |
eecf613a VS |
232 | * [0-7] @ 0x2000 gen2,gen3 |
233 | * [8-15] @ 0x3000 945,g33,pnv | |
234 | * | |
235 | * [0-15] @ 0x3000 gen4,gen5 | |
236 | * | |
237 | * [0-15] @ 0x100000 gen6,vlv,chv | |
238 | * [0-31] @ 0x100000 gen7+ | |
585fb111 | 239 | */ |
f0f59a00 | 240 | #define FENCE_REG(i) _MMIO(0x2000 + (((i) & 8) << 9) + ((i) & 7) * 4) |
de151cf6 JB |
241 | #define I830_FENCE_START_MASK 0x07f80000 |
242 | #define I830_FENCE_TILING_Y_SHIFT 12 | |
0f973f27 | 243 | #define I830_FENCE_SIZE_BITS(size) ((ffs((size) >> 19) - 1) << 8) |
de151cf6 | 244 | #define I830_FENCE_PITCH_SHIFT 4 |
5ee8ee86 | 245 | #define I830_FENCE_REG_VALID (1 << 0) |
c36a2a6d | 246 | #define I915_FENCE_MAX_PITCH_VAL 4 |
e76a16de | 247 | #define I830_FENCE_MAX_PITCH_VAL 6 |
5ee8ee86 | 248 | #define I830_FENCE_MAX_SIZE_VAL (1 << 8) |
de151cf6 JB |
249 | |
250 | #define I915_FENCE_START_MASK 0x0ff00000 | |
0f973f27 | 251 | #define I915_FENCE_SIZE_BITS(size) ((ffs((size) >> 20) - 1) << 8) |
585fb111 | 252 | |
f0f59a00 VS |
253 | #define FENCE_REG_965_LO(i) _MMIO(0x03000 + (i) * 8) |
254 | #define FENCE_REG_965_HI(i) _MMIO(0x03000 + (i) * 8 + 4) | |
de151cf6 JB |
255 | #define I965_FENCE_PITCH_SHIFT 2 |
256 | #define I965_FENCE_TILING_Y_SHIFT 1 | |
5ee8ee86 | 257 | #define I965_FENCE_REG_VALID (1 << 0) |
8d7773a3 | 258 | #define I965_FENCE_MAX_PITCH_VAL 0x0400 |
de151cf6 | 259 | |
f0f59a00 VS |
260 | #define FENCE_REG_GEN6_LO(i) _MMIO(0x100000 + (i) * 8) |
261 | #define FENCE_REG_GEN6_HI(i) _MMIO(0x100000 + (i) * 8 + 4) | |
eecf613a | 262 | #define GEN6_FENCE_PITCH_SHIFT 32 |
3a062478 | 263 | #define GEN7_FENCE_MAX_PITCH_VAL 0x0800 |
4e901fdc | 264 | |
2b6b3a09 | 265 | |
f691e2f4 | 266 | /* control register for cpu gtt access */ |
f0f59a00 | 267 | #define TILECTL _MMIO(0x101000) |
f691e2f4 | 268 | #define TILECTL_SWZCTL (1 << 0) |
e3a29055 | 269 | #define TILECTL_TLBPF (1 << 1) |
f691e2f4 DV |
270 | #define TILECTL_TLB_PREFETCH_DIS (1 << 2) |
271 | #define TILECTL_BACKSNOOP_DIS (1 << 3) | |
272 | ||
de151cf6 JB |
273 | /* |
274 | * Instruction and interrupt control regs | |
275 | */ | |
f0f59a00 | 276 | #define PGTBL_CTL _MMIO(0x02020) |
f1e1c212 VS |
277 | #define PGTBL_ADDRESS_LO_MASK 0xfffff000 /* bits [31:12] */ |
278 | #define PGTBL_ADDRESS_HI_MASK 0x000000f0 /* bits [35:32] (gen4) */ | |
f0f59a00 | 279 | #define PGTBL_ER _MMIO(0x02024) |
5ee8ee86 PZ |
280 | #define PRB0_BASE (0x2030 - 0x30) |
281 | #define PRB1_BASE (0x2040 - 0x30) /* 830,gen3 */ | |
282 | #define PRB2_BASE (0x2050 - 0x30) /* gen3 */ | |
283 | #define SRB0_BASE (0x2100 - 0x30) /* gen2 */ | |
284 | #define SRB1_BASE (0x2110 - 0x30) /* gen2 */ | |
285 | #define SRB2_BASE (0x2120 - 0x30) /* 830 */ | |
286 | #define SRB3_BASE (0x2130 - 0x30) /* 830 */ | |
333e9fe9 DV |
287 | #define RENDER_RING_BASE 0x02000 |
288 | #define BSD_RING_BASE 0x04000 | |
289 | #define GEN6_BSD_RING_BASE 0x12000 | |
845f74a7 | 290 | #define GEN8_BSD2_RING_BASE 0x1c000 |
5f79e7c6 OM |
291 | #define GEN11_BSD_RING_BASE 0x1c0000 |
292 | #define GEN11_BSD2_RING_BASE 0x1c4000 | |
293 | #define GEN11_BSD3_RING_BASE 0x1d0000 | |
294 | #define GEN11_BSD4_RING_BASE 0x1d4000 | |
938c778f JH |
295 | #define XEHP_BSD5_RING_BASE 0x1e0000 |
296 | #define XEHP_BSD6_RING_BASE 0x1e4000 | |
297 | #define XEHP_BSD7_RING_BASE 0x1f0000 | |
298 | #define XEHP_BSD8_RING_BASE 0x1f4000 | |
1950de14 | 299 | #define VEBOX_RING_BASE 0x1a000 |
5f79e7c6 OM |
300 | #define GEN11_VEBOX_RING_BASE 0x1c8000 |
301 | #define GEN11_VEBOX2_RING_BASE 0x1d8000 | |
938c778f JH |
302 | #define XEHP_VEBOX3_RING_BASE 0x1e8000 |
303 | #define XEHP_VEBOX4_RING_BASE 0x1f8000 | |
5fd974d1 | 304 | #define MTL_GSC_RING_BASE 0x11a000 |
944823c9 MR |
305 | #define GEN12_COMPUTE0_RING_BASE 0x1a000 |
306 | #define GEN12_COMPUTE1_RING_BASE 0x1c000 | |
307 | #define GEN12_COMPUTE2_RING_BASE 0x1e000 | |
308 | #define GEN12_COMPUTE3_RING_BASE 0x26000 | |
549f7365 | 309 | #define BLT_RING_BASE 0x22000 |
69f8afdb MR |
310 | #define XEHPC_BCS1_RING_BASE 0x3e0000 |
311 | #define XEHPC_BCS2_RING_BASE 0x3e2000 | |
312 | #define XEHPC_BCS3_RING_BASE 0x3e4000 | |
313 | #define XEHPC_BCS4_RING_BASE 0x3e6000 | |
314 | #define XEHPC_BCS5_RING_BASE 0x3e8000 | |
315 | #define XEHPC_BCS6_RING_BASE 0x3ea000 | |
316 | #define XEHPC_BCS7_RING_BASE 0x3ec000 | |
317 | #define XEHPC_BCS8_RING_BASE 0x3ee000 | |
1e3dc1d8 TW |
318 | #define DG1_GSC_HECI1_BASE 0x00258000 |
319 | #define DG1_GSC_HECI2_BASE 0x00259000 | |
f15856d7 TW |
320 | #define DG2_GSC_HECI1_BASE 0x00373000 |
321 | #define DG2_GSC_HECI2_BASE 0x00374000 | |
b7d70b8b DCS |
322 | #define MTL_GSC_HECI1_BASE 0x00116000 |
323 | #define MTL_GSC_HECI2_BASE 0x00117000 | |
324 | ||
325 | #define HECI_H_CSR(base) _MMIO((base) + 0x4) | |
326 | #define HECI_H_CSR_IE REG_BIT(0) | |
327 | #define HECI_H_CSR_IS REG_BIT(1) | |
328 | #define HECI_H_CSR_IG REG_BIT(2) | |
329 | #define HECI_H_CSR_RDY REG_BIT(3) | |
330 | #define HECI_H_CSR_RST REG_BIT(4) | |
331 | ||
332 | #define HECI_H_GS1(base) _MMIO((base) + 0xc4c) | |
333 | #define HECI_H_GS1_ER_PREP REG_BIT(0) | |
9e72b46c | 334 | |
561055b8 DCS |
335 | /* |
336 | * The FWSTS register values are FW defined and can be different between | |
337 | * HECI1 and HECI2 | |
338 | */ | |
339 | #define HECI_FWSTS1 0xc40 | |
340 | #define HECI1_FWSTS1_CURRENT_STATE REG_GENMASK(3, 0) | |
341 | #define HECI1_FWSTS1_CURRENT_STATE_RESET 0 | |
342 | #define HECI1_FWSTS1_PROXY_STATE_NORMAL 5 | |
343 | #define HECI1_FWSTS1_INIT_COMPLETE REG_BIT(9) | |
344 | #define HECI_FWSTS2 0xc48 | |
345 | #define HECI_FWSTS3 0xc60 | |
346 | #define HECI_FWSTS4 0xc64 | |
347 | #define HECI_FWSTS5 0xc68 | |
348 | #define HECI1_FWSTS5_HUC_AUTH_DONE (1 << 19) | |
349 | #define HECI_FWSTS6 0xc6c | |
350 | ||
351 | /* the FWSTS regs are 1-based, so we use -base for index 0 to get an invalid reg */ | |
352 | #define HECI_FWSTS(base, x) _MMIO((base) + _PICK(x, -(base), \ | |
353 | HECI_FWSTS1, \ | |
354 | HECI_FWSTS2, \ | |
355 | HECI_FWSTS3, \ | |
356 | HECI_FWSTS4, \ | |
357 | HECI_FWSTS5, \ | |
358 | HECI_FWSTS6)) | |
98d2722a | 359 | |
f0f59a00 | 360 | #define HSW_GTT_CACHE_EN _MMIO(0x4024) |
6d50b065 | 361 | #define GTT_CACHE_EN_ALL 0xF0007FFF |
f0f59a00 VS |
362 | #define GEN7_WR_WATERMARK _MMIO(0x4028) |
363 | #define GEN7_GFX_PRIO_CTRL _MMIO(0x402C) | |
364 | #define ARB_MODE _MMIO(0x4030) | |
5ee8ee86 PZ |
365 | #define ARB_MODE_SWIZZLE_SNB (1 << 4) |
366 | #define ARB_MODE_SWIZZLE_IVB (1 << 5) | |
f0f59a00 VS |
367 | #define GEN7_GFX_PEND_TLB0 _MMIO(0x4034) |
368 | #define GEN7_GFX_PEND_TLB1 _MMIO(0x4038) | |
9e72b46c | 369 | /* L3, CVS, ZTLB, RCC, CASC LRA min, max values */ |
f0f59a00 | 370 | #define GEN7_LRA_LIMITS(i) _MMIO(0x403C + (i) * 4) |
9e72b46c | 371 | #define GEN7_LRA_LIMITS_REG_NUM 13 |
f0f59a00 VS |
372 | #define GEN7_MEDIA_MAX_REQ_COUNT _MMIO(0x4070) |
373 | #define GEN7_GFX_MAX_REQ_COUNT _MMIO(0x4074) | |
9e72b46c | 374 | |
d2093831 VS |
375 | #define ILK_GTT_FAULT _MMIO(0x44040) /* ilk/snb */ |
376 | #define GTT_FAULT_INVALID_GTT_PTE (1 << 7) | |
377 | #define GTT_FAULT_INVALID_PTE_DATA (1 << 6) | |
378 | #define GTT_FAULT_CURSOR_B_FAULT (1 << 5) | |
379 | #define GTT_FAULT_CURSOR_A_FAULT (1 << 4) | |
380 | #define GTT_FAULT_SPRITE_B_FAULT (1 << 3) | |
381 | #define GTT_FAULT_SPRITE_A_FAULT (1 << 2) | |
382 | #define GTT_FAULT_PRIMARY_B_FAULT (1 << 1) | |
383 | #define GTT_FAULT_PRIMARY_A_FAULT (1 << 0) | |
384 | ||
f0f59a00 | 385 | #define GEN7_ERR_INT _MMIO(0x44040) |
5ee8ee86 | 386 | #define ERR_INT_POISON (1 << 31) |
112a0317 VS |
387 | #define ERR_INT_INVALID_GTT_PTE (1 << 29) |
388 | #define ERR_INT_INVALID_PTE_DATA (1 << 28) | |
389 | #define ERR_INT_SPRITE_C_FAULT (1 << 23) | |
390 | #define ERR_INT_PRIMARY_C_FAULT (1 << 22) | |
391 | #define ERR_INT_CURSOR_C_FAULT (1 << 21) | |
392 | #define ERR_INT_SPRITE_B_FAULT (1 << 20) | |
393 | #define ERR_INT_PRIMARY_B_FAULT (1 << 19) | |
394 | #define ERR_INT_CURSOR_B_FAULT (1 << 18) | |
395 | #define ERR_INT_SPRITE_A_FAULT (1 << 17) | |
396 | #define ERR_INT_PRIMARY_A_FAULT (1 << 16) | |
397 | #define ERR_INT_CURSOR_A_FAULT (1 << 15) | |
5ee8ee86 PZ |
398 | #define ERR_INT_MMIO_UNCLAIMED (1 << 13) |
399 | #define ERR_INT_PIPE_CRC_DONE_C (1 << 8) | |
400 | #define ERR_INT_FIFO_UNDERRUN_C (1 << 6) | |
401 | #define ERR_INT_PIPE_CRC_DONE_B (1 << 5) | |
402 | #define ERR_INT_FIFO_UNDERRUN_B (1 << 3) | |
403 | #define ERR_INT_PIPE_CRC_DONE_A (1 << 2) | |
404 | #define ERR_INT_PIPE_CRC_DONE(pipe) (1 << (2 + (pipe) * 3)) | |
405 | #define ERR_INT_FIFO_UNDERRUN_A (1 << 0) | |
406 | #define ERR_INT_FIFO_UNDERRUN(pipe) (1 << ((pipe) * 3)) | |
f406839f | 407 | |
f0f59a00 | 408 | #define FPGA_DBG _MMIO(0x42300) |
6bb0a0e0 | 409 | #define FPGA_DBG_RM_NOCLAIM REG_BIT(31) |
3f1e109a | 410 | |
8ac3e1bb | 411 | #define CLAIM_ER _MMIO(VLV_DISPLAY_BASE + 0x2028) |
6bb0a0e0 VS |
412 | #define CLAIM_ER_CLR REG_BIT(31) |
413 | #define CLAIM_ER_OVERFLOW REG_BIT(16) | |
414 | #define CLAIM_ER_CTR_MASK REG_GENMASK(15, 0) | |
8ac3e1bb | 415 | |
f0f59a00 | 416 | #define DERRMR _MMIO(0x44050) |
4e0bbc31 | 417 | /* Note that HBLANK events are reserved on bdw+ */ |
5ee8ee86 PZ |
418 | #define DERRMR_PIPEA_SCANLINE (1 << 0) |
419 | #define DERRMR_PIPEA_PRI_FLIP_DONE (1 << 1) | |
420 | #define DERRMR_PIPEA_SPR_FLIP_DONE (1 << 2) | |
421 | #define DERRMR_PIPEA_VBLANK (1 << 3) | |
422 | #define DERRMR_PIPEA_HBLANK (1 << 5) | |
af7187b7 | 423 | #define DERRMR_PIPEB_SCANLINE (1 << 8) |
5ee8ee86 PZ |
424 | #define DERRMR_PIPEB_PRI_FLIP_DONE (1 << 9) |
425 | #define DERRMR_PIPEB_SPR_FLIP_DONE (1 << 10) | |
426 | #define DERRMR_PIPEB_VBLANK (1 << 11) | |
427 | #define DERRMR_PIPEB_HBLANK (1 << 13) | |
ffe74d75 | 428 | /* Note that PIPEC is not a simple translation of PIPEA/PIPEB */ |
5ee8ee86 PZ |
429 | #define DERRMR_PIPEC_SCANLINE (1 << 14) |
430 | #define DERRMR_PIPEC_PRI_FLIP_DONE (1 << 15) | |
431 | #define DERRMR_PIPEC_SPR_FLIP_DONE (1 << 20) | |
432 | #define DERRMR_PIPEC_VBLANK (1 << 21) | |
433 | #define DERRMR_PIPEC_HBLANK (1 << 22) | |
ffe74d75 | 434 | |
f0f59a00 VS |
435 | #define VLV_GU_CTL0 _MMIO(VLV_DISPLAY_BASE + 0x2030) |
436 | #define VLV_GU_CTL1 _MMIO(VLV_DISPLAY_BASE + 0x2034) | |
437 | #define SCPD0 _MMIO(0x209c) /* 915+ only */ | |
5cecf507 | 438 | #define SCPD_FBC_IGNORE_3D (1 << 6) |
7d423af9 | 439 | #define CSTATE_RENDER_CLOCK_GATE_DISABLE (1 << 5) |
9d9523d8 PZ |
440 | #define GEN2_IER _MMIO(0x20a0) |
441 | #define GEN2_IIR _MMIO(0x20a4) | |
442 | #define GEN2_IMR _MMIO(0x20a8) | |
443 | #define GEN2_ISR _MMIO(0x20ac) | |
7a26b3f1 JN |
444 | |
445 | #define GEN2_IRQ_REGS I915_IRQ_REGS(GEN2_IMR, \ | |
446 | GEN2_IER, \ | |
447 | GEN2_IIR) | |
448 | ||
f0f59a00 | 449 | #define VLV_GUNIT_CLOCK_GATE _MMIO(VLV_DISPLAY_BASE + 0x2060) |
5ee8ee86 PZ |
450 | #define GINT_DIS (1 << 22) |
451 | #define GCFG_DIS (1 << 8) | |
f0f59a00 VS |
452 | #define VLV_GUNIT_CLOCK_GATE2 _MMIO(VLV_DISPLAY_BASE + 0x2064) |
453 | #define VLV_IIR_RW _MMIO(VLV_DISPLAY_BASE + 0x2084) | |
454 | #define VLV_IER _MMIO(VLV_DISPLAY_BASE + 0x20a0) | |
455 | #define VLV_IIR _MMIO(VLV_DISPLAY_BASE + 0x20a4) | |
456 | #define VLV_IMR _MMIO(VLV_DISPLAY_BASE + 0x20a8) | |
457 | #define VLV_ISR _MMIO(VLV_DISPLAY_BASE + 0x20ac) | |
458 | #define VLV_PCBR _MMIO(VLV_DISPLAY_BASE + 0x2120) | |
38807746 D |
459 | #define VLV_PCBR_ADDR_SHIFT 12 |
460 | ||
7a26b3f1 JN |
461 | #define VLV_IRQ_REGS I915_IRQ_REGS(VLV_IMR, \ |
462 | VLV_IER, \ | |
463 | VLV_IIR) | |
464 | ||
5ee8ee86 | 465 | #define DISPLAY_PLANE_FLIP_PENDING(plane) (1 << (11 - (plane))) /* A and B only */ |
f0f59a00 VS |
466 | #define EIR _MMIO(0x20b0) |
467 | #define EMR _MMIO(0x20b4) | |
468 | #define ESR _MMIO(0x20b8) | |
5ee8ee86 PZ |
469 | #define GM45_ERROR_PAGE_TABLE (1 << 5) |
470 | #define GM45_ERROR_MEM_PRIV (1 << 4) | |
471 | #define I915_ERROR_PAGE_TABLE (1 << 4) | |
472 | #define GM45_ERROR_CP_PRIV (1 << 3) | |
473 | #define I915_ERROR_MEMORY_REFRESH (1 << 1) | |
474 | #define I915_ERROR_INSTRUCTION (1 << 0) | |
474e1cd6 VS |
475 | |
476 | #define GEN2_ERROR_REGS I915_ERROR_REGS(EMR, EIR) | |
477 | ||
c19f5a03 VS |
478 | #define VLV_EIR _MMIO(VLV_DISPLAY_BASE + 0x20b0) |
479 | #define VLV_EMR _MMIO(VLV_DISPLAY_BASE + 0x20b4) | |
480 | #define VLV_ESR _MMIO(VLV_DISPLAY_BASE + 0x20b8) | |
481 | #define VLV_ERROR_GUNIT_TLB_DATA (1 << 6) | |
482 | #define VLV_ERROR_GUNIT_TLB_PTE (1 << 5) | |
483 | #define VLV_ERROR_PAGE_TABLE (1 << 4) | |
484 | #define VLV_ERROR_CLAIM (1 << 0) | |
485 | ||
486 | #define VLV_ERROR_REGS I915_ERROR_REGS(VLV_EMR, VLV_EIR) | |
487 | ||
f0f59a00 | 488 | #define INSTPM _MMIO(0x20c0) |
5ee8ee86 PZ |
489 | #define INSTPM_SELF_EN (1 << 12) /* 915GM only */ |
490 | #define INSTPM_AGPBUSY_INT_EN (1 << 11) /* gen3: when disabled, pending interrupts | |
8692d00e CW |
491 | will not assert AGPBUSY# and will only |
492 | be delivered when out of C3. */ | |
5ee8ee86 PZ |
493 | #define INSTPM_FORCE_ORDERING (1 << 7) /* GEN6+ */ |
494 | #define INSTPM_TLB_INVALIDATE (1 << 9) | |
495 | #define INSTPM_SYNC_FLUSH (1 << 5) | |
f0f59a00 | 496 | #define MEM_MODE _MMIO(0x20cc) |
5ee8ee86 PZ |
497 | #define MEM_DISPLAY_B_TRICKLE_FEED_DISABLE (1 << 3) /* 830 only */ |
498 | #define MEM_DISPLAY_A_TRICKLE_FEED_DISABLE (1 << 2) /* 830/845 only */ | |
499 | #define MEM_DISPLAY_TRICKLE_FEED_DISABLE (1 << 2) /* 85x only */ | |
f0f59a00 VS |
500 | #define FW_BLC _MMIO(0x20d8) |
501 | #define FW_BLC2 _MMIO(0x20dc) | |
502 | #define FW_BLC_SELF _MMIO(0x20e0) /* 915+ only */ | |
5ee8ee86 PZ |
503 | #define FW_BLC_SELF_EN_MASK (1 << 31) |
504 | #define FW_BLC_SELF_FIFO_MASK (1 << 16) /* 945 only */ | |
505 | #define FW_BLC_SELF_EN (1 << 15) /* 945 only */ | |
7662c8bd SL |
506 | #define MM_BURST_LENGTH 0x00700000 |
507 | #define MM_FIFO_WATERMARK 0x0001F000 | |
508 | #define LM_BURST_LENGTH 0x00000700 | |
509 | #define LM_FIFO_WATERMARK 0x0000001F | |
f0f59a00 | 510 | #define MI_ARB_STATE _MMIO(0x20e4) /* 915+ only */ |
45503ded | 511 | |
62afef28 MR |
512 | #define _MBUS_ABOX0_CTL 0x45038 |
513 | #define _MBUS_ABOX1_CTL 0x45048 | |
514 | #define _MBUS_ABOX2_CTL 0x4504C | |
0d6e08c7 LDM |
515 | #define MBUS_ABOX_CTL(x) \ |
516 | _MMIO(_PICK_EVEN_2RANGES(x, 2, \ | |
517 | _MBUS_ABOX0_CTL, _MBUS_ABOX1_CTL, \ | |
518 | _MBUS_ABOX2_CTL, _MBUS_ABOX2_CTL)) | |
519 | ||
78005497 MK |
520 | #define MBUS_ABOX_BW_CREDIT_MASK (3 << 20) |
521 | #define MBUS_ABOX_BW_CREDIT(x) ((x) << 20) | |
522 | #define MBUS_ABOX_B_CREDIT_MASK (0xF << 16) | |
523 | #define MBUS_ABOX_B_CREDIT(x) ((x) << 16) | |
524 | #define MBUS_ABOX_BT_CREDIT_POOL2_MASK (0x1F << 8) | |
525 | #define MBUS_ABOX_BT_CREDIT_POOL2(x) ((x) << 8) | |
526 | #define MBUS_ABOX_BT_CREDIT_POOL1_MASK (0x1F << 0) | |
527 | #define MBUS_ABOX_BT_CREDIT_POOL1(x) ((x) << 0) | |
528 | ||
381ab12d NG |
529 | /* |
530 | * Make render/texture TLB fetches lower priority than associated data | |
531 | * fetches. This is not turned on by default. | |
45503ded KP |
532 | */ |
533 | #define MI_ARB_RENDER_TLB_LOW_PRIORITY (1 << 15) | |
534 | ||
535 | /* Isoch request wait on GTT enable (Display A/B/C streams). | |
536 | * Make isoch requests stall on the TLB update. May cause | |
537 | * display underruns (test mode only) | |
538 | */ | |
539 | #define MI_ARB_ISOCH_WAIT_GTT (1 << 14) | |
540 | ||
541 | /* Block grant count for isoch requests when block count is | |
542 | * set to a finite value. | |
543 | */ | |
544 | #define MI_ARB_BLOCK_GRANT_MASK (3 << 12) | |
545 | #define MI_ARB_BLOCK_GRANT_8 (0 << 12) /* for 3 display planes */ | |
546 | #define MI_ARB_BLOCK_GRANT_4 (1 << 12) /* for 2 display planes */ | |
547 | #define MI_ARB_BLOCK_GRANT_2 (2 << 12) /* for 1 display plane */ | |
548 | #define MI_ARB_BLOCK_GRANT_0 (3 << 12) /* don't use */ | |
549 | ||
550 | /* Enable render writes to complete in C2/C3/C4 power states. | |
551 | * If this isn't enabled, render writes are prevented in low | |
552 | * power states. That seems bad to me. | |
553 | */ | |
554 | #define MI_ARB_C3_LP_WRITE_ENABLE (1 << 11) | |
555 | ||
556 | /* This acknowledges an async flip immediately instead | |
557 | * of waiting for 2TLB fetches. | |
558 | */ | |
559 | #define MI_ARB_ASYNC_FLIP_ACK_IMMEDIATE (1 << 10) | |
560 | ||
561 | /* Enables non-sequential data reads through arbiter | |
562 | */ | |
0206e353 | 563 | #define MI_ARB_DUAL_DATA_PHASE_DISABLE (1 << 9) |
45503ded KP |
564 | |
565 | /* Disable FSB snooping of cacheable write cycles from binner/render | |
566 | * command stream | |
567 | */ | |
568 | #define MI_ARB_CACHE_SNOOP_DISABLE (1 << 8) | |
569 | ||
570 | /* Arbiter time slice for non-isoch streams */ | |
571 | #define MI_ARB_TIME_SLICE_MASK (7 << 5) | |
572 | #define MI_ARB_TIME_SLICE_1 (0 << 5) | |
573 | #define MI_ARB_TIME_SLICE_2 (1 << 5) | |
574 | #define MI_ARB_TIME_SLICE_4 (2 << 5) | |
575 | #define MI_ARB_TIME_SLICE_6 (3 << 5) | |
576 | #define MI_ARB_TIME_SLICE_8 (4 << 5) | |
577 | #define MI_ARB_TIME_SLICE_10 (5 << 5) | |
578 | #define MI_ARB_TIME_SLICE_14 (6 << 5) | |
579 | #define MI_ARB_TIME_SLICE_16 (7 << 5) | |
580 | ||
581 | /* Low priority grace period page size */ | |
582 | #define MI_ARB_LOW_PRIORITY_GRACE_4KB (0 << 4) /* default */ | |
583 | #define MI_ARB_LOW_PRIORITY_GRACE_8KB (1 << 4) | |
584 | ||
585 | /* Disable display A/B trickle feed */ | |
586 | #define MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE (1 << 2) | |
587 | ||
588 | /* Set display plane priority */ | |
589 | #define MI_ARB_DISPLAY_PRIORITY_A_B (0 << 0) /* display A > display B */ | |
590 | #define MI_ARB_DISPLAY_PRIORITY_B_A (1 << 0) /* display B > display A */ | |
591 | ||
f0f59a00 | 592 | #define MI_STATE _MMIO(0x20e4) /* gen2 only */ |
54e472ae VS |
593 | #define MI_AGPBUSY_INT_EN (1 << 1) /* 85x only */ |
594 | #define MI_AGPBUSY_830_MODE (1 << 0) /* 85x only */ | |
595 | ||
cc609d5d BW |
596 | /* On modern GEN architectures interrupt control consists of two sets |
597 | * of registers. The first set pertains to the ring generating the | |
598 | * interrupt. The second control is for the functional block generating the | |
599 | * interrupt. These are PM, GT, DE, etc. | |
600 | * | |
601 | * Luckily *knocks on wood* all the ring interrupt bits match up with the | |
602 | * GT interrupt bits, so we don't need to duplicate the defines. | |
603 | * | |
604 | * These defines should cover us well from SNB->HSW with minor exceptions | |
605 | * it can also work on ILK. | |
606 | */ | |
607 | #define GT_BLT_FLUSHDW_NOTIFY_INTERRUPT (1 << 26) | |
608 | #define GT_BLT_CS_ERROR_INTERRUPT (1 << 25) | |
609 | #define GT_BLT_USER_INTERRUPT (1 << 22) | |
610 | #define GT_BSD_CS_ERROR_INTERRUPT (1 << 15) | |
611 | #define GT_BSD_USER_INTERRUPT (1 << 12) | |
35a85ac6 | 612 | #define GT_RENDER_L3_PARITY_ERROR_INTERRUPT_S1 (1 << 11) /* hsw+; rsvd on snb, ivb, vlv */ |
c4e8ba73 | 613 | #define GT_WAIT_SEMAPHORE_INTERRUPT REG_BIT(11) /* bdw+ */ |
73d477f6 | 614 | #define GT_CONTEXT_SWITCH_INTERRUPT (1 << 8) |
cc609d5d BW |
615 | #define GT_RENDER_L3_PARITY_ERROR_INTERRUPT (1 << 5) /* !snb */ |
616 | #define GT_RENDER_PIPECTL_NOTIFY_INTERRUPT (1 << 4) | |
70a76a9b | 617 | #define GT_CS_MASTER_ERROR_INTERRUPT REG_BIT(3) |
cc609d5d BW |
618 | #define GT_RENDER_SYNC_STATUS_INTERRUPT (1 << 2) |
619 | #define GT_RENDER_DEBUG_INTERRUPT (1 << 1) | |
620 | #define GT_RENDER_USER_INTERRUPT (1 << 0) | |
621 | ||
12638c57 BW |
622 | #define PM_VEBOX_CS_ERROR_INTERRUPT (1 << 12) /* hsw+ */ |
623 | #define PM_VEBOX_USER_INTERRUPT (1 << 10) /* hsw+ */ | |
624 | ||
772c2a51 | 625 | #define GT_PARITY_ERROR(dev_priv) \ |
35a85ac6 | 626 | (GT_RENDER_L3_PARITY_ERROR_INTERRUPT | \ |
772c2a51 | 627 | (IS_HASWELL(dev_priv) ? GT_RENDER_L3_PARITY_ERROR_INTERRUPT_S1 : 0)) |
35a85ac6 | 628 | |
cc609d5d | 629 | /* These are all the "old" interrupts */ |
5ee8ee86 PZ |
630 | #define ILK_BSD_USER_INTERRUPT (1 << 5) |
631 | ||
632 | #define I915_PM_INTERRUPT (1 << 31) | |
633 | #define I915_ISP_INTERRUPT (1 << 22) | |
634 | #define I915_LPE_PIPE_B_INTERRUPT (1 << 21) | |
635 | #define I915_LPE_PIPE_A_INTERRUPT (1 << 20) | |
636 | #define I915_MIPIC_INTERRUPT (1 << 19) | |
637 | #define I915_MIPIA_INTERRUPT (1 << 18) | |
638 | #define I915_PIPE_CONTROL_NOTIFY_INTERRUPT (1 << 18) | |
639 | #define I915_DISPLAY_PORT_INTERRUPT (1 << 17) | |
640 | #define I915_DISPLAY_PIPE_C_HBLANK_INTERRUPT (1 << 16) | |
641 | #define I915_MASTER_ERROR_INTERRUPT (1 << 15) | |
5ee8ee86 PZ |
642 | #define I915_DISPLAY_PIPE_B_HBLANK_INTERRUPT (1 << 14) |
643 | #define I915_GMCH_THERMAL_SENSOR_EVENT_INTERRUPT (1 << 14) /* p-state */ | |
644 | #define I915_DISPLAY_PIPE_A_HBLANK_INTERRUPT (1 << 13) | |
645 | #define I915_HWB_OOM_INTERRUPT (1 << 13) | |
646 | #define I915_LPE_PIPE_C_INTERRUPT (1 << 12) | |
647 | #define I915_SYNC_STATUS_INTERRUPT (1 << 12) | |
648 | #define I915_MISC_INTERRUPT (1 << 11) | |
649 | #define I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT (1 << 11) | |
650 | #define I915_DISPLAY_PIPE_C_VBLANK_INTERRUPT (1 << 10) | |
651 | #define I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT (1 << 10) | |
652 | #define I915_DISPLAY_PIPE_C_EVENT_INTERRUPT (1 << 9) | |
653 | #define I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT (1 << 9) | |
654 | #define I915_DISPLAY_PIPE_C_DPBM_INTERRUPT (1 << 8) | |
655 | #define I915_DISPLAY_PLANE_C_FLIP_PENDING_INTERRUPT (1 << 8) | |
656 | #define I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT (1 << 7) | |
657 | #define I915_DISPLAY_PIPE_A_EVENT_INTERRUPT (1 << 6) | |
658 | #define I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT (1 << 5) | |
659 | #define I915_DISPLAY_PIPE_B_EVENT_INTERRUPT (1 << 4) | |
660 | #define I915_DISPLAY_PIPE_A_DPBM_INTERRUPT (1 << 3) | |
661 | #define I915_DISPLAY_PIPE_B_DPBM_INTERRUPT (1 << 2) | |
662 | #define I915_DEBUG_INTERRUPT (1 << 2) | |
663 | #define I915_WINVALID_INTERRUPT (1 << 1) | |
664 | #define I915_USER_INTERRUPT (1 << 1) | |
665 | #define I915_ASLE_INTERRUPT (1 << 0) | |
666 | #define I915_BSD_USER_INTERRUPT (1 << 25) | |
881f47b6 | 667 | |
f0f59a00 | 668 | #define GEN6_BSD_RNCID _MMIO(0x12198) |
881f47b6 | 669 | |
f0f59a00 | 670 | #define GEN7_FF_THREAD_MODE _MMIO(0x20a0) |
a1e969e0 | 671 | #define GEN7_FF_SCHED_MASK 0x0077070 |
ab57fff1 | 672 | #define GEN8_FF_DS_REF_CNT_FFME (1 << 19) |
561db829 | 673 | #define GEN12_FF_TESSELATION_DOP_GATE_DISABLE BIT(19) |
5ee8ee86 PZ |
674 | #define GEN7_FF_TS_SCHED_HS1 (0x5 << 16) |
675 | #define GEN7_FF_TS_SCHED_HS0 (0x3 << 16) | |
676 | #define GEN7_FF_TS_SCHED_LOAD_BALANCE (0x1 << 16) | |
677 | #define GEN7_FF_TS_SCHED_HW (0x0 << 16) /* Default */ | |
41c0b3a8 | 678 | #define GEN7_FF_VS_REF_CNT_FFME (1 << 15) |
5ee8ee86 PZ |
679 | #define GEN7_FF_VS_SCHED_HS1 (0x5 << 12) |
680 | #define GEN7_FF_VS_SCHED_HS0 (0x3 << 12) | |
681 | #define GEN7_FF_VS_SCHED_LOAD_BALANCE (0x1 << 12) /* Default */ | |
682 | #define GEN7_FF_VS_SCHED_HW (0x0 << 12) | |
683 | #define GEN7_FF_DS_SCHED_HS1 (0x5 << 4) | |
684 | #define GEN7_FF_DS_SCHED_HS0 (0x3 << 4) | |
685 | #define GEN7_FF_DS_SCHED_LOAD_BALANCE (0x1 << 4) /* Default */ | |
686 | #define GEN7_FF_DS_SCHED_HW (0x0 << 4) | |
a1e969e0 | 687 | |
f0f59a00 | 688 | #define ILK_DISPLAY_CHICKEN1 _MMIO(0x42000) |
3df3c589 | 689 | #define ILK_FBCQ_DIS REG_BIT(22) |
3d0d3336 VS |
690 | #define ILK_PABSTRETCH_DIS REG_BIT(21) |
691 | #define ILK_SABSTRETCH_DIS REG_BIT(20) | |
b7a7053a VS |
692 | #define IVB_PRI_STRETCH_MAX_MASK REG_GENMASK(21, 20) |
693 | #define IVB_PRI_STRETCH_MAX_X8 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 0) | |
694 | #define IVB_PRI_STRETCH_MAX_X4 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 1) | |
695 | #define IVB_PRI_STRETCH_MAX_X2 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 2) | |
696 | #define IVB_PRI_STRETCH_MAX_X1 REG_FIELD_PREP(IVB_PRI_STRETCH_MAX_MASK, 3) | |
697 | #define IVB_SPR_STRETCH_MAX_MASK REG_GENMASK(19, 18) | |
698 | #define IVB_SPR_STRETCH_MAX_X8 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 0) | |
699 | #define IVB_SPR_STRETCH_MAX_X4 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 1) | |
700 | #define IVB_SPR_STRETCH_MAX_X2 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 2) | |
701 | #define IVB_SPR_STRETCH_MAX_X1 REG_FIELD_PREP(IVB_SPR_STRETCH_MAX_MASK, 3) | |
1398261a | 702 | |
f0f59a00 | 703 | #define IPS_CTL _MMIO(0x43408) |
42b4c479 VS |
704 | #define IPS_ENABLE REG_BIT(31) |
705 | #define IPS_FALSE_COLOR REG_BIT(4) | |
9c04f015 | 706 | |
585fb111 JB |
707 | /* |
708 | * Clock control & power management | |
709 | */ | |
7322aedd JN |
710 | #define _DPLL_A 0x6014 |
711 | #define _DPLL_B 0x6018 | |
712 | #define _CHV_DPLL_C 0x6030 | |
9a875f95 | 713 | #define DPLL(dev_priv, pipe) _MMIO_BASE_PIPE3(DISPLAY_MMIO_BASE(dev_priv), \ |
7322aedd | 714 | (pipe), _DPLL_A, _DPLL_B, _CHV_DPLL_C) |
585fb111 | 715 | |
f0f59a00 VS |
716 | #define VGA0 _MMIO(0x6000) |
717 | #define VGA1 _MMIO(0x6004) | |
718 | #define VGA_PD _MMIO(0x6010) | |
585fb111 JB |
719 | #define VGA0_PD_P2_DIV_4 (1 << 7) |
720 | #define VGA0_PD_P1_DIV_2 (1 << 5) | |
721 | #define VGA0_PD_P1_SHIFT 0 | |
722 | #define VGA0_PD_P1_MASK (0x1f << 0) | |
723 | #define VGA1_PD_P2_DIV_4 (1 << 15) | |
724 | #define VGA1_PD_P1_DIV_2 (1 << 13) | |
725 | #define VGA1_PD_P1_SHIFT 8 | |
726 | #define VGA1_PD_P1_MASK (0x1f << 8) | |
585fb111 | 727 | #define DPLL_VCO_ENABLE (1 << 31) |
4a33e48d DV |
728 | #define DPLL_SDVO_HIGH_SPEED (1 << 30) |
729 | #define DPLL_DVO_2X_MODE (1 << 30) | |
25eb05fc | 730 | #define DPLL_EXT_BUFFER_ENABLE_VLV (1 << 30) |
585fb111 | 731 | #define DPLL_SYNCLOCK_ENABLE (1 << 29) |
60bfe44f | 732 | #define DPLL_REF_CLK_ENABLE_VLV (1 << 29) |
585fb111 JB |
733 | #define DPLL_VGA_MODE_DIS (1 << 28) |
734 | #define DPLLB_MODE_DAC_SERIAL (1 << 26) /* i915 */ | |
735 | #define DPLLB_MODE_LVDS (2 << 26) /* i915 */ | |
736 | #define DPLL_MODE_MASK (3 << 26) | |
737 | #define DPLL_DAC_SERIAL_P2_CLOCK_DIV_10 (0 << 24) /* i915 */ | |
738 | #define DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 (1 << 24) /* i915 */ | |
739 | #define DPLLB_LVDS_P2_CLOCK_DIV_14 (0 << 24) /* i915 */ | |
740 | #define DPLLB_LVDS_P2_CLOCK_DIV_7 (1 << 24) /* i915 */ | |
741 | #define DPLL_P2_CLOCK_DIV_MASK 0x03000000 /* i915 */ | |
742 | #define DPLL_FPA01_P1_POST_DIV_MASK 0x00ff0000 /* i915 */ | |
f2b115e6 | 743 | #define DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW 0x00ff8000 /* Pineview */ |
5ee8ee86 PZ |
744 | #define DPLL_LOCK_VLV (1 << 15) |
745 | #define DPLL_INTEGRATED_CRI_CLK_VLV (1 << 14) | |
746 | #define DPLL_INTEGRATED_REF_CLK_VLV (1 << 13) | |
747 | #define DPLL_SSC_REF_CLK_CHV (1 << 13) | |
598fac6b DV |
748 | #define DPLL_PORTC_READY_MASK (0xf << 4) |
749 | #define DPLL_PORTB_READY_MASK (0xf) | |
585fb111 | 750 | |
585fb111 | 751 | #define DPLL_FPA01_P1_POST_DIV_MASK_I830 0x001f0000 |
00fc31b7 CML |
752 | |
753 | /* Additional CHV pll/phy registers */ | |
f0f59a00 | 754 | #define DPIO_PHY_STATUS _MMIO(VLV_DISPLAY_BASE + 0x6240) |
00fc31b7 | 755 | #define DPLL_PORTD_READY_MASK (0xf) |
f0f59a00 | 756 | #define DISPLAY_PHY_CONTROL _MMIO(VLV_DISPLAY_BASE + 0x60100) |
5ee8ee86 | 757 | #define PHY_CH_POWER_DOWN_OVRD_EN(phy, ch) (1 << (2 * (phy) + (ch) + 27)) |
bc284542 VS |
758 | #define PHY_LDO_DELAY_0NS 0x0 |
759 | #define PHY_LDO_DELAY_200NS 0x1 | |
760 | #define PHY_LDO_DELAY_600NS 0x2 | |
5ee8ee86 PZ |
761 | #define PHY_LDO_SEQ_DELAY(delay, phy) ((delay) << (2 * (phy) + 23)) |
762 | #define PHY_CH_POWER_DOWN_OVRD(mask, phy, ch) ((mask) << (8 * (phy) + 4 * (ch) + 11)) | |
70722468 VS |
763 | #define PHY_CH_SU_PSR 0x1 |
764 | #define PHY_CH_DEEP_PSR 0x7 | |
5ee8ee86 | 765 | #define PHY_CH_POWER_MODE(mode, phy, ch) ((mode) << (6 * (phy) + 3 * (ch) + 2)) |
70722468 | 766 | #define PHY_COM_LANE_RESET_DEASSERT(phy) (1 << (phy)) |
f0f59a00 | 767 | #define DISPLAY_PHY_STATUS _MMIO(VLV_DISPLAY_BASE + 0x60104) |
5ee8ee86 PZ |
768 | #define PHY_POWERGOOD(phy) (((phy) == DPIO_PHY0) ? (1 << 31) : (1 << 30)) |
769 | #define PHY_STATUS_CMN_LDO(phy, ch) (1 << (6 - (6 * (phy) + 3 * (ch)))) | |
770 | #define PHY_STATUS_SPLINE_LDO(phy, ch, spline) (1 << (8 - (6 * (phy) + 3 * (ch) + (spline)))) | |
076ed3b2 | 771 | |
585fb111 JB |
772 | /* |
773 | * The i830 generation, in LVDS mode, defines P1 as the bit number set within | |
774 | * this field (only one bit may be set). | |
775 | */ | |
776 | #define DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000 | |
777 | #define DPLL_FPA01_P1_POST_DIV_SHIFT 16 | |
f2b115e6 | 778 | #define DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW 15 |
585fb111 JB |
779 | /* i830, required in DVO non-gang */ |
780 | #define PLL_P2_DIVIDE_BY_4 (1 << 23) | |
781 | #define PLL_P1_DIVIDE_BY_TWO (1 << 21) /* i830 */ | |
782 | #define PLL_REF_INPUT_DREFCLK (0 << 13) | |
783 | #define PLL_REF_INPUT_TVCLKINA (1 << 13) /* i830 */ | |
784 | #define PLL_REF_INPUT_TVCLKINBC (2 << 13) /* SDVO TVCLKIN */ | |
785 | #define PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13) | |
786 | #define PLL_REF_INPUT_MASK (3 << 13) | |
787 | #define PLL_LOAD_PULSE_PHASE_SHIFT 9 | |
f2b115e6 | 788 | /* Ironlake */ |
b9055052 ZW |
789 | # define PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT 9 |
790 | # define PLL_REF_SDVO_HDMI_MULTIPLIER_MASK (7 << 9) | |
5ee8ee86 | 791 | # define PLL_REF_SDVO_HDMI_MULTIPLIER(x) (((x) - 1) << 9) |
b9055052 ZW |
792 | # define DPLL_FPA1_P1_POST_DIV_SHIFT 0 |
793 | # define DPLL_FPA1_P1_POST_DIV_MASK 0xff | |
794 | ||
585fb111 JB |
795 | /* |
796 | * Parallel to Serial Load Pulse phase selection. | |
797 | * Selects the phase for the 10X DPLL clock for the PCIe | |
798 | * digital display port. The range is 4 to 13; 10 or more | |
799 | * is just a flip delay. The default is 6 | |
800 | */ | |
801 | #define PLL_LOAD_PULSE_PHASE_MASK (0xf << PLL_LOAD_PULSE_PHASE_SHIFT) | |
802 | #define DISPLAY_RATE_SELECT_FPA1 (1 << 8) | |
803 | /* | |
804 | * SDVO multiplier for 945G/GM. Not used on 965. | |
805 | */ | |
806 | #define SDVO_MULTIPLIER_MASK 0x000000ff | |
807 | #define SDVO_MULTIPLIER_SHIFT_HIRES 4 | |
808 | #define SDVO_MULTIPLIER_SHIFT_VGA 0 | |
a57c774a | 809 | |
7322aedd JN |
810 | #define _DPLL_A_MD 0x601c |
811 | #define _DPLL_B_MD 0x6020 | |
812 | #define _CHV_DPLL_C_MD 0x603c | |
6ba1e814 | 813 | #define DPLL_MD(dev_priv, pipe) _MMIO_BASE_PIPE3(DISPLAY_MMIO_BASE(dev_priv), \ |
7322aedd | 814 | (pipe), _DPLL_A_MD, _DPLL_B_MD, _CHV_DPLL_C_MD) |
a57c774a | 815 | |
585fb111 JB |
816 | /* |
817 | * UDI pixel divider, controlling how many pixels are stuffed into a packet. | |
818 | * | |
819 | * Value is pixels minus 1. Must be set to 1 pixel for SDVO. | |
820 | */ | |
821 | #define DPLL_MD_UDI_DIVIDER_MASK 0x3f000000 | |
822 | #define DPLL_MD_UDI_DIVIDER_SHIFT 24 | |
823 | /* UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */ | |
824 | #define DPLL_MD_VGA_UDI_DIVIDER_MASK 0x003f0000 | |
825 | #define DPLL_MD_VGA_UDI_DIVIDER_SHIFT 16 | |
826 | /* | |
827 | * SDVO/UDI pixel multiplier. | |
828 | * | |
829 | * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus | |
830 | * clock rate is 10 times the DPLL clock. At low resolution/refresh rate | |
831 | * modes, the bus rate would be below the limits, so SDVO allows for stuffing | |
832 | * dummy bytes in the datastream at an increased clock rate, with both sides of | |
833 | * the link knowing how many bytes are fill. | |
834 | * | |
835 | * So, for a mode with a dotclock of 65Mhz, we would want to double the clock | |
836 | * rate to 130Mhz to get a bus rate of 1.30Ghz. The DPLL clock rate would be | |
837 | * set to 130Mhz, and the SDVO multiplier set to 2x in this register and | |
838 | * through an SDVO command. | |
839 | * | |
840 | * This register field has values of multiplication factor minus 1, with | |
841 | * a maximum multiplier of 5 for SDVO. | |
842 | */ | |
843 | #define DPLL_MD_UDI_MULTIPLIER_MASK 0x00003f00 | |
844 | #define DPLL_MD_UDI_MULTIPLIER_SHIFT 8 | |
845 | /* | |
846 | * SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK. | |
847 | * This best be set to the default value (3) or the CRT won't work. No, | |
848 | * I don't entirely understand what this does... | |
849 | */ | |
850 | #define DPLL_MD_VGA_UDI_MULTIPLIER_MASK 0x0000003f | |
851 | #define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT 0 | |
25eb05fc | 852 | |
19ab4ed3 VS |
853 | #define RAWCLK_FREQ_VLV _MMIO(VLV_DISPLAY_BASE + 0x6024) |
854 | ||
f0f59a00 VS |
855 | #define _FPA0 0x6040 |
856 | #define _FPA1 0x6044 | |
857 | #define _FPB0 0x6048 | |
858 | #define _FPB1 0x604c | |
859 | #define FP0(pipe) _MMIO_PIPE(pipe, _FPA0, _FPB0) | |
860 | #define FP1(pipe) _MMIO_PIPE(pipe, _FPA1, _FPB1) | |
585fb111 | 861 | #define FP_N_DIV_MASK 0x003f0000 |
f2b115e6 | 862 | #define FP_N_PINEVIEW_DIV_MASK 0x00ff0000 |
585fb111 JB |
863 | #define FP_N_DIV_SHIFT 16 |
864 | #define FP_M1_DIV_MASK 0x00003f00 | |
865 | #define FP_M1_DIV_SHIFT 8 | |
866 | #define FP_M2_DIV_MASK 0x0000003f | |
f2b115e6 | 867 | #define FP_M2_PINEVIEW_DIV_MASK 0x000000ff |
585fb111 | 868 | #define FP_M2_DIV_SHIFT 0 |
d56c95d4 | 869 | |
f0f59a00 | 870 | #define DPLL_TEST _MMIO(0x606c) |
585fb111 JB |
871 | #define DPLLB_TEST_SDVO_DIV_1 (0 << 22) |
872 | #define DPLLB_TEST_SDVO_DIV_2 (1 << 22) | |
873 | #define DPLLB_TEST_SDVO_DIV_4 (2 << 22) | |
874 | #define DPLLB_TEST_SDVO_DIV_MASK (3 << 22) | |
875 | #define DPLLB_TEST_N_BYPASS (1 << 19) | |
876 | #define DPLLB_TEST_M_BYPASS (1 << 18) | |
877 | #define DPLLB_INPUT_BUFFER_ENABLE (1 << 16) | |
878 | #define DPLLA_TEST_N_BYPASS (1 << 3) | |
879 | #define DPLLA_TEST_M_BYPASS (1 << 2) | |
880 | #define DPLLA_INPUT_BUFFER_ENABLE (1 << 0) | |
d56c95d4 | 881 | |
f0f59a00 | 882 | #define D_STATE _MMIO(0x6104) |
5ee8ee86 PZ |
883 | #define DSTATE_GFX_RESET_I830 (1 << 6) |
884 | #define DSTATE_PLL_D3_OFF (1 << 3) | |
885 | #define DSTATE_GFX_CLOCK_GATING (1 << 1) | |
886 | #define DSTATE_DOT_CLOCK_GATING (1 << 0) | |
d56c95d4 | 887 | |
3721d4fb | 888 | #define DSPCLK_GATE_D(__i915) _MMIO(DISPLAY_MMIO_BASE(__i915) + 0x6200) |
652c393a JB |
889 | # define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */ |
890 | # define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */ | |
891 | # define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */ | |
892 | # define VRDUNIT_CLOCK_GATE_DISABLE (1 << 27) /* 965 */ | |
893 | # define AUDUNIT_CLOCK_GATE_DISABLE (1 << 26) /* 965 */ | |
894 | # define DPUNIT_A_CLOCK_GATE_DISABLE (1 << 25) /* 965 */ | |
895 | # define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24) /* 965 */ | |
ad8059cf | 896 | # define PNV_GMBUSUNIT_CLOCK_GATE_DISABLE (1 << 24) /* pnv */ |
652c393a JB |
897 | # define TVRUNIT_CLOCK_GATE_DISABLE (1 << 23) /* 915-945 */ |
898 | # define TVCUNIT_CLOCK_GATE_DISABLE (1 << 22) /* 915-945 */ | |
899 | # define TVFUNIT_CLOCK_GATE_DISABLE (1 << 21) /* 915-945 */ | |
900 | # define TVEUNIT_CLOCK_GATE_DISABLE (1 << 20) /* 915-945 */ | |
901 | # define DVSUNIT_CLOCK_GATE_DISABLE (1 << 19) /* 915-945 */ | |
902 | # define DSSUNIT_CLOCK_GATE_DISABLE (1 << 18) /* 915-945 */ | |
903 | # define DDBUNIT_CLOCK_GATE_DISABLE (1 << 17) /* 915-945 */ | |
904 | # define DPRUNIT_CLOCK_GATE_DISABLE (1 << 16) /* 915-945 */ | |
905 | # define DPFUNIT_CLOCK_GATE_DISABLE (1 << 15) /* 915-945 */ | |
906 | # define DPBMUNIT_CLOCK_GATE_DISABLE (1 << 14) /* 915-945 */ | |
907 | # define DPLSUNIT_CLOCK_GATE_DISABLE (1 << 13) /* 915-945 */ | |
908 | # define DPLUNIT_CLOCK_GATE_DISABLE (1 << 12) /* 915-945 */ | |
909 | # define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11) | |
910 | # define DPBUNIT_CLOCK_GATE_DISABLE (1 << 10) | |
911 | # define DCUNIT_CLOCK_GATE_DISABLE (1 << 9) | |
912 | # define DPUNIT_CLOCK_GATE_DISABLE (1 << 8) | |
913 | # define VRUNIT_CLOCK_GATE_DISABLE (1 << 7) /* 915+: reserved */ | |
914 | # define OVHUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 830-865 */ | |
915 | # define DPIOUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 915-945 */ | |
916 | # define OVFUNIT_CLOCK_GATE_DISABLE (1 << 5) | |
917 | # define OVBUNIT_CLOCK_GATE_DISABLE (1 << 4) | |
646b4269 | 918 | /* |
652c393a JB |
919 | * This bit must be set on the 830 to prevent hangs when turning off the |
920 | * overlay scaler. | |
921 | */ | |
922 | # define OVRUNIT_CLOCK_GATE_DISABLE (1 << 3) | |
923 | # define OVCUNIT_CLOCK_GATE_DISABLE (1 << 2) | |
924 | # define OVUUNIT_CLOCK_GATE_DISABLE (1 << 1) | |
925 | # define ZVUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 830 */ | |
926 | # define OVLUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 845,865 */ | |
927 | ||
f0f59a00 | 928 | #define RENCLK_GATE_D1 _MMIO(0x6204) |
652c393a JB |
929 | # define BLITTER_CLOCK_GATE_DISABLE (1 << 13) /* 945GM only */ |
930 | # define MPEG_CLOCK_GATE_DISABLE (1 << 12) /* 945GM only */ | |
931 | # define PC_FE_CLOCK_GATE_DISABLE (1 << 11) | |
932 | # define PC_BE_CLOCK_GATE_DISABLE (1 << 10) | |
933 | # define WINDOWER_CLOCK_GATE_DISABLE (1 << 9) | |
934 | # define INTERPOLATOR_CLOCK_GATE_DISABLE (1 << 8) | |
935 | # define COLOR_CALCULATOR_CLOCK_GATE_DISABLE (1 << 7) | |
936 | # define MOTION_COMP_CLOCK_GATE_DISABLE (1 << 6) | |
937 | # define MAG_CLOCK_GATE_DISABLE (1 << 5) | |
646b4269 | 938 | /* This bit must be unset on 855,865 */ |
652c393a JB |
939 | # define MECI_CLOCK_GATE_DISABLE (1 << 4) |
940 | # define DCMP_CLOCK_GATE_DISABLE (1 << 3) | |
941 | # define MEC_CLOCK_GATE_DISABLE (1 << 2) | |
942 | # define MECO_CLOCK_GATE_DISABLE (1 << 1) | |
646b4269 | 943 | /* This bit must be set on 855,865. */ |
652c393a JB |
944 | # define SV_CLOCK_GATE_DISABLE (1 << 0) |
945 | # define I915_MPEG_CLOCK_GATE_DISABLE (1 << 16) | |
946 | # define I915_VLD_IP_PR_CLOCK_GATE_DISABLE (1 << 15) | |
947 | # define I915_MOTION_COMP_CLOCK_GATE_DISABLE (1 << 14) | |
948 | # define I915_BD_BF_CLOCK_GATE_DISABLE (1 << 13) | |
949 | # define I915_SF_SE_CLOCK_GATE_DISABLE (1 << 12) | |
950 | # define I915_WM_CLOCK_GATE_DISABLE (1 << 11) | |
951 | # define I915_IZ_CLOCK_GATE_DISABLE (1 << 10) | |
952 | # define I915_PI_CLOCK_GATE_DISABLE (1 << 9) | |
953 | # define I915_DI_CLOCK_GATE_DISABLE (1 << 8) | |
954 | # define I915_SH_SV_CLOCK_GATE_DISABLE (1 << 7) | |
955 | # define I915_PL_DG_QC_FT_CLOCK_GATE_DISABLE (1 << 6) | |
956 | # define I915_SC_CLOCK_GATE_DISABLE (1 << 5) | |
957 | # define I915_FL_CLOCK_GATE_DISABLE (1 << 4) | |
958 | # define I915_DM_CLOCK_GATE_DISABLE (1 << 3) | |
959 | # define I915_PS_CLOCK_GATE_DISABLE (1 << 2) | |
960 | # define I915_CC_CLOCK_GATE_DISABLE (1 << 1) | |
961 | # define I915_BY_CLOCK_GATE_DISABLE (1 << 0) | |
962 | ||
963 | # define I965_RCZ_CLOCK_GATE_DISABLE (1 << 30) | |
646b4269 | 964 | /* This bit must always be set on 965G/965GM */ |
652c393a JB |
965 | # define I965_RCC_CLOCK_GATE_DISABLE (1 << 29) |
966 | # define I965_RCPB_CLOCK_GATE_DISABLE (1 << 28) | |
967 | # define I965_DAP_CLOCK_GATE_DISABLE (1 << 27) | |
968 | # define I965_ROC_CLOCK_GATE_DISABLE (1 << 26) | |
969 | # define I965_GW_CLOCK_GATE_DISABLE (1 << 25) | |
970 | # define I965_TD_CLOCK_GATE_DISABLE (1 << 24) | |
646b4269 | 971 | /* This bit must always be set on 965G */ |
652c393a JB |
972 | # define I965_ISC_CLOCK_GATE_DISABLE (1 << 23) |
973 | # define I965_IC_CLOCK_GATE_DISABLE (1 << 22) | |
974 | # define I965_EU_CLOCK_GATE_DISABLE (1 << 21) | |
975 | # define I965_IF_CLOCK_GATE_DISABLE (1 << 20) | |
976 | # define I965_TC_CLOCK_GATE_DISABLE (1 << 19) | |
977 | # define I965_SO_CLOCK_GATE_DISABLE (1 << 17) | |
978 | # define I965_FBC_CLOCK_GATE_DISABLE (1 << 16) | |
979 | # define I965_MARI_CLOCK_GATE_DISABLE (1 << 15) | |
980 | # define I965_MASF_CLOCK_GATE_DISABLE (1 << 14) | |
981 | # define I965_MAWB_CLOCK_GATE_DISABLE (1 << 13) | |
982 | # define I965_EM_CLOCK_GATE_DISABLE (1 << 12) | |
983 | # define I965_UC_CLOCK_GATE_DISABLE (1 << 11) | |
984 | # define I965_SI_CLOCK_GATE_DISABLE (1 << 6) | |
985 | # define I965_MT_CLOCK_GATE_DISABLE (1 << 5) | |
986 | # define I965_PL_CLOCK_GATE_DISABLE (1 << 4) | |
987 | # define I965_DG_CLOCK_GATE_DISABLE (1 << 3) | |
988 | # define I965_QC_CLOCK_GATE_DISABLE (1 << 2) | |
989 | # define I965_FT_CLOCK_GATE_DISABLE (1 << 1) | |
990 | # define I965_DM_CLOCK_GATE_DISABLE (1 << 0) | |
991 | ||
f0f59a00 | 992 | #define RENCLK_GATE_D2 _MMIO(0x6208) |
652c393a JB |
993 | #define VF_UNIT_CLOCK_GATE_DISABLE (1 << 9) |
994 | #define GS_UNIT_CLOCK_GATE_DISABLE (1 << 7) | |
995 | #define CL_UNIT_CLOCK_GATE_DISABLE (1 << 6) | |
fa4f53c4 | 996 | |
f0f59a00 | 997 | #define VDECCLK_GATE_D _MMIO(0x620C) /* g4x only */ |
fa4f53c4 VS |
998 | #define VCP_UNIT_CLOCK_GATE_DISABLE (1 << 4) |
999 | ||
f0f59a00 VS |
1000 | #define RAMCLK_GATE_D _MMIO(0x6210) /* CRL only */ |
1001 | #define DEUC _MMIO(0x6214) /* CRL only */ | |
585fb111 | 1002 | |
f0f59a00 | 1003 | #define FW_BLC_SELF_VLV _MMIO(VLV_DISPLAY_BASE + 0x6500) |
5ee8ee86 | 1004 | #define FW_CSPWRDWNEN (1 << 15) |
ceb04246 | 1005 | |
f0f59a00 | 1006 | #define MI_ARB_VLV _MMIO(VLV_DISPLAY_BASE + 0x6504) |
e0d8d59b | 1007 | |
f0f59a00 | 1008 | #define CZCLK_CDCLK_FREQ_RATIO _MMIO(VLV_DISPLAY_BASE + 0x6508) |
24eb2d59 CML |
1009 | #define CDCLK_FREQ_SHIFT 4 |
1010 | #define CDCLK_FREQ_MASK (0x1f << CDCLK_FREQ_SHIFT) | |
1011 | #define CZCLK_FREQ_MASK 0xf | |
1e69cd74 | 1012 | |
f0f59a00 | 1013 | #define GCI_CONTROL _MMIO(VLV_DISPLAY_BASE + 0x650C) |
1e69cd74 VS |
1014 | #define PFI_CREDIT_63 (9 << 28) /* chv only */ |
1015 | #define PFI_CREDIT_31 (8 << 28) /* chv only */ | |
1016 | #define PFI_CREDIT(x) (((x) - 8) << 28) /* 8-15 */ | |
1017 | #define PFI_CREDIT_RESEND (1 << 27) | |
1018 | #define VGA_FAST_MODE_DISABLE (1 << 14) | |
1019 | ||
f0f59a00 | 1020 | #define GMBUSFREQ_VLV _MMIO(VLV_DISPLAY_BASE + 0x6510) |
24eb2d59 | 1021 | |
f0f59a00 | 1022 | #define PEG_BAND_GAP_DATA _MMIO(0x14d68) |
7d57382e | 1023 | |
f0f59a00 | 1024 | #define BXT_RP_STATE_CAP _MMIO(0x138170) |
9938ee2e | 1025 | #define GEN9_RP_STATE_LIMITS _MMIO(0x138148) |
3b8d8d91 | 1026 | |
835a4d18 AD |
1027 | #define MTL_RP_STATE_CAP _MMIO(0x138000) |
1028 | #define MTL_MEDIAP_STATE_CAP _MMIO(0x138020) | |
1029 | #define MTL_RP0_CAP_MASK REG_GENMASK(8, 0) | |
1030 | #define MTL_RPN_CAP_MASK REG_GENMASK(24, 16) | |
1031 | ||
1032 | #define MTL_GT_RPE_FREQUENCY _MMIO(0x13800c) | |
1033 | #define MTL_MPE_FREQUENCY _MMIO(0x13802c) | |
1034 | #define MTL_RPE_MASK REG_GENMASK(8, 0) | |
1035 | ||
fa68bff7 SS |
1036 | #define GT0_PERF_LIMIT_REASONS _MMIO(0x1381a8) |
1037 | #define GT0_PERF_LIMIT_REASONS_MASK 0xde3 | |
60017f34 AD |
1038 | #define PROCHOT_MASK REG_BIT(0) |
1039 | #define THERMAL_LIMIT_MASK REG_BIT(1) | |
1040 | #define RATL_MASK REG_BIT(5) | |
1041 | #define VR_THERMALERT_MASK REG_BIT(6) | |
1042 | #define VR_TDC_MASK REG_BIT(7) | |
1043 | #define POWER_LIMIT_4_MASK REG_BIT(8) | |
1044 | #define POWER_LIMIT_1_MASK REG_BIT(10) | |
1045 | #define POWER_LIMIT_2_MASK REG_BIT(11) | |
fe597966 | 1046 | #define GT0_PERF_LIMIT_REASONS_LOG_MASK REG_GENMASK(31, 16) |
1551b916 | 1047 | #define MTL_MEDIA_PERF_LIMIT_REASONS _MMIO(0x138030) |
3b8d8d91 | 1048 | |
f0f59a00 VS |
1049 | #define CHV_CLK_CTL1 _MMIO(0x101100) |
1050 | #define VLV_CLK_CTL2 _MMIO(0x101104) | |
e454a05d JB |
1051 | #define CLK_CTL2_CZCOUNT_30NS_SHIFT 28 |
1052 | ||
585fb111 JB |
1053 | /* |
1054 | * Overlay regs | |
1055 | */ | |
f0f59a00 VS |
1056 | #define OVADD _MMIO(0x30000) |
1057 | #define DOVSTA _MMIO(0x30008) | |
5ee8ee86 | 1058 | #define OC_BUF (0x3 << 20) |
f0f59a00 VS |
1059 | #define OGAMC5 _MMIO(0x30010) |
1060 | #define OGAMC4 _MMIO(0x30014) | |
1061 | #define OGAMC3 _MMIO(0x30018) | |
1062 | #define OGAMC2 _MMIO(0x3001c) | |
1063 | #define OGAMC1 _MMIO(0x30020) | |
1064 | #define OGAMC0 _MMIO(0x30024) | |
585fb111 | 1065 | |
d965e7ac ID |
1066 | /* |
1067 | * GEN9 clock gating regs | |
1068 | */ | |
1069 | #define GEN9_CLKGATE_DIS_0 _MMIO(0x46530) | |
0188be50 RS |
1070 | #define DARBF_GATING_DIS REG_BIT(27) |
1071 | #define MTL_PIPEDMC_GATING_DIS_A REG_BIT(15) | |
1072 | #define MTL_PIPEDMC_GATING_DIS_B REG_BIT(14) | |
1073 | #define PWM2_GATING_DIS REG_BIT(14) | |
1074 | #define PWM1_GATING_DIS REG_BIT(13) | |
d965e7ac | 1075 | |
f78d5da6 RS |
1076 | #define GEN9_CLKGATE_DIS_3 _MMIO(0x46538) |
1077 | #define TGL_VRH_GATING_DIS REG_BIT(31) | |
da942750 | 1078 | #define DPT_GATING_DIS REG_BIT(22) |
f78d5da6 | 1079 | |
6481d5ed VS |
1080 | #define GEN9_CLKGATE_DIS_4 _MMIO(0x4653C) |
1081 | #define BXT_GMBUS_GATING_DIS (1 << 14) | |
010363c4 | 1082 | #define DG2_DPFC_GATING_DIS REG_BIT(31) |
6481d5ed | 1083 | |
a8a56da7 JRS |
1084 | #define GEN9_CLKGATE_DIS_5 _MMIO(0x46540) |
1085 | #define DPCE_GATING_DIS REG_BIT(17) | |
1086 | ||
ed69cd40 ID |
1087 | #define _CLKGATE_DIS_PSL_A 0x46520 |
1088 | #define _CLKGATE_DIS_PSL_B 0x46524 | |
1089 | #define _CLKGATE_DIS_PSL_C 0x46528 | |
c4a4efa9 VS |
1090 | #define DUPS1_GATING_DIS (1 << 15) |
1091 | #define DUPS2_GATING_DIS (1 << 19) | |
1092 | #define DUPS3_GATING_DIS (1 << 23) | |
11408ea5 | 1093 | #define CURSOR_GATING_DIS REG_BIT(28) |
ed69cd40 ID |
1094 | #define DPF_GATING_DIS (1 << 10) |
1095 | #define DPF_RAM_GATING_DIS (1 << 9) | |
1096 | #define DPFR_GATING_DIS (1 << 8) | |
1097 | ||
1098 | #define CLKGATE_DIS_PSL(pipe) \ | |
1099 | _MMIO_PIPE(pipe, _CLKGATE_DIS_PSL_A, _CLKGATE_DIS_PSL_B) | |
1100 | ||
f31bccd3 ID |
1101 | #define _CLKGATE_DIS_PSL_EXT_A 0x4654C |
1102 | #define _CLKGATE_DIS_PSL_EXT_B 0x46550 | |
1103 | #define PIPEDMC_GATING_DIS REG_BIT(12) | |
1104 | ||
1105 | #define CLKGATE_DIS_PSL_EXT(pipe) \ | |
1106 | _MMIO_PIPE(pipe, _CLKGATE_DIS_PSL_EXT_A, _CLKGATE_DIS_PSL_EXT_B) | |
1107 | ||
585fb111 JB |
1108 | /* |
1109 | * Display engine regs | |
1110 | */ | |
5ac421a9 VS |
1111 | /* Pipe/transcoder A timing regs */ |
1112 | #define _TRANS_HTOTAL_A 0x60000 | |
d3944104 JN |
1113 | #define _TRANS_HTOTAL_B 0x61000 |
1114 | #define TRANS_HTOTAL(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_HTOTAL_A) | |
050db7d7 VS |
1115 | #define HTOTAL_MASK REG_GENMASK(31, 16) |
1116 | #define HTOTAL(htotal) REG_FIELD_PREP(HTOTAL_MASK, (htotal)) | |
1117 | #define HACTIVE_MASK REG_GENMASK(15, 0) | |
1118 | #define HACTIVE(hdisplay) REG_FIELD_PREP(HACTIVE_MASK, (hdisplay)) | |
d3944104 | 1119 | |
5ac421a9 | 1120 | #define _TRANS_HBLANK_A 0x60004 |
d3944104 JN |
1121 | #define _TRANS_HBLANK_B 0x61004 |
1122 | #define TRANS_HBLANK(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_HBLANK_A) | |
050db7d7 VS |
1123 | #define HBLANK_END_MASK REG_GENMASK(31, 16) |
1124 | #define HBLANK_END(hblank_end) REG_FIELD_PREP(HBLANK_END_MASK, (hblank_end)) | |
1125 | #define HBLANK_START_MASK REG_GENMASK(15, 0) | |
1126 | #define HBLANK_START(hblank_start) REG_FIELD_PREP(HBLANK_START_MASK, (hblank_start)) | |
d3944104 | 1127 | |
5ac421a9 | 1128 | #define _TRANS_HSYNC_A 0x60008 |
d3944104 JN |
1129 | #define _TRANS_HSYNC_B 0x61008 |
1130 | #define TRANS_HSYNC(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_HSYNC_A) | |
050db7d7 VS |
1131 | #define HSYNC_END_MASK REG_GENMASK(31, 16) |
1132 | #define HSYNC_END(hsync_end) REG_FIELD_PREP(HSYNC_END_MASK, (hsync_end)) | |
1133 | #define HSYNC_START_MASK REG_GENMASK(15, 0) | |
1134 | #define HSYNC_START(hsync_start) REG_FIELD_PREP(HSYNC_START_MASK, (hsync_start)) | |
d3944104 | 1135 | |
5ac421a9 | 1136 | #define _TRANS_VTOTAL_A 0x6000c |
d3944104 JN |
1137 | #define _TRANS_VTOTAL_B 0x6100c |
1138 | #define TRANS_VTOTAL(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_VTOTAL_A) | |
050db7d7 VS |
1139 | #define VTOTAL_MASK REG_GENMASK(31, 16) |
1140 | #define VTOTAL(vtotal) REG_FIELD_PREP(VTOTAL_MASK, (vtotal)) | |
1141 | #define VACTIVE_MASK REG_GENMASK(15, 0) | |
1142 | #define VACTIVE(vdisplay) REG_FIELD_PREP(VACTIVE_MASK, (vdisplay)) | |
d3944104 | 1143 | |
5ac421a9 | 1144 | #define _TRANS_VBLANK_A 0x60010 |
d3944104 JN |
1145 | #define _TRANS_VBLANK_B 0x61010 |
1146 | #define TRANS_VBLANK(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_VBLANK_A) | |
050db7d7 VS |
1147 | #define VBLANK_END_MASK REG_GENMASK(31, 16) |
1148 | #define VBLANK_END(vblank_end) REG_FIELD_PREP(VBLANK_END_MASK, (vblank_end)) | |
1149 | #define VBLANK_START_MASK REG_GENMASK(15, 0) | |
1150 | #define VBLANK_START(vblank_start) REG_FIELD_PREP(VBLANK_START_MASK, (vblank_start)) | |
d3944104 | 1151 | |
5ac421a9 | 1152 | #define _TRANS_VSYNC_A 0x60014 |
d3944104 JN |
1153 | #define _TRANS_VSYNC_B 0x61014 |
1154 | #define TRANS_VSYNC(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_VSYNC_A) | |
050db7d7 VS |
1155 | #define VSYNC_END_MASK REG_GENMASK(31, 16) |
1156 | #define VSYNC_END(vsync_end) REG_FIELD_PREP(VSYNC_END_MASK, (vsync_end)) | |
1157 | #define VSYNC_START_MASK REG_GENMASK(15, 0) | |
1158 | #define VSYNC_START(vsync_start) REG_FIELD_PREP(VSYNC_START_MASK, (vsync_start)) | |
d3944104 | 1159 | |
5ac421a9 | 1160 | #define _PIPEASRC 0x6001c |
d3944104 JN |
1161 | #define _PIPEBSRC 0x6101c |
1162 | #define PIPESRC(dev_priv, pipe) _MMIO_TRANS2(dev_priv, (pipe), _PIPEASRC) | |
62236df2 VS |
1163 | #define PIPESRC_WIDTH_MASK REG_GENMASK(31, 16) |
1164 | #define PIPESRC_WIDTH(w) REG_FIELD_PREP(PIPESRC_WIDTH_MASK, (w)) | |
1165 | #define PIPESRC_HEIGHT_MASK REG_GENMASK(15, 0) | |
1166 | #define PIPESRC_HEIGHT(h) REG_FIELD_PREP(PIPESRC_HEIGHT_MASK, (h)) | |
5ac421a9 | 1167 | |
d3944104 | 1168 | #define _BCLRPAT_A 0x60020 |
5ac421a9 | 1169 | #define _BCLRPAT_B 0x61020 |
d3944104 JN |
1170 | #define BCLRPAT(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _BCLRPAT_A) |
1171 | ||
1172 | #define _TRANS_VSYNCSHIFT_A 0x60028 | |
5ac421a9 | 1173 | #define _TRANS_VSYNCSHIFT_B 0x61028 |
d3944104 JN |
1174 | #define TRANS_VSYNCSHIFT(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_VSYNCSHIFT_A) |
1175 | ||
1176 | #define _TRANS_MULT_A 0x6002c | |
5ac421a9 | 1177 | #define _TRANS_MULT_B 0x6102c |
d3944104 | 1178 | #define TRANS_MULT(dev_priv, trans) _MMIO_TRANS2(dev_priv, (trans), _TRANS_MULT_A) |
a57c774a | 1179 | |
585fb111 | 1180 | /* Hotplug control (945+ only) */ |
8232a3bf | 1181 | #define PORT_HOTPLUG_EN(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61110) |
26739f12 DV |
1182 | #define PORTB_HOTPLUG_INT_EN (1 << 29) |
1183 | #define PORTC_HOTPLUG_INT_EN (1 << 28) | |
1184 | #define PORTD_HOTPLUG_INT_EN (1 << 27) | |
585fb111 JB |
1185 | #define SDVOB_HOTPLUG_INT_EN (1 << 26) |
1186 | #define SDVOC_HOTPLUG_INT_EN (1 << 25) | |
1187 | #define TV_HOTPLUG_INT_EN (1 << 18) | |
1188 | #define CRT_HOTPLUG_INT_EN (1 << 9) | |
e5868a31 EE |
1189 | #define HOTPLUG_INT_EN_MASK (PORTB_HOTPLUG_INT_EN | \ |
1190 | PORTC_HOTPLUG_INT_EN | \ | |
1191 | PORTD_HOTPLUG_INT_EN | \ | |
1192 | SDVOC_HOTPLUG_INT_EN | \ | |
1193 | SDVOB_HOTPLUG_INT_EN | \ | |
1194 | CRT_HOTPLUG_INT_EN) | |
585fb111 | 1195 | #define CRT_HOTPLUG_FORCE_DETECT (1 << 3) |
771cb081 ZY |
1196 | #define CRT_HOTPLUG_ACTIVATION_PERIOD_32 (0 << 8) |
1197 | /* must use period 64 on GM45 according to docs */ | |
1198 | #define CRT_HOTPLUG_ACTIVATION_PERIOD_64 (1 << 8) | |
1199 | #define CRT_HOTPLUG_DAC_ON_TIME_2M (0 << 7) | |
1200 | #define CRT_HOTPLUG_DAC_ON_TIME_4M (1 << 7) | |
1201 | #define CRT_HOTPLUG_VOLTAGE_COMPARE_40 (0 << 5) | |
1202 | #define CRT_HOTPLUG_VOLTAGE_COMPARE_50 (1 << 5) | |
1203 | #define CRT_HOTPLUG_VOLTAGE_COMPARE_60 (2 << 5) | |
1204 | #define CRT_HOTPLUG_VOLTAGE_COMPARE_70 (3 << 5) | |
1205 | #define CRT_HOTPLUG_VOLTAGE_COMPARE_MASK (3 << 5) | |
1206 | #define CRT_HOTPLUG_DETECT_DELAY_1G (0 << 4) | |
1207 | #define CRT_HOTPLUG_DETECT_DELAY_2G (1 << 4) | |
1208 | #define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2) | |
1209 | #define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2) | |
585fb111 | 1210 | |
201008c4 | 1211 | #define PORT_HOTPLUG_STAT(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61114) |
4b736ed4 | 1212 | /* HDMI/DP bits are g4x+ */ |
0780cd36 | 1213 | #define PORTD_HOTPLUG_LIVE_STATUS_G4X (1 << 27) |
232a6ee9 | 1214 | #define PORTC_HOTPLUG_LIVE_STATUS_G4X (1 << 28) |
0780cd36 | 1215 | #define PORTB_HOTPLUG_LIVE_STATUS_G4X (1 << 29) |
26739f12 | 1216 | #define PORTD_HOTPLUG_INT_STATUS (3 << 21) |
a211b497 DV |
1217 | #define PORTD_HOTPLUG_INT_LONG_PULSE (2 << 21) |
1218 | #define PORTD_HOTPLUG_INT_SHORT_PULSE (1 << 21) | |
26739f12 | 1219 | #define PORTC_HOTPLUG_INT_STATUS (3 << 19) |
a211b497 DV |
1220 | #define PORTC_HOTPLUG_INT_LONG_PULSE (2 << 19) |
1221 | #define PORTC_HOTPLUG_INT_SHORT_PULSE (1 << 19) | |
26739f12 | 1222 | #define PORTB_HOTPLUG_INT_STATUS (3 << 17) |
a211b497 DV |
1223 | #define PORTB_HOTPLUG_INT_LONG_PULSE (2 << 17) |
1224 | #define PORTB_HOTPLUG_INT_SHORT_PLUSE (1 << 17) | |
084b612e | 1225 | /* CRT/TV common between gen3+ */ |
585fb111 JB |
1226 | #define CRT_HOTPLUG_INT_STATUS (1 << 11) |
1227 | #define TV_HOTPLUG_INT_STATUS (1 << 10) | |
1228 | #define CRT_HOTPLUG_MONITOR_MASK (3 << 8) | |
1229 | #define CRT_HOTPLUG_MONITOR_COLOR (3 << 8) | |
1230 | #define CRT_HOTPLUG_MONITOR_MONO (2 << 8) | |
1231 | #define CRT_HOTPLUG_MONITOR_NONE (0 << 8) | |
4aeebd74 DV |
1232 | #define DP_AUX_CHANNEL_D_INT_STATUS_G4X (1 << 6) |
1233 | #define DP_AUX_CHANNEL_C_INT_STATUS_G4X (1 << 5) | |
1234 | #define DP_AUX_CHANNEL_B_INT_STATUS_G4X (1 << 4) | |
bfbdb420 ID |
1235 | #define DP_AUX_CHANNEL_MASK_INT_STATUS_G4X (7 << 4) |
1236 | ||
084b612e CW |
1237 | /* SDVO is different across gen3/4 */ |
1238 | #define SDVOC_HOTPLUG_INT_STATUS_G4X (1 << 3) | |
1239 | #define SDVOB_HOTPLUG_INT_STATUS_G4X (1 << 2) | |
4f7fd709 DV |
1240 | /* |
1241 | * Bspec seems to be seriously misleaded about the SDVO hpd bits on i965g/gm, | |
1242 | * since reality corrobates that they're the same as on gen3. But keep these | |
1243 | * bits here (and the comment!) to help any other lost wanderers back onto the | |
1244 | * right tracks. | |
1245 | */ | |
084b612e CW |
1246 | #define SDVOC_HOTPLUG_INT_STATUS_I965 (3 << 4) |
1247 | #define SDVOB_HOTPLUG_INT_STATUS_I965 (3 << 2) | |
1248 | #define SDVOC_HOTPLUG_INT_STATUS_I915 (1 << 7) | |
1249 | #define SDVOB_HOTPLUG_INT_STATUS_I915 (1 << 6) | |
e5868a31 EE |
1250 | #define HOTPLUG_INT_STATUS_G4X (CRT_HOTPLUG_INT_STATUS | \ |
1251 | SDVOB_HOTPLUG_INT_STATUS_G4X | \ | |
1252 | SDVOC_HOTPLUG_INT_STATUS_G4X | \ | |
1253 | PORTB_HOTPLUG_INT_STATUS | \ | |
1254 | PORTC_HOTPLUG_INT_STATUS | \ | |
1255 | PORTD_HOTPLUG_INT_STATUS) | |
e5868a31 EE |
1256 | |
1257 | #define HOTPLUG_INT_STATUS_I915 (CRT_HOTPLUG_INT_STATUS | \ | |
1258 | SDVOB_HOTPLUG_INT_STATUS_I915 | \ | |
1259 | SDVOC_HOTPLUG_INT_STATUS_I915 | \ | |
1260 | PORTB_HOTPLUG_INT_STATUS | \ | |
1261 | PORTC_HOTPLUG_INT_STATUS | \ | |
1262 | PORTD_HOTPLUG_INT_STATUS) | |
585fb111 | 1263 | |
c20cd312 PZ |
1264 | /* SDVO and HDMI port control. |
1265 | * The same register may be used for SDVO or HDMI */ | |
f0f59a00 VS |
1266 | #define _GEN3_SDVOB 0x61140 |
1267 | #define _GEN3_SDVOC 0x61160 | |
1268 | #define GEN3_SDVOB _MMIO(_GEN3_SDVOB) | |
1269 | #define GEN3_SDVOC _MMIO(_GEN3_SDVOC) | |
c20cd312 PZ |
1270 | #define GEN4_HDMIB GEN3_SDVOB |
1271 | #define GEN4_HDMIC GEN3_SDVOC | |
f0f59a00 VS |
1272 | #define VLV_HDMIB _MMIO(VLV_DISPLAY_BASE + 0x61140) |
1273 | #define VLV_HDMIC _MMIO(VLV_DISPLAY_BASE + 0x61160) | |
1274 | #define CHV_HDMID _MMIO(VLV_DISPLAY_BASE + 0x6116C) | |
1275 | #define PCH_SDVOB _MMIO(0xe1140) | |
c20cd312 | 1276 | #define PCH_HDMIB PCH_SDVOB |
f0f59a00 VS |
1277 | #define PCH_HDMIC _MMIO(0xe1150) |
1278 | #define PCH_HDMID _MMIO(0xe1160) | |
c20cd312 | 1279 | |
f0f59a00 | 1280 | #define PORT_DFT_I9XX _MMIO(0x61150) |
84093603 | 1281 | #define DC_BALANCE_RESET (1 << 25) |
c06387ab | 1282 | #define PORT_DFT2_G4X(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61154) |
84093603 | 1283 | #define DC_BALANCE_RESET_VLV (1 << 31) |
eb736679 | 1284 | #define PIPE_SCRAMBLE_RESET_MASK ((1 << 14) | (0x3 << 0)) |
51707f22 VS |
1285 | #define PIPE_C_SCRAMBLE_RESET REG_BIT(14) /* chv */ |
1286 | #define PIPE_B_SCRAMBLE_RESET REG_BIT(1) | |
1287 | #define PIPE_A_SCRAMBLE_RESET REG_BIT(0) | |
84093603 | 1288 | |
c20cd312 PZ |
1289 | /* Gen 3 SDVO bits: */ |
1290 | #define SDVO_ENABLE (1 << 31) | |
76203467 | 1291 | #define SDVO_PIPE_SEL_SHIFT 30 |
dc0fa718 | 1292 | #define SDVO_PIPE_SEL_MASK (1 << 30) |
76203467 | 1293 | #define SDVO_PIPE_SEL(pipe) ((pipe) << 30) |
c20cd312 PZ |
1294 | #define SDVO_STALL_SELECT (1 << 29) |
1295 | #define SDVO_INTERRUPT_ENABLE (1 << 26) | |
646b4269 | 1296 | /* |
585fb111 | 1297 | * 915G/GM SDVO pixel multiplier. |
585fb111 | 1298 | * Programmed value is multiplier - 1, up to 5x. |
585fb111 JB |
1299 | * \sa DPLL_MD_UDI_MULTIPLIER_MASK |
1300 | */ | |
c20cd312 | 1301 | #define SDVO_PORT_MULTIPLY_MASK (7 << 23) |
585fb111 | 1302 | #define SDVO_PORT_MULTIPLY_SHIFT 23 |
c20cd312 PZ |
1303 | #define SDVO_PHASE_SELECT_MASK (15 << 19) |
1304 | #define SDVO_PHASE_SELECT_DEFAULT (6 << 19) | |
1305 | #define SDVO_CLOCK_OUTPUT_INVERT (1 << 18) | |
1306 | #define SDVOC_GANG_MODE (1 << 16) /* Port C only */ | |
1307 | #define SDVO_BORDER_ENABLE (1 << 7) /* SDVO only */ | |
1308 | #define SDVOB_PCIE_CONCURRENCY (1 << 3) /* Port B only */ | |
1309 | #define SDVO_DETECTED (1 << 2) | |
585fb111 | 1310 | /* Bits to be preserved when writing */ |
c20cd312 PZ |
1311 | #define SDVOB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14) | \ |
1312 | SDVO_INTERRUPT_ENABLE) | |
1313 | #define SDVOC_PRESERVE_MASK ((1 << 17) | SDVO_INTERRUPT_ENABLE) | |
1314 | ||
1315 | /* Gen 4 SDVO/HDMI bits: */ | |
4f3a8bc7 | 1316 | #define SDVO_COLOR_FORMAT_8bpc (0 << 26) |
18442d08 | 1317 | #define SDVO_COLOR_FORMAT_MASK (7 << 26) |
c20cd312 PZ |
1318 | #define SDVO_ENCODING_SDVO (0 << 10) |
1319 | #define SDVO_ENCODING_HDMI (2 << 10) | |
dc0fa718 PZ |
1320 | #define HDMI_MODE_SELECT_HDMI (1 << 9) /* HDMI only */ |
1321 | #define HDMI_MODE_SELECT_DVI (0 << 9) /* HDMI only */ | |
4f3a8bc7 | 1322 | #define HDMI_COLOR_RANGE_16_235 (1 << 8) /* HDMI only */ |
dd6090f8 | 1323 | #define HDMI_AUDIO_ENABLE (1 << 6) /* HDMI only */ |
c20cd312 PZ |
1324 | /* VSYNC/HSYNC bits new with 965, default is to be set */ |
1325 | #define SDVO_VSYNC_ACTIVE_HIGH (1 << 4) | |
1326 | #define SDVO_HSYNC_ACTIVE_HIGH (1 << 3) | |
1327 | ||
1328 | /* Gen 5 (IBX) SDVO/HDMI bits: */ | |
4f3a8bc7 | 1329 | #define HDMI_COLOR_FORMAT_12bpc (3 << 26) /* HDMI only */ |
c20cd312 PZ |
1330 | #define SDVOB_HOTPLUG_ENABLE (1 << 23) /* SDVO only */ |
1331 | ||
1332 | /* Gen 6 (CPT) SDVO/HDMI bits: */ | |
76203467 | 1333 | #define SDVO_PIPE_SEL_SHIFT_CPT 29 |
dc0fa718 | 1334 | #define SDVO_PIPE_SEL_MASK_CPT (3 << 29) |
76203467 | 1335 | #define SDVO_PIPE_SEL_CPT(pipe) ((pipe) << 29) |
c20cd312 | 1336 | |
44f37d1f | 1337 | /* CHV SDVO/HDMI bits: */ |
76203467 | 1338 | #define SDVO_PIPE_SEL_SHIFT_CHV 24 |
44f37d1f | 1339 | #define SDVO_PIPE_SEL_MASK_CHV (3 << 24) |
76203467 | 1340 | #define SDVO_PIPE_SEL_CHV(pipe) ((pipe) << 24) |
44f37d1f | 1341 | |
3c17fe4b | 1342 | /* Video Data Island Packet control */ |
f0f59a00 | 1343 | #define VIDEO_DIP_DATA _MMIO(0x61178) |
fd0753cf | 1344 | /* Read the description of VIDEO_DIP_DATA (before Haswell) or VIDEO_DIP_ECC |
adf00b26 PZ |
1345 | * (Haswell and newer) to see which VIDEO_DIP_DATA byte corresponds to each byte |
1346 | * of the infoframe structure specified by CEA-861. */ | |
1347 | #define VIDEO_DIP_DATA_SIZE 32 | |
12ea8929 | 1348 | #define VIDEO_DIP_ASYNC_DATA_SIZE 36 |
922430dd | 1349 | #define VIDEO_DIP_GMP_DATA_SIZE 36 |
2b28bb1b | 1350 | #define VIDEO_DIP_VSC_DATA_SIZE 36 |
4c614831 | 1351 | #define VIDEO_DIP_PPS_DATA_SIZE 132 |
f0f59a00 | 1352 | #define VIDEO_DIP_CTL _MMIO(0x61170) |
2da8af54 | 1353 | /* Pre HSW: */ |
3c17fe4b | 1354 | #define VIDEO_DIP_ENABLE (1 << 31) |
822cdc52 | 1355 | #define VIDEO_DIP_PORT(port) ((port) << 29) |
3e6e6395 | 1356 | #define VIDEO_DIP_PORT_MASK (3 << 29) |
5cb3c1a1 | 1357 | #define VIDEO_DIP_ENABLE_GCP (1 << 25) /* ilk+ */ |
3c17fe4b DH |
1358 | #define VIDEO_DIP_ENABLE_AVI (1 << 21) |
1359 | #define VIDEO_DIP_ENABLE_VENDOR (2 << 21) | |
5cb3c1a1 | 1360 | #define VIDEO_DIP_ENABLE_GAMUT (4 << 21) /* ilk+ */ |
3c17fe4b DH |
1361 | #define VIDEO_DIP_ENABLE_SPD (8 << 21) |
1362 | #define VIDEO_DIP_SELECT_AVI (0 << 19) | |
1363 | #define VIDEO_DIP_SELECT_VENDOR (1 << 19) | |
5cb3c1a1 | 1364 | #define VIDEO_DIP_SELECT_GAMUT (2 << 19) |
3c17fe4b | 1365 | #define VIDEO_DIP_SELECT_SPD (3 << 19) |
45187ace | 1366 | #define VIDEO_DIP_SELECT_MASK (3 << 19) |
3c17fe4b DH |
1367 | #define VIDEO_DIP_FREQ_ONCE (0 << 16) |
1368 | #define VIDEO_DIP_FREQ_VSYNC (1 << 16) | |
1369 | #define VIDEO_DIP_FREQ_2VSYNC (2 << 16) | |
60c5ea2d | 1370 | #define VIDEO_DIP_FREQ_MASK (3 << 16) |
2da8af54 | 1371 | /* HSW and later: */ |
44b42ebf | 1372 | #define VIDEO_DIP_ENABLE_DRM_GLK (1 << 28) |
a670be33 DP |
1373 | #define PSR_VSC_BIT_7_SET (1 << 27) |
1374 | #define VSC_SELECT_MASK (0x3 << 25) | |
1375 | #define VSC_SELECT_SHIFT 25 | |
1376 | #define VSC_DIP_HW_HEA_DATA (0 << 25) | |
1377 | #define VSC_DIP_HW_HEA_SW_DATA (1 << 25) | |
1378 | #define VSC_DIP_HW_DATA_SW_HEA (2 << 25) | |
1379 | #define VSC_DIP_SW_HEA_DATA (3 << 25) | |
1380 | #define VDIP_ENABLE_PPS (1 << 24) | |
0dd87d20 PZ |
1381 | #define VIDEO_DIP_ENABLE_VSC_HSW (1 << 20) |
1382 | #define VIDEO_DIP_ENABLE_GCP_HSW (1 << 16) | |
2da8af54 | 1383 | #define VIDEO_DIP_ENABLE_AVI_HSW (1 << 12) |
0dd87d20 PZ |
1384 | #define VIDEO_DIP_ENABLE_VS_HSW (1 << 8) |
1385 | #define VIDEO_DIP_ENABLE_GMP_HSW (1 << 4) | |
2da8af54 | 1386 | #define VIDEO_DIP_ENABLE_SPD_HSW (1 << 0) |
12ea8929 MG |
1387 | /* ADL and later: */ |
1388 | #define VIDEO_DIP_ENABLE_AS_ADL REG_BIT(23) | |
3c17fe4b | 1389 | |
f0f59a00 | 1390 | #define PCH_GTC_CTL _MMIO(0xe7000) |
be256dc7 PZ |
1391 | #define PCH_GTC_ENABLE (1 << 31) |
1392 | ||
040d87f1 | 1393 | /* Display Port */ |
f0f59a00 VS |
1394 | #define DP_A _MMIO(0x64000) /* eDP */ |
1395 | #define DP_B _MMIO(0x64100) | |
1396 | #define DP_C _MMIO(0x64200) | |
1397 | #define DP_D _MMIO(0x64300) | |
f0f59a00 VS |
1398 | #define VLV_DP_B _MMIO(VLV_DISPLAY_BASE + 0x64100) |
1399 | #define VLV_DP_C _MMIO(VLV_DISPLAY_BASE + 0x64200) | |
1400 | #define CHV_DP_D _MMIO(VLV_DISPLAY_BASE + 0x64300) | |
1503bab7 JN |
1401 | #define DP_PORT_EN REG_BIT(31) |
1402 | #define DP_PIPE_SEL_MASK REG_GENMASK(30, 30) | |
1403 | #define DP_PIPE_SEL(pipe) REG_FIELD_PREP(DP_PIPE_SEL_MASK, (pipe)) | |
1404 | #define DP_PIPE_SEL_MASK_IVB REG_GENMASK(30, 29) | |
1405 | #define DP_PIPE_SEL_IVB(pipe) REG_FIELD_PREP(DP_PIPE_SEL_MASK_IVB, (pipe)) | |
59b74c49 | 1406 | #define DP_PIPE_SEL_SHIFT_CHV 16 |
1503bab7 JN |
1407 | #define DP_PIPE_SEL_MASK_CHV REG_GENMASK(17, 16) |
1408 | #define DP_PIPE_SEL_CHV(pipe) REG_FIELD_PREP(DP_PIPE_SEL_MASK_CHV, (pipe)) | |
1409 | #define DP_LINK_TRAIN_MASK REG_GENMASK(29, 28) | |
1410 | #define DP_LINK_TRAIN_PAT_1 REG_FIELD_PREP(DP_LINK_TRAIN_MASK, 0) | |
1411 | #define DP_LINK_TRAIN_PAT_2 REG_FIELD_PREP(DP_LINK_TRAIN_MASK, 1) | |
1412 | #define DP_LINK_TRAIN_PAT_IDLE REG_FIELD_PREP(DP_LINK_TRAIN_MASK, 2) | |
1413 | #define DP_LINK_TRAIN_OFF REG_FIELD_PREP(DP_LINK_TRAIN_MASK, 3) | |
1414 | #define DP_LINK_TRAIN_MASK_CPT REG_GENMASK(10, 8) | |
1415 | #define DP_LINK_TRAIN_PAT_1_CPT REG_FIELD_PREP(DP_LINK_TRAIN_MASK_CPT, 0) | |
1416 | #define DP_LINK_TRAIN_PAT_2_CPT REG_FIELD_PREP(DP_LINK_TRAIN_MASK_CPT, 1) | |
1417 | #define DP_LINK_TRAIN_PAT_IDLE_CPT REG_FIELD_PREP(DP_LINK_TRAIN_MASK_CPT, 2) | |
1418 | #define DP_LINK_TRAIN_OFF_CPT REG_FIELD_PREP(DP_LINK_TRAIN_MASK_CPT, 3) | |
1419 | #define DP_VOLTAGE_MASK REG_GENMASK(27, 25) | |
1420 | #define DP_VOLTAGE_0_4 REG_FIELD_PREP(DP_VOLTAGE_MASK, 0) | |
1421 | #define DP_VOLTAGE_0_6 REG_FIELD_PREP(DP_VOLTAGE_MASK, 1) | |
1422 | #define DP_VOLTAGE_0_8 REG_FIELD_PREP(DP_VOLTAGE_MASK, 2) | |
1423 | #define DP_VOLTAGE_1_2 REG_FIELD_PREP(DP_VOLTAGE_MASK, 3) | |
1424 | #define DP_PRE_EMPHASIS_MASK REG_GENMASK(24, 22) | |
1425 | #define DP_PRE_EMPHASIS_0 REG_FIELD_PREP(DP_PRE_EMPHASIS_MASK, 0) | |
1426 | #define DP_PRE_EMPHASIS_3_5 REG_FIELD_PREP(DP_PRE_EMPHASIS_MASK, 1) | |
1427 | #define DP_PRE_EMPHASIS_6 REG_FIELD_PREP(DP_PRE_EMPHASIS_MASK, 2) | |
1428 | #define DP_PRE_EMPHASIS_9_5 REG_FIELD_PREP(DP_PRE_EMPHASIS_MASK, 3) | |
1429 | #define DP_PORT_WIDTH_MASK REG_GENMASK(21, 19) | |
1430 | #define DP_PORT_WIDTH(width) REG_FIELD_PREP(DP_PORT_WIDTH_MASK, (width) - 1) | |
1431 | #define DP_ENHANCED_FRAMING REG_BIT(18) | |
1432 | #define EDP_PLL_FREQ_MASK REG_GENMASK(17, 16) | |
1433 | #define EDP_PLL_FREQ_270MHZ REG_FIELD_PREP(EDP_PLL_FREQ_MASK, 0) | |
1434 | #define EDP_PLL_FREQ_162MHZ REG_FIELD_PREP(EDP_PLL_FREQ_MASK, 1) | |
1435 | #define DP_PORT_REVERSAL REG_BIT(15) | |
1436 | #define EDP_PLL_ENABLE REG_BIT(14) | |
1437 | #define DP_CLOCK_OUTPUT_ENABLE REG_BIT(13) | |
1438 | #define DP_SCRAMBLING_DISABLE REG_BIT(12) | |
1439 | #define DP_SCRAMBLING_DISABLE_ILK REG_BIT(7) | |
1440 | #define DP_COLOR_RANGE_16_235 REG_BIT(8) | |
1441 | #define DP_AUDIO_OUTPUT_ENABLE REG_BIT(6) | |
1442 | #define DP_SYNC_VS_HIGH REG_BIT(4) | |
1443 | #define DP_SYNC_HS_HIGH REG_BIT(3) | |
1444 | #define DP_DETECTED REG_BIT(2) | |
040d87f1 | 1445 | |
040d87f1 KP |
1446 | /* |
1447 | * Computing GMCH M and N values for the Display Port link | |
1448 | * | |
1449 | * GMCH M/N = dot clock * bytes per pixel / ls_clk * # of lanes | |
1450 | * | |
1451 | * ls_clk (we assume) is the DP link clock (1.62 or 2.7 GHz) | |
1452 | * | |
1453 | * The GMCH value is used internally | |
1454 | * | |
1455 | * bytes_per_pixel is the number of bytes coming out of the plane, | |
1456 | * which is after the LUTs, so we want the bytes for our color format. | |
1457 | * For our current usage, this is always 3, one byte for R, G and B. | |
1458 | */ | |
e3b95f1e DV |
1459 | #define _PIPEA_DATA_M_G4X 0x70050 |
1460 | #define _PIPEB_DATA_M_G4X 0x71050 | |
2575db50 | 1461 | #define PIPE_DATA_M_G4X(pipe) _MMIO_PIPE(pipe, _PIPEA_DATA_M_G4X, _PIPEB_DATA_M_G4X) |
040d87f1 | 1462 | /* Transfer unit size for display port - 1, default is 0x3f (for TU size 64) */ |
c65b3aff VS |
1463 | #define TU_SIZE_MASK REG_GENMASK(30, 25) |
1464 | #define TU_SIZE(x) REG_FIELD_PREP(TU_SIZE_MASK, (x) - 1) /* default size 64 */ | |
c65b3aff | 1465 | #define DATA_LINK_M_N_MASK REG_GENMASK(23, 0) |
a65851af | 1466 | #define DATA_LINK_N_MAX (0x800000) |
040d87f1 | 1467 | |
e3b95f1e DV |
1468 | #define _PIPEA_DATA_N_G4X 0x70054 |
1469 | #define _PIPEB_DATA_N_G4X 0x71054 | |
2575db50 | 1470 | #define PIPE_DATA_N_G4X(pipe) _MMIO_PIPE(pipe, _PIPEA_DATA_N_G4X, _PIPEB_DATA_N_G4X) |
040d87f1 KP |
1471 | |
1472 | /* | |
1473 | * Computing Link M and N values for the Display Port link | |
1474 | * | |
1475 | * Link M / N = pixel_clock / ls_clk | |
1476 | * | |
1477 | * (the DP spec calls pixel_clock the 'strm_clk') | |
1478 | * | |
1479 | * The Link value is transmitted in the Main Stream | |
1480 | * Attributes and VB-ID. | |
1481 | */ | |
e3b95f1e DV |
1482 | #define _PIPEA_LINK_M_G4X 0x70060 |
1483 | #define _PIPEB_LINK_M_G4X 0x71060 | |
2575db50 JN |
1484 | #define PIPE_LINK_M_G4X(pipe) _MMIO_PIPE(pipe, _PIPEA_LINK_M_G4X, _PIPEB_LINK_M_G4X) |
1485 | ||
e3b95f1e DV |
1486 | #define _PIPEA_LINK_N_G4X 0x70064 |
1487 | #define _PIPEB_LINK_N_G4X 0x71064 | |
f0f59a00 | 1488 | #define PIPE_LINK_N_G4X(pipe) _MMIO_PIPE(pipe, _PIPEA_LINK_N_G4X, _PIPEB_LINK_N_G4X) |
9db4a9c7 | 1489 | |
585fb111 | 1490 | /* Pipe A */ |
a57c774a | 1491 | #define _PIPEADSL 0x70000 |
2ac6a84b | 1492 | #define PIPEDSL(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEADSL) |
96e4c3c0 VS |
1493 | #define PIPEDSL_CURR_FIELD REG_BIT(31) /* ctg+ */ |
1494 | #define PIPEDSL_LINE_MASK REG_GENMASK(19, 0) | |
2ac6a84b | 1495 | |
3eb08ea5 | 1496 | #define _TRANSACONF 0x70008 |
2ac6a84b | 1497 | #define TRANSCONF(dev_priv, trans) _MMIO_PIPE2(dev_priv, (trans), _TRANSACONF) |
3eb08ea5 VS |
1498 | #define TRANSCONF_ENABLE REG_BIT(31) |
1499 | #define TRANSCONF_DOUBLE_WIDE REG_BIT(30) /* pre-i965 */ | |
1500 | #define TRANSCONF_STATE_ENABLE REG_BIT(30) /* i965+ */ | |
1501 | #define TRANSCONF_DSI_PLL_LOCKED REG_BIT(29) /* vlv & pipe A only */ | |
1502 | #define TRANSCONF_FRAME_START_DELAY_MASK REG_GENMASK(28, 27) /* pre-hsw */ | |
1503 | #define TRANSCONF_FRAME_START_DELAY(x) REG_FIELD_PREP(TRANSCONF_FRAME_START_DELAY_MASK, (x)) /* pre-hsw: 0-3 */ | |
1504 | #define TRANSCONF_PIPE_LOCKED REG_BIT(25) | |
1505 | #define TRANSCONF_FORCE_BORDER REG_BIT(25) | |
1506 | #define TRANSCONF_GAMMA_MODE_MASK_I9XX REG_BIT(24) /* gmch */ | |
1507 | #define TRANSCONF_GAMMA_MODE_MASK_ILK REG_GENMASK(25, 24) /* ilk-ivb */ | |
1508 | #define TRANSCONF_GAMMA_MODE_8BIT REG_FIELD_PREP(TRANSCONF_GAMMA_MODE_MASK, 0) | |
1509 | #define TRANSCONF_GAMMA_MODE_10BIT REG_FIELD_PREP(TRANSCONF_GAMMA_MODE_MASK, 1) | |
1510 | #define TRANSCONF_GAMMA_MODE_12BIT REG_FIELD_PREP(TRANSCONF_GAMMA_MODE_MASK_ILK, 2) /* ilk-ivb */ | |
1511 | #define TRANSCONF_GAMMA_MODE_SPLIT REG_FIELD_PREP(TRANSCONF_GAMMA_MODE_MASK_ILK, 3) /* ivb */ | |
1512 | #define TRANSCONF_GAMMA_MODE(x) REG_FIELD_PREP(TRANSCONF_GAMMA_MODE_MASK_ILK, (x)) /* pass in GAMMA_MODE_MODE_* */ | |
1513 | #define TRANSCONF_INTERLACE_MASK REG_GENMASK(23, 21) /* gen3+ */ | |
1514 | #define TRANSCONF_INTERLACE_PROGRESSIVE REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK, 0) | |
1515 | #define TRANSCONF_INTERLACE_W_SYNC_SHIFT_PANEL REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK, 4) /* gen4 only */ | |
1516 | #define TRANSCONF_INTERLACE_W_SYNC_SHIFT REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK, 5) /* gen4 only */ | |
1517 | #define TRANSCONF_INTERLACE_W_FIELD_INDICATION REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK, 6) | |
1518 | #define TRANSCONF_INTERLACE_FIELD_0_ONLY REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK, 7) /* gen3 only */ | |
6a6d914d VS |
1519 | /* |
1520 | * ilk+: PF/D=progressive fetch/display, IF/D=interlaced fetch/display, | |
1521 | * DBL=power saving pixel doubling, PF-ID* requires panel fitter | |
1522 | */ | |
3eb08ea5 VS |
1523 | #define TRANSCONF_INTERLACE_MASK_ILK REG_GENMASK(23, 21) /* ilk+ */ |
1524 | #define TRANSCONF_INTERLACE_MASK_HSW REG_GENMASK(22, 21) /* hsw+ */ | |
1525 | #define TRANSCONF_INTERLACE_PF_PD_ILK REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK_ILK, 0) | |
1526 | #define TRANSCONF_INTERLACE_PF_ID_ILK REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK_ILK, 1) | |
1527 | #define TRANSCONF_INTERLACE_IF_ID_ILK REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK_ILK, 3) | |
1528 | #define TRANSCONF_INTERLACE_IF_ID_DBL_ILK REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK_ILK, 4) /* ilk/snb only */ | |
1529 | #define TRANSCONF_INTERLACE_PF_ID_DBL_ILK REG_FIELD_PREP(TRANSCONF_INTERLACE_MASK_ILK, 5) /* ilk/snb only */ | |
1530 | #define TRANSCONF_REFRESH_RATE_ALT_ILK REG_BIT(20) | |
1531 | #define TRANSCONF_MSA_TIMING_DELAY_MASK REG_GENMASK(19, 18) /* ilk/snb/ivb */ | |
1532 | #define TRANSCONF_MSA_TIMING_DELAY(x) REG_FIELD_PREP(TRANSCONF_MSA_TIMING_DELAY_MASK, (x)) | |
1533 | #define TRANSCONF_CXSR_DOWNCLOCK REG_BIT(16) | |
47d56cad | 1534 | #define TRANSCONF_WGC_ENABLE REG_BIT(15) /* vlv/chv only */ |
3eb08ea5 VS |
1535 | #define TRANSCONF_REFRESH_RATE_ALT_VLV REG_BIT(14) |
1536 | #define TRANSCONF_COLOR_RANGE_SELECT REG_BIT(13) | |
1537 | #define TRANSCONF_OUTPUT_COLORSPACE_MASK REG_GENMASK(12, 11) /* ilk-ivb */ | |
1538 | #define TRANSCONF_OUTPUT_COLORSPACE_RGB REG_FIELD_PREP(TRANSCONF_OUTPUT_COLORSPACE_MASK, 0) /* ilk-ivb */ | |
1539 | #define TRANSCONF_OUTPUT_COLORSPACE_YUV601 REG_FIELD_PREP(TRANSCONF_OUTPUT_COLORSPACE_MASK, 1) /* ilk-ivb */ | |
1540 | #define TRANSCONF_OUTPUT_COLORSPACE_YUV709 REG_FIELD_PREP(TRANSCONF_OUTPUT_COLORSPACE_MASK, 2) /* ilk-ivb */ | |
1541 | #define TRANSCONF_OUTPUT_COLORSPACE_YUV_HSW REG_BIT(11) /* hsw only */ | |
1542 | #define TRANSCONF_BPC_MASK REG_GENMASK(7, 5) /* ctg-ivb */ | |
1543 | #define TRANSCONF_BPC_8 REG_FIELD_PREP(TRANSCONF_BPC_MASK, 0) | |
1544 | #define TRANSCONF_BPC_10 REG_FIELD_PREP(TRANSCONF_BPC_MASK, 1) | |
1545 | #define TRANSCONF_BPC_6 REG_FIELD_PREP(TRANSCONF_BPC_MASK, 2) | |
1546 | #define TRANSCONF_BPC_12 REG_FIELD_PREP(TRANSCONF_BPC_MASK, 3) | |
1547 | #define TRANSCONF_DITHER_EN REG_BIT(4) | |
1548 | #define TRANSCONF_DITHER_TYPE_MASK REG_GENMASK(3, 2) | |
1549 | #define TRANSCONF_DITHER_TYPE_SP REG_FIELD_PREP(TRANSCONF_DITHER_TYPE_MASK, 0) | |
1550 | #define TRANSCONF_DITHER_TYPE_ST1 REG_FIELD_PREP(TRANSCONF_DITHER_TYPE_MASK, 1) | |
1551 | #define TRANSCONF_DITHER_TYPE_ST2 REG_FIELD_PREP(TRANSCONF_DITHER_TYPE_MASK, 2) | |
1552 | #define TRANSCONF_DITHER_TYPE_TEMP REG_FIELD_PREP(TRANSCONF_DITHER_TYPE_MASK, 3) | |
377cc98b ID |
1553 | #define TRANSCONF_PIXEL_COUNT_SCALING_MASK REG_GENMASK(1, 0) |
1554 | #define TRANSCONF_PIXEL_COUNT_SCALING_X4 1 | |
1555 | ||
a57c774a | 1556 | #define _PIPEASTAT 0x70024 |
2ac6a84b | 1557 | #define PIPESTAT(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEASTAT) |
5ee8ee86 PZ |
1558 | #define PIPE_FIFO_UNDERRUN_STATUS (1UL << 31) |
1559 | #define SPRITE1_FLIP_DONE_INT_EN_VLV (1UL << 30) | |
1560 | #define PIPE_CRC_ERROR_ENABLE (1UL << 29) | |
1561 | #define PIPE_CRC_DONE_ENABLE (1UL << 28) | |
1562 | #define PERF_COUNTER2_INTERRUPT_EN (1UL << 27) | |
1563 | #define PIPE_GMBUS_EVENT_ENABLE (1UL << 27) | |
1564 | #define PLANE_FLIP_DONE_INT_EN_VLV (1UL << 26) | |
1565 | #define PIPE_HOTPLUG_INTERRUPT_ENABLE (1UL << 26) | |
1566 | #define PIPE_VSYNC_INTERRUPT_ENABLE (1UL << 25) | |
1567 | #define PIPE_DISPLAY_LINE_COMPARE_ENABLE (1UL << 24) | |
1568 | #define PIPE_DPST_EVENT_ENABLE (1UL << 23) | |
1569 | #define SPRITE0_FLIP_DONE_INT_EN_VLV (1UL << 22) | |
1570 | #define PIPE_LEGACY_BLC_EVENT_ENABLE (1UL << 22) | |
1571 | #define PIPE_ODD_FIELD_INTERRUPT_ENABLE (1UL << 21) | |
1572 | #define PIPE_EVEN_FIELD_INTERRUPT_ENABLE (1UL << 20) | |
1573 | #define PIPE_B_PSR_INTERRUPT_ENABLE_VLV (1UL << 19) | |
1574 | #define PERF_COUNTER_INTERRUPT_EN (1UL << 19) | |
1575 | #define PIPE_HOTPLUG_TV_INTERRUPT_ENABLE (1UL << 18) /* pre-965 */ | |
1576 | #define PIPE_START_VBLANK_INTERRUPT_ENABLE (1UL << 18) /* 965 or later */ | |
1577 | #define PIPE_FRAMESTART_INTERRUPT_ENABLE (1UL << 17) | |
1578 | #define PIPE_VBLANK_INTERRUPT_ENABLE (1UL << 17) | |
1579 | #define PIPEA_HBLANK_INT_EN_VLV (1UL << 16) | |
1580 | #define PIPE_OVERLAY_UPDATED_ENABLE (1UL << 16) | |
1581 | #define SPRITE1_FLIP_DONE_INT_STATUS_VLV (1UL << 15) | |
1582 | #define SPRITE0_FLIP_DONE_INT_STATUS_VLV (1UL << 14) | |
1583 | #define PIPE_CRC_ERROR_INTERRUPT_STATUS (1UL << 13) | |
1584 | #define PIPE_CRC_DONE_INTERRUPT_STATUS (1UL << 12) | |
1585 | #define PERF_COUNTER2_INTERRUPT_STATUS (1UL << 11) | |
1586 | #define PIPE_GMBUS_INTERRUPT_STATUS (1UL << 11) | |
1587 | #define PLANE_FLIP_DONE_INT_STATUS_VLV (1UL << 10) | |
1588 | #define PIPE_HOTPLUG_INTERRUPT_STATUS (1UL << 10) | |
1589 | #define PIPE_VSYNC_INTERRUPT_STATUS (1UL << 9) | |
1590 | #define PIPE_DISPLAY_LINE_COMPARE_STATUS (1UL << 8) | |
1591 | #define PIPE_DPST_EVENT_STATUS (1UL << 7) | |
1592 | #define PIPE_A_PSR_STATUS_VLV (1UL << 6) | |
1593 | #define PIPE_LEGACY_BLC_EVENT_STATUS (1UL << 6) | |
1594 | #define PIPE_ODD_FIELD_INTERRUPT_STATUS (1UL << 5) | |
1595 | #define PIPE_EVEN_FIELD_INTERRUPT_STATUS (1UL << 4) | |
1596 | #define PIPE_B_PSR_STATUS_VLV (1UL << 3) | |
1597 | #define PERF_COUNTER_INTERRUPT_STATUS (1UL << 3) | |
1598 | #define PIPE_HOTPLUG_TV_INTERRUPT_STATUS (1UL << 2) /* pre-965 */ | |
1599 | #define PIPE_START_VBLANK_INTERRUPT_STATUS (1UL << 2) /* 965 or later */ | |
1600 | #define PIPE_FRAMESTART_INTERRUPT_STATUS (1UL << 1) | |
1601 | #define PIPE_VBLANK_INTERRUPT_STATUS (1UL << 1) | |
1602 | #define PIPE_HBLANK_INT_STATUS (1UL << 0) | |
1603 | #define PIPE_OVERLAY_UPDATED_STATUS (1UL << 0) | |
2ac6a84b JN |
1604 | #define PIPESTAT_INT_ENABLE_MASK 0x7fff0000 |
1605 | #define PIPESTAT_INT_STATUS_MASK 0x0000ffff | |
5eddb70b | 1606 | |
0b86952d | 1607 | #define _PIPE_ARB_CTL_A 0x70028 /* icl+ */ |
03de2e10 | 1608 | #define PIPE_ARB_CTL(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPE_ARB_CTL_A) |
0b86952d VS |
1609 | #define PIPE_ARB_USE_PROG_SLOTS REG_BIT(13) |
1610 | ||
756f85cf PZ |
1611 | #define _PIPE_MISC_A 0x70030 |
1612 | #define _PIPE_MISC_B 0x71030 | |
2ac6a84b | 1613 | #define PIPE_MISC(pipe) _MMIO_PIPE(pipe, _PIPE_MISC_A, _PIPE_MISC_B) |
c640f6c5 VS |
1614 | #define PIPE_MISC_YUV420_ENABLE REG_BIT(27) /* glk+ */ |
1615 | #define PIPE_MISC_YUV420_MODE_FULL_BLEND REG_BIT(26) /* glk+ */ | |
1616 | #define PIPE_MISC_HDR_MODE_PRECISION REG_BIT(23) /* icl+ */ | |
2590ef92 VS |
1617 | #define PIPE_MISC_PSR_MASK_PRIMARY_FLIP REG_BIT(23) /* bdw */ |
1618 | #define PIPE_MISC_PSR_MASK_SPRITE_ENABLE REG_BIT(22) /* bdw */ | |
1619 | #define PIPE_MISC_PSR_MASK_PIPE_REG_WRITE REG_BIT(21) /* skl+ */ | |
1620 | #define PIPE_MISC_PSR_MASK_CURSOR_MOVE REG_BIT(21) /* bdw */ | |
1621 | #define PIPE_MISC_PSR_MASK_VBLANK_VSYNC_INT REG_BIT(20) | |
c640f6c5 | 1622 | #define PIPE_MISC_OUTPUT_COLORSPACE_YUV REG_BIT(11) |
3d0d3336 | 1623 | #define PIPE_MISC_PIXEL_ROUNDING_TRUNC REG_BIT(8) /* tgl+ */ |
70418a68 AN |
1624 | /* |
1625 | * For Display < 13, Bits 5-7 of PIPE MISC represent DITHER BPC with | |
1626 | * valid values of: 6, 8, 10 BPC. | |
1627 | * ADLP+, the bits 5-7 represent PORT OUTPUT BPC with valid values of: | |
1628 | * 6, 8, 10, 12 BPC. | |
1629 | */ | |
c640f6c5 VS |
1630 | #define PIPE_MISC_BPC_MASK REG_GENMASK(7, 5) |
1631 | #define PIPE_MISC_BPC_8 REG_FIELD_PREP(PIPE_MISC_BPC_MASK, 0) | |
1632 | #define PIPE_MISC_BPC_10 REG_FIELD_PREP(PIPE_MISC_BPC_MASK, 1) | |
1633 | #define PIPE_MISC_BPC_6 REG_FIELD_PREP(PIPE_MISC_BPC_MASK, 2) | |
1634 | #define PIPE_MISC_BPC_12_ADLP REG_FIELD_PREP(PIPE_MISC_BPC_MASK, 4) /* adlp+ */ | |
1635 | #define PIPE_MISC_DITHER_ENABLE REG_BIT(4) | |
1636 | #define PIPE_MISC_DITHER_TYPE_MASK REG_GENMASK(3, 2) | |
1637 | #define PIPE_MISC_DITHER_TYPE_SP REG_FIELD_PREP(PIPE_MISC_DITHER_TYPE_MASK, 0) | |
1638 | #define PIPE_MISC_DITHER_TYPE_ST1 REG_FIELD_PREP(PIPE_MISC_DITHER_TYPE_MASK, 1) | |
1639 | #define PIPE_MISC_DITHER_TYPE_ST2 REG_FIELD_PREP(PIPE_MISC_DITHER_TYPE_MASK, 2) | |
1640 | #define PIPE_MISC_DITHER_TYPE_TEMP REG_FIELD_PREP(PIPE_MISC_DITHER_TYPE_MASK, 3) | |
756f85cf | 1641 | |
e2ca757b AS |
1642 | #define _PIPE_MISC2_A 0x7002C |
1643 | #define _PIPE_MISC2_B 0x7102C | |
2ac6a84b | 1644 | #define PIPE_MISC2(pipe) _MMIO_PIPE(pipe, _PIPE_MISC2_A, _PIPE_MISC2_B) |
d083c232 VS |
1645 | #define PIPE_MISC2_BUBBLE_COUNTER_MASK REG_GENMASK(31, 24) |
1646 | #define PIPE_MISC2_BUBBLE_COUNTER_SCALER_EN REG_FIELD_PREP(PIPE_MISC2_BUBBLE_COUNTER_MASK, 80) | |
1647 | #define PIPE_MISC2_BUBBLE_COUNTER_SCALER_DIS REG_FIELD_PREP(PIPE_MISC2_BUBBLE_COUNTER_MASK, 20) | |
6e889b1c VS |
1648 | #define PIPE_MISC2_FLIP_INFO_PLANE_SEL_MASK REG_GENMASK(2, 0) /* tgl+ */ |
1649 | #define PIPE_MISC2_FLIP_INFO_PLANE_SEL(plane_id) REG_FIELD_PREP(PIPE_MISC2_FLIP_INFO_PLANE_SEL_MASK, (plane_id)) | |
e2ca757b | 1650 | |
f0f59a00 | 1651 | #define VLV_DPFLIPSTAT _MMIO(VLV_DISPLAY_BASE + 0x70028) |
7d938bc0 VS |
1652 | #define PIPEB_LINE_COMPARE_INT_EN REG_BIT(29) |
1653 | #define PIPEB_HLINE_INT_EN REG_BIT(28) | |
1654 | #define PIPEB_VBLANK_INT_EN REG_BIT(27) | |
1655 | #define SPRITED_FLIP_DONE_INT_EN REG_BIT(26) | |
1656 | #define SPRITEC_FLIP_DONE_INT_EN REG_BIT(25) | |
1657 | #define PLANEB_FLIP_DONE_INT_EN REG_BIT(24) | |
1658 | #define PIPE_PSR_INT_EN REG_BIT(22) | |
1659 | #define PIPEA_LINE_COMPARE_INT_EN REG_BIT(21) | |
1660 | #define PIPEA_HLINE_INT_EN REG_BIT(20) | |
1661 | #define PIPEA_VBLANK_INT_EN REG_BIT(19) | |
1662 | #define SPRITEB_FLIP_DONE_INT_EN REG_BIT(18) | |
1663 | #define SPRITEA_FLIP_DONE_INT_EN REG_BIT(17) | |
1664 | #define PLANEA_FLIPDONE_INT_EN REG_BIT(16) | |
1665 | #define PIPEC_LINE_COMPARE_INT_EN REG_BIT(13) | |
1666 | #define PIPEC_HLINE_INT_EN REG_BIT(12) | |
1667 | #define PIPEC_VBLANK_INT_EN REG_BIT(11) | |
1668 | #define SPRITEF_FLIPDONE_INT_EN REG_BIT(10) | |
1669 | #define SPRITEE_FLIPDONE_INT_EN REG_BIT(9) | |
1670 | #define PLANEC_FLIPDONE_INT_EN REG_BIT(8) | |
c46ce4d7 | 1671 | |
f0f59a00 | 1672 | #define DPINVGTT _MMIO(VLV_DISPLAY_BASE + 0x7002c) /* VLV/CHV only */ |
7d938bc0 VS |
1673 | #define DPINVGTT_EN_MASK_CHV REG_GENMASK(27, 16) |
1674 | #define DPINVGTT_EN_MASK_VLV REG_GENMASK(23, 16) | |
1675 | #define SPRITEF_INVALID_GTT_INT_EN REG_BIT(27) | |
1676 | #define SPRITEE_INVALID_GTT_INT_EN REG_BIT(26) | |
1677 | #define PLANEC_INVALID_GTT_INT_EN REG_BIT(25) | |
1678 | #define CURSORC_INVALID_GTT_INT_EN REG_BIT(24) | |
1679 | #define CURSORB_INVALID_GTT_INT_EN REG_BIT(23) | |
1680 | #define CURSORA_INVALID_GTT_INT_EN REG_BIT(22) | |
1681 | #define SPRITED_INVALID_GTT_INT_EN REG_BIT(21) | |
1682 | #define SPRITEC_INVALID_GTT_INT_EN REG_BIT(20) | |
1683 | #define PLANEB_INVALID_GTT_INT_EN REG_BIT(19) | |
1684 | #define SPRITEB_INVALID_GTT_INT_EN REG_BIT(18) | |
1685 | #define SPRITEA_INVALID_GTT_INT_EN REG_BIT(17) | |
1686 | #define PLANEA_INVALID_GTT_INT_EN REG_BIT(16) | |
1687 | #define DPINVGTT_STATUS_MASK_CHV REG_GENMASK(11, 0) | |
1688 | #define DPINVGTT_STATUS_MASK_VLV REG_GENMASK(7, 0) | |
1689 | #define SPRITEF_INVALID_GTT_STATUS REG_BIT(11) | |
1690 | #define SPRITEE_INVALID_GTT_STATUS REG_BIT(10) | |
1691 | #define PLANEC_INVALID_GTT_STATUS REG_BIT(9) | |
1692 | #define CURSORC_INVALID_GTT_STATUS REG_BIT(8) | |
1693 | #define CURSORB_INVALID_GTT_STATUS REG_BIT(7) | |
1694 | #define CURSORA_INVALID_GTT_STATUS REG_BIT(6) | |
1695 | #define SPRITED_INVALID_GTT_STATUS REG_BIT(5) | |
1696 | #define SPRITEC_INVALID_GTT_STATUS REG_BIT(4) | |
1697 | #define PLANEB_INVALID_GTT_STATUS REG_BIT(3) | |
1698 | #define SPRITEB_INVALID_GTT_STATUS REG_BIT(2) | |
1699 | #define SPRITEA_INVALID_GTT_STATUS REG_BIT(1) | |
1700 | #define PLANEA_INVALID_GTT_STATUS REG_BIT(0) | |
c46ce4d7 | 1701 | |
f0f59a00 | 1702 | #define CBR1_VLV _MMIO(VLV_DISPLAY_BASE + 0x70400) |
5ee8ee86 PZ |
1703 | #define CBR_PND_DEADLINE_DISABLE (1 << 31) |
1704 | #define CBR_PWM_CLOCK_MUX_SELECT (1 << 30) | |
c6beb13e | 1705 | |
c231775c | 1706 | #define CBR4_VLV _MMIO(VLV_DISPLAY_BASE + 0x70450) |
5ee8ee86 | 1707 | #define CBR_DPLLBMD_PIPE(pipe) (1 << (7 + (pipe) * 11)) /* pipes B and C */ |
c231775c | 1708 | |
585fb111 JB |
1709 | /* |
1710 | * The two pipe frame counter registers are not synchronized, so | |
1711 | * reading a stable value is somewhat tricky. The following code | |
1712 | * should work: | |
1713 | * | |
1714 | * do { | |
1715 | * high1 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >> | |
1716 | * PIPE_FRAME_HIGH_SHIFT; | |
1717 | * low1 = ((INREG(PIPEAFRAMEPIXEL) & PIPE_FRAME_LOW_MASK) >> | |
1718 | * PIPE_FRAME_LOW_SHIFT); | |
1719 | * high2 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >> | |
1720 | * PIPE_FRAME_HIGH_SHIFT); | |
1721 | * } while (high1 != high2); | |
1722 | * frame = (high1 << 8) | low1; | |
1723 | */ | |
25a2e2d0 | 1724 | #define _PIPEAFRAMEHIGH 0x70040 |
2ac6a84b | 1725 | #define PIPEFRAME(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEAFRAMEHIGH) |
585fb111 JB |
1726 | #define PIPE_FRAME_HIGH_MASK 0x0000ffff |
1727 | #define PIPE_FRAME_HIGH_SHIFT 0 | |
2ac6a84b | 1728 | |
25a2e2d0 | 1729 | #define _PIPEAFRAMEPIXEL 0x70044 |
2ac6a84b | 1730 | #define PIPEFRAMEPIXEL(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEAFRAMEPIXEL) |
585fb111 JB |
1731 | #define PIPE_FRAME_LOW_MASK 0xff000000 |
1732 | #define PIPE_FRAME_LOW_SHIFT 24 | |
1733 | #define PIPE_PIXEL_MASK 0x00ffffff | |
1734 | #define PIPE_PIXEL_SHIFT 0 | |
2ac6a84b | 1735 | |
9880b7a5 | 1736 | /* GM45+ just has to be different */ |
fd8f507c | 1737 | #define _PIPEA_FRMCOUNT_G4X 0x70040 |
8edbb0ee | 1738 | #define PIPE_FRMCOUNT_G4X(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEA_FRMCOUNT_G4X) |
2ac6a84b JN |
1739 | |
1740 | #define _PIPEA_FLIPCOUNT_G4X 0x70044 | |
2501a0b6 | 1741 | #define PIPE_FLIPCOUNT_G4X(dev_priv, pipe) _MMIO_PIPE2(dev_priv, pipe, _PIPEA_FLIPCOUNT_G4X) |
585fb111 | 1742 | |
514ca6df | 1743 | /* CHV pipe B blender */ |
c14b0485 | 1744 | #define _CHV_BLEND_A 0x60a00 |
2ac6a84b | 1745 | #define CHV_BLEND(dev_priv, pipe) _MMIO_TRANS2(dev_priv, pipe, _CHV_BLEND_A) |
428cb15d VS |
1746 | #define CHV_BLEND_MASK REG_GENMASK(31, 30) |
1747 | #define CHV_BLEND_LEGACY REG_FIELD_PREP(CHV_BLEND_MASK, 0) | |
1748 | #define CHV_BLEND_ANDROID REG_FIELD_PREP(CHV_BLEND_MASK, 1) | |
1749 | #define CHV_BLEND_MPO REG_FIELD_PREP(CHV_BLEND_MASK, 2) | |
2ac6a84b | 1750 | |
c14b0485 | 1751 | #define _CHV_CANVAS_A 0x60a04 |
2ac6a84b | 1752 | #define CHV_CANVAS(dev_priv, pipe) _MMIO_TRANS2(dev_priv, pipe, _CHV_CANVAS_A) |
428cb15d VS |
1753 | #define CHV_CANVAS_RED_MASK REG_GENMASK(29, 20) |
1754 | #define CHV_CANVAS_GREEN_MASK REG_GENMASK(19, 10) | |
1755 | #define CHV_CANVAS_BLUE_MASK REG_GENMASK(9, 0) | |
c14b0485 | 1756 | |
446f2545 AR |
1757 | /* Display/Sprite base address macros */ |
1758 | #define DISP_BASEADDR_MASK (0xfffff000) | |
9e8789ec PZ |
1759 | #define I915_LO_DISPBASE(val) ((val) & ~DISP_BASEADDR_MASK) |
1760 | #define I915_HI_DISPBASE(val) ((val) & DISP_BASEADDR_MASK) | |
446f2545 | 1761 | |
85fa792b VS |
1762 | /* |
1763 | * VBIOS flags | |
1764 | * gen2: | |
1765 | * [00:06] alm,mgm | |
1766 | * [10:16] all | |
1767 | * [30:32] alm,mgm | |
1768 | * gen3+: | |
1769 | * [00:0f] all | |
1770 | * [10:1f] all | |
1771 | * [30:32] all | |
1772 | */ | |
3b24925e | 1773 | #define SWF0(dev_priv, i) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x70410 + (i) * 4) |
eefd93d8 | 1774 | #define SWF1(dev_priv, i) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x71410 + (i) * 4) |
b9089184 | 1775 | #define SWF3(dev_priv, i) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x72414 + (i) * 4) |
f0f59a00 | 1776 | #define SWF_ILK(i) _MMIO(0x4F000 + (i) * 4) |
585fb111 | 1777 | |
f0f59a00 | 1778 | #define DIGITAL_PORT_HOTPLUG_CNTRL _MMIO(0x44030) |
40bfd7a3 VS |
1779 | #define DIGITAL_PORTA_HOTPLUG_ENABLE (1 << 4) |
1780 | #define DIGITAL_PORTA_PULSE_DURATION_2ms (0 << 2) /* pre-HSW */ | |
1781 | #define DIGITAL_PORTA_PULSE_DURATION_4_5ms (1 << 2) /* pre-HSW */ | |
1782 | #define DIGITAL_PORTA_PULSE_DURATION_6ms (2 << 2) /* pre-HSW */ | |
1783 | #define DIGITAL_PORTA_PULSE_DURATION_100ms (3 << 2) /* pre-HSW */ | |
1784 | #define DIGITAL_PORTA_PULSE_DURATION_MASK (3 << 2) /* pre-HSW */ | |
1785 | #define DIGITAL_PORTA_HOTPLUG_STATUS_MASK (3 << 0) | |
1786 | #define DIGITAL_PORTA_HOTPLUG_NO_DETECT (0 << 0) | |
1787 | #define DIGITAL_PORTA_HOTPLUG_SHORT_DETECT (1 << 0) | |
1788 | #define DIGITAL_PORTA_HOTPLUG_LONG_DETECT (2 << 0) | |
b9055052 ZW |
1789 | |
1790 | /* refresh rate hardware control */ | |
f0f59a00 | 1791 | #define RR_HW_CTL _MMIO(0x45300) |
b9055052 ZW |
1792 | #define RR_HW_LOW_POWER_FRAMES_MASK 0xff |
1793 | #define RR_HW_HIGH_POWER_FRAMES_MASK 0xff00 | |
1794 | ||
f0f59a00 | 1795 | #define PCH_3DCGDIS0 _MMIO(0x46020) |
8956c8bb EA |
1796 | # define MARIUNIT_CLOCK_GATE_DISABLE (1 << 18) |
1797 | # define SVSMUNIT_CLOCK_GATE_DISABLE (1 << 1) | |
1798 | ||
f0f59a00 | 1799 | #define PCH_3DCGDIS1 _MMIO(0x46024) |
06f37751 EA |
1800 | # define VFMUNIT_CLOCK_GATE_DISABLE (1 << 11) |
1801 | ||
a57c774a | 1802 | #define _PIPEA_DATA_M1 0x60030 |
a57c774a | 1803 | #define _PIPEB_DATA_M1 0x61030 |
5702d5d4 | 1804 | #define PIPE_DATA_M1(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_DATA_M1) |
7bb46e03 JN |
1805 | |
1806 | #define _PIPEA_DATA_N1 0x60034 | |
1807 | #define _PIPEB_DATA_N1 0x61034 | |
12967c4f | 1808 | #define PIPE_DATA_N1(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_DATA_N1) |
7bb46e03 JN |
1809 | |
1810 | #define _PIPEA_DATA_M2 0x60038 | |
1811 | #define _PIPEB_DATA_M2 0x61038 | |
ddbdeb6c | 1812 | #define PIPE_DATA_M2(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_DATA_M2) |
7bb46e03 JN |
1813 | |
1814 | #define _PIPEA_DATA_N2 0x6003c | |
1815 | #define _PIPEB_DATA_N2 0x6103c | |
9ffd2110 | 1816 | #define PIPE_DATA_N2(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_DATA_N2) |
7bb46e03 JN |
1817 | |
1818 | #define _PIPEA_LINK_M1 0x60040 | |
1819 | #define _PIPEB_LINK_M1 0x61040 | |
3c461986 | 1820 | #define PIPE_LINK_M1(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_LINK_M1) |
7bb46e03 JN |
1821 | |
1822 | #define _PIPEA_LINK_N1 0x60044 | |
1823 | #define _PIPEB_LINK_N1 0x61044 | |
0b406cc9 | 1824 | #define PIPE_LINK_N1(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_LINK_N1) |
7bb46e03 JN |
1825 | |
1826 | #define _PIPEA_LINK_M2 0x60048 | |
1827 | #define _PIPEB_LINK_M2 0x61048 | |
04f657cf | 1828 | #define PIPE_LINK_M2(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_LINK_M2) |
7bb46e03 JN |
1829 | |
1830 | #define _PIPEA_LINK_N2 0x6004c | |
1831 | #define _PIPEB_LINK_N2 0x6104c | |
2d557d3a | 1832 | #define PIPE_LINK_N2(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _PIPEA_LINK_N2) |
b9055052 | 1833 | |
1c9a2d4a CK |
1834 | /* |
1835 | * Skylake scalers | |
1836 | */ | |
01c13058 | 1837 | #define _ID(id, a, b) _PICK_EVEN(id, a, b) |
1c9a2d4a CK |
1838 | #define _PS_1A_CTRL 0x68180 |
1839 | #define _PS_2A_CTRL 0x68280 | |
1840 | #define _PS_1B_CTRL 0x68980 | |
1841 | #define _PS_2B_CTRL 0x68A80 | |
1842 | #define _PS_1C_CTRL 0x69180 | |
01c13058 JN |
1843 | #define SKL_PS_CTRL(pipe, id) _MMIO_PIPE(pipe, \ |
1844 | _ID(id, _PS_1A_CTRL, _PS_2A_CTRL), \ | |
1845 | _ID(id, _PS_1B_CTRL, _PS_2B_CTRL)) | |
e6220668 | 1846 | #define PS_SCALER_EN REG_BIT(31) |
9f8c1fe3 VS |
1847 | #define PS_SCALER_TYPE_MASK REG_BIT(30) /* icl+ */ |
1848 | #define PS_SCALER_TYPE_NON_LINEAR REG_FIELD_PREP(PS_SCALER_TYPE_MASK, 0) | |
1849 | #define PS_SCALER_TYPE_LINEAR REG_FIELD_PREP(PS_SCALER_TYPE_MASK, 1) | |
e6220668 VS |
1850 | #define SKL_PS_SCALER_MODE_MASK REG_GENMASK(29, 28) /* skl/bxt */ |
1851 | #define SKL_PS_SCALER_MODE_DYN REG_FIELD_PREP(SKL_PS_SCALER_MODE_MASK, 0) | |
1852 | #define SKL_PS_SCALER_MODE_HQ REG_FIELD_PREP(SKL_PS_SCALER_MODE_MASK, 1) | |
1853 | #define SKL_PS_SCALER_MODE_NV12 REG_FIELD_PREP(SKL_PS_SCALER_MODE_MASK, 2) | |
1854 | #define PS_SCALER_MODE_MASK REG_BIT(29) /* glk-tgl */ | |
1855 | #define PS_SCALER_MODE_NORMAL REG_FIELD_PREP(PS_SCALER_MODE_MASK, 0) | |
1856 | #define PS_SCALER_MODE_PLANAR REG_FIELD_PREP(PS_SCALER_MODE_MASK, 1) | |
9f8c1fe3 | 1857 | #define PS_ADAPTIVE_FILTERING_EN REG_BIT(28) /* icl+ */ |
e6220668 VS |
1858 | #define PS_BINDING_MASK REG_GENMASK(27, 25) |
1859 | #define PS_BINDING_PIPE REG_FIELD_PREP(PS_BINDING_MASK, 0) | |
1860 | #define PS_BINDING_PLANE(plane_id) REG_FIELD_PREP(PS_BINDING_MASK, (plane_id) + 1) | |
1861 | #define PS_FILTER_MASK REG_GENMASK(24, 23) | |
1862 | #define PS_FILTER_MEDIUM REG_FIELD_PREP(PS_FILTER_MASK, 0) | |
1863 | #define PS_FILTER_PROGRAMMED REG_FIELD_PREP(PS_FILTER_MASK, 1) | |
1864 | #define PS_FILTER_EDGE_ENHANCE REG_FIELD_PREP(PS_FILTER_MASK, 2) | |
1865 | #define PS_FILTER_BILINEAR REG_FIELD_PREP(PS_FILTER_MASK, 3) | |
9f8c1fe3 VS |
1866 | #define PS_ADAPTIVE_FILTER_MASK REG_BIT(22) /* icl+ */ |
1867 | #define PS_ADAPTIVE_FILTER_MEDIUM REG_FIELD_PREP(PS_ADAPTIVE_FILTER_MASK, 0) | |
1868 | #define PS_ADAPTIVE_FILTER_EDGE_ENHANCE REG_FIELD_PREP(PS_ADAPTIVE_FILTER_MASK, 1) | |
1869 | #define PS_PIPE_SCALER_LOC_MASK REG_BIT(21) /* icl+ */ | |
1870 | #define PS_PIPE_SCALER_LOC_AFTER_OUTPUT_CSC REG_FIELD_PREP(PS_SCALER_LOCATION_MASK, 0) /* non-linear */ | |
1871 | #define PS_PIPE_SCALER_LOC_AFTER_CSC REG_FIELD_PREP(PS_SCALER_LOCATION_MASK, 1) /* linear */ | |
e6220668 VS |
1872 | #define PS_VERT3TAP REG_BIT(21) /* skl/bxt */ |
1873 | #define PS_VERT_INT_INVERT_FIELD REG_BIT(20) | |
9f8c1fe3 | 1874 | #define PS_PROG_SCALE_FACTOR REG_BIT(19) /* tgl+ */ |
e6220668 VS |
1875 | #define PS_PWRUP_PROGRESS REG_BIT(17) |
1876 | #define PS_V_FILTER_BYPASS REG_BIT(8) | |
1877 | #define PS_VADAPT_EN REG_BIT(7) /* skl/bxt */ | |
1878 | #define PS_VADAPT_MODE_MASK REG_GENMASK(6, 5) /* skl/bxt */ | |
1879 | #define PS_VADAPT_MODE_LEAST_ADAPT REG_FIELD_PREP(PS_VADAPT_MODE_MASK, 0) | |
1880 | #define PS_VADAPT_MODE_MOD_ADAPT REG_FIELD_PREP(PS_VADAPT_MODE_MASK, 1) | |
1881 | #define PS_VADAPT_MODE_MOST_ADAPT REG_FIELD_PREP(PS_VADAPT_MODE_MASK, 3) | |
1882 | #define PS_BINDING_Y_MASK REG_GENMASK(7, 5) /* icl-tgl */ | |
1883 | #define PS_BINDING_Y_PLANE(plane_id) REG_FIELD_PREP(PS_BINDING_Y_MASK, (plane_id) + 1) | |
1884 | #define PS_Y_VERT_FILTER_SELECT_MASK REG_BIT(4) /* glk+ */ | |
1885 | #define PS_Y_VERT_FILTER_SELECT(set) REG_FIELD_PREP(PS_Y_VERT_FILTER_SELECT_MASK, (set)) | |
1886 | #define PS_Y_HORZ_FILTER_SELECT_MASK REG_BIT(3) /* glk+ */ | |
1887 | #define PS_Y_HORZ_FILTER_SELECT(set) REG_FIELD_PREP(PS_Y_HORZ_FILTER_SELECT_MASK, (set)) | |
1888 | #define PS_UV_VERT_FILTER_SELECT_MASK REG_BIT(2) /* glk+ */ | |
1889 | #define PS_UV_VERT_FILTER_SELECT(set) REG_FIELD_PREP(PS_UV_VERT_FILTER_SELECT_MASK, (set)) | |
1890 | #define PS_UV_HORZ_FILTER_SELECT_MASK REG_BIT(1) /* glk+ */ | |
1891 | #define PS_UV_HORZ_FILTER_SELECT(set) REG_FIELD_PREP(PS_UV_HORZ_FILTER_SELECT_MASK, (set)) | |
1c9a2d4a CK |
1892 | |
1893 | #define _PS_PWR_GATE_1A 0x68160 | |
1894 | #define _PS_PWR_GATE_2A 0x68260 | |
1895 | #define _PS_PWR_GATE_1B 0x68960 | |
1896 | #define _PS_PWR_GATE_2B 0x68A60 | |
1897 | #define _PS_PWR_GATE_1C 0x69160 | |
01c13058 JN |
1898 | #define SKL_PS_PWR_GATE(pipe, id) _MMIO_PIPE(pipe, \ |
1899 | _ID(id, _PS_PWR_GATE_1A, _PS_PWR_GATE_2A), \ | |
1900 | _ID(id, _PS_PWR_GATE_1B, _PS_PWR_GATE_2B)) | |
e6220668 VS |
1901 | #define PS_PWR_GATE_DIS_OVERRIDE REG_BIT(31) |
1902 | #define PS_PWR_GATE_SETTLING_TIME_MASK REG_GENMASK(4, 3) | |
1903 | #define PS_PWR_GATE_SETTLING_TIME_32 REG_FIELD_PREP(PS_PWR_GATE_SETTLING_TIME_MASK, 0) | |
1904 | #define PS_PWR_GATE_SETTLING_TIME_64 REG_FIELD_PREP(PS_PWR_GATE_SETTLING_TIME_MASK, 1) | |
1905 | #define PS_PWR_GATE_SETTLING_TIME_96 REG_FIELD_PREP(PS_PWR_GATE_SETTLING_TIME_MASK, 2) | |
1906 | #define PS_PWR_GATE_SETTLING_TIME_128 REG_FIELD_PREP(PS_PWR_GATE_SETTLING_TIME_MASK, 3) | |
1907 | #define PS_PWR_GATE_SLPEN_MASK REG_GENMASK(1, 0) | |
1908 | #define PS_PWR_GATE_SLPEN_8 REG_FIELD_PREP(PS_PWR_GATE_SLPEN_MASK, 0) | |
1909 | #define PS_PWR_GATE_SLPEN_16 REG_FIELD_PREP(PS_PWR_GATE_SLPEN_MASK, 1) | |
1910 | #define PS_PWR_GATE_SLPEN_24 REG_FIELD_PREP(PS_PWR_GATE_SLPEN_MASK, 2) | |
1911 | #define PS_PWR_GATE_SLPEN_32 REG_FIELD_PREP(PS_PWR_GATE_SLPEN_MASK, 3) | |
1c9a2d4a CK |
1912 | |
1913 | #define _PS_WIN_POS_1A 0x68170 | |
1914 | #define _PS_WIN_POS_2A 0x68270 | |
1915 | #define _PS_WIN_POS_1B 0x68970 | |
1916 | #define _PS_WIN_POS_2B 0x68A70 | |
1917 | #define _PS_WIN_POS_1C 0x69170 | |
01c13058 JN |
1918 | #define SKL_PS_WIN_POS(pipe, id) _MMIO_PIPE(pipe, \ |
1919 | _ID(id, _PS_WIN_POS_1A, _PS_WIN_POS_2A), \ | |
1920 | _ID(id, _PS_WIN_POS_1B, _PS_WIN_POS_2B)) | |
6ec91794 VS |
1921 | #define PS_WIN_XPOS_MASK REG_GENMASK(31, 16) |
1922 | #define PS_WIN_XPOS(x) REG_FIELD_PREP(PS_WIN_XPOS_MASK, (x)) | |
1923 | #define PS_WIN_YPOS_MASK REG_GENMASK(15, 0) | |
1924 | #define PS_WIN_YPOS(y) REG_FIELD_PREP(PS_WIN_YPOS_MASK, (y)) | |
1c9a2d4a CK |
1925 | |
1926 | #define _PS_WIN_SZ_1A 0x68174 | |
1927 | #define _PS_WIN_SZ_2A 0x68274 | |
1928 | #define _PS_WIN_SZ_1B 0x68974 | |
1929 | #define _PS_WIN_SZ_2B 0x68A74 | |
1930 | #define _PS_WIN_SZ_1C 0x69174 | |
01c13058 JN |
1931 | #define SKL_PS_WIN_SZ(pipe, id) _MMIO_PIPE(pipe, \ |
1932 | _ID(id, _PS_WIN_SZ_1A, _PS_WIN_SZ_2A), \ | |
1933 | _ID(id, _PS_WIN_SZ_1B, _PS_WIN_SZ_2B)) | |
6ec91794 VS |
1934 | #define PS_WIN_XSIZE_MASK REG_GENMASK(31, 16) |
1935 | #define PS_WIN_XSIZE(w) REG_FIELD_PREP(PS_WIN_XSIZE_MASK, (w)) | |
1936 | #define PS_WIN_YSIZE_MASK REG_GENMASK(15, 0) | |
1937 | #define PS_WIN_YSIZE(h) REG_FIELD_PREP(PS_WIN_YSIZE_MASK, (h)) | |
1c9a2d4a CK |
1938 | |
1939 | #define _PS_VSCALE_1A 0x68184 | |
1940 | #define _PS_VSCALE_2A 0x68284 | |
1941 | #define _PS_VSCALE_1B 0x68984 | |
1942 | #define _PS_VSCALE_2B 0x68A84 | |
1943 | #define _PS_VSCALE_1C 0x69184 | |
01c13058 JN |
1944 | #define SKL_PS_VSCALE(pipe, id) _MMIO_PIPE(pipe, \ |
1945 | _ID(id, _PS_VSCALE_1A, _PS_VSCALE_2A), \ | |
1946 | _ID(id, _PS_VSCALE_1B, _PS_VSCALE_2B)) | |
1c9a2d4a CK |
1947 | |
1948 | #define _PS_HSCALE_1A 0x68190 | |
1949 | #define _PS_HSCALE_2A 0x68290 | |
1950 | #define _PS_HSCALE_1B 0x68990 | |
1951 | #define _PS_HSCALE_2B 0x68A90 | |
1952 | #define _PS_HSCALE_1C 0x69190 | |
01c13058 JN |
1953 | #define SKL_PS_HSCALE(pipe, id) _MMIO_PIPE(pipe, \ |
1954 | _ID(id, _PS_HSCALE_1A, _PS_HSCALE_2A), \ | |
1955 | _ID(id, _PS_HSCALE_1B, _PS_HSCALE_2B)) | |
1c9a2d4a CK |
1956 | |
1957 | #define _PS_VPHASE_1A 0x68188 | |
1958 | #define _PS_VPHASE_2A 0x68288 | |
1959 | #define _PS_VPHASE_1B 0x68988 | |
1960 | #define _PS_VPHASE_2B 0x68A88 | |
1961 | #define _PS_VPHASE_1C 0x69188 | |
01c13058 JN |
1962 | #define SKL_PS_VPHASE(pipe, id) _MMIO_PIPE(pipe, \ |
1963 | _ID(id, _PS_VPHASE_1A, _PS_VPHASE_2A), \ | |
1964 | _ID(id, _PS_VPHASE_1B, _PS_VPHASE_2B)) | |
e6220668 VS |
1965 | #define PS_Y_PHASE_MASK REG_GENMASK(31, 16) |
1966 | #define PS_Y_PHASE(x) REG_FIELD_PREP(PS_Y_PHASE_MASK, (x)) | |
1967 | #define PS_UV_RGB_PHASE_MASK REG_GENMASK(15, 0) | |
1968 | #define PS_UV_RGB_PHASE(x) REG_FIELD_PREP(PS_UV_RGB_PHASE_MASK, (x)) | |
1969 | #define PS_PHASE_MASK (0x7fff << 1) /* u2.13 */ | |
1970 | #define PS_PHASE_TRIP (1 << 0) | |
1c9a2d4a CK |
1971 | |
1972 | #define _PS_HPHASE_1A 0x68194 | |
1973 | #define _PS_HPHASE_2A 0x68294 | |
1974 | #define _PS_HPHASE_1B 0x68994 | |
1975 | #define _PS_HPHASE_2B 0x68A94 | |
1976 | #define _PS_HPHASE_1C 0x69194 | |
01c13058 JN |
1977 | #define SKL_PS_HPHASE(pipe, id) _MMIO_PIPE(pipe, \ |
1978 | _ID(id, _PS_HPHASE_1A, _PS_HPHASE_2A), \ | |
1979 | _ID(id, _PS_HPHASE_1B, _PS_HPHASE_2B)) | |
1c9a2d4a CK |
1980 | |
1981 | #define _PS_ECC_STAT_1A 0x681D0 | |
1982 | #define _PS_ECC_STAT_2A 0x682D0 | |
1983 | #define _PS_ECC_STAT_1B 0x689D0 | |
1984 | #define _PS_ECC_STAT_2B 0x68AD0 | |
1985 | #define _PS_ECC_STAT_1C 0x691D0 | |
01c13058 JN |
1986 | #define SKL_PS_ECC_STAT(pipe, id) _MMIO_PIPE(pipe, \ |
1987 | _ID(id, _PS_ECC_STAT_1A, _PS_ECC_STAT_2A), \ | |
1988 | _ID(id, _PS_ECC_STAT_1B, _PS_ECC_STAT_2B)) | |
1c9a2d4a | 1989 | |
105c9e13 PB |
1990 | #define _PS_COEF_SET0_INDEX_1A 0x68198 |
1991 | #define _PS_COEF_SET0_INDEX_2A 0x68298 | |
1992 | #define _PS_COEF_SET0_INDEX_1B 0x68998 | |
1993 | #define _PS_COEF_SET0_INDEX_2B 0x68A98 | |
01c13058 JN |
1994 | #define GLK_PS_COEF_INDEX_SET(pipe, id, set) _MMIO_PIPE(pipe, \ |
1995 | _ID(id, _PS_COEF_SET0_INDEX_1A, _PS_COEF_SET0_INDEX_2A) + (set) * 8, \ | |
1996 | _ID(id, _PS_COEF_SET0_INDEX_1B, _PS_COEF_SET0_INDEX_2B) + (set) * 8) | |
e6220668 | 1997 | #define PS_COEF_INDEX_AUTO_INC REG_BIT(10) |
105c9e13 PB |
1998 | |
1999 | #define _PS_COEF_SET0_DATA_1A 0x6819C | |
2000 | #define _PS_COEF_SET0_DATA_2A 0x6829C | |
2001 | #define _PS_COEF_SET0_DATA_1B 0x6899C | |
2002 | #define _PS_COEF_SET0_DATA_2B 0x68A9C | |
4a8b03a4 | 2003 | #define GLK_PS_COEF_DATA_SET(pipe, id, set) _MMIO_PIPE(pipe, \ |
105c9e13 PB |
2004 | _ID(id, _PS_COEF_SET0_DATA_1A, _PS_COEF_SET0_DATA_2A) + (set) * 8, \ |
2005 | _ID(id, _PS_COEF_SET0_DATA_1B, _PS_COEF_SET0_DATA_2B) + (set) * 8) | |
42db64ef | 2006 | |
1d85a299 US |
2007 | /* Display Internal Timeout Register */ |
2008 | #define RM_TIMEOUT _MMIO(0x42060) | |
7d113cce | 2009 | #define RM_TIMEOUT_REG_CAPTURE _MMIO(0x420E0) |
1d85a299 US |
2010 | #define MMIO_TIMEOUT_US(us) ((us) << 0) |
2011 | ||
b9055052 ZW |
2012 | /* interrupts */ |
2013 | #define DE_MASTER_IRQ_CONTROL (1 << 31) | |
2014 | #define DE_SPRITEB_FLIP_DONE (1 << 29) | |
2015 | #define DE_SPRITEA_FLIP_DONE (1 << 28) | |
2016 | #define DE_PLANEB_FLIP_DONE (1 << 27) | |
2017 | #define DE_PLANEA_FLIP_DONE (1 << 26) | |
40da17c2 | 2018 | #define DE_PLANE_FLIP_DONE(plane) (1 << (26 + (plane))) |
b9055052 ZW |
2019 | #define DE_PCU_EVENT (1 << 25) |
2020 | #define DE_GTT_FAULT (1 << 24) | |
2021 | #define DE_POISON (1 << 23) | |
2022 | #define DE_PERFORM_COUNTER (1 << 22) | |
2023 | #define DE_PCH_EVENT (1 << 21) | |
2024 | #define DE_AUX_CHANNEL_A (1 << 20) | |
2025 | #define DE_DP_A_HOTPLUG (1 << 19) | |
2026 | #define DE_GSE (1 << 18) | |
2027 | #define DE_PIPEB_VBLANK (1 << 15) | |
2028 | #define DE_PIPEB_EVEN_FIELD (1 << 14) | |
2029 | #define DE_PIPEB_ODD_FIELD (1 << 13) | |
2030 | #define DE_PIPEB_LINE_COMPARE (1 << 12) | |
2031 | #define DE_PIPEB_VSYNC (1 << 11) | |
5b3a856b | 2032 | #define DE_PIPEB_CRC_DONE (1 << 10) |
b9055052 ZW |
2033 | #define DE_PIPEB_FIFO_UNDERRUN (1 << 8) |
2034 | #define DE_PIPEA_VBLANK (1 << 7) | |
5ee8ee86 | 2035 | #define DE_PIPE_VBLANK(pipe) (1 << (7 + 8 * (pipe))) |
b9055052 ZW |
2036 | #define DE_PIPEA_EVEN_FIELD (1 << 6) |
2037 | #define DE_PIPEA_ODD_FIELD (1 << 5) | |
2038 | #define DE_PIPEA_LINE_COMPARE (1 << 4) | |
2039 | #define DE_PIPEA_VSYNC (1 << 3) | |
5b3a856b | 2040 | #define DE_PIPEA_CRC_DONE (1 << 2) |
5ee8ee86 | 2041 | #define DE_PIPE_CRC_DONE(pipe) (1 << (2 + 8 * (pipe))) |
b9055052 | 2042 | #define DE_PIPEA_FIFO_UNDERRUN (1 << 0) |
5ee8ee86 | 2043 | #define DE_PIPE_FIFO_UNDERRUN(pipe) (1 << (8 * (pipe))) |
b9055052 | 2044 | |
b1f14ad0 | 2045 | /* More Ivybridge lolz */ |
5ee8ee86 PZ |
2046 | #define DE_ERR_INT_IVB (1 << 30) |
2047 | #define DE_GSE_IVB (1 << 29) | |
2048 | #define DE_PCH_EVENT_IVB (1 << 28) | |
2049 | #define DE_DP_A_HOTPLUG_IVB (1 << 27) | |
2050 | #define DE_AUX_CHANNEL_A_IVB (1 << 26) | |
2051 | #define DE_EDP_PSR_INT_HSW (1 << 19) | |
2052 | #define DE_SPRITEC_FLIP_DONE_IVB (1 << 14) | |
2053 | #define DE_PLANEC_FLIP_DONE_IVB (1 << 13) | |
2054 | #define DE_PIPEC_VBLANK_IVB (1 << 10) | |
2055 | #define DE_SPRITEB_FLIP_DONE_IVB (1 << 9) | |
2056 | #define DE_PLANEB_FLIP_DONE_IVB (1 << 8) | |
2057 | #define DE_PIPEB_VBLANK_IVB (1 << 5) | |
2058 | #define DE_SPRITEA_FLIP_DONE_IVB (1 << 4) | |
2059 | #define DE_PLANEA_FLIP_DONE_IVB (1 << 3) | |
2060 | #define DE_PLANE_FLIP_DONE_IVB(plane) (1 << (3 + 5 * (plane))) | |
2061 | #define DE_PIPEA_VBLANK_IVB (1 << 0) | |
68d97538 | 2062 | #define DE_PIPE_VBLANK_IVB(pipe) (1 << ((pipe) * 5)) |
b518421f | 2063 | |
f0f59a00 | 2064 | #define VLV_MASTER_IER _MMIO(0x4400c) /* Gunit master IER */ |
5ee8ee86 | 2065 | #define MASTER_INTERRUPT_ENABLE (1 << 31) |
7eea1ddf | 2066 | |
f0f59a00 VS |
2067 | #define DEISR _MMIO(0x44000) |
2068 | #define DEIMR _MMIO(0x44004) | |
2069 | #define DEIIR _MMIO(0x44008) | |
2070 | #define DEIER _MMIO(0x4400c) | |
b9055052 | 2071 | |
7a26b3f1 JN |
2072 | #define DE_IRQ_REGS I915_IRQ_REGS(DEIMR, \ |
2073 | DEIER, \ | |
2074 | DEIIR) | |
2075 | ||
f0f59a00 VS |
2076 | #define GTISR _MMIO(0x44010) |
2077 | #define GTIMR _MMIO(0x44014) | |
2078 | #define GTIIR _MMIO(0x44018) | |
2079 | #define GTIER _MMIO(0x4401c) | |
b9055052 | 2080 | |
7a26b3f1 JN |
2081 | #define GT_IRQ_REGS I915_IRQ_REGS(GTIMR, \ |
2082 | GTIER, \ | |
2083 | GTIIR) | |
2084 | ||
f0f59a00 | 2085 | #define GEN8_MASTER_IRQ _MMIO(0x44200) |
5ee8ee86 PZ |
2086 | #define GEN8_MASTER_IRQ_CONTROL (1 << 31) |
2087 | #define GEN8_PCU_IRQ (1 << 30) | |
2088 | #define GEN8_DE_PCH_IRQ (1 << 23) | |
2089 | #define GEN8_DE_MISC_IRQ (1 << 22) | |
2090 | #define GEN8_DE_PORT_IRQ (1 << 20) | |
2091 | #define GEN8_DE_PIPE_C_IRQ (1 << 18) | |
2092 | #define GEN8_DE_PIPE_B_IRQ (1 << 17) | |
2093 | #define GEN8_DE_PIPE_A_IRQ (1 << 16) | |
2094 | #define GEN8_DE_PIPE_IRQ(pipe) (1 << (16 + (pipe))) | |
2095 | #define GEN8_GT_VECS_IRQ (1 << 6) | |
2096 | #define GEN8_GT_GUC_IRQ (1 << 5) | |
2097 | #define GEN8_GT_PM_IRQ (1 << 4) | |
8a68d464 CW |
2098 | #define GEN8_GT_VCS1_IRQ (1 << 3) /* NB: VCS2 in bspec! */ |
2099 | #define GEN8_GT_VCS0_IRQ (1 << 2) /* NB: VCS1 in bpsec! */ | |
5ee8ee86 PZ |
2100 | #define GEN8_GT_BCS_IRQ (1 << 1) |
2101 | #define GEN8_GT_RCS_IRQ (1 << 0) | |
abd58f01 | 2102 | |
0e53fb84 MR |
2103 | #define XELPD_DISPLAY_ERR_FATAL_MASK _MMIO(0x4421c) |
2104 | ||
f0f59a00 VS |
2105 | #define GEN8_GT_ISR(which) _MMIO(0x44300 + (0x10 * (which))) |
2106 | #define GEN8_GT_IMR(which) _MMIO(0x44304 + (0x10 * (which))) | |
2107 | #define GEN8_GT_IIR(which) _MMIO(0x44308 + (0x10 * (which))) | |
2108 | #define GEN8_GT_IER(which) _MMIO(0x4430c + (0x10 * (which))) | |
abd58f01 | 2109 | |
de0cbc74 JN |
2110 | #define GEN8_GT_IRQ_REGS(which) I915_IRQ_REGS(GEN8_GT_IMR(which), \ |
2111 | GEN8_GT_IER(which), \ | |
2112 | GEN8_GT_IIR(which)) | |
2113 | ||
abd58f01 | 2114 | #define GEN8_RCS_IRQ_SHIFT 0 |
4df001d3 | 2115 | #define GEN8_BCS_IRQ_SHIFT 16 |
8a68d464 CW |
2116 | #define GEN8_VCS0_IRQ_SHIFT 0 /* NB: VCS1 in bspec! */ |
2117 | #define GEN8_VCS1_IRQ_SHIFT 16 /* NB: VCS2 in bpsec! */ | |
abd58f01 | 2118 | #define GEN8_VECS_IRQ_SHIFT 0 |
4df001d3 | 2119 | #define GEN8_WD_IRQ_SHIFT 16 |
abd58f01 | 2120 | |
f0f59a00 VS |
2121 | #define GEN8_DE_PIPE_ISR(pipe) _MMIO(0x44400 + (0x10 * (pipe))) |
2122 | #define GEN8_DE_PIPE_IMR(pipe) _MMIO(0x44404 + (0x10 * (pipe))) | |
2123 | #define GEN8_DE_PIPE_IIR(pipe) _MMIO(0x44408 + (0x10 * (pipe))) | |
2124 | #define GEN8_DE_PIPE_IER(pipe) _MMIO(0x4440c + (0x10 * (pipe))) | |
6399c94f VS |
2125 | #define GEN8_PIPE_FIFO_UNDERRUN REG_BIT(31) |
2126 | #define GEN8_PIPE_CDCLK_CRC_ERROR REG_BIT(29) | |
2127 | #define GEN8_PIPE_CDCLK_CRC_DONE REG_BIT(28) | |
a669b813 VS |
2128 | #define GEN12_PIPEDMC_INTERRUPT REG_BIT(26) /* tgl+ */ |
2129 | #define GEN12_PIPEDMC_FAULT REG_BIT(25) /* tgl+ */ | |
851de367 | 2130 | #define MTL_PIPEDMC_ATS_FAULT REG_BIT(24) /* mtl+ */ |
9994be55 VS |
2131 | #define GEN11_PIPE_PLANE7_FAULT REG_BIT(22) /* icl/tgl */ |
2132 | #define GEN11_PIPE_PLANE6_FAULT REG_BIT(21) /* icl/tgl */ | |
2133 | #define GEN11_PIPE_PLANE5_FAULT REG_BIT(20) /* icl+ */ | |
ad738e48 | 2134 | #define GEN12_PIPE_VBLANK_UNMOD REG_BIT(19) /* tgl+ */ |
851de367 | 2135 | #define MTL_PLANE_ATS_FAULT REG_BIT(18) /* mtl+ */ |
fa63577f VS |
2136 | #define GEN11_PIPE_PLANE7_FLIP_DONE REG_BIT(18) /* icl/tgl */ |
2137 | #define GEN11_PIPE_PLANE6_FLIP_DONE REG_BIT(17) /* icl/tgl */ | |
2138 | #define GEN11_PIPE_PLANE5_FLIP_DONE REG_BIT(16) /* icl+ */ | |
81a1c37c VS |
2139 | #define GEN12_DSB_2_INT REG_BIT(15) /* tgl+ */ |
2140 | #define GEN12_DSB_1_INT REG_BIT(14) /* tgl+ */ | |
2141 | #define GEN12_DSB_0_INT REG_BIT(13) /* tgl+ */ | |
2142 | #define GEN12_DSB_INT(dsb_id) REG_BIT(13 + (dsb_id)) | |
ad738e48 | 2143 | #define GEN9_PIPE_CURSOR_FAULT REG_BIT(11) /* skl+ */ |
9994be55 | 2144 | #define GEN9_PIPE_PLANE4_FAULT REG_BIT(10) /* skl+ */ |
ad738e48 | 2145 | #define GEN8_PIPE_CURSOR_FAULT REG_BIT(10) /* bdw */ |
9994be55 | 2146 | #define GEN9_PIPE_PLANE3_FAULT REG_BIT(9) /* skl+ */ |
ad738e48 | 2147 | #define GEN8_PIPE_SPRITE_FAULT REG_BIT(9) /* bdw */ |
9994be55 | 2148 | #define GEN9_PIPE_PLANE2_FAULT REG_BIT(8) /* skl+ */ |
ad738e48 | 2149 | #define GEN8_PIPE_PRIMARY_FAULT REG_BIT(8) /* bdw */ |
9994be55 VS |
2150 | #define GEN9_PIPE_PLANE1_FAULT REG_BIT(7) /* skl+ */ |
2151 | #define GEN9_PIPE_PLANE4_FLIP_DONE REG_BIT(6) /* skl+ */ | |
2152 | #define GEN9_PIPE_PLANE3_FLIP_DONE REG_BIT(5) /* skl+ */ | |
ad738e48 | 2153 | #define GEN8_PIPE_SPRITE_FLIP_DONE REG_BIT(5) /* bdw */ |
9994be55 | 2154 | #define GEN9_PIPE_PLANE2_FLIP_DONE REG_BIT(4) /* skl+ */ |
ad738e48 | 2155 | #define GEN8_PIPE_PRIMARY_FLIP_DONE REG_BIT(4) /* bdw */ |
9994be55 | 2156 | #define GEN9_PIPE_PLANE1_FLIP_DONE REG_BIT(3) /* skl+ */ |
fa63577f VS |
2157 | #define GEN9_PIPE_PLANE_FLIP_DONE(plane_id) \ |
2158 | REG_BIT(((plane_id) >= PLANE_5 ? 16 - PLANE_5 : 3 - PLANE_1) + (plane_id)) /* skl+ */ | |
ad738e48 VS |
2159 | #define GEN8_PIPE_SCAN_LINE_EVENT REG_BIT(2) |
2160 | #define GEN8_PIPE_VSYNC REG_BIT(1) | |
2161 | #define GEN8_PIPE_VBLANK REG_BIT(0) | |
abd58f01 | 2162 | |
de0cbc74 JN |
2163 | #define GEN8_DE_PIPE_IRQ_REGS(pipe) I915_IRQ_REGS(GEN8_DE_PIPE_IMR(pipe), \ |
2164 | GEN8_DE_PIPE_IER(pipe), \ | |
2165 | GEN8_DE_PIPE_IIR(pipe)) | |
2166 | ||
8625b221 | 2167 | #define _HPD_PIN_DDI(hpd_pin) ((hpd_pin) - HPD_PORT_A) |
5b76e860 | 2168 | #define _HPD_PIN_TC(hpd_pin) ((hpd_pin) - HPD_PORT_TC1) |
8625b221 | 2169 | |
f0f59a00 VS |
2170 | #define GEN8_DE_PORT_ISR _MMIO(0x44440) |
2171 | #define GEN8_DE_PORT_IMR _MMIO(0x44444) | |
2172 | #define GEN8_DE_PORT_IIR _MMIO(0x44448) | |
2173 | #define GEN8_DE_PORT_IER _MMIO(0x4444c) | |
64ad532a VK |
2174 | #define DSI1_NON_TE (1 << 31) |
2175 | #define DSI0_NON_TE (1 << 30) | |
bb187e93 | 2176 | #define ICL_AUX_CHANNEL_E (1 << 29) |
938a8a9a | 2177 | #define ICL_AUX_CHANNEL_F (1 << 28) |
88e04703 JB |
2178 | #define GEN9_AUX_CHANNEL_D (1 << 27) |
2179 | #define GEN9_AUX_CHANNEL_C (1 << 26) | |
2180 | #define GEN9_AUX_CHANNEL_B (1 << 25) | |
64ad532a VK |
2181 | #define DSI1_TE (1 << 24) |
2182 | #define DSI0_TE (1 << 23) | |
e5abaab3 VS |
2183 | #define GEN8_DE_PORT_HOTPLUG(hpd_pin) REG_BIT(3 + _HPD_PIN_DDI(hpd_pin)) |
2184 | #define BXT_DE_PORT_HOTPLUG_MASK (GEN8_DE_PORT_HOTPLUG(HPD_PORT_A) | \ | |
2185 | GEN8_DE_PORT_HOTPLUG(HPD_PORT_B) | \ | |
2186 | GEN8_DE_PORT_HOTPLUG(HPD_PORT_C)) | |
2187 | #define BDW_DE_PORT_HOTPLUG_MASK GEN8_DE_PORT_HOTPLUG(HPD_PORT_A) | |
9e63743e | 2188 | #define BXT_DE_PORT_GMBUS (1 << 1) |
6d766f02 | 2189 | #define GEN8_AUX_CHANNEL_A (1 << 0) |
20fe778f MR |
2190 | #define TGL_DE_PORT_AUX_USBC6 REG_BIT(13) |
2191 | #define XELPD_DE_PORT_AUX_DDIE REG_BIT(13) | |
2192 | #define TGL_DE_PORT_AUX_USBC5 REG_BIT(12) | |
2193 | #define XELPD_DE_PORT_AUX_DDID REG_BIT(12) | |
2194 | #define TGL_DE_PORT_AUX_USBC4 REG_BIT(11) | |
2195 | #define TGL_DE_PORT_AUX_USBC3 REG_BIT(10) | |
2196 | #define TGL_DE_PORT_AUX_USBC2 REG_BIT(9) | |
2197 | #define TGL_DE_PORT_AUX_USBC1 REG_BIT(8) | |
2198 | #define TGL_DE_PORT_AUX_DDIC REG_BIT(2) | |
2199 | #define TGL_DE_PORT_AUX_DDIB REG_BIT(1) | |
2200 | #define TGL_DE_PORT_AUX_DDIA REG_BIT(0) | |
abd58f01 | 2201 | |
7a26b3f1 JN |
2202 | #define GEN8_DE_PORT_IRQ_REGS I915_IRQ_REGS(GEN8_DE_PORT_IMR, \ |
2203 | GEN8_DE_PORT_IER, \ | |
2204 | GEN8_DE_PORT_IIR) | |
2205 | ||
f0f59a00 VS |
2206 | #define GEN8_DE_MISC_ISR _MMIO(0x44460) |
2207 | #define GEN8_DE_MISC_IMR _MMIO(0x44464) | |
2208 | #define GEN8_DE_MISC_IIR _MMIO(0x44468) | |
2209 | #define GEN8_DE_MISC_IER _MMIO(0x4446c) | |
7d113cce | 2210 | #define XELPDP_RM_TIMEOUT REG_BIT(29) |
4c4cc7ac MK |
2211 | #define XELPDP_PMDEMAND_RSPTOUT_ERR REG_BIT(27) |
2212 | #define GEN8_DE_MISC_GSE REG_BIT(27) | |
2213 | #define GEN8_DE_EDP_PSR REG_BIT(19) | |
2214 | #define XELPDP_PMDEMAND_RSP REG_BIT(3) | |
98d2f253 | 2215 | #define XE2LPD_DBUF_OVERLAP_DETECTED REG_BIT(1) |
abd58f01 | 2216 | |
7a26b3f1 JN |
2217 | #define GEN8_DE_MISC_IRQ_REGS I915_IRQ_REGS(GEN8_DE_MISC_IMR, \ |
2218 | GEN8_DE_MISC_IER, \ | |
2219 | GEN8_DE_MISC_IIR) | |
2220 | ||
f0f59a00 VS |
2221 | #define GEN8_PCU_ISR _MMIO(0x444e0) |
2222 | #define GEN8_PCU_IMR _MMIO(0x444e4) | |
2223 | #define GEN8_PCU_IIR _MMIO(0x444e8) | |
2224 | #define GEN8_PCU_IER _MMIO(0x444ec) | |
abd58f01 | 2225 | |
7a26b3f1 JN |
2226 | #define GEN8_PCU_IRQ_REGS I915_IRQ_REGS(GEN8_PCU_IMR, \ |
2227 | GEN8_PCU_IER, \ | |
2228 | GEN8_PCU_IIR) | |
2229 | ||
df0d28c1 DP |
2230 | #define GEN11_GU_MISC_ISR _MMIO(0x444f0) |
2231 | #define GEN11_GU_MISC_IMR _MMIO(0x444f4) | |
2232 | #define GEN11_GU_MISC_IIR _MMIO(0x444f8) | |
2233 | #define GEN11_GU_MISC_IER _MMIO(0x444fc) | |
2234 | #define GEN11_GU_MISC_GSE (1 << 27) | |
2235 | ||
7a26b3f1 JN |
2236 | #define GEN11_GU_MISC_IRQ_REGS I915_IRQ_REGS(GEN11_GU_MISC_IMR, \ |
2237 | GEN11_GU_MISC_IER, \ | |
2238 | GEN11_GU_MISC_IIR) | |
2239 | ||
a6358dda TU |
2240 | #define GEN11_GFX_MSTR_IRQ _MMIO(0x190010) |
2241 | #define GEN11_MASTER_IRQ (1 << 31) | |
2242 | #define GEN11_PCU_IRQ (1 << 30) | |
df0d28c1 | 2243 | #define GEN11_GU_MISC_IRQ (1 << 29) |
a6358dda TU |
2244 | #define GEN11_DISPLAY_IRQ (1 << 16) |
2245 | #define GEN11_GT_DW_IRQ(x) (1 << (x)) | |
2246 | #define GEN11_GT_DW1_IRQ (1 << 1) | |
2247 | #define GEN11_GT_DW0_IRQ (1 << 0) | |
2248 | ||
22e26af7 | 2249 | #define DG1_MSTR_TILE_INTR _MMIO(0x190008) |
97b492f5 | 2250 | #define DG1_MSTR_IRQ REG_BIT(31) |
22e26af7 | 2251 | #define DG1_MSTR_TILE(t) REG_BIT(t) |
97b492f5 | 2252 | |
a6358dda TU |
2253 | #define GEN11_DISPLAY_INT_CTL _MMIO(0x44200) |
2254 | #define GEN11_DISPLAY_IRQ_ENABLE (1 << 31) | |
2255 | #define GEN11_AUDIO_CODEC_IRQ (1 << 24) | |
2256 | #define GEN11_DE_PCH_IRQ (1 << 23) | |
2257 | #define GEN11_DE_MISC_IRQ (1 << 22) | |
121e758e | 2258 | #define GEN11_DE_HPD_IRQ (1 << 21) |
a6358dda TU |
2259 | #define GEN11_DE_PORT_IRQ (1 << 20) |
2260 | #define GEN11_DE_PIPE_C (1 << 18) | |
2261 | #define GEN11_DE_PIPE_B (1 << 17) | |
2262 | #define GEN11_DE_PIPE_A (1 << 16) | |
2263 | ||
121e758e DP |
2264 | #define GEN11_DE_HPD_ISR _MMIO(0x44470) |
2265 | #define GEN11_DE_HPD_IMR _MMIO(0x44474) | |
2266 | #define GEN11_DE_HPD_IIR _MMIO(0x44478) | |
2267 | #define GEN11_DE_HPD_IER _MMIO(0x4447c) | |
5b76e860 VS |
2268 | #define GEN11_TC_HOTPLUG(hpd_pin) REG_BIT(16 + _HPD_PIN_TC(hpd_pin)) |
2269 | #define GEN11_DE_TC_HOTPLUG_MASK (GEN11_TC_HOTPLUG(HPD_PORT_TC6) | \ | |
2270 | GEN11_TC_HOTPLUG(HPD_PORT_TC5) | \ | |
2271 | GEN11_TC_HOTPLUG(HPD_PORT_TC4) | \ | |
2272 | GEN11_TC_HOTPLUG(HPD_PORT_TC3) | \ | |
2273 | GEN11_TC_HOTPLUG(HPD_PORT_TC2) | \ | |
2274 | GEN11_TC_HOTPLUG(HPD_PORT_TC1)) | |
2275 | #define GEN11_TBT_HOTPLUG(hpd_pin) REG_BIT(_HPD_PIN_TC(hpd_pin)) | |
2276 | #define GEN11_DE_TBT_HOTPLUG_MASK (GEN11_TBT_HOTPLUG(HPD_PORT_TC6) | \ | |
2277 | GEN11_TBT_HOTPLUG(HPD_PORT_TC5) | \ | |
2278 | GEN11_TBT_HOTPLUG(HPD_PORT_TC4) | \ | |
2279 | GEN11_TBT_HOTPLUG(HPD_PORT_TC3) | \ | |
2280 | GEN11_TBT_HOTPLUG(HPD_PORT_TC2) | \ | |
2281 | GEN11_TBT_HOTPLUG(HPD_PORT_TC1)) | |
b796b971 | 2282 | |
7a26b3f1 JN |
2283 | #define GEN11_DE_HPD_IRQ_REGS I915_IRQ_REGS(GEN11_DE_HPD_IMR, \ |
2284 | GEN11_DE_HPD_IER, \ | |
2285 | GEN11_DE_HPD_IIR) | |
2286 | ||
b796b971 | 2287 | #define GEN11_TBT_HOTPLUG_CTL _MMIO(0x44030) |
121e758e | 2288 | #define GEN11_TC_HOTPLUG_CTL _MMIO(0x44038) |
5b76e860 VS |
2289 | #define GEN11_HOTPLUG_CTL_ENABLE(hpd_pin) (8 << (_HPD_PIN_TC(hpd_pin) * 4)) |
2290 | #define GEN11_HOTPLUG_CTL_LONG_DETECT(hpd_pin) (2 << (_HPD_PIN_TC(hpd_pin) * 4)) | |
2291 | #define GEN11_HOTPLUG_CTL_SHORT_DETECT(hpd_pin) (1 << (_HPD_PIN_TC(hpd_pin) * 4)) | |
2292 | #define GEN11_HOTPLUG_CTL_NO_DETECT(hpd_pin) (0 << (_HPD_PIN_TC(hpd_pin) * 4)) | |
121e758e | 2293 | |
babde06d MK |
2294 | #define PICAINTERRUPT_ISR _MMIO(0x16FE50) |
2295 | #define PICAINTERRUPT_IMR _MMIO(0x16FE54) | |
2296 | #define PICAINTERRUPT_IIR _MMIO(0x16FE58) | |
2297 | #define PICAINTERRUPT_IER _MMIO(0x16FE5C) | |
babde06d MK |
2298 | #define XELPDP_DP_ALT_HOTPLUG(hpd_pin) REG_BIT(16 + _HPD_PIN_TC(hpd_pin)) |
2299 | #define XELPDP_DP_ALT_HOTPLUG_MASK REG_GENMASK(19, 16) | |
babde06d MK |
2300 | #define XELPDP_AUX_TC(hpd_pin) REG_BIT(8 + _HPD_PIN_TC(hpd_pin)) |
2301 | #define XELPDP_AUX_TC_MASK REG_GENMASK(11, 8) | |
925163b4 GS |
2302 | #define XE2LPD_AUX_DDI(hpd_pin) REG_BIT(6 + _HPD_PIN_DDI(hpd_pin)) |
2303 | #define XE2LPD_AUX_DDI_MASK REG_GENMASK(7, 6) | |
babde06d MK |
2304 | #define XELPDP_TBT_HOTPLUG(hpd_pin) REG_BIT(_HPD_PIN_TC(hpd_pin)) |
2305 | #define XELPDP_TBT_HOTPLUG_MASK REG_GENMASK(3, 0) | |
2306 | ||
7a26b3f1 JN |
2307 | #define PICAINTERRUPT_IRQ_REGS I915_IRQ_REGS(PICAINTERRUPT_IMR, \ |
2308 | PICAINTERRUPT_IER, \ | |
2309 | PICAINTERRUPT_IIR) | |
2310 | ||
babde06d MK |
2311 | #define XELPDP_PORT_HOTPLUG_CTL(hpd_pin) _MMIO(0x16F270 + (_HPD_PIN_TC(hpd_pin) * 0x200)) |
2312 | #define XELPDP_TBT_HOTPLUG_ENABLE REG_BIT(6) | |
2313 | #define XELPDP_TBT_HPD_LONG_DETECT REG_BIT(5) | |
2314 | #define XELPDP_TBT_HPD_SHORT_DETECT REG_BIT(4) | |
2315 | #define XELPDP_DP_ALT_HOTPLUG_ENABLE REG_BIT(2) | |
2316 | #define XELPDP_DP_ALT_HPD_LONG_DETECT REG_BIT(1) | |
2317 | #define XELPDP_DP_ALT_HPD_SHORT_DETECT REG_BIT(0) | |
2318 | ||
4c4cc7ac MK |
2319 | #define XELPDP_INITIATE_PMDEMAND_REQUEST(dword) _MMIO(0x45230 + 4 * (dword)) |
2320 | #define XELPDP_PMDEMAND_QCLK_GV_BW_MASK REG_GENMASK(31, 16) | |
2321 | #define XELPDP_PMDEMAND_VOLTAGE_INDEX_MASK REG_GENMASK(14, 12) | |
2322 | #define XELPDP_PMDEMAND_QCLK_GV_INDEX_MASK REG_GENMASK(11, 8) | |
ae03d707 | 2323 | #define XE3_PMDEMAND_PIPES_MASK REG_GENMASK(7, 4) |
4c4cc7ac MK |
2324 | #define XELPDP_PMDEMAND_PIPES_MASK REG_GENMASK(7, 6) |
2325 | #define XELPDP_PMDEMAND_DBUFS_MASK REG_GENMASK(5, 4) | |
2326 | #define XELPDP_PMDEMAND_PHYS_MASK REG_GENMASK(2, 0) | |
2327 | ||
2328 | #define XELPDP_PMDEMAND_REQ_ENABLE REG_BIT(31) | |
2329 | #define XELPDP_PMDEMAND_CDCLK_FREQ_MASK REG_GENMASK(30, 20) | |
2330 | #define XELPDP_PMDEMAND_DDICLK_FREQ_MASK REG_GENMASK(18, 8) | |
2331 | #define XELPDP_PMDEMAND_SCALERS_MASK REG_GENMASK(6, 4) | |
2332 | #define XELPDP_PMDEMAND_PLLS_MASK REG_GENMASK(2, 0) | |
2333 | ||
2334 | #define GEN12_DCPR_STATUS_1 _MMIO(0x46440) | |
2335 | #define XELPDP_PMDEMAND_INFLIGHT_STATUS REG_BIT(26) | |
2336 | ||
f0f59a00 | 2337 | #define ILK_DISPLAY_CHICKEN2 _MMIO(0x42004) |
67e92af0 | 2338 | /* Required on all Ironlake and Sandybridge according to the B-Spec. */ |
3df3c589 VS |
2339 | #define ILK_ELPIN_409_SELECT REG_BIT(25) |
2340 | #define ILK_DPARB_GATE REG_BIT(22) | |
2341 | #define ILK_VSDPFD_FULL REG_BIT(21) | |
2342 | ||
2343 | #define FUSE_STRAP _MMIO(0x42014) | |
2344 | #define ILK_INTERNAL_GRAPHICS_DISABLE REG_BIT(31) | |
2345 | #define ILK_INTERNAL_DISPLAY_DISABLE REG_BIT(30) | |
2346 | #define ILK_DISPLAY_DEBUG_DISABLE REG_BIT(29) | |
2347 | #define IVB_PIPE_C_DISABLE REG_BIT(28) | |
2348 | #define ILK_HDCP_DISABLE REG_BIT(25) | |
2349 | #define ILK_eDP_A_DISABLE REG_BIT(24) | |
2350 | #define HSW_CDCLK_LIMIT REG_BIT(24) | |
2351 | #define ILK_DESKTOP REG_BIT(23) | |
2352 | #define HSW_CPU_SSC_ENABLE REG_BIT(21) | |
2353 | ||
2354 | #define FUSE_STRAP3 _MMIO(0x42020) | |
2355 | #define HSW_REF_CLK_SELECT REG_BIT(1) | |
2356 | ||
2357 | #define ILK_DSPCLK_GATE_D _MMIO(0x42020) | |
2358 | #define ILK_VRHUNIT_CLOCK_GATE_DISABLE REG_BIT(28) | |
2359 | #define ILK_DPFCUNIT_CLOCK_GATE_DISABLE REG_BIT(9) | |
2360 | #define ILK_DPFCRUNIT_CLOCK_GATE_DISABLE REG_BIT(8) | |
2361 | #define ILK_DPFDUNIT_CLOCK_GATE_ENABLE REG_BIT(7) | |
2362 | #define ILK_DPARBUNIT_CLOCK_GATE_ENABLE REG_BIT(5) | |
2363 | ||
2364 | #define IVB_CHICKEN3 _MMIO(0x4200c) | |
2365 | #define CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE REG_BIT(5) | |
2366 | #define CHICKEN3_DGMG_DONE_FIX_DISABLE REG_BIT(2) | |
2367 | ||
2368 | #define CHICKEN_PAR1_1 _MMIO(0x42080) | |
3d0d3336 VS |
2369 | #define IGNORE_KVMR_PIPE_A REG_BIT(23) |
2370 | #define KBL_ARB_FILL_SPARE_22 REG_BIT(22) | |
3df3c589 VS |
2371 | #define DIS_RAM_BYPASS_PSR2_MAN_TRACK REG_BIT(16) |
2372 | #define SKL_DE_COMPRESSED_HASH_MODE REG_BIT(15) | |
2590ef92 | 2373 | #define HSW_MASK_VBL_TO_PIPE_IN_SRD REG_BIT(15) /* hsw/bdw */ |
3df3c589 VS |
2374 | #define FORCE_ARB_IDLE_PLANES REG_BIT(14) |
2375 | #define SKL_EDP_PSR_FIX_RDWRAP REG_BIT(3) | |
2376 | #define IGNORE_PSR2_HW_TRACKING REG_BIT(1) | |
90a88643 | 2377 | |
17e0adf0 | 2378 | #define CHICKEN_PAR2_1 _MMIO(0x42090) |
3df3c589 | 2379 | #define KVM_CONFIG_CHANGE_NOTIFICATION_SELECT REG_BIT(14) |
17e0adf0 | 2380 | |
f4f4b59b | 2381 | #define CHICKEN_MISC_2 _MMIO(0x42084) |
3d0d3336 | 2382 | #define CHICKEN_MISC_DISABLE_DPT REG_BIT(30) /* adl,dg2 */ |
0dffea1e | 2383 | #define BMG_DARB_HALF_BLK_END_BURST REG_BIT(27) |
3d0d3336 VS |
2384 | #define KBL_ARB_FILL_SPARE_14 REG_BIT(14) |
2385 | #define KBL_ARB_FILL_SPARE_13 REG_BIT(13) | |
3df3c589 VS |
2386 | #define GLK_CL2_PWR_DOWN REG_BIT(12) |
2387 | #define GLK_CL1_PWR_DOWN REG_BIT(11) | |
2388 | #define GLK_CL0_PWR_DOWN REG_BIT(10) | |
d8d4a512 | 2389 | |
9655a9a7 | 2390 | #define CHICKEN_MISC_3 _MMIO(0x42088) |
d4e745ba | 2391 | #define DP_MST_DPT_DPTP_ALIGN_WA(trans) REG_BIT(9 + (trans) - TRANSCODER_A) |
1af52d05 | 2392 | #define DP_MST_SHORT_HBLANK_WA(trans) REG_BIT(5 + (trans) - TRANSCODER_A) |
9655a9a7 ID |
2393 | #define DP_MST_FEC_BS_JITTER_WA(trans) REG_BIT(0 + (trans) - TRANSCODER_A) |
2394 | ||
5654a162 | 2395 | #define CHICKEN_MISC_4 _MMIO(0x4208c) |
2670ff5c VS |
2396 | #define CHICKEN_FBC_STRIDE_OVERRIDE REG_BIT(13) |
2397 | #define CHICKEN_FBC_STRIDE_MASK REG_GENMASK(12, 0) | |
2398 | #define CHICKEN_FBC_STRIDE(x) REG_FIELD_PREP(CHICKEN_FBC_STRIDE_MASK, (x)) | |
5654a162 | 2399 | |
fe4ab3ce BW |
2400 | #define _CHICKEN_PIPESL_1_A 0x420b0 |
2401 | #define _CHICKEN_PIPESL_1_B 0x420b4 | |
3d0d3336 VS |
2402 | #define CHICKEN_PIPESL_1(pipe) _MMIO_PIPE(pipe, _CHICKEN_PIPESL_1_A, _CHICKEN_PIPESL_1_B) |
2403 | #define HSW_PRI_STRETCH_MAX_MASK REG_GENMASK(28, 27) | |
2404 | #define HSW_PRI_STRETCH_MAX_X8 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 0) | |
2405 | #define HSW_PRI_STRETCH_MAX_X4 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 1) | |
2406 | #define HSW_PRI_STRETCH_MAX_X2 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 2) | |
2407 | #define HSW_PRI_STRETCH_MAX_X1 REG_FIELD_PREP(HSW_PRI_STRETCH_MAX_MASK, 3) | |
2408 | #define HSW_SPR_STRETCH_MAX_MASK REG_GENMASK(26, 25) | |
2409 | #define HSW_SPR_STRETCH_MAX_X8 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 0) | |
2410 | #define HSW_SPR_STRETCH_MAX_X4 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 1) | |
2411 | #define HSW_SPR_STRETCH_MAX_X2 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 2) | |
2412 | #define HSW_SPR_STRETCH_MAX_X1 REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 3) | |
3df3c589 | 2413 | #define HSW_FBCQ_DIS REG_BIT(22) |
2590ef92 VS |
2414 | #define HSW_UNMASK_VBL_TO_REGS_IN_SRD REG_BIT(15) /* hsw */ |
2415 | #define SKL_PSR_MASK_PLANE_FLIP REG_BIT(11) /* skl+ */ | |
3d0d3336 VS |
2416 | #define SKL_PLANE1_STRETCH_MAX_MASK REG_GENMASK(1, 0) |
2417 | #define SKL_PLANE1_STRETCH_MAX_X8 REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 0) | |
2418 | #define SKL_PLANE1_STRETCH_MAX_X4 REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 1) | |
2419 | #define SKL_PLANE1_STRETCH_MAX_X2 REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 2) | |
2420 | #define SKL_PLANE1_STRETCH_MAX_X1 REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 3) | |
2590ef92 | 2421 | #define BDW_UNMASK_VBL_TO_REGS_IN_SRD REG_BIT(0) /* bdw */ |
fe4ab3ce | 2422 | |
12c4d4c1 VS |
2423 | #define _CHICKEN_TRANS_A 0x420c0 |
2424 | #define _CHICKEN_TRANS_B 0x420c4 | |
2425 | #define _CHICKEN_TRANS_C 0x420c8 | |
2426 | #define _CHICKEN_TRANS_EDP 0x420cc | |
1d581dc3 | 2427 | #define _CHICKEN_TRANS_D 0x420d8 |
8c694274 | 2428 | #define _CHICKEN_TRANS(trans) _MMIO(_PICK((trans), \ |
12c4d4c1 VS |
2429 | [TRANSCODER_EDP] = _CHICKEN_TRANS_EDP, \ |
2430 | [TRANSCODER_A] = _CHICKEN_TRANS_A, \ | |
2431 | [TRANSCODER_B] = _CHICKEN_TRANS_B, \ | |
1d581dc3 VS |
2432 | [TRANSCODER_C] = _CHICKEN_TRANS_C, \ |
2433 | [TRANSCODER_D] = _CHICKEN_TRANS_D)) | |
4aaa1a98 MTP |
2434 | #define _MTL_CHICKEN_TRANS_A 0x604e0 |
2435 | #define _MTL_CHICKEN_TRANS_B 0x614e0 | |
8c694274 | 2436 | #define _MTL_CHICKEN_TRANS(trans) _MMIO_TRANS((trans), \ |
4aaa1a98 MTP |
2437 | _MTL_CHICKEN_TRANS_A, \ |
2438 | _MTL_CHICKEN_TRANS_B) | |
8c694274 | 2439 | #define CHICKEN_TRANS(display, trans) (DISPLAY_VER(display) >= 14 ? _MTL_CHICKEN_TRANS(trans) : _CHICKEN_TRANS(trans)) |
810e4519 | 2440 | #define PIPE_VBLANK_WITH_DELAY REG_BIT(31) /* tgl+ */ |
2590ef92 | 2441 | #define SKL_UNMASK_VBL_TO_PIPE_IN_SRD REG_BIT(30) /* skl+ */ |
3d0d3336 VS |
2442 | #define HSW_FRAME_START_DELAY_MASK REG_GENMASK(28, 27) |
2443 | #define HSW_FRAME_START_DELAY(x) REG_FIELD_PREP(HSW_FRAME_START_DELAY_MASK, x) | |
2444 | #define VSC_DATA_SEL_SOFTWARE_CONTROL REG_BIT(25) /* GLK */ | |
2445 | #define FECSTALL_DIS_DPTSTREAM_DPTTG REG_BIT(23) | |
2446 | #define DDI_TRAINING_OVERRIDE_ENABLE REG_BIT(19) | |
2447 | #define ADLP_1_BASED_X_GRANULARITY REG_BIT(18) | |
2448 | #define DDI_TRAINING_OVERRIDE_VALUE REG_BIT(18) | |
2449 | #define DDIE_TRAINING_OVERRIDE_ENABLE REG_BIT(17) /* CHICKEN_TRANS_A only */ | |
2450 | #define DDIE_TRAINING_OVERRIDE_VALUE REG_BIT(16) /* CHICKEN_TRANS_A only */ | |
2451 | #define PSR2_ADD_VERTICAL_LINE_COUNT REG_BIT(15) | |
8f6372a4 | 2452 | #define DP_FEC_BS_JITTER_WA REG_BIT(15) |
3d0d3336 | 2453 | #define PSR2_VSC_ENABLE_PROG_HEADER REG_BIT(12) |
7e3025c6 | 2454 | #define DP_DSC_INSERT_SF_AT_EOL_WA REG_BIT(4) |
6a3691ca | 2455 | #define HDCP_LINE_REKEY_DISABLE REG_BIT(0) |
d86f0482 | 2456 | |
f0f59a00 | 2457 | #define DISP_ARB_CTL _MMIO(0x45000) |
3df3c589 VS |
2458 | #define DISP_FBC_MEMORY_WAKE REG_BIT(31) |
2459 | #define DISP_TILE_SURFACE_SWIZZLING REG_BIT(13) | |
2460 | #define DISP_FBC_WM_DIS REG_BIT(15) | |
2461 | ||
f0f59a00 | 2462 | #define DISP_ARB_CTL2 _MMIO(0x45004) |
3df3c589 VS |
2463 | #define DISP_DATA_PARTITION_5_6 REG_BIT(6) |
2464 | #define DISP_IPC_ENABLE REG_BIT(3) | |
359d0eff | 2465 | |
f0f59a00 | 2466 | #define GEN7_MSG_CTL _MMIO(0x45010) |
5ee8ee86 PZ |
2467 | #define WAIT_FOR_PCH_RESET_ACK (1 << 1) |
2468 | #define WAIT_FOR_PCH_FLR_ACK (1 << 0) | |
3fa01d64 | 2469 | |
62afef28 MR |
2470 | #define _BW_BUDDY0_CTL 0x45130 |
2471 | #define _BW_BUDDY1_CTL 0x45140 | |
2472 | #define BW_BUDDY_CTL(x) _MMIO(_PICK_EVEN(x, \ | |
2473 | _BW_BUDDY0_CTL, \ | |
2474 | _BW_BUDDY1_CTL)) | |
3fa01d64 | 2475 | #define BW_BUDDY_DISABLE REG_BIT(31) |
87e04f75 | 2476 | #define BW_BUDDY_TLB_REQ_TIMER_MASK REG_GENMASK(21, 16) |
62afef28 | 2477 | #define BW_BUDDY_TLB_REQ_TIMER(x) REG_FIELD_PREP(BW_BUDDY_TLB_REQ_TIMER_MASK, x) |
3fa01d64 | 2478 | |
62afef28 MR |
2479 | #define _BW_BUDDY0_PAGE_MASK 0x45134 |
2480 | #define _BW_BUDDY1_PAGE_MASK 0x45144 | |
2481 | #define BW_BUDDY_PAGE_MASK(x) _MMIO(_PICK_EVEN(x, \ | |
2482 | _BW_BUDDY0_PAGE_MASK, \ | |
2483 | _BW_BUDDY1_PAGE_MASK)) | |
3fa01d64 | 2484 | |
f0f59a00 | 2485 | #define HSW_NDE_RSTWRN_OPT _MMIO(0x46408) |
61c86578 RS |
2486 | #define MTL_RESET_PICA_HANDSHAKE_EN REG_BIT(6) |
2487 | #define RESET_PCH_HANDSHAKE_ENABLE REG_BIT(4) | |
553bd149 | 2488 | |
79af2404 | 2489 | #define GEN8_CHICKEN_DCPR_1 _MMIO(0x46430) |
16806984 | 2490 | #define _LATENCY_REPORTING_REMOVED_PIPE_D REG_BIT(31) |
79af2404 | 2491 | #define SKL_SELECT_ALTERNATE_DC_EXIT REG_BIT(30) |
16806984 JN |
2492 | #define _LATENCY_REPORTING_REMOVED_PIPE_C REG_BIT(25) |
2493 | #define _LATENCY_REPORTING_REMOVED_PIPE_B REG_BIT(24) | |
2494 | #define _LATENCY_REPORTING_REMOVED_PIPE_A REG_BIT(23) | |
2495 | #define LATENCY_REPORTING_REMOVED(pipe) _PICK((pipe), \ | |
2496 | _LATENCY_REPORTING_REMOVED_PIPE_A, \ | |
2497 | _LATENCY_REPORTING_REMOVED_PIPE_B, \ | |
2498 | _LATENCY_REPORTING_REMOVED_PIPE_C, \ | |
2499 | _LATENCY_REPORTING_REMOVED_PIPE_D) | |
79af2404 JRS |
2500 | #define ICL_DELAY_PMRSP REG_BIT(22) |
2501 | #define DISABLE_FLR_SRC REG_BIT(15) | |
2502 | #define MASK_WAKEMEM REG_BIT(13) | |
59207e63 | 2503 | #define DDI_CLOCK_REG_ACCESS REG_BIT(7) |
590e8ff0 | 2504 | |
af9e1032 MA |
2505 | #define GEN11_CHICKEN_DCPR_2 _MMIO(0x46434) |
2506 | #define DCPR_MASK_MAXLATENCY_MEMUP_CLR REG_BIT(27) | |
2507 | #define DCPR_MASK_LPMODE REG_BIT(26) | |
2508 | #define DCPR_SEND_RESP_IMM REG_BIT(25) | |
2509 | #define DCPR_CLEAR_MEMSTAT_DIS REG_BIT(24) | |
2510 | ||
4c4cc7ac MK |
2511 | #define XELPD_CHICKEN_DCPR_3 _MMIO(0x46438) |
2512 | #define DMD_RSP_TIMEOUT_DISABLE REG_BIT(19) | |
2513 | ||
f0f59a00 | 2514 | #define SKL_DFSM _MMIO(0x51000) |
7a40aac1 | 2515 | #define SKL_DFSM_DISPLAY_PM_DISABLE (1 << 27) |
74393109 | 2516 | #define SKL_DFSM_DISPLAY_HDCP_DISABLE (1 << 25) |
a20e26d8 JRS |
2517 | #define SKL_DFSM_CDCLK_LIMIT_MASK (3 << 23) |
2518 | #define SKL_DFSM_CDCLK_LIMIT_675 (0 << 23) | |
2519 | #define SKL_DFSM_CDCLK_LIMIT_540 (1 << 23) | |
2520 | #define SKL_DFSM_CDCLK_LIMIT_450 (2 << 23) | |
2521 | #define SKL_DFSM_CDCLK_LIMIT_337_5 (3 << 23) | |
ee595888 | 2522 | #define ICL_DFSM_DMC_DISABLE (1 << 23) |
a20e26d8 JRS |
2523 | #define SKL_DFSM_PIPE_A_DISABLE (1 << 30) |
2524 | #define SKL_DFSM_PIPE_B_DISABLE (1 << 21) | |
2525 | #define SKL_DFSM_PIPE_C_DISABLE (1 << 28) | |
2526 | #define TGL_DFSM_PIPE_D_DISABLE (1 << 22) | |
a4d082fc | 2527 | #define GLK_DFSM_DISPLAY_DSC_DISABLE (1 << 7) |
98d2f253 | 2528 | #define XE2LPD_DFSM_DBUF_OVERLAP_DISABLE (1 << 3) |
a9419e84 | 2529 | |
9a3acd8c VG |
2530 | #define XE2LPD_DE_CAP _MMIO(0x41100) |
2531 | #define XE2LPD_DE_CAP_3DLUT_MASK REG_GENMASK(31, 30) | |
2532 | #define XE2LPD_DE_CAP_DSC_MASK REG_GENMASK(29, 28) | |
2533 | #define XE2LPD_DE_CAP_DSC_REMOVED 1 | |
2534 | #define XE2LPD_DE_CAP_SCALER_MASK REG_GENMASK(27, 26) | |
2535 | #define XE2LPD_DE_CAP_SCALER_SINGLE 1 | |
2536 | ||
186a277e | 2537 | #define SKL_DSSM _MMIO(0x51004) |
186a277e PZ |
2538 | #define ICL_DSSM_CDCLK_PLL_REFCLK_MASK (7 << 29) |
2539 | #define ICL_DSSM_CDCLK_PLL_REFCLK_24MHz (0 << 29) | |
2540 | #define ICL_DSSM_CDCLK_PLL_REFCLK_19_2MHz (1 << 29) | |
2541 | #define ICL_DSSM_CDCLK_PLL_REFCLK_38_4MHz (2 << 29) | |
945f2672 | 2542 | |
c2c70752 MR |
2543 | #define GMD_ID_DISPLAY _MMIO(0x510a0) |
2544 | #define GMD_ID_ARCH_MASK REG_GENMASK(31, 22) | |
2545 | #define GMD_ID_RELEASE_MASK REG_GENMASK(21, 14) | |
2546 | #define GMD_ID_STEP REG_GENMASK(5, 0) | |
2547 | ||
e16a3750 | 2548 | /*GEN11 chicken */ |
26eeea15 AS |
2549 | #define _PIPEA_CHICKEN 0x70038 |
2550 | #define _PIPEB_CHICKEN 0x71038 | |
2551 | #define _PIPEC_CHICKEN 0x72038 | |
2552 | #define PIPE_CHICKEN(pipe) _MMIO_PIPE(pipe, _PIPEA_CHICKEN,\ | |
2553 | _PIPEB_CHICKEN) | |
ba3b049f MR |
2554 | #define UNDERRUN_RECOVERY_DISABLE_ADLP REG_BIT(30) |
2555 | #define UNDERRUN_RECOVERY_ENABLE_DG2 REG_BIT(30) | |
7cbea1b6 MR |
2556 | #define PIXEL_ROUNDING_TRUNC_FB_PASSTHRU REG_BIT(15) |
2557 | #define DG2_RENDER_CCSTAG_4_3_EN REG_BIT(12) | |
2558 | #define PER_PIXEL_ALPHA_BYPASS_EN REG_BIT(7) | |
e16a3750 | 2559 | |
b9055052 ZW |
2560 | /* PCH */ |
2561 | ||
dce88879 LDM |
2562 | #define PCH_DISPLAY_BASE 0xc0000u |
2563 | ||
23e81d69 | 2564 | /* south display engine interrupt: IBX */ |
776ad806 JB |
2565 | #define SDE_AUDIO_POWER_D (1 << 27) |
2566 | #define SDE_AUDIO_POWER_C (1 << 26) | |
2567 | #define SDE_AUDIO_POWER_B (1 << 25) | |
2568 | #define SDE_AUDIO_POWER_SHIFT (25) | |
2569 | #define SDE_AUDIO_POWER_MASK (7 << SDE_AUDIO_POWER_SHIFT) | |
2570 | #define SDE_GMBUS (1 << 24) | |
2571 | #define SDE_AUDIO_HDCP_TRANSB (1 << 23) | |
2572 | #define SDE_AUDIO_HDCP_TRANSA (1 << 22) | |
2573 | #define SDE_AUDIO_HDCP_MASK (3 << 22) | |
2574 | #define SDE_AUDIO_TRANSB (1 << 21) | |
2575 | #define SDE_AUDIO_TRANSA (1 << 20) | |
2576 | #define SDE_AUDIO_TRANS_MASK (3 << 20) | |
2577 | #define SDE_POISON (1 << 19) | |
2578 | /* 18 reserved */ | |
2579 | #define SDE_FDI_RXB (1 << 17) | |
2580 | #define SDE_FDI_RXA (1 << 16) | |
2581 | #define SDE_FDI_MASK (3 << 16) | |
2582 | #define SDE_AUXD (1 << 15) | |
2583 | #define SDE_AUXC (1 << 14) | |
2584 | #define SDE_AUXB (1 << 13) | |
2585 | #define SDE_AUX_MASK (7 << 13) | |
2586 | /* 12 reserved */ | |
b9055052 ZW |
2587 | #define SDE_CRT_HOTPLUG (1 << 11) |
2588 | #define SDE_PORTD_HOTPLUG (1 << 10) | |
2589 | #define SDE_PORTC_HOTPLUG (1 << 9) | |
2590 | #define SDE_PORTB_HOTPLUG (1 << 8) | |
2591 | #define SDE_SDVOB_HOTPLUG (1 << 6) | |
e5868a31 EE |
2592 | #define SDE_HOTPLUG_MASK (SDE_CRT_HOTPLUG | \ |
2593 | SDE_SDVOB_HOTPLUG | \ | |
2594 | SDE_PORTB_HOTPLUG | \ | |
2595 | SDE_PORTC_HOTPLUG | \ | |
2596 | SDE_PORTD_HOTPLUG) | |
776ad806 JB |
2597 | #define SDE_TRANSB_CRC_DONE (1 << 5) |
2598 | #define SDE_TRANSB_CRC_ERR (1 << 4) | |
2599 | #define SDE_TRANSB_FIFO_UNDER (1 << 3) | |
2600 | #define SDE_TRANSA_CRC_DONE (1 << 2) | |
2601 | #define SDE_TRANSA_CRC_ERR (1 << 1) | |
2602 | #define SDE_TRANSA_FIFO_UNDER (1 << 0) | |
2603 | #define SDE_TRANS_MASK (0x3f) | |
23e81d69 | 2604 | |
31604222 | 2605 | /* south display engine interrupt: CPT - CNP */ |
23e81d69 AJ |
2606 | #define SDE_AUDIO_POWER_D_CPT (1 << 31) |
2607 | #define SDE_AUDIO_POWER_C_CPT (1 << 30) | |
2608 | #define SDE_AUDIO_POWER_B_CPT (1 << 29) | |
2609 | #define SDE_AUDIO_POWER_SHIFT_CPT 29 | |
2610 | #define SDE_AUDIO_POWER_MASK_CPT (7 << 29) | |
2611 | #define SDE_AUXD_CPT (1 << 27) | |
2612 | #define SDE_AUXC_CPT (1 << 26) | |
2613 | #define SDE_AUXB_CPT (1 << 25) | |
2614 | #define SDE_AUX_MASK_CPT (7 << 25) | |
26951caf | 2615 | #define SDE_PORTE_HOTPLUG_SPT (1 << 25) |
74c0b395 | 2616 | #define SDE_PORTA_HOTPLUG_SPT (1 << 24) |
8db9d77b ZW |
2617 | #define SDE_PORTD_HOTPLUG_CPT (1 << 23) |
2618 | #define SDE_PORTC_HOTPLUG_CPT (1 << 22) | |
2619 | #define SDE_PORTB_HOTPLUG_CPT (1 << 21) | |
23e81d69 | 2620 | #define SDE_CRT_HOTPLUG_CPT (1 << 19) |
73c352a2 | 2621 | #define SDE_SDVOB_HOTPLUG_CPT (1 << 18) |
2d7b8366 | 2622 | #define SDE_HOTPLUG_MASK_CPT (SDE_CRT_HOTPLUG_CPT | \ |
73c352a2 | 2623 | SDE_SDVOB_HOTPLUG_CPT | \ |
2d7b8366 YL |
2624 | SDE_PORTD_HOTPLUG_CPT | \ |
2625 | SDE_PORTC_HOTPLUG_CPT | \ | |
2626 | SDE_PORTB_HOTPLUG_CPT) | |
26951caf XZ |
2627 | #define SDE_HOTPLUG_MASK_SPT (SDE_PORTE_HOTPLUG_SPT | \ |
2628 | SDE_PORTD_HOTPLUG_CPT | \ | |
2629 | SDE_PORTC_HOTPLUG_CPT | \ | |
74c0b395 VS |
2630 | SDE_PORTB_HOTPLUG_CPT | \ |
2631 | SDE_PORTA_HOTPLUG_SPT) | |
23e81d69 | 2632 | #define SDE_GMBUS_CPT (1 << 17) |
8664281b | 2633 | #define SDE_ERROR_CPT (1 << 16) |
23e81d69 AJ |
2634 | #define SDE_AUDIO_CP_REQ_C_CPT (1 << 10) |
2635 | #define SDE_AUDIO_CP_CHG_C_CPT (1 << 9) | |
2636 | #define SDE_FDI_RXC_CPT (1 << 8) | |
2637 | #define SDE_AUDIO_CP_REQ_B_CPT (1 << 6) | |
2638 | #define SDE_AUDIO_CP_CHG_B_CPT (1 << 5) | |
2639 | #define SDE_FDI_RXB_CPT (1 << 4) | |
2640 | #define SDE_AUDIO_CP_REQ_A_CPT (1 << 2) | |
2641 | #define SDE_AUDIO_CP_CHG_A_CPT (1 << 1) | |
2642 | #define SDE_FDI_RXA_CPT (1 << 0) | |
2643 | #define SDE_AUDIO_CP_REQ_CPT (SDE_AUDIO_CP_REQ_C_CPT | \ | |
2644 | SDE_AUDIO_CP_REQ_B_CPT | \ | |
2645 | SDE_AUDIO_CP_REQ_A_CPT) | |
2646 | #define SDE_AUDIO_CP_CHG_CPT (SDE_AUDIO_CP_CHG_C_CPT | \ | |
2647 | SDE_AUDIO_CP_CHG_B_CPT | \ | |
2648 | SDE_AUDIO_CP_CHG_A_CPT) | |
2649 | #define SDE_FDI_MASK_CPT (SDE_FDI_RXC_CPT | \ | |
2650 | SDE_FDI_RXB_CPT | \ | |
2651 | SDE_FDI_RXA_CPT) | |
b9055052 | 2652 | |
babde06d MK |
2653 | /* south display engine interrupt: ICP/TGP/MTP */ |
2654 | #define SDE_PICAINTERRUPT REG_BIT(31) | |
31604222 | 2655 | #define SDE_GMBUS_ICP (1 << 23) |
97011359 | 2656 | #define SDE_TC_HOTPLUG_ICP(hpd_pin) REG_BIT(24 + _HPD_PIN_TC(hpd_pin)) |
2f8a6699 | 2657 | #define SDE_TC_HOTPLUG_DG2(hpd_pin) REG_BIT(25 + _HPD_PIN_TC(hpd_pin)) /* sigh */ |
5f371a81 | 2658 | #define SDE_DDI_HOTPLUG_ICP(hpd_pin) REG_BIT(16 + _HPD_PIN_DDI(hpd_pin)) |
e76ab2cf VS |
2659 | #define SDE_DDI_HOTPLUG_MASK_ICP (SDE_DDI_HOTPLUG_ICP(HPD_PORT_D) | \ |
2660 | SDE_DDI_HOTPLUG_ICP(HPD_PORT_C) | \ | |
5f371a81 VS |
2661 | SDE_DDI_HOTPLUG_ICP(HPD_PORT_B) | \ |
2662 | SDE_DDI_HOTPLUG_ICP(HPD_PORT_A)) | |
e76ab2cf | 2663 | #define SDE_TC_HOTPLUG_MASK_ICP (SDE_TC_HOTPLUG_ICP(HPD_PORT_TC6) | \ |
97011359 VS |
2664 | SDE_TC_HOTPLUG_ICP(HPD_PORT_TC5) | \ |
2665 | SDE_TC_HOTPLUG_ICP(HPD_PORT_TC4) | \ | |
2666 | SDE_TC_HOTPLUG_ICP(HPD_PORT_TC3) | \ | |
2667 | SDE_TC_HOTPLUG_ICP(HPD_PORT_TC2) | \ | |
2668 | SDE_TC_HOTPLUG_ICP(HPD_PORT_TC1)) | |
31604222 | 2669 | |
f0f59a00 VS |
2670 | #define SDEISR _MMIO(0xc4000) |
2671 | #define SDEIMR _MMIO(0xc4004) | |
2672 | #define SDEIIR _MMIO(0xc4008) | |
2673 | #define SDEIER _MMIO(0xc400c) | |
b9055052 | 2674 | |
7a26b3f1 JN |
2675 | #define SDE_IRQ_REGS I915_IRQ_REGS(SDEIMR, \ |
2676 | SDEIER, \ | |
2677 | SDEIIR) | |
2678 | ||
f0f59a00 | 2679 | #define SERR_INT _MMIO(0xc4040) |
5ee8ee86 PZ |
2680 | #define SERR_INT_POISON (1 << 31) |
2681 | #define SERR_INT_TRANS_FIFO_UNDERRUN(pipe) (1 << ((pipe) * 3)) | |
8664281b | 2682 | |
b9055052 | 2683 | /* digital port hotplug */ |
f0f59a00 | 2684 | #define PCH_PORT_HOTPLUG _MMIO(0xc4030) /* SHOTPLUG_CTL */ |
195baa06 | 2685 | #define PORTA_HOTPLUG_ENABLE (1 << 28) /* LPT:LP+ & BXT */ |
d252bf68 | 2686 | #define BXT_DDIA_HPD_INVERT (1 << 27) |
195baa06 VS |
2687 | #define PORTA_HOTPLUG_STATUS_MASK (3 << 24) /* SPT+ & BXT */ |
2688 | #define PORTA_HOTPLUG_NO_DETECT (0 << 24) /* SPT+ & BXT */ | |
2689 | #define PORTA_HOTPLUG_SHORT_DETECT (1 << 24) /* SPT+ & BXT */ | |
2690 | #define PORTA_HOTPLUG_LONG_DETECT (2 << 24) /* SPT+ & BXT */ | |
40bfd7a3 VS |
2691 | #define PORTD_HOTPLUG_ENABLE (1 << 20) |
2692 | #define PORTD_PULSE_DURATION_2ms (0 << 18) /* pre-LPT */ | |
2693 | #define PORTD_PULSE_DURATION_4_5ms (1 << 18) /* pre-LPT */ | |
2694 | #define PORTD_PULSE_DURATION_6ms (2 << 18) /* pre-LPT */ | |
2695 | #define PORTD_PULSE_DURATION_100ms (3 << 18) /* pre-LPT */ | |
2696 | #define PORTD_PULSE_DURATION_MASK (3 << 18) /* pre-LPT */ | |
2697 | #define PORTD_HOTPLUG_STATUS_MASK (3 << 16) | |
b696519e DL |
2698 | #define PORTD_HOTPLUG_NO_DETECT (0 << 16) |
2699 | #define PORTD_HOTPLUG_SHORT_DETECT (1 << 16) | |
2700 | #define PORTD_HOTPLUG_LONG_DETECT (2 << 16) | |
40bfd7a3 | 2701 | #define PORTC_HOTPLUG_ENABLE (1 << 12) |
d252bf68 | 2702 | #define BXT_DDIC_HPD_INVERT (1 << 11) |
40bfd7a3 VS |
2703 | #define PORTC_PULSE_DURATION_2ms (0 << 10) /* pre-LPT */ |
2704 | #define PORTC_PULSE_DURATION_4_5ms (1 << 10) /* pre-LPT */ | |
2705 | #define PORTC_PULSE_DURATION_6ms (2 << 10) /* pre-LPT */ | |
2706 | #define PORTC_PULSE_DURATION_100ms (3 << 10) /* pre-LPT */ | |
2707 | #define PORTC_PULSE_DURATION_MASK (3 << 10) /* pre-LPT */ | |
2708 | #define PORTC_HOTPLUG_STATUS_MASK (3 << 8) | |
b696519e DL |
2709 | #define PORTC_HOTPLUG_NO_DETECT (0 << 8) |
2710 | #define PORTC_HOTPLUG_SHORT_DETECT (1 << 8) | |
2711 | #define PORTC_HOTPLUG_LONG_DETECT (2 << 8) | |
40bfd7a3 | 2712 | #define PORTB_HOTPLUG_ENABLE (1 << 4) |
d252bf68 | 2713 | #define BXT_DDIB_HPD_INVERT (1 << 3) |
40bfd7a3 VS |
2714 | #define PORTB_PULSE_DURATION_2ms (0 << 2) /* pre-LPT */ |
2715 | #define PORTB_PULSE_DURATION_4_5ms (1 << 2) /* pre-LPT */ | |
2716 | #define PORTB_PULSE_DURATION_6ms (2 << 2) /* pre-LPT */ | |
2717 | #define PORTB_PULSE_DURATION_100ms (3 << 2) /* pre-LPT */ | |
2718 | #define PORTB_PULSE_DURATION_MASK (3 << 2) /* pre-LPT */ | |
2719 | #define PORTB_HOTPLUG_STATUS_MASK (3 << 0) | |
b696519e DL |
2720 | #define PORTB_HOTPLUG_NO_DETECT (0 << 0) |
2721 | #define PORTB_HOTPLUG_SHORT_DETECT (1 << 0) | |
2722 | #define PORTB_HOTPLUG_LONG_DETECT (2 << 0) | |
d252bf68 SS |
2723 | #define BXT_DDI_HPD_INVERT_MASK (BXT_DDIA_HPD_INVERT | \ |
2724 | BXT_DDIB_HPD_INVERT | \ | |
2725 | BXT_DDIC_HPD_INVERT) | |
b9055052 | 2726 | |
f0f59a00 | 2727 | #define PCH_PORT_HOTPLUG2 _MMIO(0xc403C) /* SHOTPLUG_CTL2 SPT+ */ |
40bfd7a3 VS |
2728 | #define PORTE_HOTPLUG_ENABLE (1 << 4) |
2729 | #define PORTE_HOTPLUG_STATUS_MASK (3 << 0) | |
26951caf XZ |
2730 | #define PORTE_HOTPLUG_NO_DETECT (0 << 0) |
2731 | #define PORTE_HOTPLUG_SHORT_DETECT (1 << 0) | |
2732 | #define PORTE_HOTPLUG_LONG_DETECT (2 << 0) | |
b9055052 | 2733 | |
31604222 AS |
2734 | /* This register is a reuse of PCH_PORT_HOTPLUG register. The |
2735 | * functionality covered in PCH_PORT_HOTPLUG is split into | |
2736 | * SHOTPLUG_CTL_DDI and SHOTPLUG_CTL_TC. | |
2737 | */ | |
ed3126fa | 2738 | #define SHOTPLUG_CTL_DDI _MMIO(0xc4030) |
5f371a81 | 2739 | #define SHOTPLUG_CTL_DDI_HPD_ENABLE(hpd_pin) (0x8 << (_HPD_PIN_DDI(hpd_pin) * 4)) |
f087cfe6 | 2740 | #define SHOTPLUG_CTL_DDI_HPD_OUTPUT_DATA(hpd_pin) (0x4 << (_HPD_PIN_DDI(hpd_pin) * 4)) |
5f371a81 VS |
2741 | #define SHOTPLUG_CTL_DDI_HPD_STATUS_MASK(hpd_pin) (0x3 << (_HPD_PIN_DDI(hpd_pin) * 4)) |
2742 | #define SHOTPLUG_CTL_DDI_HPD_NO_DETECT(hpd_pin) (0x0 << (_HPD_PIN_DDI(hpd_pin) * 4)) | |
2743 | #define SHOTPLUG_CTL_DDI_HPD_SHORT_DETECT(hpd_pin) (0x1 << (_HPD_PIN_DDI(hpd_pin) * 4)) | |
2744 | #define SHOTPLUG_CTL_DDI_HPD_LONG_DETECT(hpd_pin) (0x2 << (_HPD_PIN_DDI(hpd_pin) * 4)) | |
2745 | #define SHOTPLUG_CTL_DDI_HPD_SHORT_LONG_DETECT(hpd_pin) (0x3 << (_HPD_PIN_DDI(hpd_pin) * 4)) | |
31604222 AS |
2746 | |
2747 | #define SHOTPLUG_CTL_TC _MMIO(0xc4034) | |
97011359 VS |
2748 | #define ICP_TC_HPD_ENABLE(hpd_pin) (8 << (_HPD_PIN_TC(hpd_pin) * 4)) |
2749 | #define ICP_TC_HPD_LONG_DETECT(hpd_pin) (2 << (_HPD_PIN_TC(hpd_pin) * 4)) | |
2750 | #define ICP_TC_HPD_SHORT_DETECT(hpd_pin) (1 << (_HPD_PIN_TC(hpd_pin) * 4)) | |
f49108d0 MR |
2751 | |
2752 | #define SHPD_FILTER_CNT _MMIO(0xc4038) | |
2753 | #define SHPD_FILTER_CNT_500_ADJ 0x001D9 | |
4948738e | 2754 | #define SHPD_FILTER_CNT_250 0x000F8 |
f49108d0 | 2755 | |
9db4a9c7 JB |
2756 | #define _PCH_DPLL_A 0xc6014 |
2757 | #define _PCH_DPLL_B 0xc6018 | |
9e8789ec | 2758 | #define PCH_DPLL(pll) _MMIO((pll) == 0 ? _PCH_DPLL_A : _PCH_DPLL_B) |
b9055052 | 2759 | |
9db4a9c7 | 2760 | #define _PCH_FPA0 0xc6040 |
4fd452ea JN |
2761 | #define _PCH_FPB0 0xc6048 |
2762 | #define PCH_FP0(pll) _MMIO((pll) == 0 ? _PCH_FPA0 : _PCH_FPB0) | |
5ee8ee86 | 2763 | #define FP_CB_TUNE (0x3 << 22) |
4fd452ea | 2764 | |
9db4a9c7 | 2765 | #define _PCH_FPA1 0xc6044 |
9db4a9c7 | 2766 | #define _PCH_FPB1 0xc604c |
9e8789ec | 2767 | #define PCH_FP1(pll) _MMIO((pll) == 0 ? _PCH_FPA1 : _PCH_FPB1) |
b9055052 | 2768 | |
f0f59a00 | 2769 | #define PCH_DPLL_TEST _MMIO(0xc606c) |
b9055052 | 2770 | |
f0f59a00 | 2771 | #define PCH_DREF_CONTROL _MMIO(0xC6200) |
b9055052 | 2772 | #define DREF_CONTROL_MASK 0x7fc3 |
5ee8ee86 PZ |
2773 | #define DREF_CPU_SOURCE_OUTPUT_DISABLE (0 << 13) |
2774 | #define DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD (2 << 13) | |
2775 | #define DREF_CPU_SOURCE_OUTPUT_NONSPREAD (3 << 13) | |
2776 | #define DREF_CPU_SOURCE_OUTPUT_MASK (3 << 13) | |
2777 | #define DREF_SSC_SOURCE_DISABLE (0 << 11) | |
2778 | #define DREF_SSC_SOURCE_ENABLE (2 << 11) | |
2779 | #define DREF_SSC_SOURCE_MASK (3 << 11) | |
2780 | #define DREF_NONSPREAD_SOURCE_DISABLE (0 << 9) | |
2781 | #define DREF_NONSPREAD_CK505_ENABLE (1 << 9) | |
2782 | #define DREF_NONSPREAD_SOURCE_ENABLE (2 << 9) | |
2783 | #define DREF_NONSPREAD_SOURCE_MASK (3 << 9) | |
2784 | #define DREF_SUPERSPREAD_SOURCE_DISABLE (0 << 7) | |
2785 | #define DREF_SUPERSPREAD_SOURCE_ENABLE (2 << 7) | |
2786 | #define DREF_SUPERSPREAD_SOURCE_MASK (3 << 7) | |
2787 | #define DREF_SSC4_DOWNSPREAD (0 << 6) | |
2788 | #define DREF_SSC4_CENTERSPREAD (1 << 6) | |
2789 | #define DREF_SSC1_DISABLE (0 << 1) | |
2790 | #define DREF_SSC1_ENABLE (1 << 1) | |
b9055052 ZW |
2791 | #define DREF_SSC4_DISABLE (0) |
2792 | #define DREF_SSC4_ENABLE (1) | |
2793 | ||
f0f59a00 | 2794 | #define PCH_RAWCLK_FREQ _MMIO(0xc6204) |
b9055052 | 2795 | #define FDL_TP1_TIMER_SHIFT 12 |
5ee8ee86 | 2796 | #define FDL_TP1_TIMER_MASK (3 << 12) |
b9055052 | 2797 | #define FDL_TP2_TIMER_SHIFT 10 |
5ee8ee86 | 2798 | #define FDL_TP2_TIMER_MASK (3 << 10) |
b9055052 | 2799 | #define RAWCLK_FREQ_MASK 0x3ff |
9d81a997 RV |
2800 | #define CNP_RAWCLK_DIV_MASK (0x3ff << 16) |
2801 | #define CNP_RAWCLK_DIV(div) ((div) << 16) | |
2802 | #define CNP_RAWCLK_FRAC_MASK (0xf << 26) | |
228a5cf3 | 2803 | #define CNP_RAWCLK_DEN(den) ((den) << 26) |
4ef99abd | 2804 | #define ICP_RAWCLK_NUM(num) ((num) << 11) |
b9055052 | 2805 | |
f0f59a00 | 2806 | #define PCH_DPLL_TMR_CFG _MMIO(0xc6208) |
b9055052 | 2807 | |
f0f59a00 VS |
2808 | #define PCH_SSC4_PARMS _MMIO(0xc6210) |
2809 | #define PCH_SSC4_AUX_PARMS _MMIO(0xc6214) | |
b9055052 | 2810 | |
f0f59a00 | 2811 | #define PCH_DPLL_SEL _MMIO(0xc7000) |
68d97538 | 2812 | #define TRANS_DPLLB_SEL(pipe) (1 << ((pipe) * 4)) |
11887397 | 2813 | #define TRANS_DPLLA_SEL(pipe) 0 |
68d97538 | 2814 | #define TRANS_DPLL_ENABLE(pipe) (1 << ((pipe) * 4 + 3)) |
8db9d77b | 2815 | |
b9055052 | 2816 | /* transcoder */ |
275f01b2 | 2817 | #define _PCH_TRANS_HTOTAL_A 0xe0000 |
6f369b78 JN |
2818 | #define _PCH_TRANS_HTOTAL_B 0xe1000 |
2819 | #define PCH_TRANS_HTOTAL(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_HTOTAL_A, _PCH_TRANS_HTOTAL_B) | |
275f01b2 DV |
2820 | #define TRANS_HTOTAL_SHIFT 16 |
2821 | #define TRANS_HACTIVE_SHIFT 0 | |
6f369b78 | 2822 | |
275f01b2 | 2823 | #define _PCH_TRANS_HBLANK_A 0xe0004 |
6f369b78 JN |
2824 | #define _PCH_TRANS_HBLANK_B 0xe1004 |
2825 | #define PCH_TRANS_HBLANK(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_HBLANK_A, _PCH_TRANS_HBLANK_B) | |
275f01b2 DV |
2826 | #define TRANS_HBLANK_END_SHIFT 16 |
2827 | #define TRANS_HBLANK_START_SHIFT 0 | |
6f369b78 | 2828 | |
275f01b2 | 2829 | #define _PCH_TRANS_HSYNC_A 0xe0008 |
6f369b78 JN |
2830 | #define _PCH_TRANS_HSYNC_B 0xe1008 |
2831 | #define PCH_TRANS_HSYNC(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_HSYNC_A, _PCH_TRANS_HSYNC_B) | |
275f01b2 DV |
2832 | #define TRANS_HSYNC_END_SHIFT 16 |
2833 | #define TRANS_HSYNC_START_SHIFT 0 | |
6f369b78 | 2834 | |
275f01b2 | 2835 | #define _PCH_TRANS_VTOTAL_A 0xe000c |
6f369b78 JN |
2836 | #define _PCH_TRANS_VTOTAL_B 0xe100c |
2837 | #define PCH_TRANS_VTOTAL(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_VTOTAL_A, _PCH_TRANS_VTOTAL_B) | |
275f01b2 DV |
2838 | #define TRANS_VTOTAL_SHIFT 16 |
2839 | #define TRANS_VACTIVE_SHIFT 0 | |
6f369b78 | 2840 | |
275f01b2 | 2841 | #define _PCH_TRANS_VBLANK_A 0xe0010 |
6f369b78 JN |
2842 | #define _PCH_TRANS_VBLANK_B 0xe1010 |
2843 | #define PCH_TRANS_VBLANK(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_VBLANK_A, _PCH_TRANS_VBLANK_B) | |
275f01b2 DV |
2844 | #define TRANS_VBLANK_END_SHIFT 16 |
2845 | #define TRANS_VBLANK_START_SHIFT 0 | |
6f369b78 | 2846 | |
275f01b2 | 2847 | #define _PCH_TRANS_VSYNC_A 0xe0014 |
6f369b78 JN |
2848 | #define _PCH_TRANS_VSYNC_B 0xe1014 |
2849 | #define PCH_TRANS_VSYNC(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_VSYNC_A, _PCH_TRANS_VSYNC_B) | |
af7187b7 | 2850 | #define TRANS_VSYNC_END_SHIFT 16 |
275f01b2 | 2851 | #define TRANS_VSYNC_START_SHIFT 0 |
6f369b78 | 2852 | |
275f01b2 | 2853 | #define _PCH_TRANS_VSYNCSHIFT_A 0xe0028 |
6f369b78 JN |
2854 | #define _PCH_TRANS_VSYNCSHIFT_B 0xe1028 |
2855 | #define PCH_TRANS_VSYNCSHIFT(pipe) _MMIO_PIPE(pipe, _PCH_TRANS_VSYNCSHIFT_A, _PCH_TRANS_VSYNCSHIFT_B) | |
b9055052 | 2856 | |
e3b95f1e | 2857 | #define _PCH_TRANSA_DATA_M1 0xe0030 |
6f369b78 JN |
2858 | #define _PCH_TRANSB_DATA_M1 0xe1030 |
2859 | #define PCH_TRANS_DATA_M1(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_DATA_M1, _PCH_TRANSB_DATA_M1) | |
2860 | ||
e3b95f1e | 2861 | #define _PCH_TRANSA_DATA_N1 0xe0034 |
6f369b78 JN |
2862 | #define _PCH_TRANSB_DATA_N1 0xe1034 |
2863 | #define PCH_TRANS_DATA_N1(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_DATA_N1, _PCH_TRANSB_DATA_N1) | |
2864 | ||
e3b95f1e | 2865 | #define _PCH_TRANSA_DATA_M2 0xe0038 |
6f369b78 JN |
2866 | #define _PCH_TRANSB_DATA_M2 0xe1038 |
2867 | #define PCH_TRANS_DATA_M2(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_DATA_M2, _PCH_TRANSB_DATA_M2) | |
2868 | ||
e3b95f1e | 2869 | #define _PCH_TRANSA_DATA_N2 0xe003c |
6f369b78 JN |
2870 | #define _PCH_TRANSB_DATA_N2 0xe103c |
2871 | #define PCH_TRANS_DATA_N2(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_DATA_N2, _PCH_TRANSB_DATA_N2) | |
2872 | ||
e3b95f1e | 2873 | #define _PCH_TRANSA_LINK_M1 0xe0040 |
6f369b78 JN |
2874 | #define _PCH_TRANSB_LINK_M1 0xe1040 |
2875 | #define PCH_TRANS_LINK_M1(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_LINK_M1, _PCH_TRANSB_LINK_M1) | |
2876 | ||
e3b95f1e | 2877 | #define _PCH_TRANSA_LINK_N1 0xe0044 |
6f369b78 JN |
2878 | #define _PCH_TRANSB_LINK_N1 0xe1044 |
2879 | #define PCH_TRANS_LINK_N1(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_LINK_N1, _PCH_TRANSB_LINK_N1) | |
2880 | ||
e3b95f1e | 2881 | #define _PCH_TRANSA_LINK_M2 0xe0048 |
6f369b78 JN |
2882 | #define _PCH_TRANSB_LINK_M2 0xe1048 |
2883 | #define PCH_TRANS_LINK_M2(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_LINK_M2, _PCH_TRANSB_LINK_M2) | |
2884 | ||
e3b95f1e | 2885 | #define _PCH_TRANSA_LINK_N2 0xe004c |
6f369b78 JN |
2886 | #define _PCH_TRANSB_LINK_N2 0xe104c |
2887 | #define PCH_TRANS_LINK_N2(pipe) _MMIO_PIPE(pipe, _PCH_TRANSA_LINK_N2, _PCH_TRANSB_LINK_N2) | |
9db4a9c7 | 2888 | |
2dcbc34d | 2889 | /* Per-transcoder DIP controls (PCH) */ |
b055c8f3 | 2890 | #define _VIDEO_DIP_CTL_A 0xe0200 |
c9e2071f JN |
2891 | #define _VIDEO_DIP_CTL_B 0xe1200 |
2892 | #define TVIDEO_DIP_CTL(pipe) _MMIO_PIPE(pipe, _VIDEO_DIP_CTL_A, _VIDEO_DIP_CTL_B) | |
2893 | ||
b055c8f3 | 2894 | #define _VIDEO_DIP_DATA_A 0xe0208 |
c9e2071f JN |
2895 | #define _VIDEO_DIP_DATA_B 0xe1208 |
2896 | #define TVIDEO_DIP_DATA(pipe) _MMIO_PIPE(pipe, _VIDEO_DIP_DATA_A, _VIDEO_DIP_DATA_B) | |
2897 | ||
b055c8f3 | 2898 | #define _VIDEO_DIP_GCP_A 0xe0210 |
c9e2071f JN |
2899 | #define _VIDEO_DIP_GCP_B 0xe1210 |
2900 | #define TVIDEO_DIP_GCP(pipe) _MMIO_PIPE(pipe, _VIDEO_DIP_GCP_A, _VIDEO_DIP_GCP_B) | |
6d67415f VS |
2901 | #define GCP_COLOR_INDICATION (1 << 2) |
2902 | #define GCP_DEFAULT_PHASE_ENABLE (1 << 1) | |
2903 | #define GCP_AV_MUTE (1 << 0) | |
b055c8f3 | 2904 | |
2dcbc34d | 2905 | /* Per-transcoder DIP controls (VLV) */ |
7322aedd JN |
2906 | #define _VLV_VIDEO_DIP_CTL_A 0x60200 |
2907 | #define _VLV_VIDEO_DIP_CTL_B 0x61170 | |
2908 | #define _CHV_VIDEO_DIP_CTL_C 0x611f0 | |
2909 | #define VLV_TVIDEO_DIP_CTL(pipe) _MMIO_BASE_PIPE3(VLV_DISPLAY_BASE, (pipe), \ | |
2910 | _VLV_VIDEO_DIP_CTL_A, \ | |
2911 | _VLV_VIDEO_DIP_CTL_B, \ | |
2912 | _CHV_VIDEO_DIP_CTL_C) | |
2913 | ||
2914 | #define _VLV_VIDEO_DIP_DATA_A 0x60208 | |
2915 | #define _VLV_VIDEO_DIP_DATA_B 0x61174 | |
2916 | #define _CHV_VIDEO_DIP_DATA_C 0x611f4 | |
2917 | #define VLV_TVIDEO_DIP_DATA(pipe) _MMIO_BASE_PIPE3(VLV_DISPLAY_BASE, (pipe), \ | |
2918 | _VLV_VIDEO_DIP_DATA_A, \ | |
2919 | _VLV_VIDEO_DIP_DATA_B, \ | |
2920 | _CHV_VIDEO_DIP_DATA_C) | |
2921 | ||
2922 | #define _VLV_VIDEO_DIP_GDCP_PAYLOAD_A 0x60210 | |
2923 | #define _VLV_VIDEO_DIP_GDCP_PAYLOAD_B 0x61178 | |
2924 | #define _CHV_VIDEO_DIP_GDCP_PAYLOAD_C 0x611f8 | |
2925 | #define VLV_TVIDEO_DIP_GCP(pipe) _MMIO_BASE_PIPE3(VLV_DISPLAY_BASE, (pipe), \ | |
2926 | _VLV_VIDEO_DIP_GDCP_PAYLOAD_A, \ | |
2927 | _VLV_VIDEO_DIP_GDCP_PAYLOAD_B, \ | |
2928 | _CHV_VIDEO_DIP_GDCP_PAYLOAD_C) | |
90b107c8 | 2929 | |
8c5f5f7c | 2930 | /* Haswell DIP controls */ |
086f8e84 | 2931 | #define _HSW_VIDEO_DIP_CTL_A 0x60200 |
086f8e84 | 2932 | #define _HSW_VIDEO_DIP_CTL_B 0x61200 |
c9e2071f JN |
2933 | #define HSW_TVIDEO_DIP_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_CTL_A) |
2934 | ||
2935 | #define _HSW_VIDEO_DIP_AVI_DATA_A 0x60220 | |
086f8e84 | 2936 | #define _HSW_VIDEO_DIP_AVI_DATA_B 0x61220 |
c9e2071f JN |
2937 | #define HSW_TVIDEO_DIP_AVI_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_AVI_DATA_A + (i) * 4) |
2938 | ||
2939 | #define _HSW_VIDEO_DIP_VS_DATA_A 0x60260 | |
086f8e84 | 2940 | #define _HSW_VIDEO_DIP_VS_DATA_B 0x61260 |
c9e2071f JN |
2941 | #define HSW_TVIDEO_DIP_VS_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_VS_DATA_A + (i) * 4) |
2942 | ||
2943 | #define _HSW_VIDEO_DIP_SPD_DATA_A 0x602A0 | |
086f8e84 | 2944 | #define _HSW_VIDEO_DIP_SPD_DATA_B 0x612A0 |
c9e2071f JN |
2945 | #define HSW_TVIDEO_DIP_SPD_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_SPD_DATA_A + (i) * 4) |
2946 | ||
2947 | #define _HSW_VIDEO_DIP_GMP_DATA_A 0x602E0 | |
086f8e84 | 2948 | #define _HSW_VIDEO_DIP_GMP_DATA_B 0x612E0 |
c9e2071f JN |
2949 | #define HSW_TVIDEO_DIP_GMP_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_GMP_DATA_A + (i) * 4) |
2950 | ||
2951 | #define _HSW_VIDEO_DIP_VSC_DATA_A 0x60320 | |
086f8e84 | 2952 | #define _HSW_VIDEO_DIP_VSC_DATA_B 0x61320 |
c9e2071f JN |
2953 | #define HSW_TVIDEO_DIP_VSC_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_VSC_DATA_A + (i) * 4) |
2954 | ||
2955 | /*ADLP and later: */ | |
2956 | #define _ADL_VIDEO_DIP_AS_DATA_A 0x60484 | |
12ea8929 | 2957 | #define _ADL_VIDEO_DIP_AS_DATA_B 0x61484 |
c9e2071f JN |
2958 | #define ADL_TVIDEO_DIP_AS_SDP_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans,\ |
2959 | _ADL_VIDEO_DIP_AS_DATA_A + (i) * 4) | |
2960 | ||
2961 | #define _GLK_VIDEO_DIP_DRM_DATA_A 0x60440 | |
44b42ebf | 2962 | #define _GLK_VIDEO_DIP_DRM_DATA_B 0x61440 |
c9e2071f JN |
2963 | #define GLK_TVIDEO_DIP_DRM_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _GLK_VIDEO_DIP_DRM_DATA_A + (i) * 4) |
2964 | ||
2965 | #define _HSW_VIDEO_DIP_AVI_ECC_A 0x60240 | |
086f8e84 | 2966 | #define _HSW_VIDEO_DIP_BVI_ECC_B 0x61240 |
c9e2071f | 2967 | #define _HSW_VIDEO_DIP_VS_ECC_A 0x60280 |
086f8e84 | 2968 | #define _HSW_VIDEO_DIP_VS_ECC_B 0x61280 |
c9e2071f | 2969 | #define _HSW_VIDEO_DIP_SPD_ECC_A 0x602C0 |
086f8e84 | 2970 | #define _HSW_VIDEO_DIP_SPD_ECC_B 0x612C0 |
c9e2071f | 2971 | #define _HSW_VIDEO_DIP_GMP_ECC_A 0x60300 |
086f8e84 | 2972 | #define _HSW_VIDEO_DIP_GMP_ECC_B 0x61300 |
c9e2071f | 2973 | #define _HSW_VIDEO_DIP_VSC_ECC_A 0x60344 |
086f8e84 | 2974 | #define _HSW_VIDEO_DIP_VSC_ECC_B 0x61344 |
c9e2071f JN |
2975 | |
2976 | #define _HSW_VIDEO_DIP_GCP_A 0x60210 | |
086f8e84 | 2977 | #define _HSW_VIDEO_DIP_GCP_B 0x61210 |
c9e2071f | 2978 | #define HSW_TVIDEO_DIP_GCP(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _HSW_VIDEO_DIP_GCP_A) |
8c5f5f7c | 2979 | |
7af2be6d AS |
2980 | /* Icelake PPS_DATA and _ECC DIP Registers. |
2981 | * These are available for transcoders B,C and eDP. | |
2982 | * Adding the _A so as to reuse the _MMIO_TRANS2 | |
2983 | * definition, with which it offsets to the right location. | |
2984 | */ | |
2985 | ||
2986 | #define _ICL_VIDEO_DIP_PPS_DATA_A 0x60350 | |
2987 | #define _ICL_VIDEO_DIP_PPS_DATA_B 0x61350 | |
c9e2071f JN |
2988 | #define ICL_VIDEO_DIP_PPS_DATA(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _ICL_VIDEO_DIP_PPS_DATA_A + (i) * 4) |
2989 | ||
7af2be6d AS |
2990 | #define _ICL_VIDEO_DIP_PPS_ECC_A 0x603D4 |
2991 | #define _ICL_VIDEO_DIP_PPS_ECC_B 0x613D4 | |
b31a97af | 2992 | #define ICL_VIDEO_DIP_PPS_ECC(dev_priv, trans, i) _MMIO_TRANS2(dev_priv, trans, _ICL_VIDEO_DIP_PPS_ECC_A + (i) * 4) |
f0f59a00 VS |
2993 | |
2994 | #define _HSW_STEREO_3D_CTL_A 0x70020 | |
f0f59a00 | 2995 | #define _HSW_STEREO_3D_CTL_B 0x71020 |
ba9bbbe1 | 2996 | #define HSW_STEREO_3D_CTL(dev_priv, trans) _MMIO_PIPE2(dev_priv, trans, _HSW_STEREO_3D_CTL_A) |
c9e2071f | 2997 | #define S3D_ENABLE (1 << 31) |
3f51e471 | 2998 | |
ab9412ba DV |
2999 | #define _PCH_TRANSACONF 0xf0008 |
3000 | #define _PCH_TRANSBCONF 0xf1008 | |
f0f59a00 VS |
3001 | #define PCH_TRANSCONF(pipe) _MMIO_PIPE(pipe, _PCH_TRANSACONF, _PCH_TRANSBCONF) |
3002 | #define LPT_TRANSCONF PCH_TRANSCONF(PIPE_A) /* lpt has only one transcoder */ | |
e93a590c VS |
3003 | #define TRANS_ENABLE REG_BIT(31) |
3004 | #define TRANS_STATE_ENABLE REG_BIT(30) | |
3005 | #define TRANS_FRAME_START_DELAY_MASK REG_GENMASK(28, 27) /* ibx */ | |
3006 | #define TRANS_FRAME_START_DELAY(x) REG_FIELD_PREP(TRANS_FRAME_START_DELAY_MASK, (x)) /* ibx: 0-3 */ | |
3007 | #define TRANS_INTERLACE_MASK REG_GENMASK(23, 21) | |
3008 | #define TRANS_INTERLACE_PROGRESSIVE REG_FIELD_PREP(TRANS_INTERLACE_MASK, 0) | |
3009 | #define TRANS_INTERLACE_LEGACY_VSYNC_IBX REG_FIELD_PREP(TRANS_INTERLACE_MASK, 2) /* ibx */ | |
3010 | #define TRANS_INTERLACE_INTERLACED REG_FIELD_PREP(TRANS_INTERLACE_MASK, 3) | |
3011 | #define TRANS_BPC_MASK REG_GENMASK(7, 5) /* ibx */ | |
3012 | #define TRANS_BPC_8 REG_FIELD_PREP(TRANS_BPC_MASK, 0) | |
3013 | #define TRANS_BPC_10 REG_FIELD_PREP(TRANS_BPC_MASK, 1) | |
3014 | #define TRANS_BPC_6 REG_FIELD_PREP(TRANS_BPC_MASK, 2) | |
3015 | #define TRANS_BPC_12 REG_FIELD_PREP(TRANS_BPC_MASK, 3) | |
3df3c589 | 3016 | |
ce40141f DV |
3017 | #define _TRANSA_CHICKEN1 0xf0060 |
3018 | #define _TRANSB_CHICKEN1 0xf1060 | |
f0f59a00 | 3019 | #define TRANS_CHICKEN1(pipe) _MMIO_PIPE(pipe, _TRANSA_CHICKEN1, _TRANSB_CHICKEN1) |
3df3c589 VS |
3020 | #define TRANS_CHICKEN1_HDMIUNIT_GC_DISABLE REG_BIT(10) |
3021 | #define TRANS_CHICKEN1_DP0UNIT_GC_DISABLE REG_BIT(4) | |
3022 | ||
3bcf603f JB |
3023 | #define _TRANSA_CHICKEN2 0xf0064 |
3024 | #define _TRANSB_CHICKEN2 0xf1064 | |
f0f59a00 | 3025 | #define TRANS_CHICKEN2(pipe) _MMIO_PIPE(pipe, _TRANSA_CHICKEN2, _TRANSB_CHICKEN2) |
3df3c589 VS |
3026 | #define TRANS_CHICKEN2_TIMING_OVERRIDE REG_BIT(31) |
3027 | #define TRANS_CHICKEN2_FDI_POLARITY_REVERSED REG_BIT(29) | |
3028 | #define TRANS_CHICKEN2_FRAME_START_DELAY_MASK REG_GENMASK(28, 27) | |
3029 | #define TRANS_CHICKEN2_FRAME_START_DELAY(x) REG_FIELD_PREP(TRANS_CHICKEN2_FRAME_START_DELAY_MASK, (x)) /* 0-3 */ | |
3030 | #define TRANS_CHICKEN2_DISABLE_DEEP_COLOR_COUNTER REG_BIT(26) | |
3031 | #define TRANS_CHICKEN2_DISABLE_DEEP_COLOR_MODESWITCH REG_BIT(25) | |
3bcf603f | 3032 | |
f0f59a00 | 3033 | #define SOUTH_CHICKEN1 _MMIO(0xc2000) |
291427f5 JB |
3034 | #define FDIA_PHASE_SYNC_SHIFT_OVR 19 |
3035 | #define FDIA_PHASE_SYNC_SHIFT_EN 18 | |
babde06d MK |
3036 | #define INVERT_DDIE_HPD REG_BIT(28) |
3037 | #define INVERT_DDID_HPD_MTP REG_BIT(27) | |
3038 | #define INVERT_TC4_HPD REG_BIT(26) | |
3039 | #define INVERT_TC3_HPD REG_BIT(25) | |
3040 | #define INVERT_TC2_HPD REG_BIT(24) | |
3041 | #define INVERT_TC1_HPD REG_BIT(23) | |
b18c1eb9 CT |
3042 | #define INVERT_DDID_HPD (1 << 18) |
3043 | #define INVERT_DDIC_HPD (1 << 17) | |
3044 | #define INVERT_DDIB_HPD (1 << 16) | |
3045 | #define INVERT_DDIA_HPD (1 << 15) | |
5ee8ee86 PZ |
3046 | #define FDI_PHASE_SYNC_OVR(pipe) (1 << (FDIA_PHASE_SYNC_SHIFT_OVR - ((pipe) * 2))) |
3047 | #define FDI_PHASE_SYNC_EN(pipe) (1 << (FDIA_PHASE_SYNC_SHIFT_EN - ((pipe) * 2))) | |
01a415fd | 3048 | #define FDI_BC_BIFURCATION_SELECT (1 << 12) |
3b92e263 RV |
3049 | #define CHASSIS_CLK_REQ_DURATION_MASK (0xf << 8) |
3050 | #define CHASSIS_CLK_REQ_DURATION(x) ((x) << 8) | |
9b2383a7 | 3051 | #define SBCLK_RUN_REFCLK_DIS (1 << 7) |
ba21bb24 | 3052 | #define ICP_SECOND_PPS_IO_SELECT REG_BIT(2) |
5ee8ee86 | 3053 | #define SPT_PWM_GRANULARITY (1 << 0) |
f0f59a00 | 3054 | #define SOUTH_CHICKEN2 _MMIO(0xc2004) |
5ee8ee86 PZ |
3055 | #define FDI_MPHY_IOSFSB_RESET_STATUS (1 << 13) |
3056 | #define FDI_MPHY_IOSFSB_RESET_CTL (1 << 12) | |
3057 | #define LPT_PWM_GRANULARITY (1 << 5) | |
3058 | #define DPLS_EDP_PPS_FIX_DIS (1 << 0) | |
645c62a5 | 3059 | |
f0f59a00 | 3060 | #define SOUTH_DSPCLK_GATE_D _MMIO(0xc2020) |
5ee8ee86 PZ |
3061 | #define PCH_GMBUSUNIT_CLOCK_GATE_DISABLE (1 << 31) |
3062 | #define PCH_DPLUNIT_CLOCK_GATE_DISABLE (1 << 30) | |
3063 | #define PCH_DPLSUNIT_CLOCK_GATE_DISABLE (1 << 29) | |
c746063a | 3064 | #define PCH_DPMGUNIT_CLOCK_GATE_DISABLE (1 << 15) |
5ee8ee86 PZ |
3065 | #define PCH_CPUNIT_CLOCK_GATE_DISABLE (1 << 14) |
3066 | #define CNP_PWM_CGE_GATING_DISABLE (1 << 13) | |
3067 | #define PCH_LP_PARTITION_LEVEL_DISABLE (1 << 12) | |
382b0936 | 3068 | |
f8e1c8f5 JN |
3069 | #define PCH_DP_B _MMIO(0xe4100) |
3070 | #define PCH_DP_C _MMIO(0xe4200) | |
3071 | #define PCH_DP_D _MMIO(0xe4300) | |
750a951f | 3072 | |
8db9d77b | 3073 | /* CPT */ |
086f8e84 VS |
3074 | #define _TRANS_DP_CTL_A 0xe0300 |
3075 | #define _TRANS_DP_CTL_B 0xe1300 | |
3076 | #define _TRANS_DP_CTL_C 0xe2300 | |
f0f59a00 | 3077 | #define TRANS_DP_CTL(pipe) _MMIO_PIPE(pipe, _TRANS_DP_CTL_A, _TRANS_DP_CTL_B) |
e93a590c VS |
3078 | #define TRANS_DP_OUTPUT_ENABLE REG_BIT(31) |
3079 | #define TRANS_DP_PORT_SEL_MASK REG_GENMASK(30, 29) | |
3080 | #define TRANS_DP_PORT_SEL_NONE REG_FIELD_PREP(TRANS_DP_PORT_SEL_MASK, 3) | |
3081 | #define TRANS_DP_PORT_SEL(port) REG_FIELD_PREP(TRANS_DP_PORT_SEL_MASK, (port) - PORT_B) | |
3082 | #define TRANS_DP_AUDIO_ONLY REG_BIT(26) | |
3083 | #define TRANS_DP_ENH_FRAMING REG_BIT(18) | |
3084 | #define TRANS_DP_BPC_MASK REG_GENMASK(10, 9) | |
3085 | #define TRANS_DP_BPC_8 REG_FIELD_PREP(TRANS_DP_BPC_MASK, 0) | |
3086 | #define TRANS_DP_BPC_10 REG_FIELD_PREP(TRANS_DP_BPC_MASK, 1) | |
3087 | #define TRANS_DP_BPC_6 REG_FIELD_PREP(TRANS_DP_BPC_MASK, 2) | |
3088 | #define TRANS_DP_BPC_12 REG_FIELD_PREP(TRANS_DP_BPC_MASK, 3) | |
3089 | #define TRANS_DP_VSYNC_ACTIVE_HIGH REG_BIT(4) | |
3090 | #define TRANS_DP_HSYNC_ACTIVE_HIGH REG_BIT(3) | |
8db9d77b | 3091 | |
59821ed9 JN |
3092 | #define _TRANS_DP2_CTL_A 0x600a0 |
3093 | #define _TRANS_DP2_CTL_B 0x610a0 | |
3094 | #define _TRANS_DP2_CTL_C 0x620a0 | |
3095 | #define _TRANS_DP2_CTL_D 0x630a0 | |
3096 | #define TRANS_DP2_CTL(trans) _MMIO_TRANS(trans, _TRANS_DP2_CTL_A, _TRANS_DP2_CTL_B) | |
3097 | #define TRANS_DP2_128B132B_CHANNEL_CODING REG_BIT(31) | |
3098 | #define TRANS_DP2_PANEL_REPLAY_ENABLE REG_BIT(30) | |
3099 | #define TRANS_DP2_DEBUG_ENABLE REG_BIT(23) | |
3100 | ||
1db18260 JN |
3101 | #define _TRANS_DP2_VFREQHIGH_A 0x600a4 |
3102 | #define _TRANS_DP2_VFREQHIGH_B 0x610a4 | |
3103 | #define _TRANS_DP2_VFREQHIGH_C 0x620a4 | |
3104 | #define _TRANS_DP2_VFREQHIGH_D 0x630a4 | |
3105 | #define TRANS_DP2_VFREQHIGH(trans) _MMIO_TRANS(trans, _TRANS_DP2_VFREQHIGH_A, _TRANS_DP2_VFREQHIGH_B) | |
3106 | #define TRANS_DP2_VFREQ_PIXEL_CLOCK_MASK REG_GENMASK(31, 8) | |
3107 | #define TRANS_DP2_VFREQ_PIXEL_CLOCK(clk_hz) REG_FIELD_PREP(TRANS_DP2_VFREQ_PIXEL_CLOCK_MASK, (clk_hz)) | |
3108 | ||
3109 | #define _TRANS_DP2_VFREQLOW_A 0x600a8 | |
3110 | #define _TRANS_DP2_VFREQLOW_B 0x610a8 | |
3111 | #define _TRANS_DP2_VFREQLOW_C 0x620a8 | |
3112 | #define _TRANS_DP2_VFREQLOW_D 0x630a8 | |
3113 | #define TRANS_DP2_VFREQLOW(trans) _MMIO_TRANS(trans, _TRANS_DP2_VFREQLOW_A, _TRANS_DP2_VFREQLOW_B) | |
3114 | ||
a5ebe00c AM |
3115 | #define _DP_MIN_HBLANK_CTL_A 0x600ac |
3116 | #define _DP_MIN_HBLANK_CTL_B 0x610ac | |
3117 | #define DP_MIN_HBLANK_CTL(trans) _MMIO_TRANS(trans, _DP_MIN_HBLANK_CTL_A, _DP_MIN_HBLANK_CTL_B) | |
3118 | ||
8db9d77b ZW |
3119 | /* SNB eDP training params */ |
3120 | /* SNB A-stepping */ | |
5ee8ee86 PZ |
3121 | #define EDP_LINK_TRAIN_400MV_0DB_SNB_A (0x38 << 22) |
3122 | #define EDP_LINK_TRAIN_400MV_6DB_SNB_A (0x02 << 22) | |
3123 | #define EDP_LINK_TRAIN_600MV_3_5DB_SNB_A (0x01 << 22) | |
3124 | #define EDP_LINK_TRAIN_800MV_0DB_SNB_A (0x0 << 22) | |
8db9d77b | 3125 | /* SNB B-stepping */ |
5ee8ee86 PZ |
3126 | #define EDP_LINK_TRAIN_400_600MV_0DB_SNB_B (0x0 << 22) |
3127 | #define EDP_LINK_TRAIN_400MV_3_5DB_SNB_B (0x1 << 22) | |
3128 | #define EDP_LINK_TRAIN_400_600MV_6DB_SNB_B (0x3a << 22) | |
3129 | #define EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B (0x39 << 22) | |
3130 | #define EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B (0x38 << 22) | |
3131 | #define EDP_LINK_TRAIN_VOL_EMP_MASK_SNB (0x3f << 22) | |
8db9d77b | 3132 | |
1a2eb460 | 3133 | /* IVB */ |
5ee8ee86 PZ |
3134 | #define EDP_LINK_TRAIN_400MV_0DB_IVB (0x24 << 22) |
3135 | #define EDP_LINK_TRAIN_400MV_3_5DB_IVB (0x2a << 22) | |
3136 | #define EDP_LINK_TRAIN_400MV_6DB_IVB (0x2f << 22) | |
3137 | #define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 << 22) | |
3138 | #define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 << 22) | |
3139 | #define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 << 22) | |
3140 | #define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x3e << 22) | |
1a2eb460 KP |
3141 | |
3142 | /* legacy values */ | |
5ee8ee86 PZ |
3143 | #define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 << 22) |
3144 | #define EDP_LINK_TRAIN_1000MV_0DB_IVB (0x20 << 22) | |
3145 | #define EDP_LINK_TRAIN_500MV_3_5DB_IVB (0x02 << 22) | |
3146 | #define EDP_LINK_TRAIN_1000MV_3_5DB_IVB (0x22 << 22) | |
3147 | #define EDP_LINK_TRAIN_1000MV_6DB_IVB (0x23 << 22) | |
1a2eb460 | 3148 | |
5ee8ee86 | 3149 | #define EDP_LINK_TRAIN_VOL_EMP_MASK_IVB (0x3f << 22) |
1a2eb460 | 3150 | |
f0f59a00 | 3151 | #define VLV_PMWGICZ _MMIO(0x1300a4) |
9e72b46c | 3152 | |
3accaf7e | 3153 | #define HSW_EDRAM_CAP _MMIO(0x120010) |
2db59d53 | 3154 | #define EDRAM_ENABLED 0x1 |
c02e85a0 MK |
3155 | #define EDRAM_NUM_BANKS(cap) (((cap) >> 1) & 0xf) |
3156 | #define EDRAM_WAYS_IDX(cap) (((cap) >> 5) & 0x7) | |
3157 | #define EDRAM_SETS_IDX(cap) (((cap) >> 8) & 0x3) | |
05e21cc4 | 3158 | |
f0f59a00 | 3159 | #define VLV_CHICKEN_3 _MMIO(VLV_DISPLAY_BASE + 0x7040C) |
a9da9bce GS |
3160 | #define PIXEL_OVERLAP_CNT_MASK (3 << 30) |
3161 | #define PIXEL_OVERLAP_CNT_SHIFT 30 | |
3162 | ||
f0f59a00 | 3163 | #define GEN6_PCODE_MAILBOX _MMIO(0x138124) |
5ee8ee86 | 3164 | #define GEN6_PCODE_READY (1 << 31) |
5f38c3fb DS |
3165 | #define GEN6_PCODE_MB_PARAM2 REG_GENMASK(23, 16) |
3166 | #define GEN6_PCODE_MB_PARAM1 REG_GENMASK(15, 8) | |
3167 | #define GEN6_PCODE_MB_COMMAND REG_GENMASK(7, 0) | |
87660502 L |
3168 | #define GEN6_PCODE_ERROR_MASK 0xFF |
3169 | #define GEN6_PCODE_SUCCESS 0x0 | |
3170 | #define GEN6_PCODE_ILLEGAL_CMD 0x1 | |
3171 | #define GEN6_PCODE_MIN_FREQ_TABLE_GT_RATIO_OUT_OF_RANGE 0x2 | |
3172 | #define GEN6_PCODE_TIMEOUT 0x3 | |
3173 | #define GEN6_PCODE_UNIMPLEMENTED_CMD 0xFF | |
3174 | #define GEN7_PCODE_TIMEOUT 0x2 | |
3175 | #define GEN7_PCODE_ILLEGAL_DATA 0x3 | |
f22fd334 MR |
3176 | #define GEN11_PCODE_ILLEGAL_SUBCOMMAND 0x4 |
3177 | #define GEN11_PCODE_LOCKED 0x6 | |
f136c58a | 3178 | #define GEN11_PCODE_REJECTED 0x11 |
87660502 | 3179 | #define GEN7_PCODE_MIN_FREQ_TABLE_GT_RATIO_OUT_OF_RANGE 0x10 |
3e8ddd9e VS |
3180 | #define GEN6_PCODE_WRITE_RC6VIDS 0x4 |
3181 | #define GEN6_PCODE_READ_RC6VIDS 0x5 | |
9043ae02 DL |
3182 | #define GEN6_ENCODE_RC6_VID(mv) (((mv) - 245) / 5) |
3183 | #define GEN6_DECODE_RC6_VID(vids) (((vids) * 5) + 245) | |
b432e5cf | 3184 | #define BDW_PCODE_DISPLAY_FREQ_CHANGE_REQ 0x18 |
57520bc5 | 3185 | #define GEN9_PCODE_READ_MEM_LATENCY 0x6 |
3fecf93c VS |
3186 | #define GEN9_MEM_LATENCY_LEVEL_3_7_MASK REG_GENMASK(31, 24) |
3187 | #define GEN9_MEM_LATENCY_LEVEL_2_6_MASK REG_GENMASK(23, 16) | |
3188 | #define GEN9_MEM_LATENCY_LEVEL_1_5_MASK REG_GENMASK(15, 8) | |
3189 | #define GEN9_MEM_LATENCY_LEVEL_0_4_MASK REG_GENMASK(7, 0) | |
ee5e5e7a | 3190 | #define SKL_PCODE_LOAD_HDCP_KEYS 0x5 |
5d96d8af DL |
3191 | #define SKL_PCODE_CDCLK_CONTROL 0x7 |
3192 | #define SKL_CDCLK_PREPARE_FOR_CHANGE 0x3 | |
3193 | #define SKL_CDCLK_READY_FOR_CHANGE 0x1 | |
9043ae02 DL |
3194 | #define GEN6_PCODE_WRITE_MIN_FREQ_TABLE 0x8 |
3195 | #define GEN6_PCODE_READ_MIN_FREQ_TABLE 0x9 | |
3196 | #define GEN6_READ_OC_PARAMS 0xc | |
c457d9cf VS |
3197 | #define ICL_PCODE_MEM_SUBSYSYSTEM_INFO 0xd |
3198 | #define ICL_PCODE_MEM_SS_READ_GLOBAL_INFO (0x0 << 8) | |
3199 | #define ICL_PCODE_MEM_SS_READ_QGV_POINT_INFO(point) (((point) << 16) | (0x1 << 8)) | |
192fbfb7 | 3200 | #define ADL_PCODE_MEM_SS_READ_PSF_GV_INFO ((0) | (0x2 << 8)) |
ceb0cc3b SL |
3201 | #define DISPLAY_TO_PCODE_CDCLK_MAX 0x28D |
3202 | #define DISPLAY_TO_PCODE_VOLTAGE_MASK REG_GENMASK(1, 0) | |
3203 | #define DISPLAY_TO_PCODE_VOLTAGE_MAX DISPLAY_TO_PCODE_VOLTAGE_MASK | |
3204 | #define DISPLAY_TO_PCODE_CDCLK_VALID REG_BIT(27) | |
3205 | #define DISPLAY_TO_PCODE_PIPE_COUNT_VALID REG_BIT(31) | |
3206 | #define DISPLAY_TO_PCODE_CDCLK_MASK REG_GENMASK(25, 16) | |
3207 | #define DISPLAY_TO_PCODE_PIPE_COUNT_MASK REG_GENMASK(30, 28) | |
3208 | #define DISPLAY_TO_PCODE_CDCLK(x) REG_FIELD_PREP(DISPLAY_TO_PCODE_CDCLK_MASK, (x)) | |
3209 | #define DISPLAY_TO_PCODE_PIPE_COUNT(x) REG_FIELD_PREP(DISPLAY_TO_PCODE_PIPE_COUNT_MASK, (x)) | |
3210 | #define DISPLAY_TO_PCODE_VOLTAGE(x) REG_FIELD_PREP(DISPLAY_TO_PCODE_VOLTAGE_MASK, (x)) | |
3211 | #define DISPLAY_TO_PCODE_UPDATE_MASK(cdclk, num_pipes, voltage_level) \ | |
3212 | ((DISPLAY_TO_PCODE_CDCLK(cdclk)) | \ | |
3213 | (DISPLAY_TO_PCODE_PIPE_COUNT(num_pipes)) | \ | |
3214 | (DISPLAY_TO_PCODE_VOLTAGE(voltage_level))) | |
f136c58a | 3215 | #define ICL_PCODE_SAGV_DE_MEM_SS_CONFIG 0xe |
4bdba4f4 VS |
3216 | #define ICL_PCODE_REP_QGV_MASK REG_GENMASK(1, 0) |
3217 | #define ICL_PCODE_REP_QGV_SAFE REG_FIELD_PREP(ICL_PCODE_REP_QGV_MASK, 0) | |
3218 | #define ICL_PCODE_REP_QGV_POLL REG_FIELD_PREP(ICL_PCODE_REP_QGV_MASK, 1) | |
3219 | #define ICL_PCODE_REP_QGV_REJECTED REG_FIELD_PREP(ICL_PCODE_REP_QGV_MASK, 2) | |
3220 | #define ADLS_PCODE_REP_PSF_MASK REG_GENMASK(3, 2) | |
3221 | #define ADLS_PCODE_REP_PSF_SAFE REG_FIELD_PREP(ADLS_PCODE_REP_PSF_MASK, 0) | |
3222 | #define ADLS_PCODE_REP_PSF_POLL REG_FIELD_PREP(ADLS_PCODE_REP_PSF_MASK, 1) | |
3223 | #define ADLS_PCODE_REP_PSF_REJECTED REG_FIELD_PREP(ADLS_PCODE_REP_PSF_MASK, 2) | |
3224 | #define ICL_PCODE_REQ_QGV_PT_MASK REG_GENMASK(7, 0) | |
3225 | #define ICL_PCODE_REQ_QGV_PT(x) REG_FIELD_PREP(ICL_PCODE_REQ_QGV_PT_MASK, (x)) | |
3226 | #define ADLS_PCODE_REQ_PSF_PT_MASK REG_GENMASK(10, 8) | |
3227 | #define ADLS_PCODE_REQ_PSF_PT(x) REG_FIELD_PREP(ADLS_PCODE_REQ_PSF_PT_MASK, (x)) | |
515b2392 PZ |
3228 | #define GEN6_PCODE_READ_D_COMP 0x10 |
3229 | #define GEN6_PCODE_WRITE_D_COMP 0x11 | |
feb7e0ef | 3230 | #define ICL_PCODE_EXIT_TCCOLD 0x12 |
f8437dd1 | 3231 | #define HSW_PCODE_DE_WRITE_FREQ_REQ 0x17 |
2a114cc1 | 3232 | #define DISPLAY_IPS_CONTROL 0x19 |
3c02934b JRS |
3233 | #define TGL_PCODE_TCCOLD 0x26 |
3234 | #define TGL_PCODE_EXIT_TCCOLD_DATA_L_EXIT_FAILED REG_BIT(0) | |
05e31dd7 ID |
3235 | #define TGL_PCODE_EXIT_TCCOLD_DATA_L_BLOCK_REQ 0 |
3236 | #define TGL_PCODE_EXIT_TCCOLD_DATA_L_UNBLOCK_REQ REG_BIT(0) | |
61843f0e VS |
3237 | /* See also IPS_CTL */ |
3238 | #define IPS_PCODE_CONTROL (1 << 30) | |
3e8ddd9e | 3239 | #define HSW_PCODE_DYNAMIC_DUTY_CYCLE_CONTROL 0x1A |
656d1b89 L |
3240 | #define GEN9_PCODE_SAGV_CONTROL 0x21 |
3241 | #define GEN9_SAGV_DISABLE 0x0 | |
3242 | #define GEN9_SAGV_IS_DISABLED 0x1 | |
3243 | #define GEN9_SAGV_ENABLE 0x3 | |
f9c730ed MR |
3244 | #define DG1_PCODE_STATUS 0x7E |
3245 | #define DG1_UNCORE_GET_INIT_STATUS 0x0 | |
3246 | #define DG1_UNCORE_INIT_STATUS_COMPLETE 0x1 | |
c8939848 AD |
3247 | #define PCODE_POWER_SETUP 0x7C |
3248 | #define POWER_SETUP_SUBCOMMAND_READ_I1 0x4 | |
3249 | #define POWER_SETUP_SUBCOMMAND_WRITE_I1 0x5 | |
3250 | #define POWER_SETUP_I1_WATTS REG_BIT(31) | |
3251 | #define POWER_SETUP_I1_SHIFT 6 /* 10.6 fixed point format */ | |
3252 | #define POWER_SETUP_I1_DATA_MASK REG_GENMASK(15, 0) | |
0937c6e7 | 3253 | #define POWER_SETUP_SUBCOMMAND_G8_ENABLE 0x6 |
da80f047 | 3254 | #define GEN12_PCODE_READ_SAGV_BLOCK_TIME_US 0x23 |
cb4046d2 | 3255 | #define XEHP_PCODE_FREQUENCY_CONFIG 0x6e /* pvc */ |
7d809707 | 3256 | /* XEHP_PCODE_FREQUENCY_CONFIG sub-commands (param1) */ |
9d15dd1b DS |
3257 | #define PCODE_MBOX_FC_SC_READ_FUSED_P0 0x0 |
3258 | #define PCODE_MBOX_FC_SC_READ_FUSED_PN 0x1 | |
3259 | /* PCODE_MBOX_DOMAIN_* - mailbox domain IDs */ | |
7d809707 | 3260 | /* XEHP_PCODE_FREQUENCY_CONFIG param2 */ |
9d15dd1b DS |
3261 | #define PCODE_MBOX_DOMAIN_NONE 0x0 |
3262 | #define PCODE_MBOX_DOMAIN_MEDIAFF 0x3 | |
f0f59a00 | 3263 | #define GEN6_PCODE_DATA _MMIO(0x138128) |
23b2f8bb | 3264 | #define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8 |
3ebecd07 | 3265 | #define GEN6_PCODE_FREQ_RING_RATIO_SHIFT 16 |
f0f59a00 | 3266 | #define GEN6_PCODE_DATA1 _MMIO(0x13812C) |
8fd26859 | 3267 | |
c08c3641 VS |
3268 | #define MTL_PCODE_STOLEN_ACCESS _MMIO(0x138914) |
3269 | #define STOLEN_ACCESS_ALLOWED 0x1 | |
3270 | ||
e3689190 | 3271 | /* IVYBRIDGE DPF */ |
f0f59a00 | 3272 | #define GEN7_L3CDERRST1(slice) _MMIO(0xB008 + (slice) * 0x200) /* L3CD Error Status 1 */ |
5ee8ee86 PZ |
3273 | #define GEN7_L3CDERRST1_ROW_MASK (0x7ff << 14) |
3274 | #define GEN7_PARITY_ERROR_VALID (1 << 13) | |
3275 | #define GEN7_L3CDERRST1_BANK_MASK (3 << 11) | |
3276 | #define GEN7_L3CDERRST1_SUBBANK_MASK (7 << 8) | |
e3689190 | 3277 | #define GEN7_PARITY_ERROR_ROW(reg) \ |
9e8789ec | 3278 | (((reg) & GEN7_L3CDERRST1_ROW_MASK) >> 14) |
e3689190 | 3279 | #define GEN7_PARITY_ERROR_BANK(reg) \ |
9e8789ec | 3280 | (((reg) & GEN7_L3CDERRST1_BANK_MASK) >> 11) |
e3689190 | 3281 | #define GEN7_PARITY_ERROR_SUBBANK(reg) \ |
9e8789ec | 3282 | (((reg) & GEN7_L3CDERRST1_SUBBANK_MASK) >> 8) |
5ee8ee86 | 3283 | #define GEN7_L3CDERRST1_ENABLE (1 << 7) |
e3689190 | 3284 | |
ae662d31 EA |
3285 | /* These are the 4 32-bit write offset registers for each stream |
3286 | * output buffer. It determines the offset from the | |
3287 | * 3DSTATE_SO_BUFFERs that the next streamed vertex output goes to. | |
3288 | */ | |
f0f59a00 | 3289 | #define GEN7_SO_WRITE_OFFSET(n) _MMIO(0x5280 + (n) * 4) |
ae662d31 | 3290 | |
9c3a16c8 | 3291 | /* |
75e39688 ID |
3292 | * HSW - ICL power wells |
3293 | * | |
3294 | * Platforms have up to 3 power well control register sets, each set | |
3295 | * controlling up to 16 power wells via a request/status HW flag tuple: | |
3296 | * - main (HSW_PWR_WELL_CTL[1-4]) | |
3297 | * - AUX (ICL_PWR_WELL_CTL_AUX[1-4]) | |
3298 | * - DDI (ICL_PWR_WELL_CTL_DDI[1-4]) | |
3299 | * Each control register set consists of up to 4 registers used by different | |
3300 | * sources that can request a power well to be enabled: | |
3301 | * - BIOS (HSW_PWR_WELL_CTL1/ICL_PWR_WELL_CTL_AUX1/ICL_PWR_WELL_CTL_DDI1) | |
3302 | * - DRIVER (HSW_PWR_WELL_CTL2/ICL_PWR_WELL_CTL_AUX2/ICL_PWR_WELL_CTL_DDI2) | |
3303 | * - KVMR (HSW_PWR_WELL_CTL3) (only in the main register set) | |
3304 | * - DEBUG (HSW_PWR_WELL_CTL4/ICL_PWR_WELL_CTL_AUX4/ICL_PWR_WELL_CTL_DDI4) | |
9c3a16c8 | 3305 | */ |
75e39688 ID |
3306 | #define HSW_PWR_WELL_CTL1 _MMIO(0x45400) |
3307 | #define HSW_PWR_WELL_CTL2 _MMIO(0x45404) | |
3308 | #define HSW_PWR_WELL_CTL3 _MMIO(0x45408) | |
3309 | #define HSW_PWR_WELL_CTL4 _MMIO(0x4540C) | |
3310 | #define HSW_PWR_WELL_CTL_REQ(pw_idx) (0x2 << ((pw_idx) * 2)) | |
3311 | #define HSW_PWR_WELL_CTL_STATE(pw_idx) (0x1 << ((pw_idx) * 2)) | |
3312 | ||
3313 | /* HSW/BDW power well */ | |
3314 | #define HSW_PW_CTL_IDX_GLOBAL 15 | |
3315 | ||
a4d082fc | 3316 | /* SKL/BXT/GLK power wells */ |
75e39688 ID |
3317 | #define SKL_PW_CTL_IDX_PW_2 15 |
3318 | #define SKL_PW_CTL_IDX_PW_1 14 | |
75e39688 ID |
3319 | #define GLK_PW_CTL_IDX_AUX_C 10 |
3320 | #define GLK_PW_CTL_IDX_AUX_B 9 | |
3321 | #define GLK_PW_CTL_IDX_AUX_A 8 | |
75e39688 ID |
3322 | #define SKL_PW_CTL_IDX_DDI_D 4 |
3323 | #define SKL_PW_CTL_IDX_DDI_C 3 | |
3324 | #define SKL_PW_CTL_IDX_DDI_B 2 | |
3325 | #define SKL_PW_CTL_IDX_DDI_A_E 1 | |
3326 | #define GLK_PW_CTL_IDX_DDI_A 1 | |
3327 | #define SKL_PW_CTL_IDX_MISC_IO 0 | |
3328 | ||
656409bb | 3329 | /* ICL/TGL - power wells */ |
1db27a72 | 3330 | #define TGL_PW_CTL_IDX_PW_5 4 |
75e39688 ID |
3331 | #define ICL_PW_CTL_IDX_PW_4 3 |
3332 | #define ICL_PW_CTL_IDX_PW_3 2 | |
3333 | #define ICL_PW_CTL_IDX_PW_2 1 | |
3334 | #define ICL_PW_CTL_IDX_PW_1 0 | |
3335 | ||
a6922f4a MR |
3336 | /* XE_LPD - power wells */ |
3337 | #define XELPD_PW_CTL_IDX_PW_D 8 | |
3338 | #define XELPD_PW_CTL_IDX_PW_C 7 | |
3339 | #define XELPD_PW_CTL_IDX_PW_B 6 | |
3340 | #define XELPD_PW_CTL_IDX_PW_A 5 | |
3341 | ||
75e39688 ID |
3342 | #define ICL_PWR_WELL_CTL_AUX1 _MMIO(0x45440) |
3343 | #define ICL_PWR_WELL_CTL_AUX2 _MMIO(0x45444) | |
3344 | #define ICL_PWR_WELL_CTL_AUX4 _MMIO(0x4544C) | |
656409bb ID |
3345 | #define TGL_PW_CTL_IDX_AUX_TBT6 14 |
3346 | #define TGL_PW_CTL_IDX_AUX_TBT5 13 | |
3347 | #define TGL_PW_CTL_IDX_AUX_TBT4 12 | |
75e39688 | 3348 | #define ICL_PW_CTL_IDX_AUX_TBT4 11 |
656409bb | 3349 | #define TGL_PW_CTL_IDX_AUX_TBT3 11 |
75e39688 | 3350 | #define ICL_PW_CTL_IDX_AUX_TBT3 10 |
656409bb | 3351 | #define TGL_PW_CTL_IDX_AUX_TBT2 10 |
75e39688 | 3352 | #define ICL_PW_CTL_IDX_AUX_TBT2 9 |
656409bb | 3353 | #define TGL_PW_CTL_IDX_AUX_TBT1 9 |
75e39688 | 3354 | #define ICL_PW_CTL_IDX_AUX_TBT1 8 |
656409bb | 3355 | #define TGL_PW_CTL_IDX_AUX_TC6 8 |
a6922f4a | 3356 | #define XELPD_PW_CTL_IDX_AUX_E 8 |
656409bb | 3357 | #define TGL_PW_CTL_IDX_AUX_TC5 7 |
a6922f4a | 3358 | #define XELPD_PW_CTL_IDX_AUX_D 7 |
656409bb | 3359 | #define TGL_PW_CTL_IDX_AUX_TC4 6 |
75e39688 | 3360 | #define ICL_PW_CTL_IDX_AUX_F 5 |
656409bb | 3361 | #define TGL_PW_CTL_IDX_AUX_TC3 5 |
75e39688 | 3362 | #define ICL_PW_CTL_IDX_AUX_E 4 |
656409bb | 3363 | #define TGL_PW_CTL_IDX_AUX_TC2 4 |
75e39688 | 3364 | #define ICL_PW_CTL_IDX_AUX_D 3 |
656409bb | 3365 | #define TGL_PW_CTL_IDX_AUX_TC1 3 |
75e39688 ID |
3366 | #define ICL_PW_CTL_IDX_AUX_C 2 |
3367 | #define ICL_PW_CTL_IDX_AUX_B 1 | |
3368 | #define ICL_PW_CTL_IDX_AUX_A 0 | |
3369 | ||
3370 | #define ICL_PWR_WELL_CTL_DDI1 _MMIO(0x45450) | |
3371 | #define ICL_PWR_WELL_CTL_DDI2 _MMIO(0x45454) | |
3372 | #define ICL_PWR_WELL_CTL_DDI4 _MMIO(0x4545C) | |
a6922f4a | 3373 | #define XELPD_PW_CTL_IDX_DDI_E 8 |
656409bb | 3374 | #define TGL_PW_CTL_IDX_DDI_TC6 8 |
a6922f4a | 3375 | #define XELPD_PW_CTL_IDX_DDI_D 7 |
656409bb ID |
3376 | #define TGL_PW_CTL_IDX_DDI_TC5 7 |
3377 | #define TGL_PW_CTL_IDX_DDI_TC4 6 | |
75e39688 | 3378 | #define ICL_PW_CTL_IDX_DDI_F 5 |
656409bb | 3379 | #define TGL_PW_CTL_IDX_DDI_TC3 5 |
75e39688 | 3380 | #define ICL_PW_CTL_IDX_DDI_E 4 |
656409bb | 3381 | #define TGL_PW_CTL_IDX_DDI_TC2 4 |
75e39688 | 3382 | #define ICL_PW_CTL_IDX_DDI_D 3 |
656409bb | 3383 | #define TGL_PW_CTL_IDX_DDI_TC1 3 |
75e39688 ID |
3384 | #define ICL_PW_CTL_IDX_DDI_C 2 |
3385 | #define ICL_PW_CTL_IDX_DDI_B 1 | |
3386 | #define ICL_PW_CTL_IDX_DDI_A 0 | |
3387 | ||
3388 | /* HSW - power well misc debug registers */ | |
f0f59a00 | 3389 | #define HSW_PWR_WELL_CTL5 _MMIO(0x45410) |
5ee8ee86 PZ |
3390 | #define HSW_PWR_WELL_ENABLE_SINGLE_STEP (1 << 31) |
3391 | #define HSW_PWR_WELL_PWR_GATE_OVERRIDE (1 << 20) | |
3392 | #define HSW_PWR_WELL_FORCE_ON (1 << 19) | |
f0f59a00 | 3393 | #define HSW_PWR_WELL_CTL6 _MMIO(0x45414) |
9eb3a752 | 3394 | |
94dd5138 | 3395 | /* SKL Fuse Status */ |
b2891eb2 ID |
3396 | enum skl_power_gate { |
3397 | SKL_PG0, | |
3398 | SKL_PG1, | |
3399 | SKL_PG2, | |
1a260e11 ID |
3400 | ICL_PG3, |
3401 | ICL_PG4, | |
b2891eb2 ID |
3402 | }; |
3403 | ||
f0f59a00 | 3404 | #define SKL_FUSE_STATUS _MMIO(0x42000) |
5ee8ee86 | 3405 | #define SKL_FUSE_DOWNLOAD_STATUS (1 << 31) |
75e39688 ID |
3406 | /* |
3407 | * PG0 is HW controlled, so doesn't have a corresponding power well control knob | |
3408 | * SKL_DISP_PW1_IDX..SKL_DISP_PW2_IDX -> PG1..PG2 | |
3409 | */ | |
3410 | #define SKL_PW_CTL_IDX_TO_PG(pw_idx) \ | |
3411 | ((pw_idx) - SKL_PW_CTL_IDX_PW_1 + SKL_PG1) | |
3412 | /* | |
3413 | * PG0 is HW controlled, so doesn't have a corresponding power well control knob | |
3414 | * ICL_DISP_PW1_IDX..ICL_DISP_PW4_IDX -> PG1..PG4 | |
3415 | */ | |
3416 | #define ICL_PW_CTL_IDX_TO_PG(pw_idx) \ | |
3417 | ((pw_idx) - ICL_PW_CTL_IDX_PW_1 + SKL_PG1) | |
b2891eb2 | 3418 | #define SKL_FUSE_PG_DIST_STATUS(pg) (1 << (27 - (pg))) |
94dd5138 | 3419 | |
e7e104c3 | 3420 | /* Per-pipe DDI Function Control */ |
086f8e84 VS |
3421 | #define _TRANS_DDI_FUNC_CTL_A 0x60400 |
3422 | #define _TRANS_DDI_FUNC_CTL_B 0x61400 | |
3423 | #define _TRANS_DDI_FUNC_CTL_C 0x62400 | |
f1f1d4fa | 3424 | #define _TRANS_DDI_FUNC_CTL_D 0x63400 |
086f8e84 | 3425 | #define _TRANS_DDI_FUNC_CTL_EDP 0x6F400 |
49edbd49 MC |
3426 | #define _TRANS_DDI_FUNC_CTL_DSI0 0x6b400 |
3427 | #define _TRANS_DDI_FUNC_CTL_DSI1 0x6bc00 | |
b092d6ad | 3428 | #define TRANS_DDI_FUNC_CTL(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _TRANS_DDI_FUNC_CTL_A) |
a57c774a | 3429 | |
5ee8ee86 | 3430 | #define TRANS_DDI_FUNC_ENABLE (1 << 31) |
e7e104c3 | 3431 | /* Those bits are ignored by pipe EDP since it can only connect to DDI A */ |
26804afd | 3432 | #define TRANS_DDI_PORT_SHIFT 28 |
df16b636 MK |
3433 | #define TGL_TRANS_DDI_PORT_SHIFT 27 |
3434 | #define TRANS_DDI_PORT_MASK (7 << TRANS_DDI_PORT_SHIFT) | |
3435 | #define TGL_TRANS_DDI_PORT_MASK (0xf << TGL_TRANS_DDI_PORT_SHIFT) | |
3436 | #define TRANS_DDI_SELECT_PORT(x) ((x) << TRANS_DDI_PORT_SHIFT) | |
3437 | #define TGL_TRANS_DDI_SELECT_PORT(x) (((x) + 1) << TGL_TRANS_DDI_PORT_SHIFT) | |
5ee8ee86 PZ |
3438 | #define TRANS_DDI_MODE_SELECT_MASK (7 << 24) |
3439 | #define TRANS_DDI_MODE_SELECT_HDMI (0 << 24) | |
3440 | #define TRANS_DDI_MODE_SELECT_DVI (1 << 24) | |
3441 | #define TRANS_DDI_MODE_SELECT_DP_SST (2 << 24) | |
3442 | #define TRANS_DDI_MODE_SELECT_DP_MST (3 << 24) | |
7bb97db8 | 3443 | #define TRANS_DDI_MODE_SELECT_FDI_OR_128B132B (4 << 24) |
5ee8ee86 PZ |
3444 | #define TRANS_DDI_BPC_MASK (7 << 20) |
3445 | #define TRANS_DDI_BPC_8 (0 << 20) | |
3446 | #define TRANS_DDI_BPC_10 (1 << 20) | |
3447 | #define TRANS_DDI_BPC_6 (2 << 20) | |
3448 | #define TRANS_DDI_BPC_12 (3 << 20) | |
a4d082fc | 3449 | #define TRANS_DDI_PORT_SYNC_MASTER_SELECT_MASK REG_GENMASK(19, 18) |
dc5b8ed5 | 3450 | #define TRANS_DDI_PORT_SYNC_MASTER_SELECT(x) REG_FIELD_PREP(TRANS_DDI_PORT_SYNC_MASTER_SELECT_MASK, (x)) |
5ee8ee86 PZ |
3451 | #define TRANS_DDI_PVSYNC (1 << 17) |
3452 | #define TRANS_DDI_PHSYNC (1 << 16) | |
a4d082fc | 3453 | #define TRANS_DDI_PORT_SYNC_ENABLE REG_BIT(15) |
a18e301a | 3454 | #define XE3_TRANS_DDI_HDCP_LINE_REKEY_DISABLE REG_BIT(15) |
5ee8ee86 PZ |
3455 | #define TRANS_DDI_EDP_INPUT_MASK (7 << 12) |
3456 | #define TRANS_DDI_EDP_INPUT_A_ON (0 << 12) | |
3457 | #define TRANS_DDI_EDP_INPUT_A_ONOFF (4 << 12) | |
3458 | #define TRANS_DDI_EDP_INPUT_B_ONOFF (5 << 12) | |
3459 | #define TRANS_DDI_EDP_INPUT_C_ONOFF (6 << 12) | |
4d89adc7 | 3460 | #define TRANS_DDI_EDP_INPUT_D_ONOFF (7 << 12) |
6a3691ca | 3461 | #define TRANS_DDI_HDCP_LINE_REKEY_DISABLE REG_BIT(12) |
bb747fa5 | 3462 | #define TRANS_DDI_MST_TRANSPORT_SELECT_MASK REG_GENMASK(11, 10) |
b3545e08 LDM |
3463 | #define TRANS_DDI_MST_TRANSPORT_SELECT(trans) \ |
3464 | REG_FIELD_PREP(TRANS_DDI_MST_TRANSPORT_SELECT_MASK, trans) | |
5ee8ee86 PZ |
3465 | #define TRANS_DDI_HDCP_SIGNALLING (1 << 9) |
3466 | #define TRANS_DDI_DP_VC_PAYLOAD_ALLOC (1 << 8) | |
3467 | #define TRANS_DDI_HDMI_SCRAMBLER_CTS_ENABLE (1 << 7) | |
3468 | #define TRANS_DDI_HDMI_SCRAMBLER_RESET_FREQ (1 << 6) | |
1a67a168 | 3469 | #define TRANS_DDI_HDCP_SELECT REG_BIT(5) |
5ee8ee86 PZ |
3470 | #define TRANS_DDI_BFI_ENABLE (1 << 4) |
3471 | #define TRANS_DDI_HIGH_TMDS_CHAR_RATE (1 << 4) | |
b66a8aba AN |
3472 | #define TRANS_DDI_PORT_WIDTH_MASK REG_GENMASK(3, 1) |
3473 | #define TRANS_DDI_PORT_WIDTH(width) REG_FIELD_PREP(TRANS_DDI_PORT_WIDTH_MASK, (width) - 1) | |
5ee8ee86 | 3474 | #define TRANS_DDI_HDMI_SCRAMBLING (1 << 0) |
15953637 SS |
3475 | #define TRANS_DDI_HDMI_SCRAMBLING_MASK (TRANS_DDI_HDMI_SCRAMBLER_CTS_ENABLE \ |
3476 | | TRANS_DDI_HDMI_SCRAMBLER_RESET_FREQ \ | |
3477 | | TRANS_DDI_HDMI_SCRAMBLING) | |
e7e104c3 | 3478 | |
49edbd49 MC |
3479 | #define _TRANS_DDI_FUNC_CTL2_A 0x60404 |
3480 | #define _TRANS_DDI_FUNC_CTL2_B 0x61404 | |
3481 | #define _TRANS_DDI_FUNC_CTL2_C 0x62404 | |
3482 | #define _TRANS_DDI_FUNC_CTL2_EDP 0x6f404 | |
3483 | #define _TRANS_DDI_FUNC_CTL2_DSI0 0x6b404 | |
3484 | #define _TRANS_DDI_FUNC_CTL2_DSI1 0x6bc04 | |
76f1b2b1 | 3485 | #define TRANS_DDI_FUNC_CTL2(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _TRANS_DDI_FUNC_CTL2_A) |
d4d7d9ca | 3486 | #define PORT_SYNC_MODE_ENABLE REG_BIT(4) |
f14d81b7 | 3487 | #define CMTG_SECONDARY_MODE REG_BIT(3) |
d4d7d9ca VS |
3488 | #define PORT_SYNC_MODE_MASTER_SELECT_MASK REG_GENMASK(2, 0) |
3489 | #define PORT_SYNC_MODE_MASTER_SELECT(x) REG_FIELD_PREP(PORT_SYNC_MODE_MASTER_SELECT_MASK, (x)) | |
49edbd49 | 3490 | |
573d7ce4 ID |
3491 | #define TRANS_CMTG_CHICKEN _MMIO(0x6fa90) |
3492 | #define DISABLE_DPT_CLK_GATING REG_BIT(1) | |
3493 | ||
0e87f667 | 3494 | /* DisplayPort Transport Control */ |
086f8e84 VS |
3495 | #define _DP_TP_CTL_A 0x64040 |
3496 | #define _DP_TP_CTL_B 0x64140 | |
4444df6e | 3497 | #define _TGL_DP_TP_CTL_A 0x60540 |
f0f59a00 | 3498 | #define DP_TP_CTL(port) _MMIO_PORT(port, _DP_TP_CTL_A, _DP_TP_CTL_B) |
3cd5a36d | 3499 | #define TGL_DP_TP_CTL(dev_priv, tran) _MMIO_TRANS2(dev_priv, (tran), _TGL_DP_TP_CTL_A) |
b9b82a47 JN |
3500 | #define DP_TP_CTL_ENABLE REG_BIT(31) |
3501 | #define DP_TP_CTL_FEC_ENABLE REG_BIT(30) | |
3502 | #define DP_TP_CTL_MODE_MASK REG_BIT(27) | |
3503 | #define DP_TP_CTL_MODE_SST REG_FIELD_PREP(DP_TP_CTL_MODE_MASK, 0) | |
3504 | #define DP_TP_CTL_MODE_MST REG_FIELD_PREP(DP_TP_CTL_MODE_MASK, 1) | |
3505 | #define DP_TP_CTL_FORCE_ACT REG_BIT(25) | |
3506 | #define DP_TP_CTL_TRAIN_PAT4_SEL_MASK REG_GENMASK(20, 19) | |
3507 | #define DP_TP_CTL_TRAIN_PAT4_SEL_TP4A REG_FIELD_PREP(DP_TP_CTL_TRAIN_PAT4_SEL_MASK, 0) | |
3508 | #define DP_TP_CTL_TRAIN_PAT4_SEL_TP4B REG_FIELD_PREP(DP_TP_CTL_TRAIN_PAT4_SEL_MASK, 1) | |
3509 | #define DP_TP_CTL_TRAIN_PAT4_SEL_TP4C REG_FIELD_PREP(DP_TP_CTL_TRAIN_PAT4_SEL_MASK, 2) | |
3510 | #define DP_TP_CTL_ENHANCED_FRAME_ENABLE REG_BIT(18) | |
3511 | #define DP_TP_CTL_FDI_AUTOTRAIN REG_BIT(15) | |
3512 | #define DP_TP_CTL_LINK_TRAIN_MASK REG_GENMASK(10, 8) | |
3513 | #define DP_TP_CTL_LINK_TRAIN_PAT1 REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 0) | |
3514 | #define DP_TP_CTL_LINK_TRAIN_PAT2 REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 1) | |
3515 | #define DP_TP_CTL_LINK_TRAIN_PAT3 REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 4) | |
3516 | #define DP_TP_CTL_LINK_TRAIN_PAT4 REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 5) | |
3517 | #define DP_TP_CTL_LINK_TRAIN_IDLE REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 2) | |
3518 | #define DP_TP_CTL_LINK_TRAIN_NORMAL REG_FIELD_PREP(DP_TP_CTL_LINK_TRAIN_MASK, 3) | |
3519 | #define DP_TP_CTL_SCRAMBLE_DISABLE REG_BIT(7) | |
0e87f667 | 3520 | |
e411b2c1 | 3521 | /* DisplayPort Transport Status */ |
086f8e84 VS |
3522 | #define _DP_TP_STATUS_A 0x64044 |
3523 | #define _DP_TP_STATUS_B 0x64144 | |
4444df6e | 3524 | #define _TGL_DP_TP_STATUS_A 0x60544 |
f0f59a00 | 3525 | #define DP_TP_STATUS(port) _MMIO_PORT(port, _DP_TP_STATUS_A, _DP_TP_STATUS_B) |
b11bf614 | 3526 | #define TGL_DP_TP_STATUS(dev_priv, tran) _MMIO_TRANS2(dev_priv, (tran), _TGL_DP_TP_STATUS_A) |
b9b82a47 JN |
3527 | #define DP_TP_STATUS_FEC_ENABLE_LIVE REG_BIT(28) |
3528 | #define DP_TP_STATUS_IDLE_DONE REG_BIT(25) | |
3529 | #define DP_TP_STATUS_ACT_SENT REG_BIT(24) | |
3530 | #define DP_TP_STATUS_MODE_STATUS_MST REG_BIT(23) | |
3531 | #define DP_TP_STATUS_STREAMS_ENABLED_MASK REG_GENMASK(18, 16) /* 17:16 on hsw but bit 18 mbz */ | |
3532 | #define DP_TP_STATUS_AUTOTRAIN_DONE REG_BIT(12) | |
3533 | #define DP_TP_STATUS_PAYLOAD_MAPPING_VC2_MASK REG_GENMASK(9, 8) | |
3534 | #define DP_TP_STATUS_PAYLOAD_MAPPING_VC1_MASK REG_GENMASK(5, 4) | |
3535 | #define DP_TP_STATUS_PAYLOAD_MAPPING_VC0_MASK REG_GENMASK(1, 0) | |
e411b2c1 | 3536 | |
03f896a1 | 3537 | /* DDI Buffer Control */ |
086f8e84 VS |
3538 | #define _DDI_BUF_CTL_A 0x64000 |
3539 | #define _DDI_BUF_CTL_B 0x64100 | |
23ef6194 | 3540 | /* Known as DDI_CTL_DE in MTL+ */ |
f0f59a00 | 3541 | #define DDI_BUF_CTL(port) _MMIO_PORT(port, _DDI_BUF_CTL_A, _DDI_BUF_CTL_B) |
84a357bb | 3542 | #define DDI_BUF_CTL_ENABLE REG_BIT(31) |
d5c7854b LDM |
3543 | #define XE2LPD_DDI_BUF_D2D_LINK_ENABLE REG_BIT(29) |
3544 | #define XE2LPD_DDI_BUF_D2D_LINK_STATE REG_BIT(28) | |
84a357bb ID |
3545 | #define DDI_BUF_EMP_MASK REG_GENMASK(27, 24) |
3546 | #define DDI_BUF_TRANS_SELECT(n) REG_FIELD_PREP(DDI_BUF_EMP_MASK, (n)) | |
3547 | #define DDI_BUF_PHY_LINK_RATE_MASK REG_GENMASK(23, 20) | |
3548 | #define DDI_BUF_PHY_LINK_RATE(r) REG_FIELD_PREP(DDI_BUF_PHY_LINK_RATE_MASK, (r)) | |
23ef6194 JRS |
3549 | #define DDI_BUF_PORT_DATA_MASK REG_GENMASK(19, 18) |
3550 | #define DDI_BUF_PORT_DATA_10BIT REG_FIELD_PREP(DDI_BUF_PORT_DATA_MASK, 0) | |
3551 | #define DDI_BUF_PORT_DATA_20BIT REG_FIELD_PREP(DDI_BUF_PORT_DATA_MASK, 1) | |
3552 | #define DDI_BUF_PORT_DATA_40BIT REG_FIELD_PREP(DDI_BUF_PORT_DATA_MASK, 2) | |
84a357bb | 3553 | #define DDI_BUF_PORT_REVERSAL REG_BIT(16) |
dc2b12b3 ID |
3554 | #define DDI_BUF_LANE_STAGGER_DELAY_MASK REG_GENMASK(15, 8) |
3555 | #define DDI_BUF_LANE_STAGGER_DELAY(symbols) REG_FIELD_PREP(DDI_BUF_LANE_STAGGER_DELAY_MASK, \ | |
3556 | (symbols)) | |
84a357bb | 3557 | #define DDI_BUF_IS_IDLE REG_BIT(7) |
55ce306c | 3558 | #define DDI_BUF_CTL_TC_PHY_OWNERSHIP REG_BIT(6) |
84a357bb ID |
3559 | #define DDI_A_4_LANES REG_BIT(4) |
3560 | #define DDI_PORT_WIDTH_MASK REG_GENMASK(3, 1) | |
3561 | #define DDI_PORT_WIDTH(width) REG_FIELD_PREP(DDI_PORT_WIDTH_MASK, \ | |
3562 | ((width) == 3 ? 4 : (width) - 1)) | |
90a6b7b0 | 3563 | #define DDI_PORT_WIDTH_SHIFT 1 |
84a357bb | 3564 | #define DDI_INIT_DISPLAY_DETECTED REG_BIT(0) |
03f896a1 | 3565 | |
bb879a44 | 3566 | /* DDI Buffer Translations */ |
086f8e84 VS |
3567 | #define _DDI_BUF_TRANS_A 0x64E00 |
3568 | #define _DDI_BUF_TRANS_B 0x64E60 | |
f0f59a00 | 3569 | #define DDI_BUF_TRANS_LO(port, i) _MMIO(_PORT(port, _DDI_BUF_TRANS_A, _DDI_BUF_TRANS_B) + (i) * 8) |
c110ae6c | 3570 | #define DDI_BUF_BALANCE_LEG_ENABLE (1 << 31) |
f0f59a00 | 3571 | #define DDI_BUF_TRANS_HI(port, i) _MMIO(_PORT(port, _DDI_BUF_TRANS_A, _DDI_BUF_TRANS_B) + (i) * 8 + 4) |
bb879a44 | 3572 | |
fce214ae AM |
3573 | /* DDI DP Compliance Control */ |
3574 | #define _DDI_DP_COMP_CTL_A 0x605F0 | |
3575 | #define _DDI_DP_COMP_CTL_B 0x615F0 | |
3576 | #define DDI_DP_COMP_CTL(pipe) _MMIO_PIPE(pipe, _DDI_DP_COMP_CTL_A, _DDI_DP_COMP_CTL_B) | |
3577 | #define DDI_DP_COMP_CTL_ENABLE (1 << 31) | |
3578 | #define DDI_DP_COMP_CTL_D10_2 (0 << 28) | |
3579 | #define DDI_DP_COMP_CTL_SCRAMBLED_0 (1 << 28) | |
3580 | #define DDI_DP_COMP_CTL_PRBS7 (2 << 28) | |
3581 | #define DDI_DP_COMP_CTL_CUSTOM80 (3 << 28) | |
3582 | #define DDI_DP_COMP_CTL_HBR2 (4 << 28) | |
3583 | #define DDI_DP_COMP_CTL_SCRAMBLED_1 (5 << 28) | |
3584 | #define DDI_DP_COMP_CTL_HBR2_RESET (0xFC << 0) | |
3585 | ||
3586 | /* DDI DP Compliance Pattern */ | |
3587 | #define _DDI_DP_COMP_PAT_A 0x605F4 | |
3588 | #define _DDI_DP_COMP_PAT_B 0x615F4 | |
3589 | #define DDI_DP_COMP_PAT(pipe, i) _MMIO(_PIPE(pipe, _DDI_DP_COMP_PAT_A, _DDI_DP_COMP_PAT_B) + (i) * 4) | |
3590 | ||
7501a4d8 ED |
3591 | /* Sideband Interface (SBI) is programmed indirectly, via |
3592 | * SBI_ADDR, which contains the register offset; and SBI_DATA, | |
3593 | * which contains the payload */ | |
f0f59a00 VS |
3594 | #define SBI_ADDR _MMIO(0xC6000) |
3595 | #define SBI_DATA _MMIO(0xC6004) | |
3596 | #define SBI_CTL_STAT _MMIO(0xC6008) | |
5ee8ee86 PZ |
3597 | #define SBI_CTL_DEST_ICLK (0x0 << 16) |
3598 | #define SBI_CTL_DEST_MPHY (0x1 << 16) | |
3599 | #define SBI_CTL_OP_IORD (0x2 << 8) | |
3600 | #define SBI_CTL_OP_IOWR (0x3 << 8) | |
3601 | #define SBI_CTL_OP_CRRD (0x6 << 8) | |
3602 | #define SBI_CTL_OP_CRWR (0x7 << 8) | |
3603 | #define SBI_RESPONSE_FAIL (0x1 << 1) | |
3604 | #define SBI_RESPONSE_SUCCESS (0x0 << 1) | |
3605 | #define SBI_BUSY (0x1 << 0) | |
3606 | #define SBI_READY (0x0 << 0) | |
52f025ef | 3607 | |
ccf1c867 | 3608 | /* SBI offsets */ |
f7be2c21 | 3609 | #define SBI_SSCDIVINTPHASE 0x0200 |
5e49cea6 | 3610 | #define SBI_SSCDIVINTPHASE6 0x0600 |
8802e5b6 | 3611 | #define SBI_SSCDIVINTPHASE_DIVSEL_SHIFT 1 |
5ee8ee86 PZ |
3612 | #define SBI_SSCDIVINTPHASE_DIVSEL_MASK (0x7f << 1) |
3613 | #define SBI_SSCDIVINTPHASE_DIVSEL(x) ((x) << 1) | |
8802e5b6 | 3614 | #define SBI_SSCDIVINTPHASE_INCVAL_SHIFT 8 |
5ee8ee86 PZ |
3615 | #define SBI_SSCDIVINTPHASE_INCVAL_MASK (0x7f << 8) |
3616 | #define SBI_SSCDIVINTPHASE_INCVAL(x) ((x) << 8) | |
3617 | #define SBI_SSCDIVINTPHASE_DIR(x) ((x) << 15) | |
3618 | #define SBI_SSCDIVINTPHASE_PROPAGATE (1 << 0) | |
f7be2c21 | 3619 | #define SBI_SSCDITHPHASE 0x0204 |
5e49cea6 | 3620 | #define SBI_SSCCTL 0x020c |
ccf1c867 | 3621 | #define SBI_SSCCTL6 0x060C |
5ee8ee86 PZ |
3622 | #define SBI_SSCCTL_PATHALT (1 << 3) |
3623 | #define SBI_SSCCTL_DISABLE (1 << 0) | |
ccf1c867 | 3624 | #define SBI_SSCAUXDIV6 0x0610 |
8802e5b6 | 3625 | #define SBI_SSCAUXDIV_FINALDIV2SEL_SHIFT 4 |
5ee8ee86 PZ |
3626 | #define SBI_SSCAUXDIV_FINALDIV2SEL_MASK (1 << 4) |
3627 | #define SBI_SSCAUXDIV_FINALDIV2SEL(x) ((x) << 4) | |
5e49cea6 | 3628 | #define SBI_DBUFF0 0x2a00 |
2fa86a1f | 3629 | #define SBI_GEN0 0x1f00 |
5ee8ee86 | 3630 | #define SBI_GEN0_CFG_BUFFENABLE_DISABLE (1 << 0) |
ccf1c867 | 3631 | |
52f025ef | 3632 | /* LPT PIXCLK_GATE */ |
f0f59a00 | 3633 | #define PIXCLK_GATE _MMIO(0xC6020) |
5ee8ee86 PZ |
3634 | #define PIXCLK_GATE_UNGATE (1 << 0) |
3635 | #define PIXCLK_GATE_GATE (0 << 0) | |
52f025ef | 3636 | |
e93ea06a | 3637 | /* SPLL */ |
f0f59a00 | 3638 | #define SPLL_CTL _MMIO(0x46020) |
5ee8ee86 | 3639 | #define SPLL_PLL_ENABLE (1 << 31) |
4a95e36f VS |
3640 | #define SPLL_REF_BCLK (0 << 28) |
3641 | #define SPLL_REF_MUXED_SSC (1 << 28) /* CPU SSC if fused enabled, PCH SSC otherwise */ | |
3642 | #define SPLL_REF_NON_SSC_HSW (2 << 28) | |
3643 | #define SPLL_REF_PCH_SSC_BDW (2 << 28) | |
3644 | #define SPLL_REF_LCPLL (3 << 28) | |
3645 | #define SPLL_REF_MASK (3 << 28) | |
3646 | #define SPLL_FREQ_810MHz (0 << 26) | |
3647 | #define SPLL_FREQ_1350MHz (1 << 26) | |
3648 | #define SPLL_FREQ_2700MHz (2 << 26) | |
3649 | #define SPLL_FREQ_MASK (3 << 26) | |
e93ea06a | 3650 | |
4dffc404 | 3651 | /* WRPLL */ |
086f8e84 VS |
3652 | #define _WRPLL_CTL1 0x46040 |
3653 | #define _WRPLL_CTL2 0x46060 | |
f0f59a00 | 3654 | #define WRPLL_CTL(pll) _MMIO_PIPE(pll, _WRPLL_CTL1, _WRPLL_CTL2) |
5ee8ee86 | 3655 | #define WRPLL_PLL_ENABLE (1 << 31) |
4a95e36f VS |
3656 | #define WRPLL_REF_BCLK (0 << 28) |
3657 | #define WRPLL_REF_PCH_SSC (1 << 28) | |
3658 | #define WRPLL_REF_MUXED_SSC_BDW (2 << 28) /* CPU SSC if fused enabled, PCH SSC otherwise */ | |
3659 | #define WRPLL_REF_SPECIAL_HSW (2 << 28) /* muxed SSC (ULT), non-SSC (non-ULT) */ | |
3660 | #define WRPLL_REF_LCPLL (3 << 28) | |
3661 | #define WRPLL_REF_MASK (3 << 28) | |
ef4d084f | 3662 | /* WRPLL divider programming */ |
5ee8ee86 | 3663 | #define WRPLL_DIVIDER_REFERENCE(x) ((x) << 0) |
11578553 | 3664 | #define WRPLL_DIVIDER_REF_MASK (0xff) |
5ee8ee86 PZ |
3665 | #define WRPLL_DIVIDER_POST(x) ((x) << 8) |
3666 | #define WRPLL_DIVIDER_POST_MASK (0x3f << 8) | |
11578553 | 3667 | #define WRPLL_DIVIDER_POST_SHIFT 8 |
5ee8ee86 | 3668 | #define WRPLL_DIVIDER_FEEDBACK(x) ((x) << 16) |
11578553 | 3669 | #define WRPLL_DIVIDER_FB_SHIFT 16 |
5ee8ee86 | 3670 | #define WRPLL_DIVIDER_FB_MASK (0xff << 16) |
4dffc404 | 3671 | |
fec9181c | 3672 | /* Port clock selection */ |
086f8e84 VS |
3673 | #define _PORT_CLK_SEL_A 0x46100 |
3674 | #define _PORT_CLK_SEL_B 0x46104 | |
f0f59a00 | 3675 | #define PORT_CLK_SEL(port) _MMIO_PORT(port, _PORT_CLK_SEL_A, _PORT_CLK_SEL_B) |
230fb39f JN |
3676 | #define PORT_CLK_SEL_MASK REG_GENMASK(31, 29) |
3677 | #define PORT_CLK_SEL_LCPLL_2700 REG_FIELD_PREP(PORT_CLK_SEL_MASK, 0) | |
3678 | #define PORT_CLK_SEL_LCPLL_1350 REG_FIELD_PREP(PORT_CLK_SEL_MASK, 1) | |
3679 | #define PORT_CLK_SEL_LCPLL_810 REG_FIELD_PREP(PORT_CLK_SEL_MASK, 2) | |
3680 | #define PORT_CLK_SEL_SPLL REG_FIELD_PREP(PORT_CLK_SEL_MASK, 3) | |
3681 | #define PORT_CLK_SEL_WRPLL(pll) REG_FIELD_PREP(PORT_CLK_SEL_MASK, 4 + (pll)) | |
3682 | #define PORT_CLK_SEL_WRPLL1 REG_FIELD_PREP(PORT_CLK_SEL_MASK, 4) | |
3683 | #define PORT_CLK_SEL_WRPLL2 REG_FIELD_PREP(PORT_CLK_SEL_MASK, 5) | |
3684 | #define PORT_CLK_SEL_NONE REG_FIELD_PREP(PORT_CLK_SEL_MASK, 7) | |
fec9181c | 3685 | |
78b60ce7 PZ |
3686 | /* On ICL+ this is the same as PORT_CLK_SEL, but all bits change. */ |
3687 | #define DDI_CLK_SEL(port) PORT_CLK_SEL(port) | |
230fb39f JN |
3688 | #define DDI_CLK_SEL_MASK REG_GENMASK(31, 28) |
3689 | #define DDI_CLK_SEL_NONE REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0x0) | |
3690 | #define DDI_CLK_SEL_MG REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0x8) | |
3691 | #define DDI_CLK_SEL_TBT_162 REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0xC) | |
3692 | #define DDI_CLK_SEL_TBT_270 REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0xD) | |
3693 | #define DDI_CLK_SEL_TBT_540 REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0xE) | |
3694 | #define DDI_CLK_SEL_TBT_810 REG_FIELD_PREP(DDI_CLK_SEL_MASK, 0xF) | |
78b60ce7 | 3695 | |
bb523fc0 | 3696 | /* Transcoder clock selection */ |
086f8e84 VS |
3697 | #define _TRANS_CLK_SEL_A 0x46140 |
3698 | #define _TRANS_CLK_SEL_B 0x46144 | |
f0f59a00 | 3699 | #define TRANS_CLK_SEL(tran) _MMIO_TRANS(tran, _TRANS_CLK_SEL_A, _TRANS_CLK_SEL_B) |
bb523fc0 | 3700 | /* For each transcoder, we need to select the corresponding port clock */ |
5ee8ee86 PZ |
3701 | #define TRANS_CLK_SEL_DISABLED (0x0 << 29) |
3702 | #define TRANS_CLK_SEL_PORT(x) (((x) + 1) << 29) | |
df16b636 MK |
3703 | #define TGL_TRANS_CLK_SEL_DISABLED (0x0 << 28) |
3704 | #define TGL_TRANS_CLK_SEL_PORT(x) (((x) + 1) << 28) | |
3705 | ||
fec9181c | 3706 | |
7f1052a8 VS |
3707 | #define CDCLK_FREQ _MMIO(0x46200) |
3708 | ||
086f8e84 VS |
3709 | #define _TRANSA_MSA_MISC 0x60410 |
3710 | #define _TRANSB_MSA_MISC 0x61410 | |
3711 | #define _TRANSC_MSA_MISC 0x62410 | |
3712 | #define _TRANS_EDP_MSA_MISC 0x6f410 | |
0623993c | 3713 | #define TRANS_MSA_MISC(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _TRANSA_MSA_MISC) |
3e706dff | 3714 | /* See DP_MSA_MISC_* for the bit definitions */ |
dae84799 | 3715 | |
1d53ccdc JRS |
3716 | #define _TRANS_A_SET_CONTEXT_LATENCY 0x6007C |
3717 | #define _TRANS_B_SET_CONTEXT_LATENCY 0x6107C | |
3718 | #define _TRANS_C_SET_CONTEXT_LATENCY 0x6207C | |
3719 | #define _TRANS_D_SET_CONTEXT_LATENCY 0x6307C | |
e4a4142b | 3720 | #define TRANS_SET_CONTEXT_LATENCY(dev_priv, tran) _MMIO_TRANS2(dev_priv, tran, _TRANS_A_SET_CONTEXT_LATENCY) |
1d53ccdc JRS |
3721 | #define TRANS_SET_CONTEXT_LATENCY_MASK REG_GENMASK(15, 0) |
3722 | #define TRANS_SET_CONTEXT_LATENCY_VALUE(x) REG_FIELD_PREP(TRANS_SET_CONTEXT_LATENCY_MASK, (x)) | |
3723 | ||
90e8d31c | 3724 | /* LCPLL Control */ |
f0f59a00 | 3725 | #define LCPLL_CTL _MMIO(0x130040) |
5ee8ee86 PZ |
3726 | #define LCPLL_PLL_DISABLE (1 << 31) |
3727 | #define LCPLL_PLL_LOCK (1 << 30) | |
4a95e36f VS |
3728 | #define LCPLL_REF_NON_SSC (0 << 28) |
3729 | #define LCPLL_REF_BCLK (2 << 28) | |
3730 | #define LCPLL_REF_PCH_SSC (3 << 28) | |
3731 | #define LCPLL_REF_MASK (3 << 28) | |
5ee8ee86 PZ |
3732 | #define LCPLL_CLK_FREQ_MASK (3 << 26) |
3733 | #define LCPLL_CLK_FREQ_450 (0 << 26) | |
3734 | #define LCPLL_CLK_FREQ_54O_BDW (1 << 26) | |
3735 | #define LCPLL_CLK_FREQ_337_5_BDW (2 << 26) | |
3736 | #define LCPLL_CLK_FREQ_675_BDW (3 << 26) | |
3737 | #define LCPLL_CD_CLOCK_DISABLE (1 << 25) | |
3738 | #define LCPLL_ROOT_CD_CLOCK_DISABLE (1 << 24) | |
3739 | #define LCPLL_CD2X_CLOCK_DISABLE (1 << 23) | |
3740 | #define LCPLL_POWER_DOWN_ALLOW (1 << 22) | |
3741 | #define LCPLL_CD_SOURCE_FCLK (1 << 21) | |
3742 | #define LCPLL_CD_SOURCE_FCLK_DONE (1 << 19) | |
be256dc7 | 3743 | |
326ac39b S |
3744 | /* |
3745 | * SKL Clocks | |
3746 | */ | |
326ac39b | 3747 | /* CDCLK_CTL */ |
f0f59a00 | 3748 | #define CDCLK_CTL _MMIO(0x46000) |
f9feb882 SL |
3749 | #define CDCLK_FREQ_SEL_MASK REG_GENMASK(27, 26) |
3750 | #define CDCLK_FREQ_450_432 REG_FIELD_PREP(CDCLK_FREQ_SEL_MASK, 0) | |
3751 | #define CDCLK_FREQ_540 REG_FIELD_PREP(CDCLK_FREQ_SEL_MASK, 1) | |
3752 | #define CDCLK_FREQ_337_308 REG_FIELD_PREP(CDCLK_FREQ_SEL_MASK, 2) | |
3753 | #define CDCLK_FREQ_675_617 REG_FIELD_PREP(CDCLK_FREQ_SEL_MASK, 3) | |
5372a54d GS |
3754 | #define MDCLK_SOURCE_SEL_MASK REG_GENMASK(25, 25) |
3755 | #define MDCLK_SOURCE_SEL_CD2XCLK REG_FIELD_PREP(MDCLK_SOURCE_SEL_MASK, 0) | |
3756 | #define MDCLK_SOURCE_SEL_CDCLK_PLL REG_FIELD_PREP(MDCLK_SOURCE_SEL_MASK, 1) | |
f9feb882 SL |
3757 | #define BXT_CDCLK_CD2X_DIV_SEL_MASK REG_GENMASK(23, 22) |
3758 | #define BXT_CDCLK_CD2X_DIV_SEL_1 REG_FIELD_PREP(BXT_CDCLK_CD2X_DIV_SEL_MASK, 0) | |
3759 | #define BXT_CDCLK_CD2X_DIV_SEL_1_5 REG_FIELD_PREP(BXT_CDCLK_CD2X_DIV_SEL_MASK, 1) | |
3760 | #define BXT_CDCLK_CD2X_DIV_SEL_2 REG_FIELD_PREP(BXT_CDCLK_CD2X_DIV_SEL_MASK, 2) | |
3761 | #define BXT_CDCLK_CD2X_DIV_SEL_4 REG_FIELD_PREP(BXT_CDCLK_CD2X_DIV_SEL_MASK, 3) | |
186a277e PZ |
3762 | #define BXT_CDCLK_CD2X_PIPE(pipe) ((pipe) << 20) |
3763 | #define CDCLK_DIVMUX_CD_OVERRIDE (1 << 19) | |
7fe62757 | 3764 | #define BXT_CDCLK_CD2X_PIPE_NONE BXT_CDCLK_CD2X_PIPE(3) |
385ba629 | 3765 | #define ICL_CDCLK_CD2X_PIPE(pipe) (_PICK(pipe, 0, 2, 6) << 19) |
186a277e | 3766 | #define ICL_CDCLK_CD2X_PIPE_NONE (7 << 19) |
385ba629 MR |
3767 | #define TGL_CDCLK_CD2X_PIPE(pipe) BXT_CDCLK_CD2X_PIPE(pipe) |
3768 | #define TGL_CDCLK_CD2X_PIPE_NONE ICL_CDCLK_CD2X_PIPE_NONE | |
186a277e | 3769 | #define BXT_CDCLK_SSA_PRECHARGE_ENABLE (1 << 16) |
7fe62757 | 3770 | #define CDCLK_FREQ_DECIMAL_MASK (0x7ff) |
f8437dd1 | 3771 | |
2060a689 MK |
3772 | /* CDCLK_SQUASH_CTL */ |
3773 | #define CDCLK_SQUASH_CTL _MMIO(0x46008) | |
3774 | #define CDCLK_SQUASH_ENABLE REG_BIT(31) | |
3775 | #define CDCLK_SQUASH_WINDOW_SIZE_MASK REG_GENMASK(27, 24) | |
3776 | #define CDCLK_SQUASH_WINDOW_SIZE(x) REG_FIELD_PREP(CDCLK_SQUASH_WINDOW_SIZE_MASK, (x)) | |
3777 | #define CDCLK_SQUASH_WAVEFORM_MASK REG_GENMASK(15, 0) | |
3778 | #define CDCLK_SQUASH_WAVEFORM(x) REG_FIELD_PREP(CDCLK_SQUASH_WAVEFORM_MASK, (x)) | |
3779 | ||
326ac39b | 3780 | /* LCPLL_CTL */ |
f0f59a00 VS |
3781 | #define LCPLL1_CTL _MMIO(0x46010) |
3782 | #define LCPLL2_CTL _MMIO(0x46014) | |
5ee8ee86 | 3783 | #define LCPLL_PLL_ENABLE (1 << 31) |
326ac39b S |
3784 | |
3785 | /* DPLL control1 */ | |
f0f59a00 | 3786 | #define DPLL_CTRL1 _MMIO(0x6C058) |
5ee8ee86 PZ |
3787 | #define DPLL_CTRL1_HDMI_MODE(id) (1 << ((id) * 6 + 5)) |
3788 | #define DPLL_CTRL1_SSC(id) (1 << ((id) * 6 + 4)) | |
3789 | #define DPLL_CTRL1_LINK_RATE_MASK(id) (7 << ((id) * 6 + 1)) | |
3790 | #define DPLL_CTRL1_LINK_RATE_SHIFT(id) ((id) * 6 + 1) | |
3791 | #define DPLL_CTRL1_LINK_RATE(linkrate, id) ((linkrate) << ((id) * 6 + 1)) | |
3792 | #define DPLL_CTRL1_OVERRIDE(id) (1 << ((id) * 6)) | |
71cd8423 DL |
3793 | #define DPLL_CTRL1_LINK_RATE_2700 0 |
3794 | #define DPLL_CTRL1_LINK_RATE_1350 1 | |
3795 | #define DPLL_CTRL1_LINK_RATE_810 2 | |
3796 | #define DPLL_CTRL1_LINK_RATE_1620 3 | |
3797 | #define DPLL_CTRL1_LINK_RATE_1080 4 | |
3798 | #define DPLL_CTRL1_LINK_RATE_2160 5 | |
326ac39b S |
3799 | |
3800 | /* DPLL control2 */ | |
f0f59a00 | 3801 | #define DPLL_CTRL2 _MMIO(0x6C05C) |
5ee8ee86 PZ |
3802 | #define DPLL_CTRL2_DDI_CLK_OFF(port) (1 << ((port) + 15)) |
3803 | #define DPLL_CTRL2_DDI_CLK_SEL_MASK(port) (3 << ((port) * 3 + 1)) | |
3804 | #define DPLL_CTRL2_DDI_CLK_SEL_SHIFT(port) ((port) * 3 + 1) | |
3805 | #define DPLL_CTRL2_DDI_CLK_SEL(clk, port) ((clk) << ((port) * 3 + 1)) | |
3806 | #define DPLL_CTRL2_DDI_SEL_OVERRIDE(port) (1 << ((port) * 3)) | |
326ac39b S |
3807 | |
3808 | /* DPLL Status */ | |
f0f59a00 | 3809 | #define DPLL_STATUS _MMIO(0x6C060) |
5ee8ee86 | 3810 | #define DPLL_LOCK(id) (1 << ((id) * 8)) |
326ac39b S |
3811 | |
3812 | /* DPLL cfg */ | |
086f8e84 VS |
3813 | #define _DPLL1_CFGCR1 0x6C040 |
3814 | #define _DPLL2_CFGCR1 0x6C048 | |
3815 | #define _DPLL3_CFGCR1 0x6C050 | |
4fd452ea | 3816 | #define DPLL_CFGCR1(id) _MMIO_PIPE((id) - SKL_DPLL1, _DPLL1_CFGCR1, _DPLL2_CFGCR1) |
5ee8ee86 PZ |
3817 | #define DPLL_CFGCR1_FREQ_ENABLE (1 << 31) |
3818 | #define DPLL_CFGCR1_DCO_FRACTION_MASK (0x7fff << 9) | |
3819 | #define DPLL_CFGCR1_DCO_FRACTION(x) ((x) << 9) | |
326ac39b S |
3820 | #define DPLL_CFGCR1_DCO_INTEGER_MASK (0x1ff) |
3821 | ||
086f8e84 VS |
3822 | #define _DPLL1_CFGCR2 0x6C044 |
3823 | #define _DPLL2_CFGCR2 0x6C04C | |
3824 | #define _DPLL3_CFGCR2 0x6C054 | |
4fd452ea | 3825 | #define DPLL_CFGCR2(id) _MMIO_PIPE((id) - SKL_DPLL1, _DPLL1_CFGCR2, _DPLL2_CFGCR2) |
5ee8ee86 PZ |
3826 | #define DPLL_CFGCR2_QDIV_RATIO_MASK (0xff << 8) |
3827 | #define DPLL_CFGCR2_QDIV_RATIO(x) ((x) << 8) | |
3828 | #define DPLL_CFGCR2_QDIV_MODE(x) ((x) << 7) | |
3829 | #define DPLL_CFGCR2_KDIV_MASK (3 << 5) | |
3830 | #define DPLL_CFGCR2_KDIV(x) ((x) << 5) | |
3831 | #define DPLL_CFGCR2_KDIV_5 (0 << 5) | |
3832 | #define DPLL_CFGCR2_KDIV_2 (1 << 5) | |
3833 | #define DPLL_CFGCR2_KDIV_3 (2 << 5) | |
3834 | #define DPLL_CFGCR2_KDIV_1 (3 << 5) | |
3835 | #define DPLL_CFGCR2_PDIV_MASK (7 << 2) | |
3836 | #define DPLL_CFGCR2_PDIV(x) ((x) << 2) | |
3837 | #define DPLL_CFGCR2_PDIV_1 (0 << 2) | |
3838 | #define DPLL_CFGCR2_PDIV_2 (1 << 2) | |
3839 | #define DPLL_CFGCR2_PDIV_3 (2 << 2) | |
3840 | #define DPLL_CFGCR2_PDIV_7 (4 << 2) | |
7a8a95f5 | 3841 | #define DPLL_CFGCR2_PDIV_7_INVALID (5 << 2) |
326ac39b S |
3842 | #define DPLL_CFGCR2_CENTRAL_FREQ_MASK (3) |
3843 | ||
11ffe972 | 3844 | /* ICL Clocks */ |
befa372b | 3845 | #define ICL_DPCLKA_CFGCR0 _MMIO(0x164280) |
d6d2bc99 | 3846 | #define ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) (1 << _PICK(phy, 10, 11, 24, 4, 5)) |
cd803bb4 | 3847 | #define RKL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) REG_BIT((phy) + 10) |
320c670c | 3848 | #define ICL_DPCLKA_CFGCR0_TC_CLK_OFF(tc_port) (1 << ((tc_port) < TC_PORT_4 ? \ |
aaf70b90 | 3849 | (tc_port) + 12 : \ |
320c670c | 3850 | (tc_port) - TC_PORT_4 + 21)) |
befa372b MR |
3851 | #define ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy) ((phy) * 2) |
3852 | #define ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy) (3 << ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
3853 | #define ICL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll, phy) ((pll) << ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
cd803bb4 MR |
3854 | #define RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy) _PICK(phy, 0, 2, 4, 27) |
3855 | #define RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy) \ | |
3856 | (3 << RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
3857 | #define RKL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll, phy) \ | |
3858 | ((pll) << RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
befa372b | 3859 | |
11ffe972 LDM |
3860 | /* |
3861 | * DG1 Clocks | |
3862 | * First registers controls the first A and B, while the second register | |
3863 | * controls the phy C and D. The bits on these registers are the | |
3864 | * same, but refer to different phys | |
3865 | */ | |
3866 | #define _DG1_DPCLKA_CFGCR0 0x164280 | |
3867 | #define _DG1_DPCLKA1_CFGCR0 0x16C280 | |
3868 | #define _DG1_DPCLKA_PHY_IDX(phy) ((phy) % 2) | |
3869 | #define _DG1_DPCLKA_PLL_IDX(pll) ((pll) % 2) | |
11ffe972 LDM |
3870 | #define DG1_DPCLKA_CFGCR0(phy) _MMIO_PHY((phy) / 2, \ |
3871 | _DG1_DPCLKA_CFGCR0, \ | |
3872 | _DG1_DPCLKA1_CFGCR0) | |
3873 | #define DG1_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) REG_BIT(_DG1_DPCLKA_PHY_IDX(phy) + 10) | |
3874 | #define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy) (_DG1_DPCLKA_PHY_IDX(phy) * 2) | |
3875 | #define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL(pll, phy) (_DG1_DPCLKA_PLL_IDX(pll) << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
3876 | #define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy) (0x3 << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) | |
11ffe972 | 3877 | |
d6d2bc99 AS |
3878 | /* ADLS Clocks */ |
3879 | #define _ADLS_DPCLKA_CFGCR0 0x164280 | |
3880 | #define _ADLS_DPCLKA_CFGCR1 0x1642BC | |
3881 | #define ADLS_DPCLKA_CFGCR(phy) _MMIO_PHY((phy) / 3, \ | |
3882 | _ADLS_DPCLKA_CFGCR0, \ | |
3883 | _ADLS_DPCLKA_CFGCR1) | |
3884 | #define ADLS_DPCLKA_CFGCR_DDI_SHIFT(phy) (((phy) % 3) * 2) | |
3885 | /* ADLS DPCLKA_CFGCR0 DDI mask */ | |
3886 | #define ADLS_DPCLKA_DDII_SEL_MASK REG_GENMASK(5, 4) | |
3887 | #define ADLS_DPCLKA_DDIB_SEL_MASK REG_GENMASK(3, 2) | |
3888 | #define ADLS_DPCLKA_DDIA_SEL_MASK REG_GENMASK(1, 0) | |
3889 | /* ADLS DPCLKA_CFGCR1 DDI mask */ | |
3890 | #define ADLS_DPCLKA_DDIK_SEL_MASK REG_GENMASK(3, 2) | |
3891 | #define ADLS_DPCLKA_DDIJ_SEL_MASK REG_GENMASK(1, 0) | |
3892 | #define ADLS_DPCLKA_CFGCR_DDI_CLK_SEL_MASK(phy) _PICK((phy), \ | |
3893 | ADLS_DPCLKA_DDIA_SEL_MASK, \ | |
3894 | ADLS_DPCLKA_DDIB_SEL_MASK, \ | |
3895 | ADLS_DPCLKA_DDII_SEL_MASK, \ | |
3896 | ADLS_DPCLKA_DDIJ_SEL_MASK, \ | |
3897 | ADLS_DPCLKA_DDIK_SEL_MASK) | |
3898 | ||
8de358cb | 3899 | /* ICL PLL */ |
6d8d5c6b LDM |
3900 | #define _DPLL0_ENABLE 0x46010 |
3901 | #define _DPLL1_ENABLE 0x46014 | |
80d0f765 AS |
3902 | #define _ADLS_DPLL2_ENABLE 0x46018 |
3903 | #define _ADLS_DPLL3_ENABLE 0x46030 | |
6d8d5c6b LDM |
3904 | #define PLL_ENABLE REG_BIT(31) |
3905 | #define PLL_LOCK REG_BIT(30) | |
3906 | #define PLL_POWER_ENABLE REG_BIT(27) | |
3907 | #define PLL_POWER_STATE REG_BIT(26) | |
680d0c79 LDM |
3908 | #define ICL_DPLL_ENABLE(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 3, \ |
3909 | _DPLL0_ENABLE, _DPLL1_ENABLE, \ | |
3910 | _ADLS_DPLL3_ENABLE, _ADLS_DPLL3_ENABLE)) | |
a927c927 | 3911 | |
29081008 MR |
3912 | #define _DG2_PLL3_ENABLE 0x4601C |
3913 | ||
680d0c79 LDM |
3914 | #define DG2_PLL_ENABLE(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 3, \ |
3915 | _DPLL0_ENABLE, _DPLL1_ENABLE, \ | |
3916 | _DG2_PLL3_ENABLE, _DG2_PLL3_ENABLE)) | |
29081008 | 3917 | |
1fa11ee2 PZ |
3918 | #define TBT_PLL_ENABLE _MMIO(0x46020) |
3919 | ||
78b60ce7 PZ |
3920 | #define _MG_PLL1_ENABLE 0x46030 |
3921 | #define _MG_PLL2_ENABLE 0x46034 | |
3922 | #define _MG_PLL3_ENABLE 0x46038 | |
3923 | #define _MG_PLL4_ENABLE 0x4603C | |
6d8d5c6b | 3924 | /* Bits are the same as _DPLL0_ENABLE */ |
584fca11 | 3925 | #define MG_PLL_ENABLE(tc_port) _MMIO_PORT((tc_port), _MG_PLL1_ENABLE, \ |
78b60ce7 PZ |
3926 | _MG_PLL2_ENABLE) |
3927 | ||
0dac17af | 3928 | /* DG1 PLL */ |
680d0c79 LDM |
3929 | #define DG1_DPLL_ENABLE(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ |
3930 | _DPLL0_ENABLE, _DPLL1_ENABLE, \ | |
3931 | _MG_PLL1_ENABLE, _MG_PLL2_ENABLE)) | |
0dac17af | 3932 | |
226c8326 AS |
3933 | /* ADL-P Type C PLL */ |
3934 | #define PORTTC1_PLL_ENABLE 0x46038 | |
3935 | #define PORTTC2_PLL_ENABLE 0x46040 | |
226c8326 AS |
3936 | #define ADLP_PORTTC_PLL_ENABLE(tc_port) _MMIO_PORT((tc_port), \ |
3937 | PORTTC1_PLL_ENABLE, \ | |
3938 | PORTTC2_PLL_ENABLE) | |
3939 | ||
78b60ce7 PZ |
3940 | #define _ICL_DPLL0_CFGCR0 0x164000 |
3941 | #define _ICL_DPLL1_CFGCR0 0x164080 | |
3942 | #define ICL_DPLL_CFGCR0(pll) _MMIO_PLL(pll, _ICL_DPLL0_CFGCR0, \ | |
3943 | _ICL_DPLL1_CFGCR0) | |
a4d082fc LDM |
3944 | #define DPLL_CFGCR0_HDMI_MODE (1 << 30) |
3945 | #define DPLL_CFGCR0_SSC_ENABLE (1 << 29) | |
3946 | #define DPLL_CFGCR0_SSC_ENABLE_ICL (1 << 25) | |
3947 | #define DPLL_CFGCR0_LINK_RATE_MASK (0xf << 25) | |
3948 | #define DPLL_CFGCR0_LINK_RATE_2700 (0 << 25) | |
3949 | #define DPLL_CFGCR0_LINK_RATE_1350 (1 << 25) | |
3950 | #define DPLL_CFGCR0_LINK_RATE_810 (2 << 25) | |
3951 | #define DPLL_CFGCR0_LINK_RATE_1620 (3 << 25) | |
3952 | #define DPLL_CFGCR0_LINK_RATE_1080 (4 << 25) | |
3953 | #define DPLL_CFGCR0_LINK_RATE_2160 (5 << 25) | |
3954 | #define DPLL_CFGCR0_LINK_RATE_3240 (6 << 25) | |
3955 | #define DPLL_CFGCR0_LINK_RATE_4050 (7 << 25) | |
3956 | #define DPLL_CFGCR0_DCO_FRACTION_MASK (0x7fff << 10) | |
3957 | #define DPLL_CFGCR0_DCO_FRACTION_SHIFT (10) | |
3958 | #define DPLL_CFGCR0_DCO_FRACTION(x) ((x) << 10) | |
3959 | #define DPLL_CFGCR0_DCO_INTEGER_MASK (0x3ff) | |
78b60ce7 PZ |
3960 | |
3961 | #define _ICL_DPLL0_CFGCR1 0x164004 | |
3962 | #define _ICL_DPLL1_CFGCR1 0x164084 | |
3963 | #define ICL_DPLL_CFGCR1(pll) _MMIO_PLL(pll, _ICL_DPLL0_CFGCR1, \ | |
3964 | _ICL_DPLL1_CFGCR1) | |
a4d082fc LDM |
3965 | #define DPLL_CFGCR1_QDIV_RATIO_MASK (0xff << 10) |
3966 | #define DPLL_CFGCR1_QDIV_RATIO_SHIFT (10) | |
3967 | #define DPLL_CFGCR1_QDIV_RATIO(x) ((x) << 10) | |
3968 | #define DPLL_CFGCR1_QDIV_MODE_SHIFT (9) | |
3969 | #define DPLL_CFGCR1_QDIV_MODE(x) ((x) << 9) | |
3970 | #define DPLL_CFGCR1_KDIV_MASK (7 << 6) | |
3971 | #define DPLL_CFGCR1_KDIV_SHIFT (6) | |
3972 | #define DPLL_CFGCR1_KDIV(x) ((x) << 6) | |
3973 | #define DPLL_CFGCR1_KDIV_1 (1 << 6) | |
3974 | #define DPLL_CFGCR1_KDIV_2 (2 << 6) | |
3975 | #define DPLL_CFGCR1_KDIV_3 (4 << 6) | |
3976 | #define DPLL_CFGCR1_PDIV_MASK (0xf << 2) | |
3977 | #define DPLL_CFGCR1_PDIV_SHIFT (2) | |
3978 | #define DPLL_CFGCR1_PDIV(x) ((x) << 2) | |
3979 | #define DPLL_CFGCR1_PDIV_2 (1 << 2) | |
3980 | #define DPLL_CFGCR1_PDIV_3 (2 << 2) | |
3981 | #define DPLL_CFGCR1_PDIV_5 (4 << 2) | |
3982 | #define DPLL_CFGCR1_PDIV_7 (8 << 2) | |
3983 | #define DPLL_CFGCR1_CENTRAL_FREQ (3 << 0) | |
3984 | #define DPLL_CFGCR1_CENTRAL_FREQ_8400 (3 << 0) | |
3985 | #define TGL_DPLL_CFGCR1_CFSELOVRD_NORMAL_XTAL (0 << 0) | |
78b60ce7 | 3986 | |
36ca5335 LDM |
3987 | #define _TGL_DPLL0_CFGCR0 0x164284 |
3988 | #define _TGL_DPLL1_CFGCR0 0x16428C | |
36ca5335 | 3989 | #define _TGL_TBTPLL_CFGCR0 0x16429C |
680d0c79 LDM |
3990 | #define TGL_DPLL_CFGCR0(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ |
3991 | _TGL_DPLL0_CFGCR0, _TGL_DPLL1_CFGCR0, \ | |
3992 | _TGL_TBTPLL_CFGCR0, _TGL_TBTPLL_CFGCR0)) | |
e66f609b MR |
3993 | #define RKL_DPLL_CFGCR0(pll) _MMIO_PLL(pll, _TGL_DPLL0_CFGCR0, \ |
3994 | _TGL_DPLL1_CFGCR0) | |
36ca5335 | 3995 | |
b70ad01a JRS |
3996 | #define _TGL_DPLL0_DIV0 0x164B00 |
3997 | #define _TGL_DPLL1_DIV0 0x164C00 | |
3998 | #define TGL_DPLL0_DIV0(pll) _MMIO_PLL(pll, _TGL_DPLL0_DIV0, _TGL_DPLL1_DIV0) | |
3999 | #define TGL_DPLL0_DIV0_AFC_STARTUP_MASK REG_GENMASK(27, 25) | |
4000 | #define TGL_DPLL0_DIV0_AFC_STARTUP(val) REG_FIELD_PREP(TGL_DPLL0_DIV0_AFC_STARTUP_MASK, (val)) | |
4001 | ||
36ca5335 LDM |
4002 | #define _TGL_DPLL0_CFGCR1 0x164288 |
4003 | #define _TGL_DPLL1_CFGCR1 0x164290 | |
36ca5335 | 4004 | #define _TGL_TBTPLL_CFGCR1 0x1642A0 |
680d0c79 LDM |
4005 | #define TGL_DPLL_CFGCR1(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ |
4006 | _TGL_DPLL0_CFGCR1, _TGL_DPLL1_CFGCR1, \ | |
4007 | _TGL_TBTPLL_CFGCR1, _TGL_TBTPLL_CFGCR1)) | |
e66f609b MR |
4008 | #define RKL_DPLL_CFGCR1(pll) _MMIO_PLL(pll, _TGL_DPLL0_CFGCR1, \ |
4009 | _TGL_DPLL1_CFGCR1) | |
36ca5335 | 4010 | |
049c651b AS |
4011 | #define _DG1_DPLL2_CFGCR0 0x16C284 |
4012 | #define _DG1_DPLL3_CFGCR0 0x16C28C | |
680d0c79 LDM |
4013 | #define DG1_DPLL_CFGCR0(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ |
4014 | _TGL_DPLL0_CFGCR0, _TGL_DPLL1_CFGCR0, \ | |
4015 | _DG1_DPLL2_CFGCR0, _DG1_DPLL3_CFGCR0)) | |
049c651b AS |
4016 | |
4017 | #define _DG1_DPLL2_CFGCR1 0x16C288 | |
4018 | #define _DG1_DPLL3_CFGCR1 0x16C290 | |
680d0c79 LDM |
4019 | #define DG1_DPLL_CFGCR1(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ |
4020 | _TGL_DPLL0_CFGCR1, _TGL_DPLL1_CFGCR1, \ | |
4021 | _DG1_DPLL2_CFGCR1, _DG1_DPLL3_CFGCR1)) | |
049c651b | 4022 | |
80d0f765 | 4023 | /* For ADL-S DPLL4_CFGCR0/1 are used to control DPLL2 */ |
80d0f765 | 4024 | #define _ADLS_DPLL4_CFGCR0 0x164294 |
680d0c79 LDM |
4025 | #define _ADLS_DPLL3_CFGCR0 0x1642C0 |
4026 | #define ADLS_DPLL_CFGCR0(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ | |
4027 | _TGL_DPLL0_CFGCR0, _TGL_DPLL1_CFGCR0, \ | |
4028 | _ADLS_DPLL4_CFGCR0, _ADLS_DPLL3_CFGCR0)) | |
80d0f765 | 4029 | |
80d0f765 | 4030 | #define _ADLS_DPLL4_CFGCR1 0x164298 |
680d0c79 LDM |
4031 | #define _ADLS_DPLL3_CFGCR1 0x1642C4 |
4032 | #define ADLS_DPLL_CFGCR1(pll) _MMIO(_PICK_EVEN_2RANGES(pll, 2, \ | |
4033 | _TGL_DPLL0_CFGCR1, _TGL_DPLL1_CFGCR1, \ | |
4034 | _ADLS_DPLL4_CFGCR1, _ADLS_DPLL3_CFGCR1)) | |
80d0f765 | 4035 | |
f8437dd1 | 4036 | /* BXT display engine PLL */ |
f0f59a00 | 4037 | #define BXT_DE_PLL_CTL _MMIO(0x6d000) |
f8437dd1 VK |
4038 | #define BXT_DE_PLL_RATIO(x) (x) /* {60,65,100} * 19.2MHz */ |
4039 | #define BXT_DE_PLL_RATIO_MASK 0xff | |
4040 | ||
f0f59a00 | 4041 | #define BXT_DE_PLL_ENABLE _MMIO(0x46070) |
f8437dd1 VK |
4042 | #define BXT_DE_PLL_PLL_ENABLE (1 << 31) |
4043 | #define BXT_DE_PLL_LOCK (1 << 30) | |
d62686ba SL |
4044 | #define BXT_DE_PLL_FREQ_REQ (1 << 23) |
4045 | #define BXT_DE_PLL_FREQ_REQ_ACK (1 << 22) | |
1d89509a LDM |
4046 | #define ICL_CDCLK_PLL_RATIO(x) (x) |
4047 | #define ICL_CDCLK_PLL_RATIO_MASK 0xff | |
f8437dd1 | 4048 | |
664326f8 | 4049 | /* GEN9 DC */ |
f0f59a00 | 4050 | #define DC_STATE_EN _MMIO(0x45504) |
13ae3a0d | 4051 | #define DC_STATE_DISABLE 0 |
e45e0003 AG |
4052 | #define DC_STATE_EN_DC3CO REG_BIT(30) |
4053 | #define DC_STATE_DC3CO_STATUS REG_BIT(29) | |
c4298d15 JRS |
4054 | #define HOLD_PHY_CLKREQ_PG1_LATCH REG_BIT(21) |
4055 | #define HOLD_PHY_PG1_LATCH REG_BIT(20) | |
5ee8ee86 PZ |
4056 | #define DC_STATE_EN_UPTO_DC5 (1 << 0) |
4057 | #define DC_STATE_EN_DC9 (1 << 3) | |
4058 | #define DC_STATE_EN_UPTO_DC6 (2 << 0) | |
6b457d31 SK |
4059 | #define DC_STATE_EN_UPTO_DC5_DC6_MASK 0x3 |
4060 | ||
f0f59a00 | 4061 | #define DC_STATE_DEBUG _MMIO(0x45520) |
5ee8ee86 PZ |
4062 | #define DC_STATE_DEBUG_MASK_CORES (1 << 0) |
4063 | #define DC_STATE_DEBUG_MASK_MEMORY_UP (1 << 1) | |
6b457d31 | 4064 | |
f0f59a00 | 4065 | #define D_COMP_BDW _MMIO(0x138144) |
90e8d31c | 4066 | |
69e94b7e | 4067 | /* Pipe WM_LINETIME - watermark line time */ |
0560b0c6 VS |
4068 | #define _WM_LINETIME_A 0x45270 |
4069 | #define _WM_LINETIME_B 0x45274 | |
4070 | #define WM_LINETIME(pipe) _MMIO_PIPE(pipe, _WM_LINETIME_A, _WM_LINETIME_B) | |
4071 | #define HSW_LINETIME_MASK REG_GENMASK(8, 0) | |
4072 | #define HSW_LINETIME(x) REG_FIELD_PREP(HSW_LINETIME_MASK, (x)) | |
4073 | #define HSW_IPS_LINETIME_MASK REG_GENMASK(24, 16) | |
4074 | #define HSW_IPS_LINETIME(x) REG_FIELD_PREP(HSW_IPS_LINETIME_MASK, (x)) | |
96d6e350 ED |
4075 | |
4076 | /* SFUSE_STRAP */ | |
f0f59a00 | 4077 | #define SFUSE_STRAP _MMIO(0xc2014) |
5ee8ee86 PZ |
4078 | #define SFUSE_STRAP_FUSE_LOCK (1 << 13) |
4079 | #define SFUSE_STRAP_RAW_FREQUENCY (1 << 8) | |
4080 | #define SFUSE_STRAP_DISPLAY_DISABLED (1 << 7) | |
4081 | #define SFUSE_STRAP_CRT_DISABLED (1 << 6) | |
4082 | #define SFUSE_STRAP_DDIF_DETECTED (1 << 3) | |
4083 | #define SFUSE_STRAP_DDIB_DETECTED (1 << 2) | |
4084 | #define SFUSE_STRAP_DDIC_DETECTED (1 << 1) | |
4085 | #define SFUSE_STRAP_DDID_DETECTED (1 << 0) | |
96d6e350 | 4086 | |
aec0246f US |
4087 | /* Gen4+ Timestamp and Pipe Frame time stamp registers */ |
4088 | #define GEN4_TIMESTAMP _MMIO(0x2358) | |
4089 | #define ILK_TIMESTAMP_HI _MMIO(0x70070) | |
4090 | #define IVB_TIMESTAMP_CTR _MMIO(0x44070) | |
4091 | ||
dab91783 LL |
4092 | #define GEN9_TIMESTAMP_OVERRIDE _MMIO(0x44074) |
4093 | #define GEN9_TIMESTAMP_OVERRIDE_US_COUNTER_DIVIDER_SHIFT 0 | |
4094 | #define GEN9_TIMESTAMP_OVERRIDE_US_COUNTER_DIVIDER_MASK 0x3ff | |
4095 | #define GEN9_TIMESTAMP_OVERRIDE_US_COUNTER_DENOMINATOR_SHIFT 12 | |
4096 | #define GEN9_TIMESTAMP_OVERRIDE_US_COUNTER_DENOMINATOR_MASK (0xf << 12) | |
4097 | ||
6e889b1c | 4098 | /* g4x+, except vlv/chv! */ |
aec0246f | 4099 | #define _PIPE_FRMTMSTMP_A 0x70048 |
6e889b1c | 4100 | #define _PIPE_FRMTMSTMP_B 0x71048 |
aec0246f | 4101 | #define PIPE_FRMTMSTMP(pipe) \ |
6e889b1c VS |
4102 | _MMIO_PIPE(pipe, _PIPE_FRMTMSTMP_A, _PIPE_FRMTMSTMP_B) |
4103 | ||
4104 | /* g4x+, except vlv/chv! */ | |
4105 | #define _PIPE_FLIPTMSTMP_A 0x7004C | |
4106 | #define _PIPE_FLIPTMSTMP_B 0x7104C | |
4107 | #define PIPE_FLIPTMSTMP(pipe) \ | |
4108 | _MMIO_PIPE(pipe, _PIPE_FLIPTMSTMP_A, _PIPE_FLIPTMSTMP_B) | |
4109 | ||
4110 | /* tgl+ */ | |
4111 | #define _PIPE_FLIPDONETMSTMP_A 0x70054 | |
4112 | #define _PIPE_FLIPDONETMSTMP_B 0x71054 | |
4113 | #define PIPE_FLIPDONETIMSTMP(pipe) \ | |
4114 | _MMIO_PIPE(pipe, _PIPE_FLIPDONETMSTMP_A, _PIPE_FLIPDONETMSTMP_B) | |
aec0246f | 4115 | |
c931ef00 | 4116 | #define _VLV_PIPE_MSA_MISC_A 0x70048 |
6069b21f JN |
4117 | #define VLV_PIPE_MSA_MISC(__display, pipe) \ |
4118 | _MMIO_PIPE2(__display, pipe, _VLV_PIPE_MSA_MISC_A) | |
c931ef00 VS |
4119 | #define VLV_MSA_MISC1_HW_ENABLE REG_BIT(31) |
4120 | #define VLV_MSA_MISC1_SW_S3D_MASK REG_GENMASK(2, 0) /* MSA MISC1 3:1 */ | |
4121 | ||
dbb2ffbf AI |
4122 | #define GGC _MMIO(0x108040) |
4123 | #define GMS_MASK REG_GENMASK(15, 8) | |
4124 | #define GGMS_MASK REG_GENMASK(7, 6) | |
4125 | ||
f8ae1d52 VS |
4126 | #define GEN6_GSMBASE _MMIO(0x108100) |
4127 | #define GEN6_DSMBASE _MMIO(0x1080C0) | |
4128 | #define GEN6_BDSM_MASK REG_GENMASK64(31, 20) | |
4129 | #define GEN11_BDSM_MASK REG_GENMASK64(63, 20) | |
7f2aa5b3 | 4130 | |
d73dd1f4 | 4131 | #define XEHP_CLOCK_GATE_DIS _MMIO(0x101014) |
645cc0b9 MR |
4132 | #define SGSI_SIDECLK_DIS REG_BIT(17) |
4133 | #define SGGI_DIS REG_BIT(15) | |
d73dd1f4 SS |
4134 | #define SGR_DIS REG_BIT(13) |
4135 | ||
ad186f3f PZ |
4136 | #define _ICL_PHY_MISC_A 0x64C00 |
4137 | #define _ICL_PHY_MISC_B 0x64C04 | |
d1af7b6f JH |
4138 | #define _DG2_PHY_MISC_TC1 0x64C14 /* TC1="PHY E" but offset as if "PHY F" */ |
4139 | #define ICL_PHY_MISC(port) _MMIO_PORT(port, _ICL_PHY_MISC_A, _ICL_PHY_MISC_B) | |
4140 | #define DG2_PHY_MISC(port) ((port) == PHY_E ? _MMIO(_DG2_PHY_MISC_TC1) : \ | |
4141 | ICL_PHY_MISC(port)) | |
bdeb18db | 4142 | #define ICL_PHY_MISC_MUX_DDID (1 << 28) |
ad186f3f | 4143 | #define ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN (1 << 23) |
a6a12811 | 4144 | #define DG2_PHY_DP_TX_ACK_MASK REG_GENMASK(23, 20) |
ad186f3f | 4145 | |
0caf6257 AS |
4146 | #define PORT_TX_DFLEXDPSP(fia) _MMIO_FIA((fia), 0x008A0) |
4147 | #define MODULAR_FIA_MASK (1 << 4) | |
31d9ae9d JRS |
4148 | #define TC_LIVE_STATE_TBT(idx) (1 << ((idx) * 8 + 6)) |
4149 | #define TC_LIVE_STATE_TC(idx) (1 << ((idx) * 8 + 5)) | |
4150 | #define DP_LANE_ASSIGNMENT_SHIFT(idx) ((idx) * 8) | |
4151 | #define DP_LANE_ASSIGNMENT_MASK(idx) (0xf << ((idx) * 8)) | |
4152 | #define DP_LANE_ASSIGNMENT(idx, x) ((x) << ((idx) * 8)) | |
b9fcddab | 4153 | |
0caf6257 | 4154 | #define PORT_TX_DFLEXDPPMS(fia) _MMIO_FIA((fia), 0x00890) |
31d9ae9d | 4155 | #define DP_PHY_MODE_STATUS_COMPLETED(idx) (1 << (idx)) |
39d1e234 | 4156 | |
0caf6257 | 4157 | #define PORT_TX_DFLEXDPCSSS(fia) _MMIO_FIA((fia), 0x00894) |
31d9ae9d | 4158 | #define DP_PHY_MODE_STATUS_NOT_SAFE(idx) (1 << (idx)) |
39d1e234 | 4159 | |
3b51be4e CT |
4160 | #define PORT_TX_DFLEXPA1(fia) _MMIO_FIA((fia), 0x00880) |
4161 | #define DP_PIN_ASSIGNMENT_SHIFT(idx) ((idx) * 4) | |
4162 | #define DP_PIN_ASSIGNMENT_MASK(idx) (0xf << ((idx) * 4)) | |
4163 | #define DP_PIN_ASSIGNMENT(idx, x) ((x) << ((idx) * 4)) | |
4164 | ||
55ce306c JRS |
4165 | #define _TCSS_DDI_STATUS_1 0x161500 |
4166 | #define _TCSS_DDI_STATUS_2 0x161504 | |
4167 | #define TCSS_DDI_STATUS(tc) _MMIO(_PICK_EVEN(tc, \ | |
4168 | _TCSS_DDI_STATUS_1, \ | |
4169 | _TCSS_DDI_STATUS_2)) | |
6f35a04f | 4170 | #define TCSS_DDI_STATUS_PIN_ASSIGNMENT_MASK REG_GENMASK(28, 25) |
55ce306c JRS |
4171 | #define TCSS_DDI_STATUS_READY REG_BIT(2) |
4172 | #define TCSS_DDI_STATUS_HPD_LIVE_STATUS_TBT REG_BIT(1) | |
4173 | #define TCSS_DDI_STATUS_HPD_LIVE_STATUS_ALT REG_BIT(0) | |
4174 | ||
a36e7dc0 CT |
4175 | #define PRIMARY_SPI_TRIGGER _MMIO(0x102040) |
4176 | #define PRIMARY_SPI_ADDRESS _MMIO(0x102080) | |
4177 | #define PRIMARY_SPI_REGIONID _MMIO(0x102084) | |
4178 | #define SPI_STATIC_REGIONS _MMIO(0x102090) | |
4179 | #define OPTIONROM_SPI_REGIONID_MASK REG_GENMASK(7, 0) | |
4180 | #define OROM_OFFSET _MMIO(0x1020c0) | |
4181 | #define OROM_OFFSET_MASK REG_GENMASK(20, 16) | |
4182 | ||
41c70d2b JRS |
4183 | #define CLKREQ_POLICY _MMIO(0x101038) |
4184 | #define CLKREQ_POLICY_MEM_UP_OVRD REG_BIT(1) | |
4185 | ||
641dd82f JRS |
4186 | #define CLKGATE_DIS_MISC _MMIO(0x46534) |
4187 | #define CLKGATE_DIS_MISC_DMASC_GATING_DIS REG_BIT(21) | |
4188 | ||
47d4ae21 JRS |
4189 | #define _MTL_CLKGATE_DIS_TRANS_A 0x604E8 |
4190 | #define _MTL_CLKGATE_DIS_TRANS_B 0x614E8 | |
d9abe5f9 | 4191 | #define MTL_CLKGATE_DIS_TRANS(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _MTL_CLKGATE_DIS_TRANS_A) |
47d4ae21 JRS |
4192 | #define MTL_CLKGATE_DIS_TRANS_DMASC_GATING_DIS REG_BIT(7) |
4193 | ||
010363c4 VG |
4194 | #define _MTL_PIPE_CLKGATE_DIS2_A 0x60114 |
4195 | #define _MTL_PIPE_CLKGATE_DIS2_B 0x61114 | |
4196 | #define MTL_PIPE_CLKGATE_DIS2(pipe) _MMIO_PIPE(pipe, _MTL_PIPE_CLKGATE_DIS2_A, _MTL_PIPE_CLKGATE_DIS2_B) | |
4197 | #define MTL_DPFC_GATING_DIS REG_BIT(6) | |
4198 | ||
825477e7 RS |
4199 | #define MTL_MEM_SS_INFO_GLOBAL _MMIO(0x45700) |
4200 | #define MTL_N_OF_ENABLED_QGV_POINTS_MASK REG_GENMASK(11, 8) | |
4201 | #define MTL_N_OF_POPULATED_CH_MASK REG_GENMASK(7, 4) | |
4202 | #define MTL_DDR_TYPE_MASK REG_GENMASK(3, 0) | |
4203 | ||
ff168b37 VG |
4204 | #define MTL_MEM_SS_INFO_QGV_POINT_OFFSET 0x45710 |
4205 | #define MTL_MEM_SS_INFO_QGV_POINT_LOW(point) _MMIO(MTL_MEM_SS_INFO_QGV_POINT_OFFSET + (point) * 8) | |
825477e7 RS |
4206 | #define MTL_TRCD_MASK REG_GENMASK(31, 24) |
4207 | #define MTL_TRP_MASK REG_GENMASK(23, 16) | |
4208 | #define MTL_DCLK_MASK REG_GENMASK(15, 0) | |
4209 | ||
ff168b37 | 4210 | #define MTL_MEM_SS_INFO_QGV_POINT_HIGH(point) _MMIO(MTL_MEM_SS_INFO_QGV_POINT_OFFSET + (point) * 8 + 4) |
825477e7 RS |
4211 | #define MTL_TRAS_MASK REG_GENMASK(16, 8) |
4212 | #define MTL_TRDPRE_MASK REG_GENMASK(7, 0) | |
4213 | ||
c2c70752 MR |
4214 | #define MTL_MEDIA_GSI_BASE 0x380000 |
4215 | ||
585fb111 | 4216 | #endif /* _I915_REG_H_ */ |