Merge tag 'topic/atomic-core-2015-01-05' of git://anongit.freedesktop.org/drm-intel...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_reg.h
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
28 #define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a)))
29 #define _PLANE(plane, a, b) _PIPE(plane, a, b)
30 #define _TRANSCODER(tran, a, b) ((a) + (tran)*((b)-(a)))
31 #define _PORT(port, a, b) ((a) + (port)*((b)-(a)))
32 #define _PIPE3(pipe, a, b, c) ((pipe) == PIPE_A ? (a) : \
33                                (pipe) == PIPE_B ? (b) : (c))
34
35 #define _MASKED_FIELD(mask, value) ({                                      \
36         if (__builtin_constant_p(mask))                                    \
37                 BUILD_BUG_ON_MSG(((mask) & 0xffff0000), "Incorrect mask"); \
38         if (__builtin_constant_p(value))                                   \
39                 BUILD_BUG_ON_MSG((value) & 0xffff0000, "Incorrect value"); \
40         if (__builtin_constant_p(mask) && __builtin_constant_p(value))     \
41                 BUILD_BUG_ON_MSG((value) & ~(mask),                        \
42                                  "Incorrect value for mask");              \
43         (mask) << 16 | (value); })
44 #define _MASKED_BIT_ENABLE(a)   ({ typeof(a) _a = (a); _MASKED_FIELD(_a, _a); })
45 #define _MASKED_BIT_DISABLE(a)  (_MASKED_FIELD((a), 0))
46
47
48
49 /* PCI config space */
50
51 #define HPLLCC  0xc0 /* 855 only */
52 #define   GC_CLOCK_CONTROL_MASK         (0xf << 0)
53 #define   GC_CLOCK_133_200              (0 << 0)
54 #define   GC_CLOCK_100_200              (1 << 0)
55 #define   GC_CLOCK_100_133              (2 << 0)
56 #define   GC_CLOCK_166_250              (3 << 0)
57 #define GCFGC2  0xda
58 #define GCFGC   0xf0 /* 915+ only */
59 #define   GC_LOW_FREQUENCY_ENABLE       (1 << 7)
60 #define   GC_DISPLAY_CLOCK_190_200_MHZ  (0 << 4)
61 #define   GC_DISPLAY_CLOCK_333_MHZ      (4 << 4)
62 #define   GC_DISPLAY_CLOCK_267_MHZ_PNV  (0 << 4)
63 #define   GC_DISPLAY_CLOCK_333_MHZ_PNV  (1 << 4)
64 #define   GC_DISPLAY_CLOCK_444_MHZ_PNV  (2 << 4)
65 #define   GC_DISPLAY_CLOCK_200_MHZ_PNV  (5 << 4)
66 #define   GC_DISPLAY_CLOCK_133_MHZ_PNV  (6 << 4)
67 #define   GC_DISPLAY_CLOCK_167_MHZ_PNV  (7 << 4)
68 #define   GC_DISPLAY_CLOCK_MASK         (7 << 4)
69 #define   GM45_GC_RENDER_CLOCK_MASK     (0xf << 0)
70 #define   GM45_GC_RENDER_CLOCK_266_MHZ  (8 << 0)
71 #define   GM45_GC_RENDER_CLOCK_320_MHZ  (9 << 0)
72 #define   GM45_GC_RENDER_CLOCK_400_MHZ  (0xb << 0)
73 #define   GM45_GC_RENDER_CLOCK_533_MHZ  (0xc << 0)
74 #define   I965_GC_RENDER_CLOCK_MASK     (0xf << 0)
75 #define   I965_GC_RENDER_CLOCK_267_MHZ  (2 << 0)
76 #define   I965_GC_RENDER_CLOCK_333_MHZ  (3 << 0)
77 #define   I965_GC_RENDER_CLOCK_444_MHZ  (4 << 0)
78 #define   I965_GC_RENDER_CLOCK_533_MHZ  (5 << 0)
79 #define   I945_GC_RENDER_CLOCK_MASK     (7 << 0)
80 #define   I945_GC_RENDER_CLOCK_166_MHZ  (0 << 0)
81 #define   I945_GC_RENDER_CLOCK_200_MHZ  (1 << 0)
82 #define   I945_GC_RENDER_CLOCK_250_MHZ  (3 << 0)
83 #define   I945_GC_RENDER_CLOCK_400_MHZ  (5 << 0)
84 #define   I915_GC_RENDER_CLOCK_MASK     (7 << 0)
85 #define   I915_GC_RENDER_CLOCK_166_MHZ  (0 << 0)
86 #define   I915_GC_RENDER_CLOCK_200_MHZ  (1 << 0)
87 #define   I915_GC_RENDER_CLOCK_333_MHZ  (4 << 0)
88 #define GCDGMBUS 0xcc
89 #define PCI_LBPC 0xf4 /* legacy/combination backlight modes, also called LBB */
90
91
92 /* Graphics reset regs */
93 #define I915_GDRST 0xc0 /* PCI config register */
94 #define  GRDOM_FULL     (0<<2)
95 #define  GRDOM_RENDER   (1<<2)
96 #define  GRDOM_MEDIA    (3<<2)
97 #define  GRDOM_MASK     (3<<2)
98 #define  GRDOM_RESET_STATUS (1<<1)
99 #define  GRDOM_RESET_ENABLE (1<<0)
100
101 #define ILK_GDSR 0x2ca4 /* MCHBAR offset */
102 #define  ILK_GRDOM_FULL         (0<<1)
103 #define  ILK_GRDOM_RENDER       (1<<1)
104 #define  ILK_GRDOM_MEDIA        (3<<1)
105 #define  ILK_GRDOM_MASK         (3<<1)
106 #define  ILK_GRDOM_RESET_ENABLE (1<<0)
107
108 #define GEN6_MBCUNIT_SNPCR      0x900c /* for LLC config */
109 #define   GEN6_MBC_SNPCR_SHIFT  21
110 #define   GEN6_MBC_SNPCR_MASK   (3<<21)
111 #define   GEN6_MBC_SNPCR_MAX    (0<<21)
112 #define   GEN6_MBC_SNPCR_MED    (1<<21)
113 #define   GEN6_MBC_SNPCR_LOW    (2<<21)
114 #define   GEN6_MBC_SNPCR_MIN    (3<<21) /* only 1/16th of the cache is shared */
115
116 #define VLV_G3DCTL              0x9024
117 #define VLV_GSCKGCTL            0x9028
118
119 #define GEN6_MBCTL              0x0907c
120 #define   GEN6_MBCTL_ENABLE_BOOT_FETCH  (1 << 4)
121 #define   GEN6_MBCTL_CTX_FETCH_NEEDED   (1 << 3)
122 #define   GEN6_MBCTL_BME_UPDATE_ENABLE  (1 << 2)
123 #define   GEN6_MBCTL_MAE_UPDATE_ENABLE  (1 << 1)
124 #define   GEN6_MBCTL_BOOT_FETCH_MECH    (1 << 0)
125
126 #define GEN6_GDRST      0x941c
127 #define  GEN6_GRDOM_FULL                (1 << 0)
128 #define  GEN6_GRDOM_RENDER              (1 << 1)
129 #define  GEN6_GRDOM_MEDIA               (1 << 2)
130 #define  GEN6_GRDOM_BLT                 (1 << 3)
131
132 #define RING_PP_DIR_BASE(ring)          ((ring)->mmio_base+0x228)
133 #define RING_PP_DIR_BASE_READ(ring)     ((ring)->mmio_base+0x518)
134 #define RING_PP_DIR_DCLV(ring)          ((ring)->mmio_base+0x220)
135 #define   PP_DIR_DCLV_2G                0xffffffff
136
137 #define GEN8_RING_PDP_UDW(ring, n)      ((ring)->mmio_base+0x270 + ((n) * 8 + 4))
138 #define GEN8_RING_PDP_LDW(ring, n)      ((ring)->mmio_base+0x270 + (n) * 8)
139
140 #define GAM_ECOCHK                      0x4090
141 #define   ECOCHK_SNB_BIT                (1<<10)
142 #define   HSW_ECOCHK_ARB_PRIO_SOL       (1<<6)
143 #define   ECOCHK_PPGTT_CACHE64B         (0x3<<3)
144 #define   ECOCHK_PPGTT_CACHE4B          (0x0<<3)
145 #define   ECOCHK_PPGTT_GFDT_IVB         (0x1<<4)
146 #define   ECOCHK_PPGTT_LLC_IVB          (0x1<<3)
147 #define   ECOCHK_PPGTT_UC_HSW           (0x1<<3)
148 #define   ECOCHK_PPGTT_WT_HSW           (0x2<<3)
149 #define   ECOCHK_PPGTT_WB_HSW           (0x3<<3)
150
151 #define GAC_ECO_BITS                    0x14090
152 #define   ECOBITS_SNB_BIT               (1<<13)
153 #define   ECOBITS_PPGTT_CACHE64B        (3<<8)
154 #define   ECOBITS_PPGTT_CACHE4B         (0<<8)
155
156 #define GAB_CTL                         0x24000
157 #define   GAB_CTL_CONT_AFTER_PAGEFAULT  (1<<8)
158
159 #define GEN7_BIOS_RESERVED              0x1082C0
160 #define GEN7_BIOS_RESERVED_1M           (0 << 5)
161 #define GEN7_BIOS_RESERVED_256K         (1 << 5)
162 #define GEN8_BIOS_RESERVED_SHIFT       7
163 #define GEN7_BIOS_RESERVED_MASK        0x1
164 #define GEN8_BIOS_RESERVED_MASK        0x3
165
166
167 /* VGA stuff */
168
169 #define VGA_ST01_MDA 0x3ba
170 #define VGA_ST01_CGA 0x3da
171
172 #define VGA_MSR_WRITE 0x3c2
173 #define VGA_MSR_READ 0x3cc
174 #define   VGA_MSR_MEM_EN (1<<1)
175 #define   VGA_MSR_CGA_MODE (1<<0)
176
177 #define VGA_SR_INDEX 0x3c4
178 #define SR01                    1
179 #define VGA_SR_DATA 0x3c5
180
181 #define VGA_AR_INDEX 0x3c0
182 #define   VGA_AR_VID_EN (1<<5)
183 #define VGA_AR_DATA_WRITE 0x3c0
184 #define VGA_AR_DATA_READ 0x3c1
185
186 #define VGA_GR_INDEX 0x3ce
187 #define VGA_GR_DATA 0x3cf
188 /* GR05 */
189 #define   VGA_GR_MEM_READ_MODE_SHIFT 3
190 #define     VGA_GR_MEM_READ_MODE_PLANE 1
191 /* GR06 */
192 #define   VGA_GR_MEM_MODE_MASK 0xc
193 #define   VGA_GR_MEM_MODE_SHIFT 2
194 #define   VGA_GR_MEM_A0000_AFFFF 0
195 #define   VGA_GR_MEM_A0000_BFFFF 1
196 #define   VGA_GR_MEM_B0000_B7FFF 2
197 #define   VGA_GR_MEM_B0000_BFFFF 3
198
199 #define VGA_DACMASK 0x3c6
200 #define VGA_DACRX 0x3c7
201 #define VGA_DACWX 0x3c8
202 #define VGA_DACDATA 0x3c9
203
204 #define VGA_CR_INDEX_MDA 0x3b4
205 #define VGA_CR_DATA_MDA 0x3b5
206 #define VGA_CR_INDEX_CGA 0x3d4
207 #define VGA_CR_DATA_CGA 0x3d5
208
209 /*
210  * Instruction field definitions used by the command parser
211  */
212 #define INSTR_CLIENT_SHIFT      29
213 #define INSTR_CLIENT_MASK       0xE0000000
214 #define   INSTR_MI_CLIENT       0x0
215 #define   INSTR_BC_CLIENT       0x2
216 #define   INSTR_RC_CLIENT       0x3
217 #define INSTR_SUBCLIENT_SHIFT   27
218 #define INSTR_SUBCLIENT_MASK    0x18000000
219 #define   INSTR_MEDIA_SUBCLIENT 0x2
220
221 /*
222  * Memory interface instructions used by the kernel
223  */
224 #define MI_INSTR(opcode, flags) (((opcode) << 23) | (flags))
225 /* Many MI commands use bit 22 of the header dword for GGTT vs PPGTT */
226 #define  MI_GLOBAL_GTT    (1<<22)
227
228 #define MI_NOOP                 MI_INSTR(0, 0)
229 #define MI_USER_INTERRUPT       MI_INSTR(0x02, 0)
230 #define MI_WAIT_FOR_EVENT       MI_INSTR(0x03, 0)
231 #define   MI_WAIT_FOR_OVERLAY_FLIP      (1<<16)
232 #define   MI_WAIT_FOR_PLANE_B_FLIP      (1<<6)
233 #define   MI_WAIT_FOR_PLANE_A_FLIP      (1<<2)
234 #define   MI_WAIT_FOR_PLANE_A_SCANLINES (1<<1)
235 #define MI_FLUSH                MI_INSTR(0x04, 0)
236 #define   MI_READ_FLUSH         (1 << 0)
237 #define   MI_EXE_FLUSH          (1 << 1)
238 #define   MI_NO_WRITE_FLUSH     (1 << 2)
239 #define   MI_SCENE_COUNT        (1 << 3) /* just increment scene count */
240 #define   MI_END_SCENE          (1 << 4) /* flush binner and incr scene count */
241 #define   MI_INVALIDATE_ISP     (1 << 5) /* invalidate indirect state pointers */
242 #define MI_REPORT_HEAD          MI_INSTR(0x07, 0)
243 #define MI_ARB_ON_OFF           MI_INSTR(0x08, 0)
244 #define   MI_ARB_ENABLE                 (1<<0)
245 #define   MI_ARB_DISABLE                (0<<0)
246 #define MI_BATCH_BUFFER_END     MI_INSTR(0x0a, 0)
247 #define MI_SUSPEND_FLUSH        MI_INSTR(0x0b, 0)
248 #define   MI_SUSPEND_FLUSH_EN   (1<<0)
249 #define MI_OVERLAY_FLIP         MI_INSTR(0x11, 0)
250 #define   MI_OVERLAY_CONTINUE   (0x0<<21)
251 #define   MI_OVERLAY_ON         (0x1<<21)
252 #define   MI_OVERLAY_OFF        (0x2<<21)
253 #define MI_LOAD_SCAN_LINES_INCL MI_INSTR(0x12, 0)
254 #define MI_DISPLAY_FLIP         MI_INSTR(0x14, 2)
255 #define MI_DISPLAY_FLIP_I915    MI_INSTR(0x14, 1)
256 #define   MI_DISPLAY_FLIP_PLANE(n) ((n) << 20)
257 /* IVB has funny definitions for which plane to flip. */
258 #define   MI_DISPLAY_FLIP_IVB_PLANE_A  (0 << 19)
259 #define   MI_DISPLAY_FLIP_IVB_PLANE_B  (1 << 19)
260 #define   MI_DISPLAY_FLIP_IVB_SPRITE_A (2 << 19)
261 #define   MI_DISPLAY_FLIP_IVB_SPRITE_B (3 << 19)
262 #define   MI_DISPLAY_FLIP_IVB_PLANE_C  (4 << 19)
263 #define   MI_DISPLAY_FLIP_IVB_SPRITE_C (5 << 19)
264 /* SKL ones */
265 #define   MI_DISPLAY_FLIP_SKL_PLANE_1_A (0 << 8)
266 #define   MI_DISPLAY_FLIP_SKL_PLANE_1_B (1 << 8)
267 #define   MI_DISPLAY_FLIP_SKL_PLANE_1_C (2 << 8)
268 #define   MI_DISPLAY_FLIP_SKL_PLANE_2_A (4 << 8)
269 #define   MI_DISPLAY_FLIP_SKL_PLANE_2_B (5 << 8)
270 #define   MI_DISPLAY_FLIP_SKL_PLANE_2_C (6 << 8)
271 #define   MI_DISPLAY_FLIP_SKL_PLANE_3_A (7 << 8)
272 #define   MI_DISPLAY_FLIP_SKL_PLANE_3_B (8 << 8)
273 #define   MI_DISPLAY_FLIP_SKL_PLANE_3_C (9 << 8)
274 #define MI_SEMAPHORE_MBOX       MI_INSTR(0x16, 1) /* gen6, gen7 */
275 #define   MI_SEMAPHORE_GLOBAL_GTT    (1<<22)
276 #define   MI_SEMAPHORE_UPDATE       (1<<21)
277 #define   MI_SEMAPHORE_COMPARE      (1<<20)
278 #define   MI_SEMAPHORE_REGISTER     (1<<18)
279 #define   MI_SEMAPHORE_SYNC_VR      (0<<16) /* RCS  wait for VCS  (RVSYNC) */
280 #define   MI_SEMAPHORE_SYNC_VER     (1<<16) /* RCS  wait for VECS (RVESYNC) */
281 #define   MI_SEMAPHORE_SYNC_BR      (2<<16) /* RCS  wait for BCS  (RBSYNC) */
282 #define   MI_SEMAPHORE_SYNC_BV      (0<<16) /* VCS  wait for BCS  (VBSYNC) */
283 #define   MI_SEMAPHORE_SYNC_VEV     (1<<16) /* VCS  wait for VECS (VVESYNC) */
284 #define   MI_SEMAPHORE_SYNC_RV      (2<<16) /* VCS  wait for RCS  (VRSYNC) */
285 #define   MI_SEMAPHORE_SYNC_RB      (0<<16) /* BCS  wait for RCS  (BRSYNC) */
286 #define   MI_SEMAPHORE_SYNC_VEB     (1<<16) /* BCS  wait for VECS (BVESYNC) */
287 #define   MI_SEMAPHORE_SYNC_VB      (2<<16) /* BCS  wait for VCS  (BVSYNC) */
288 #define   MI_SEMAPHORE_SYNC_BVE     (0<<16) /* VECS wait for BCS  (VEBSYNC) */
289 #define   MI_SEMAPHORE_SYNC_VVE     (1<<16) /* VECS wait for VCS  (VEVSYNC) */
290 #define   MI_SEMAPHORE_SYNC_RVE     (2<<16) /* VECS wait for RCS  (VERSYNC) */
291 #define   MI_SEMAPHORE_SYNC_INVALID (3<<16)
292 #define   MI_SEMAPHORE_SYNC_MASK    (3<<16)
293 #define MI_SET_CONTEXT          MI_INSTR(0x18, 0)
294 #define   MI_MM_SPACE_GTT               (1<<8)
295 #define   MI_MM_SPACE_PHYSICAL          (0<<8)
296 #define   MI_SAVE_EXT_STATE_EN          (1<<3)
297 #define   MI_RESTORE_EXT_STATE_EN       (1<<2)
298 #define   MI_FORCE_RESTORE              (1<<1)
299 #define   MI_RESTORE_INHIBIT            (1<<0)
300 #define MI_SEMAPHORE_SIGNAL     MI_INSTR(0x1b, 0) /* GEN8+ */
301 #define   MI_SEMAPHORE_TARGET(engine)   ((engine)<<15)
302 #define MI_SEMAPHORE_WAIT       MI_INSTR(0x1c, 2) /* GEN8+ */
303 #define   MI_SEMAPHORE_POLL             (1<<15)
304 #define   MI_SEMAPHORE_SAD_GTE_SDD      (1<<12)
305 #define MI_STORE_DWORD_IMM      MI_INSTR(0x20, 1)
306 #define MI_STORE_DWORD_IMM_GEN8 MI_INSTR(0x20, 2)
307 #define   MI_MEM_VIRTUAL        (1 << 22) /* 965+ only */
308 #define MI_STORE_DWORD_INDEX    MI_INSTR(0x21, 1)
309 #define   MI_STORE_DWORD_INDEX_SHIFT 2
310 /* Official intel docs are somewhat sloppy concerning MI_LOAD_REGISTER_IMM:
311  * - Always issue a MI_NOOP _before_ the MI_LOAD_REGISTER_IMM - otherwise hw
312  *   simply ignores the register load under certain conditions.
313  * - One can actually load arbitrary many arbitrary registers: Simply issue x
314  *   address/value pairs. Don't overdue it, though, x <= 2^4 must hold!
315  */
316 #define MI_LOAD_REGISTER_IMM(x) MI_INSTR(0x22, 2*(x)-1)
317 #define   MI_LRI_FORCE_POSTED           (1<<12)
318 #define MI_STORE_REGISTER_MEM(x) MI_INSTR(0x24, 2*(x)-1)
319 #define MI_STORE_REGISTER_MEM_GEN8(x) MI_INSTR(0x24, 3*(x)-1)
320 #define   MI_SRM_LRM_GLOBAL_GTT         (1<<22)
321 #define MI_FLUSH_DW             MI_INSTR(0x26, 1) /* for GEN6 */
322 #define   MI_FLUSH_DW_STORE_INDEX       (1<<21)
323 #define   MI_INVALIDATE_TLB             (1<<18)
324 #define   MI_FLUSH_DW_OP_STOREDW        (1<<14)
325 #define   MI_FLUSH_DW_OP_MASK           (3<<14)
326 #define   MI_FLUSH_DW_NOTIFY            (1<<8)
327 #define   MI_INVALIDATE_BSD             (1<<7)
328 #define   MI_FLUSH_DW_USE_GTT           (1<<2)
329 #define   MI_FLUSH_DW_USE_PPGTT         (0<<2)
330 #define MI_BATCH_BUFFER         MI_INSTR(0x30, 1)
331 #define   MI_BATCH_NON_SECURE           (1)
332 /* for snb/ivb/vlv this also means "batch in ppgtt" when ppgtt is enabled. */
333 #define   MI_BATCH_NON_SECURE_I965      (1<<8)
334 #define   MI_BATCH_PPGTT_HSW            (1<<8)
335 #define   MI_BATCH_NON_SECURE_HSW       (1<<13)
336 #define MI_BATCH_BUFFER_START   MI_INSTR(0x31, 0)
337 #define   MI_BATCH_GTT              (2<<6) /* aliased with (1<<7) on gen4 */
338 #define MI_BATCH_BUFFER_START_GEN8      MI_INSTR(0x31, 1)
339
340 #define MI_PREDICATE_SRC0       (0x2400)
341 #define MI_PREDICATE_SRC1       (0x2408)
342
343 #define MI_PREDICATE_RESULT_2   (0x2214)
344 #define  LOWER_SLICE_ENABLED    (1<<0)
345 #define  LOWER_SLICE_DISABLED   (0<<0)
346
347 /*
348  * 3D instructions used by the kernel
349  */
350 #define GFX_INSTR(opcode, flags) ((0x3 << 29) | ((opcode) << 24) | (flags))
351
352 #define GFX_OP_RASTER_RULES    ((0x3<<29)|(0x7<<24))
353 #define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
354 #define   SC_UPDATE_SCISSOR       (0x1<<1)
355 #define   SC_ENABLE_MASK          (0x1<<0)
356 #define   SC_ENABLE               (0x1<<0)
357 #define GFX_OP_LOAD_INDIRECT   ((0x3<<29)|(0x1d<<24)|(0x7<<16))
358 #define GFX_OP_SCISSOR_INFO    ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
359 #define   SCI_YMIN_MASK      (0xffff<<16)
360 #define   SCI_XMIN_MASK      (0xffff<<0)
361 #define   SCI_YMAX_MASK      (0xffff<<16)
362 #define   SCI_XMAX_MASK      (0xffff<<0)
363 #define GFX_OP_SCISSOR_ENABLE    ((0x3<<29)|(0x1c<<24)|(0x10<<19))
364 #define GFX_OP_SCISSOR_RECT      ((0x3<<29)|(0x1d<<24)|(0x81<<16)|1)
365 #define GFX_OP_COLOR_FACTOR      ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
366 #define GFX_OP_STIPPLE           ((0x3<<29)|(0x1d<<24)|(0x83<<16))
367 #define GFX_OP_MAP_INFO          ((0x3<<29)|(0x1d<<24)|0x4)
368 #define GFX_OP_DESTBUFFER_VARS   ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
369 #define GFX_OP_DESTBUFFER_INFO   ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
370 #define GFX_OP_DRAWRECT_INFO     ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
371 #define GFX_OP_DRAWRECT_INFO_I965  ((0x7900<<16)|0x2)
372
373 #define COLOR_BLT_CMD                   (2<<29 | 0x40<<22 | (5-2))
374 #define SRC_COPY_BLT_CMD                ((2<<29)|(0x43<<22)|4)
375 #define XY_SRC_COPY_BLT_CMD             ((2<<29)|(0x53<<22)|6)
376 #define XY_MONO_SRC_COPY_IMM_BLT        ((2<<29)|(0x71<<22)|5)
377 #define   BLT_WRITE_A                   (2<<20)
378 #define   BLT_WRITE_RGB                 (1<<20)
379 #define   BLT_WRITE_RGBA                (BLT_WRITE_RGB | BLT_WRITE_A)
380 #define   BLT_DEPTH_8                   (0<<24)
381 #define   BLT_DEPTH_16_565              (1<<24)
382 #define   BLT_DEPTH_16_1555             (2<<24)
383 #define   BLT_DEPTH_32                  (3<<24)
384 #define   BLT_ROP_SRC_COPY              (0xcc<<16)
385 #define   BLT_ROP_COLOR_COPY            (0xf0<<16)
386 #define XY_SRC_COPY_BLT_SRC_TILED       (1<<15) /* 965+ only */
387 #define XY_SRC_COPY_BLT_DST_TILED       (1<<11) /* 965+ only */
388 #define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2)
389 #define   ASYNC_FLIP                (1<<22)
390 #define   DISPLAY_PLANE_A           (0<<20)
391 #define   DISPLAY_PLANE_B           (1<<20)
392 #define GFX_OP_PIPE_CONTROL(len)        ((0x3<<29)|(0x3<<27)|(0x2<<24)|(len-2))
393 #define   PIPE_CONTROL_GLOBAL_GTT_IVB                   (1<<24) /* gen7+ */
394 #define   PIPE_CONTROL_MMIO_WRITE                       (1<<23)
395 #define   PIPE_CONTROL_STORE_DATA_INDEX                 (1<<21)
396 #define   PIPE_CONTROL_CS_STALL                         (1<<20)
397 #define   PIPE_CONTROL_TLB_INVALIDATE                   (1<<18)
398 #define   PIPE_CONTROL_MEDIA_STATE_CLEAR                (1<<16)
399 #define   PIPE_CONTROL_QW_WRITE                         (1<<14)
400 #define   PIPE_CONTROL_POST_SYNC_OP_MASK                (3<<14)
401 #define   PIPE_CONTROL_DEPTH_STALL                      (1<<13)
402 #define   PIPE_CONTROL_WRITE_FLUSH                      (1<<12)
403 #define   PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH        (1<<12) /* gen6+ */
404 #define   PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE     (1<<11) /* MBZ on Ironlake */
405 #define   PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE         (1<<10) /* GM45+ only */
406 #define   PIPE_CONTROL_INDIRECT_STATE_DISABLE           (1<<9)
407 #define   PIPE_CONTROL_NOTIFY                           (1<<8)
408 #define   PIPE_CONTROL_FLUSH_ENABLE                     (1<<7) /* gen7+ */
409 #define   PIPE_CONTROL_VF_CACHE_INVALIDATE              (1<<4)
410 #define   PIPE_CONTROL_CONST_CACHE_INVALIDATE           (1<<3)
411 #define   PIPE_CONTROL_STATE_CACHE_INVALIDATE           (1<<2)
412 #define   PIPE_CONTROL_STALL_AT_SCOREBOARD              (1<<1)
413 #define   PIPE_CONTROL_DEPTH_CACHE_FLUSH                (1<<0)
414 #define   PIPE_CONTROL_GLOBAL_GTT (1<<2) /* in addr dword */
415
416 /*
417  * Commands used only by the command parser
418  */
419 #define MI_SET_PREDICATE        MI_INSTR(0x01, 0)
420 #define MI_ARB_CHECK            MI_INSTR(0x05, 0)
421 #define MI_RS_CONTROL           MI_INSTR(0x06, 0)
422 #define MI_URB_ATOMIC_ALLOC     MI_INSTR(0x09, 0)
423 #define MI_PREDICATE            MI_INSTR(0x0C, 0)
424 #define MI_RS_CONTEXT           MI_INSTR(0x0F, 0)
425 #define MI_TOPOLOGY_FILTER      MI_INSTR(0x0D, 0)
426 #define MI_LOAD_SCAN_LINES_EXCL MI_INSTR(0x13, 0)
427 #define MI_URB_CLEAR            MI_INSTR(0x19, 0)
428 #define MI_UPDATE_GTT           MI_INSTR(0x23, 0)
429 #define MI_CLFLUSH              MI_INSTR(0x27, 0)
430 #define MI_REPORT_PERF_COUNT    MI_INSTR(0x28, 0)
431 #define   MI_REPORT_PERF_COUNT_GGTT (1<<0)
432 #define MI_LOAD_REGISTER_MEM    MI_INSTR(0x29, 0)
433 #define MI_LOAD_REGISTER_REG    MI_INSTR(0x2A, 0)
434 #define MI_RS_STORE_DATA_IMM    MI_INSTR(0x2B, 0)
435 #define MI_LOAD_URB_MEM         MI_INSTR(0x2C, 0)
436 #define MI_STORE_URB_MEM        MI_INSTR(0x2D, 0)
437 #define MI_CONDITIONAL_BATCH_BUFFER_END MI_INSTR(0x36, 0)
438
439 #define PIPELINE_SELECT                ((0x3<<29)|(0x1<<27)|(0x1<<24)|(0x4<<16))
440 #define GFX_OP_3DSTATE_VF_STATISTICS   ((0x3<<29)|(0x1<<27)|(0x0<<24)|(0xB<<16))
441 #define MEDIA_VFE_STATE                ((0x3<<29)|(0x2<<27)|(0x0<<24)|(0x0<<16))
442 #define  MEDIA_VFE_STATE_MMIO_ACCESS_MASK (0x18)
443 #define GPGPU_OBJECT                   ((0x3<<29)|(0x2<<27)|(0x1<<24)|(0x4<<16))
444 #define GPGPU_WALKER                   ((0x3<<29)|(0x2<<27)|(0x1<<24)|(0x5<<16))
445 #define GFX_OP_3DSTATE_DX9_CONSTANTF_VS \
446         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x39<<16))
447 #define GFX_OP_3DSTATE_DX9_CONSTANTF_PS \
448         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x3A<<16))
449 #define GFX_OP_3DSTATE_SO_DECL_LIST \
450         ((0x3<<29)|(0x3<<27)|(0x1<<24)|(0x17<<16))
451
452 #define GFX_OP_3DSTATE_BINDING_TABLE_EDIT_VS \
453         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x43<<16))
454 #define GFX_OP_3DSTATE_BINDING_TABLE_EDIT_GS \
455         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x44<<16))
456 #define GFX_OP_3DSTATE_BINDING_TABLE_EDIT_HS \
457         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x45<<16))
458 #define GFX_OP_3DSTATE_BINDING_TABLE_EDIT_DS \
459         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x46<<16))
460 #define GFX_OP_3DSTATE_BINDING_TABLE_EDIT_PS \
461         ((0x3<<29)|(0x3<<27)|(0x0<<24)|(0x47<<16))
462
463 #define MFX_WAIT  ((0x3<<29)|(0x1<<27)|(0x0<<16))
464
465 #define COLOR_BLT     ((0x2<<29)|(0x40<<22))
466 #define SRC_COPY_BLT  ((0x2<<29)|(0x43<<22))
467
468 /*
469  * Registers used only by the command parser
470  */
471 #define BCS_SWCTRL 0x22200
472
473 #define HS_INVOCATION_COUNT 0x2300
474 #define DS_INVOCATION_COUNT 0x2308
475 #define IA_VERTICES_COUNT   0x2310
476 #define IA_PRIMITIVES_COUNT 0x2318
477 #define VS_INVOCATION_COUNT 0x2320
478 #define GS_INVOCATION_COUNT 0x2328
479 #define GS_PRIMITIVES_COUNT 0x2330
480 #define CL_INVOCATION_COUNT 0x2338
481 #define CL_PRIMITIVES_COUNT 0x2340
482 #define PS_INVOCATION_COUNT 0x2348
483 #define PS_DEPTH_COUNT      0x2350
484
485 /* There are the 4 64-bit counter registers, one for each stream output */
486 #define GEN7_SO_NUM_PRIMS_WRITTEN(n) (0x5200 + (n) * 8)
487
488 #define GEN7_SO_PRIM_STORAGE_NEEDED(n)  (0x5240 + (n) * 8)
489
490 #define GEN7_3DPRIM_END_OFFSET          0x2420
491 #define GEN7_3DPRIM_START_VERTEX        0x2430
492 #define GEN7_3DPRIM_VERTEX_COUNT        0x2434
493 #define GEN7_3DPRIM_INSTANCE_COUNT      0x2438
494 #define GEN7_3DPRIM_START_INSTANCE      0x243C
495 #define GEN7_3DPRIM_BASE_VERTEX         0x2440
496
497 #define OACONTROL 0x2360
498
499 #define _GEN7_PIPEA_DE_LOAD_SL  0x70068
500 #define _GEN7_PIPEB_DE_LOAD_SL  0x71068
501 #define GEN7_PIPE_DE_LOAD_SL(pipe) _PIPE(pipe, \
502                                          _GEN7_PIPEA_DE_LOAD_SL, \
503                                          _GEN7_PIPEB_DE_LOAD_SL)
504
505 /*
506  * Reset registers
507  */
508 #define DEBUG_RESET_I830                0x6070
509 #define  DEBUG_RESET_FULL               (1<<7)
510 #define  DEBUG_RESET_RENDER             (1<<8)
511 #define  DEBUG_RESET_DISPLAY            (1<<9)
512
513 /*
514  * IOSF sideband
515  */
516 #define VLV_IOSF_DOORBELL_REQ                   (VLV_DISPLAY_BASE + 0x2100)
517 #define   IOSF_DEVFN_SHIFT                      24
518 #define   IOSF_OPCODE_SHIFT                     16
519 #define   IOSF_PORT_SHIFT                       8
520 #define   IOSF_BYTE_ENABLES_SHIFT               4
521 #define   IOSF_BAR_SHIFT                        1
522 #define   IOSF_SB_BUSY                          (1<<0)
523 #define   IOSF_PORT_BUNIT                       0x3
524 #define   IOSF_PORT_PUNIT                       0x4
525 #define   IOSF_PORT_NC                          0x11
526 #define   IOSF_PORT_DPIO                        0x12
527 #define   IOSF_PORT_DPIO_2                      0x1a
528 #define   IOSF_PORT_GPIO_NC                     0x13
529 #define   IOSF_PORT_CCK                         0x14
530 #define   IOSF_PORT_CCU                         0xA9
531 #define   IOSF_PORT_GPS_CORE                    0x48
532 #define   IOSF_PORT_FLISDSI                     0x1B
533 #define VLV_IOSF_DATA                           (VLV_DISPLAY_BASE + 0x2104)
534 #define VLV_IOSF_ADDR                           (VLV_DISPLAY_BASE + 0x2108)
535
536 /* See configdb bunit SB addr map */
537 #define BUNIT_REG_BISOC                         0x11
538
539 #define PUNIT_REG_DSPFREQ                       0x36
540 #define   DSPFREQSTAT_SHIFT_CHV                 24
541 #define   DSPFREQSTAT_MASK_CHV                  (0x1f << DSPFREQSTAT_SHIFT_CHV)
542 #define   DSPFREQGUAR_SHIFT_CHV                 8
543 #define   DSPFREQGUAR_MASK_CHV                  (0x1f << DSPFREQGUAR_SHIFT_CHV)
544 #define   DSPFREQSTAT_SHIFT                     30
545 #define   DSPFREQSTAT_MASK                      (0x3 << DSPFREQSTAT_SHIFT)
546 #define   DSPFREQGUAR_SHIFT                     14
547 #define   DSPFREQGUAR_MASK                      (0x3 << DSPFREQGUAR_SHIFT)
548 #define   _DP_SSC(val, pipe)                    ((val) << (2 * (pipe)))
549 #define   DP_SSC_MASK(pipe)                     _DP_SSC(0x3, (pipe))
550 #define   DP_SSC_PWR_ON(pipe)                   _DP_SSC(0x0, (pipe))
551 #define   DP_SSC_CLK_GATE(pipe)                 _DP_SSC(0x1, (pipe))
552 #define   DP_SSC_RESET(pipe)                    _DP_SSC(0x2, (pipe))
553 #define   DP_SSC_PWR_GATE(pipe)                 _DP_SSC(0x3, (pipe))
554 #define   _DP_SSS(val, pipe)                    ((val) << (2 * (pipe) + 16))
555 #define   DP_SSS_MASK(pipe)                     _DP_SSS(0x3, (pipe))
556 #define   DP_SSS_PWR_ON(pipe)                   _DP_SSS(0x0, (pipe))
557 #define   DP_SSS_CLK_GATE(pipe)                 _DP_SSS(0x1, (pipe))
558 #define   DP_SSS_RESET(pipe)                    _DP_SSS(0x2, (pipe))
559 #define   DP_SSS_PWR_GATE(pipe)                 _DP_SSS(0x3, (pipe))
560
561 /* See the PUNIT HAS v0.8 for the below bits */
562 enum punit_power_well {
563         PUNIT_POWER_WELL_RENDER                 = 0,
564         PUNIT_POWER_WELL_MEDIA                  = 1,
565         PUNIT_POWER_WELL_DISP2D                 = 3,
566         PUNIT_POWER_WELL_DPIO_CMN_BC            = 5,
567         PUNIT_POWER_WELL_DPIO_TX_B_LANES_01     = 6,
568         PUNIT_POWER_WELL_DPIO_TX_B_LANES_23     = 7,
569         PUNIT_POWER_WELL_DPIO_TX_C_LANES_01     = 8,
570         PUNIT_POWER_WELL_DPIO_TX_C_LANES_23     = 9,
571         PUNIT_POWER_WELL_DPIO_RX0               = 10,
572         PUNIT_POWER_WELL_DPIO_RX1               = 11,
573         PUNIT_POWER_WELL_DPIO_CMN_D             = 12,
574         /* FIXME: guesswork below */
575         PUNIT_POWER_WELL_DPIO_TX_D_LANES_01     = 13,
576         PUNIT_POWER_WELL_DPIO_TX_D_LANES_23     = 14,
577         PUNIT_POWER_WELL_DPIO_RX2               = 15,
578
579         PUNIT_POWER_WELL_NUM,
580 };
581
582 #define PUNIT_REG_PWRGT_CTRL                    0x60
583 #define PUNIT_REG_PWRGT_STATUS                  0x61
584 #define   PUNIT_PWRGT_MASK(power_well)          (3 << ((power_well) * 2))
585 #define   PUNIT_PWRGT_PWR_ON(power_well)        (0 << ((power_well) * 2))
586 #define   PUNIT_PWRGT_CLK_GATE(power_well)      (1 << ((power_well) * 2))
587 #define   PUNIT_PWRGT_RESET(power_well)         (2 << ((power_well) * 2))
588 #define   PUNIT_PWRGT_PWR_GATE(power_well)      (3 << ((power_well) * 2))
589
590 #define PUNIT_REG_GPU_LFM                       0xd3
591 #define PUNIT_REG_GPU_FREQ_REQ                  0xd4
592 #define PUNIT_REG_GPU_FREQ_STS                  0xd8
593 #define   GPLLENABLE                            (1<<4)
594 #define   GENFREQSTATUS                         (1<<0)
595 #define PUNIT_REG_MEDIA_TURBO_FREQ_REQ          0xdc
596 #define PUNIT_REG_CZ_TIMESTAMP                  0xce
597
598 #define PUNIT_FUSE_BUS2                         0xf6 /* bits 47:40 */
599 #define PUNIT_FUSE_BUS1                         0xf5 /* bits 55:48 */
600
601 #define PUNIT_GPU_STATUS_REG                    0xdb
602 #define PUNIT_GPU_STATUS_MAX_FREQ_SHIFT 16
603 #define PUNIT_GPU_STATUS_MAX_FREQ_MASK          0xff
604 #define PUNIT_GPU_STATIS_GFX_MIN_FREQ_SHIFT     8
605 #define PUNIT_GPU_STATUS_GFX_MIN_FREQ_MASK      0xff
606
607 #define PUNIT_GPU_DUTYCYCLE_REG         0xdf
608 #define PUNIT_GPU_DUTYCYCLE_RPE_FREQ_SHIFT      8
609 #define PUNIT_GPU_DUTYCYCLE_RPE_FREQ_MASK       0xff
610
611 #define IOSF_NC_FB_GFX_FREQ_FUSE                0x1c
612 #define   FB_GFX_MAX_FREQ_FUSE_SHIFT            3
613 #define   FB_GFX_MAX_FREQ_FUSE_MASK             0x000007f8
614 #define   FB_GFX_FGUARANTEED_FREQ_FUSE_SHIFT    11
615 #define   FB_GFX_FGUARANTEED_FREQ_FUSE_MASK     0x0007f800
616 #define IOSF_NC_FB_GFX_FMAX_FUSE_HI             0x34
617 #define   FB_FMAX_VMIN_FREQ_HI_MASK             0x00000007
618 #define IOSF_NC_FB_GFX_FMAX_FUSE_LO             0x30
619 #define   FB_FMAX_VMIN_FREQ_LO_SHIFT            27
620 #define   FB_FMAX_VMIN_FREQ_LO_MASK             0xf8000000
621
622 #define VLV_CZ_CLOCK_TO_MILLI_SEC               100000
623 #define VLV_RP_UP_EI_THRESHOLD                  90
624 #define VLV_RP_DOWN_EI_THRESHOLD                70
625 #define VLV_INT_COUNT_FOR_DOWN_EI               5
626
627 /* vlv2 north clock has */
628 #define CCK_FUSE_REG                            0x8
629 #define  CCK_FUSE_HPLL_FREQ_MASK                0x3
630 #define CCK_REG_DSI_PLL_FUSE                    0x44
631 #define CCK_REG_DSI_PLL_CONTROL                 0x48
632 #define  DSI_PLL_VCO_EN                         (1 << 31)
633 #define  DSI_PLL_LDO_GATE                       (1 << 30)
634 #define  DSI_PLL_P1_POST_DIV_SHIFT              17
635 #define  DSI_PLL_P1_POST_DIV_MASK               (0x1ff << 17)
636 #define  DSI_PLL_P2_MUX_DSI0_DIV2               (1 << 13)
637 #define  DSI_PLL_P3_MUX_DSI1_DIV2               (1 << 12)
638 #define  DSI_PLL_MUX_MASK                       (3 << 9)
639 #define  DSI_PLL_MUX_DSI0_DSIPLL                (0 << 10)
640 #define  DSI_PLL_MUX_DSI0_CCK                   (1 << 10)
641 #define  DSI_PLL_MUX_DSI1_DSIPLL                (0 << 9)
642 #define  DSI_PLL_MUX_DSI1_CCK                   (1 << 9)
643 #define  DSI_PLL_CLK_GATE_MASK                  (0xf << 5)
644 #define  DSI_PLL_CLK_GATE_DSI0_DSIPLL           (1 << 8)
645 #define  DSI_PLL_CLK_GATE_DSI1_DSIPLL           (1 << 7)
646 #define  DSI_PLL_CLK_GATE_DSI0_CCK              (1 << 6)
647 #define  DSI_PLL_CLK_GATE_DSI1_CCK              (1 << 5)
648 #define  DSI_PLL_LOCK                           (1 << 0)
649 #define CCK_REG_DSI_PLL_DIVIDER                 0x4c
650 #define  DSI_PLL_LFSR                           (1 << 31)
651 #define  DSI_PLL_FRACTION_EN                    (1 << 30)
652 #define  DSI_PLL_FRAC_COUNTER_SHIFT             27
653 #define  DSI_PLL_FRAC_COUNTER_MASK              (7 << 27)
654 #define  DSI_PLL_USYNC_CNT_SHIFT                18
655 #define  DSI_PLL_USYNC_CNT_MASK                 (0x1ff << 18)
656 #define  DSI_PLL_N1_DIV_SHIFT                   16
657 #define  DSI_PLL_N1_DIV_MASK                    (3 << 16)
658 #define  DSI_PLL_M1_DIV_SHIFT                   0
659 #define  DSI_PLL_M1_DIV_MASK                    (0x1ff << 0)
660 #define CCK_DISPLAY_CLOCK_CONTROL               0x6b
661 #define  DISPLAY_TRUNK_FORCE_ON                 (1 << 17)
662 #define  DISPLAY_TRUNK_FORCE_OFF                (1 << 16)
663 #define  DISPLAY_FREQUENCY_STATUS               (0x1f << 8)
664 #define  DISPLAY_FREQUENCY_STATUS_SHIFT         8
665 #define  DISPLAY_FREQUENCY_VALUES               (0x1f << 0)
666
667 /**
668  * DOC: DPIO
669  *
670  * VLV and CHV have slightly peculiar display PHYs for driving DP/HDMI
671  * ports. DPIO is the name given to such a display PHY. These PHYs
672  * don't follow the standard programming model using direct MMIO
673  * registers, and instead their registers must be accessed trough IOSF
674  * sideband. VLV has one such PHY for driving ports B and C, and CHV
675  * adds another PHY for driving port D. Each PHY responds to specific
676  * IOSF-SB port.
677  *
678  * Each display PHY is made up of one or two channels. Each channel
679  * houses a common lane part which contains the PLL and other common
680  * logic. CH0 common lane also contains the IOSF-SB logic for the
681  * Common Register Interface (CRI) ie. the DPIO registers. CRI clock
682  * must be running when any DPIO registers are accessed.
683  *
684  * In addition to having their own registers, the PHYs are also
685  * controlled through some dedicated signals from the display
686  * controller. These include PLL reference clock enable, PLL enable,
687  * and CRI clock selection, for example.
688  *
689  * Eeach channel also has two splines (also called data lanes), and
690  * each spline is made up of one Physical Access Coding Sub-Layer
691  * (PCS) block and two TX lanes. So each channel has two PCS blocks
692  * and four TX lanes. The TX lanes are used as DP lanes or TMDS
693  * data/clock pairs depending on the output type.
694  *
695  * Additionally the PHY also contains an AUX lane with AUX blocks
696  * for each channel. This is used for DP AUX communication, but
697  * this fact isn't really relevant for the driver since AUX is
698  * controlled from the display controller side. No DPIO registers
699  * need to be accessed during AUX communication,
700  *
701  * Generally the common lane corresponds to the pipe and
702  * the spline (PCS/TX) corresponds to the port.
703  *
704  * For dual channel PHY (VLV/CHV):
705  *
706  *  pipe A == CMN/PLL/REF CH0
707  *
708  *  pipe B == CMN/PLL/REF CH1
709  *
710  *  port B == PCS/TX CH0
711  *
712  *  port C == PCS/TX CH1
713  *
714  * This is especially important when we cross the streams
715  * ie. drive port B with pipe B, or port C with pipe A.
716  *
717  * For single channel PHY (CHV):
718  *
719  *  pipe C == CMN/PLL/REF CH0
720  *
721  *  port D == PCS/TX CH0
722  *
723  * Note: digital port B is DDI0, digital port C is DDI1,
724  * digital port D is DDI2
725  */
726 /*
727  * Dual channel PHY (VLV/CHV)
728  * ---------------------------------
729  * |      CH0      |      CH1      |
730  * |  CMN/PLL/REF  |  CMN/PLL/REF  |
731  * |---------------|---------------| Display PHY
732  * | PCS01 | PCS23 | PCS01 | PCS23 |
733  * |-------|-------|-------|-------|
734  * |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
735  * ---------------------------------
736  * |     DDI0      |     DDI1      | DP/HDMI ports
737  * ---------------------------------
738  *
739  * Single channel PHY (CHV)
740  * -----------------
741  * |      CH0      |
742  * |  CMN/PLL/REF  |
743  * |---------------| Display PHY
744  * | PCS01 | PCS23 |
745  * |-------|-------|
746  * |TX0|TX1|TX2|TX3|
747  * -----------------
748  * |     DDI2      | DP/HDMI port
749  * -----------------
750  */
751 #define DPIO_DEVFN                      0
752
753 #define DPIO_CTL                        (VLV_DISPLAY_BASE + 0x2110)
754 #define  DPIO_MODSEL1                   (1<<3) /* if ref clk b == 27 */
755 #define  DPIO_MODSEL0                   (1<<2) /* if ref clk a == 27 */
756 #define  DPIO_SFR_BYPASS                (1<<1)
757 #define  DPIO_CMNRST                    (1<<0)
758
759 #define DPIO_PHY(pipe)                  ((pipe) >> 1)
760 #define DPIO_PHY_IOSF_PORT(phy)         (dev_priv->dpio_phy_iosf_port[phy])
761
762 /*
763  * Per pipe/PLL DPIO regs
764  */
765 #define _VLV_PLL_DW3_CH0                0x800c
766 #define   DPIO_POST_DIV_SHIFT           (28) /* 3 bits */
767 #define   DPIO_POST_DIV_DAC             0
768 #define   DPIO_POST_DIV_HDMIDP          1 /* DAC 225-400M rate */
769 #define   DPIO_POST_DIV_LVDS1           2
770 #define   DPIO_POST_DIV_LVDS2           3
771 #define   DPIO_K_SHIFT                  (24) /* 4 bits */
772 #define   DPIO_P1_SHIFT                 (21) /* 3 bits */
773 #define   DPIO_P2_SHIFT                 (16) /* 5 bits */
774 #define   DPIO_N_SHIFT                  (12) /* 4 bits */
775 #define   DPIO_ENABLE_CALIBRATION       (1<<11)
776 #define   DPIO_M1DIV_SHIFT              (8) /* 3 bits */
777 #define   DPIO_M2DIV_MASK               0xff
778 #define _VLV_PLL_DW3_CH1                0x802c
779 #define VLV_PLL_DW3(ch) _PIPE(ch, _VLV_PLL_DW3_CH0, _VLV_PLL_DW3_CH1)
780
781 #define _VLV_PLL_DW5_CH0                0x8014
782 #define   DPIO_REFSEL_OVERRIDE          27
783 #define   DPIO_PLL_MODESEL_SHIFT        24 /* 3 bits */
784 #define   DPIO_BIAS_CURRENT_CTL_SHIFT   21 /* 3 bits, always 0x7 */
785 #define   DPIO_PLL_REFCLK_SEL_SHIFT     16 /* 2 bits */
786 #define   DPIO_PLL_REFCLK_SEL_MASK      3
787 #define   DPIO_DRIVER_CTL_SHIFT         12 /* always set to 0x8 */
788 #define   DPIO_CLK_BIAS_CTL_SHIFT       8 /* always set to 0x5 */
789 #define _VLV_PLL_DW5_CH1                0x8034
790 #define VLV_PLL_DW5(ch) _PIPE(ch, _VLV_PLL_DW5_CH0, _VLV_PLL_DW5_CH1)
791
792 #define _VLV_PLL_DW7_CH0                0x801c
793 #define _VLV_PLL_DW7_CH1                0x803c
794 #define VLV_PLL_DW7(ch) _PIPE(ch, _VLV_PLL_DW7_CH0, _VLV_PLL_DW7_CH1)
795
796 #define _VLV_PLL_DW8_CH0                0x8040
797 #define _VLV_PLL_DW8_CH1                0x8060
798 #define VLV_PLL_DW8(ch) _PIPE(ch, _VLV_PLL_DW8_CH0, _VLV_PLL_DW8_CH1)
799
800 #define VLV_PLL_DW9_BCAST               0xc044
801 #define _VLV_PLL_DW9_CH0                0x8044
802 #define _VLV_PLL_DW9_CH1                0x8064
803 #define VLV_PLL_DW9(ch) _PIPE(ch, _VLV_PLL_DW9_CH0, _VLV_PLL_DW9_CH1)
804
805 #define _VLV_PLL_DW10_CH0               0x8048
806 #define _VLV_PLL_DW10_CH1               0x8068
807 #define VLV_PLL_DW10(ch) _PIPE(ch, _VLV_PLL_DW10_CH0, _VLV_PLL_DW10_CH1)
808
809 #define _VLV_PLL_DW11_CH0               0x804c
810 #define _VLV_PLL_DW11_CH1               0x806c
811 #define VLV_PLL_DW11(ch) _PIPE(ch, _VLV_PLL_DW11_CH0, _VLV_PLL_DW11_CH1)
812
813 /* Spec for ref block start counts at DW10 */
814 #define VLV_REF_DW13                    0x80ac
815
816 #define VLV_CMN_DW0                     0x8100
817
818 /*
819  * Per DDI channel DPIO regs
820  */
821
822 #define _VLV_PCS_DW0_CH0                0x8200
823 #define _VLV_PCS_DW0_CH1                0x8400
824 #define   DPIO_PCS_TX_LANE2_RESET       (1<<16)
825 #define   DPIO_PCS_TX_LANE1_RESET       (1<<7)
826 #define   DPIO_LEFT_TXFIFO_RST_MASTER2  (1<<4)
827 #define   DPIO_RIGHT_TXFIFO_RST_MASTER2 (1<<3)
828 #define VLV_PCS_DW0(ch) _PORT(ch, _VLV_PCS_DW0_CH0, _VLV_PCS_DW0_CH1)
829
830 #define _VLV_PCS01_DW0_CH0              0x200
831 #define _VLV_PCS23_DW0_CH0              0x400
832 #define _VLV_PCS01_DW0_CH1              0x2600
833 #define _VLV_PCS23_DW0_CH1              0x2800
834 #define VLV_PCS01_DW0(ch) _PORT(ch, _VLV_PCS01_DW0_CH0, _VLV_PCS01_DW0_CH1)
835 #define VLV_PCS23_DW0(ch) _PORT(ch, _VLV_PCS23_DW0_CH0, _VLV_PCS23_DW0_CH1)
836
837 #define _VLV_PCS_DW1_CH0                0x8204
838 #define _VLV_PCS_DW1_CH1                0x8404
839 #define   CHV_PCS_REQ_SOFTRESET_EN      (1<<23)
840 #define   DPIO_PCS_CLK_CRI_RXEB_EIOS_EN (1<<22)
841 #define   DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN (1<<21)
842 #define   DPIO_PCS_CLK_DATAWIDTH_SHIFT  (6)
843 #define   DPIO_PCS_CLK_SOFT_RESET       (1<<5)
844 #define VLV_PCS_DW1(ch) _PORT(ch, _VLV_PCS_DW1_CH0, _VLV_PCS_DW1_CH1)
845
846 #define _VLV_PCS01_DW1_CH0              0x204
847 #define _VLV_PCS23_DW1_CH0              0x404
848 #define _VLV_PCS01_DW1_CH1              0x2604
849 #define _VLV_PCS23_DW1_CH1              0x2804
850 #define VLV_PCS01_DW1(ch) _PORT(ch, _VLV_PCS01_DW1_CH0, _VLV_PCS01_DW1_CH1)
851 #define VLV_PCS23_DW1(ch) _PORT(ch, _VLV_PCS23_DW1_CH0, _VLV_PCS23_DW1_CH1)
852
853 #define _VLV_PCS_DW8_CH0                0x8220
854 #define _VLV_PCS_DW8_CH1                0x8420
855 #define   CHV_PCS_USEDCLKCHANNEL_OVRRIDE        (1 << 20)
856 #define   CHV_PCS_USEDCLKCHANNEL                (1 << 21)
857 #define VLV_PCS_DW8(ch) _PORT(ch, _VLV_PCS_DW8_CH0, _VLV_PCS_DW8_CH1)
858
859 #define _VLV_PCS01_DW8_CH0              0x0220
860 #define _VLV_PCS23_DW8_CH0              0x0420
861 #define _VLV_PCS01_DW8_CH1              0x2620
862 #define _VLV_PCS23_DW8_CH1              0x2820
863 #define VLV_PCS01_DW8(port) _PORT(port, _VLV_PCS01_DW8_CH0, _VLV_PCS01_DW8_CH1)
864 #define VLV_PCS23_DW8(port) _PORT(port, _VLV_PCS23_DW8_CH0, _VLV_PCS23_DW8_CH1)
865
866 #define _VLV_PCS_DW9_CH0                0x8224
867 #define _VLV_PCS_DW9_CH1                0x8424
868 #define   DPIO_PCS_TX2MARGIN_MASK       (0x7<<13)
869 #define   DPIO_PCS_TX2MARGIN_000        (0<<13)
870 #define   DPIO_PCS_TX2MARGIN_101        (1<<13)
871 #define   DPIO_PCS_TX1MARGIN_MASK       (0x7<<10)
872 #define   DPIO_PCS_TX1MARGIN_000        (0<<10)
873 #define   DPIO_PCS_TX1MARGIN_101        (1<<10)
874 #define VLV_PCS_DW9(ch) _PORT(ch, _VLV_PCS_DW9_CH0, _VLV_PCS_DW9_CH1)
875
876 #define _VLV_PCS01_DW9_CH0              0x224
877 #define _VLV_PCS23_DW9_CH0              0x424
878 #define _VLV_PCS01_DW9_CH1              0x2624
879 #define _VLV_PCS23_DW9_CH1              0x2824
880 #define VLV_PCS01_DW9(ch) _PORT(ch, _VLV_PCS01_DW9_CH0, _VLV_PCS01_DW9_CH1)
881 #define VLV_PCS23_DW9(ch) _PORT(ch, _VLV_PCS23_DW9_CH0, _VLV_PCS23_DW9_CH1)
882
883 #define _CHV_PCS_DW10_CH0               0x8228
884 #define _CHV_PCS_DW10_CH1               0x8428
885 #define   DPIO_PCS_SWING_CALC_TX0_TX2   (1<<30)
886 #define   DPIO_PCS_SWING_CALC_TX1_TX3   (1<<31)
887 #define   DPIO_PCS_TX2DEEMP_MASK        (0xf<<24)
888 #define   DPIO_PCS_TX2DEEMP_9P5         (0<<24)
889 #define   DPIO_PCS_TX2DEEMP_6P0         (2<<24)
890 #define   DPIO_PCS_TX1DEEMP_MASK        (0xf<<16)
891 #define   DPIO_PCS_TX1DEEMP_9P5         (0<<16)
892 #define   DPIO_PCS_TX1DEEMP_6P0         (2<<16)
893 #define CHV_PCS_DW10(ch) _PORT(ch, _CHV_PCS_DW10_CH0, _CHV_PCS_DW10_CH1)
894
895 #define _VLV_PCS01_DW10_CH0             0x0228
896 #define _VLV_PCS23_DW10_CH0             0x0428
897 #define _VLV_PCS01_DW10_CH1             0x2628
898 #define _VLV_PCS23_DW10_CH1             0x2828
899 #define VLV_PCS01_DW10(port) _PORT(port, _VLV_PCS01_DW10_CH0, _VLV_PCS01_DW10_CH1)
900 #define VLV_PCS23_DW10(port) _PORT(port, _VLV_PCS23_DW10_CH0, _VLV_PCS23_DW10_CH1)
901
902 #define _VLV_PCS_DW11_CH0               0x822c
903 #define _VLV_PCS_DW11_CH1               0x842c
904 #define   DPIO_LANEDESKEW_STRAP_OVRD    (1<<3)
905 #define   DPIO_LEFT_TXFIFO_RST_MASTER   (1<<1)
906 #define   DPIO_RIGHT_TXFIFO_RST_MASTER  (1<<0)
907 #define VLV_PCS_DW11(ch) _PORT(ch, _VLV_PCS_DW11_CH0, _VLV_PCS_DW11_CH1)
908
909 #define _VLV_PCS01_DW11_CH0             0x022c
910 #define _VLV_PCS23_DW11_CH0             0x042c
911 #define _VLV_PCS01_DW11_CH1             0x262c
912 #define _VLV_PCS23_DW11_CH1             0x282c
913 #define VLV_PCS01_DW11(ch) _PORT(ch, _VLV_PCS01_DW11_CH0, _VLV_PCS01_DW11_CH1)
914 #define VLV_PCS23_DW11(ch) _PORT(ch, _VLV_PCS23_DW11_CH0, _VLV_PCS23_DW11_CH1)
915
916 #define _VLV_PCS_DW12_CH0               0x8230
917 #define _VLV_PCS_DW12_CH1               0x8430
918 #define VLV_PCS_DW12(ch) _PORT(ch, _VLV_PCS_DW12_CH0, _VLV_PCS_DW12_CH1)
919
920 #define _VLV_PCS_DW14_CH0               0x8238
921 #define _VLV_PCS_DW14_CH1               0x8438
922 #define VLV_PCS_DW14(ch) _PORT(ch, _VLV_PCS_DW14_CH0, _VLV_PCS_DW14_CH1)
923
924 #define _VLV_PCS_DW23_CH0               0x825c
925 #define _VLV_PCS_DW23_CH1               0x845c
926 #define VLV_PCS_DW23(ch) _PORT(ch, _VLV_PCS_DW23_CH0, _VLV_PCS_DW23_CH1)
927
928 #define _VLV_TX_DW2_CH0                 0x8288
929 #define _VLV_TX_DW2_CH1                 0x8488
930 #define   DPIO_SWING_MARGIN000_SHIFT    16
931 #define   DPIO_SWING_MARGIN000_MASK     (0xff << DPIO_SWING_MARGIN000_SHIFT)
932 #define   DPIO_UNIQ_TRANS_SCALE_SHIFT   8
933 #define VLV_TX_DW2(ch) _PORT(ch, _VLV_TX_DW2_CH0, _VLV_TX_DW2_CH1)
934
935 #define _VLV_TX_DW3_CH0                 0x828c
936 #define _VLV_TX_DW3_CH1                 0x848c
937 /* The following bit for CHV phy */
938 #define   DPIO_TX_UNIQ_TRANS_SCALE_EN   (1<<27)
939 #define   DPIO_SWING_MARGIN101_SHIFT    16
940 #define   DPIO_SWING_MARGIN101_MASK     (0xff << DPIO_SWING_MARGIN101_SHIFT)
941 #define VLV_TX_DW3(ch) _PORT(ch, _VLV_TX_DW3_CH0, _VLV_TX_DW3_CH1)
942
943 #define _VLV_TX_DW4_CH0                 0x8290
944 #define _VLV_TX_DW4_CH1                 0x8490
945 #define   DPIO_SWING_DEEMPH9P5_SHIFT    24
946 #define   DPIO_SWING_DEEMPH9P5_MASK     (0xff << DPIO_SWING_DEEMPH9P5_SHIFT)
947 #define   DPIO_SWING_DEEMPH6P0_SHIFT    16
948 #define   DPIO_SWING_DEEMPH6P0_MASK     (0xff << DPIO_SWING_DEEMPH6P0_SHIFT)
949 #define VLV_TX_DW4(ch) _PORT(ch, _VLV_TX_DW4_CH0, _VLV_TX_DW4_CH1)
950
951 #define _VLV_TX3_DW4_CH0                0x690
952 #define _VLV_TX3_DW4_CH1                0x2a90
953 #define VLV_TX3_DW4(ch) _PORT(ch, _VLV_TX3_DW4_CH0, _VLV_TX3_DW4_CH1)
954
955 #define _VLV_TX_DW5_CH0                 0x8294
956 #define _VLV_TX_DW5_CH1                 0x8494
957 #define   DPIO_TX_OCALINIT_EN           (1<<31)
958 #define VLV_TX_DW5(ch) _PORT(ch, _VLV_TX_DW5_CH0, _VLV_TX_DW5_CH1)
959
960 #define _VLV_TX_DW11_CH0                0x82ac
961 #define _VLV_TX_DW11_CH1                0x84ac
962 #define VLV_TX_DW11(ch) _PORT(ch, _VLV_TX_DW11_CH0, _VLV_TX_DW11_CH1)
963
964 #define _VLV_TX_DW14_CH0                0x82b8
965 #define _VLV_TX_DW14_CH1                0x84b8
966 #define VLV_TX_DW14(ch) _PORT(ch, _VLV_TX_DW14_CH0, _VLV_TX_DW14_CH1)
967
968 /* CHV dpPhy registers */
969 #define _CHV_PLL_DW0_CH0                0x8000
970 #define _CHV_PLL_DW0_CH1                0x8180
971 #define CHV_PLL_DW0(ch) _PIPE(ch, _CHV_PLL_DW0_CH0, _CHV_PLL_DW0_CH1)
972
973 #define _CHV_PLL_DW1_CH0                0x8004
974 #define _CHV_PLL_DW1_CH1                0x8184
975 #define   DPIO_CHV_N_DIV_SHIFT          8
976 #define   DPIO_CHV_M1_DIV_BY_2          (0 << 0)
977 #define CHV_PLL_DW1(ch) _PIPE(ch, _CHV_PLL_DW1_CH0, _CHV_PLL_DW1_CH1)
978
979 #define _CHV_PLL_DW2_CH0                0x8008
980 #define _CHV_PLL_DW2_CH1                0x8188
981 #define CHV_PLL_DW2(ch) _PIPE(ch, _CHV_PLL_DW2_CH0, _CHV_PLL_DW2_CH1)
982
983 #define _CHV_PLL_DW3_CH0                0x800c
984 #define _CHV_PLL_DW3_CH1                0x818c
985 #define  DPIO_CHV_FRAC_DIV_EN           (1 << 16)
986 #define  DPIO_CHV_FIRST_MOD             (0 << 8)
987 #define  DPIO_CHV_SECOND_MOD            (1 << 8)
988 #define  DPIO_CHV_FEEDFWD_GAIN_SHIFT    0
989 #define CHV_PLL_DW3(ch) _PIPE(ch, _CHV_PLL_DW3_CH0, _CHV_PLL_DW3_CH1)
990
991 #define _CHV_PLL_DW6_CH0                0x8018
992 #define _CHV_PLL_DW6_CH1                0x8198
993 #define   DPIO_CHV_GAIN_CTRL_SHIFT      16
994 #define   DPIO_CHV_INT_COEFF_SHIFT      8
995 #define   DPIO_CHV_PROP_COEFF_SHIFT     0
996 #define CHV_PLL_DW6(ch) _PIPE(ch, _CHV_PLL_DW6_CH0, _CHV_PLL_DW6_CH1)
997
998 #define _CHV_CMN_DW5_CH0               0x8114
999 #define   CHV_BUFRIGHTENA1_DISABLE      (0 << 20)
1000 #define   CHV_BUFRIGHTENA1_NORMAL       (1 << 20)
1001 #define   CHV_BUFRIGHTENA1_FORCE        (3 << 20)
1002 #define   CHV_BUFRIGHTENA1_MASK         (3 << 20)
1003 #define   CHV_BUFLEFTENA1_DISABLE       (0 << 22)
1004 #define   CHV_BUFLEFTENA1_NORMAL        (1 << 22)
1005 #define   CHV_BUFLEFTENA1_FORCE         (3 << 22)
1006 #define   CHV_BUFLEFTENA1_MASK          (3 << 22)
1007
1008 #define _CHV_CMN_DW13_CH0               0x8134
1009 #define _CHV_CMN_DW0_CH1                0x8080
1010 #define   DPIO_CHV_S1_DIV_SHIFT         21
1011 #define   DPIO_CHV_P1_DIV_SHIFT         13 /* 3 bits */
1012 #define   DPIO_CHV_P2_DIV_SHIFT         8  /* 5 bits */
1013 #define   DPIO_CHV_K_DIV_SHIFT          4
1014 #define   DPIO_PLL_FREQLOCK             (1 << 1)
1015 #define   DPIO_PLL_LOCK                 (1 << 0)
1016 #define CHV_CMN_DW13(ch) _PIPE(ch, _CHV_CMN_DW13_CH0, _CHV_CMN_DW0_CH1)
1017
1018 #define _CHV_CMN_DW14_CH0               0x8138
1019 #define _CHV_CMN_DW1_CH1                0x8084
1020 #define   DPIO_AFC_RECAL                (1 << 14)
1021 #define   DPIO_DCLKP_EN                 (1 << 13)
1022 #define   CHV_BUFLEFTENA2_DISABLE       (0 << 17) /* CL2 DW1 only */
1023 #define   CHV_BUFLEFTENA2_NORMAL        (1 << 17) /* CL2 DW1 only */
1024 #define   CHV_BUFLEFTENA2_FORCE         (3 << 17) /* CL2 DW1 only */
1025 #define   CHV_BUFLEFTENA2_MASK          (3 << 17) /* CL2 DW1 only */
1026 #define   CHV_BUFRIGHTENA2_DISABLE      (0 << 19) /* CL2 DW1 only */
1027 #define   CHV_BUFRIGHTENA2_NORMAL       (1 << 19) /* CL2 DW1 only */
1028 #define   CHV_BUFRIGHTENA2_FORCE        (3 << 19) /* CL2 DW1 only */
1029 #define   CHV_BUFRIGHTENA2_MASK         (3 << 19) /* CL2 DW1 only */
1030 #define CHV_CMN_DW14(ch) _PIPE(ch, _CHV_CMN_DW14_CH0, _CHV_CMN_DW1_CH1)
1031
1032 #define _CHV_CMN_DW19_CH0               0x814c
1033 #define _CHV_CMN_DW6_CH1                0x8098
1034 #define   CHV_CMN_USEDCLKCHANNEL        (1 << 13)
1035 #define CHV_CMN_DW19(ch) _PIPE(ch, _CHV_CMN_DW19_CH0, _CHV_CMN_DW6_CH1)
1036
1037 #define CHV_CMN_DW30                    0x8178
1038 #define   DPIO_LRC_BYPASS               (1 << 3)
1039
1040 #define _TXLANE(ch, lane, offset) ((ch ? 0x2400 : 0) + \
1041                                         (lane) * 0x200 + (offset))
1042
1043 #define CHV_TX_DW0(ch, lane) _TXLANE(ch, lane, 0x80)
1044 #define CHV_TX_DW1(ch, lane) _TXLANE(ch, lane, 0x84)
1045 #define CHV_TX_DW2(ch, lane) _TXLANE(ch, lane, 0x88)
1046 #define CHV_TX_DW3(ch, lane) _TXLANE(ch, lane, 0x8c)
1047 #define CHV_TX_DW4(ch, lane) _TXLANE(ch, lane, 0x90)
1048 #define CHV_TX_DW5(ch, lane) _TXLANE(ch, lane, 0x94)
1049 #define CHV_TX_DW6(ch, lane) _TXLANE(ch, lane, 0x98)
1050 #define CHV_TX_DW7(ch, lane) _TXLANE(ch, lane, 0x9c)
1051 #define CHV_TX_DW8(ch, lane) _TXLANE(ch, lane, 0xa0)
1052 #define CHV_TX_DW9(ch, lane) _TXLANE(ch, lane, 0xa4)
1053 #define CHV_TX_DW10(ch, lane) _TXLANE(ch, lane, 0xa8)
1054 #define CHV_TX_DW11(ch, lane) _TXLANE(ch, lane, 0xac)
1055 #define   DPIO_FRC_LATENCY_SHFIT        8
1056 #define CHV_TX_DW14(ch, lane) _TXLANE(ch, lane, 0xb8)
1057 #define   DPIO_UPAR_SHIFT               30
1058 /*
1059  * Fence registers
1060  */
1061 #define FENCE_REG_830_0                 0x2000
1062 #define FENCE_REG_945_8                 0x3000
1063 #define   I830_FENCE_START_MASK         0x07f80000
1064 #define   I830_FENCE_TILING_Y_SHIFT     12
1065 #define   I830_FENCE_SIZE_BITS(size)    ((ffs((size) >> 19) - 1) << 8)
1066 #define   I830_FENCE_PITCH_SHIFT        4
1067 #define   I830_FENCE_REG_VALID          (1<<0)
1068 #define   I915_FENCE_MAX_PITCH_VAL      4
1069 #define   I830_FENCE_MAX_PITCH_VAL      6
1070 #define   I830_FENCE_MAX_SIZE_VAL       (1<<8)
1071
1072 #define   I915_FENCE_START_MASK         0x0ff00000
1073 #define   I915_FENCE_SIZE_BITS(size)    ((ffs((size) >> 20) - 1) << 8)
1074
1075 #define FENCE_REG_965_0                 0x03000
1076 #define   I965_FENCE_PITCH_SHIFT        2
1077 #define   I965_FENCE_TILING_Y_SHIFT     1
1078 #define   I965_FENCE_REG_VALID          (1<<0)
1079 #define   I965_FENCE_MAX_PITCH_VAL      0x0400
1080
1081 #define FENCE_REG_SANDYBRIDGE_0         0x100000
1082 #define   SANDYBRIDGE_FENCE_PITCH_SHIFT 32
1083 #define   GEN7_FENCE_MAX_PITCH_VAL      0x0800
1084
1085
1086 /* control register for cpu gtt access */
1087 #define TILECTL                         0x101000
1088 #define   TILECTL_SWZCTL                        (1 << 0)
1089 #define   TILECTL_TLB_PREFETCH_DIS      (1 << 2)
1090 #define   TILECTL_BACKSNOOP_DIS         (1 << 3)
1091
1092 /*
1093  * Instruction and interrupt control regs
1094  */
1095 #define PGTBL_CTL       0x02020
1096 #define   PGTBL_ADDRESS_LO_MASK 0xfffff000 /* bits [31:12] */
1097 #define   PGTBL_ADDRESS_HI_MASK 0x000000f0 /* bits [35:32] (gen4) */
1098 #define PGTBL_ER        0x02024
1099 #define PRB0_BASE (0x2030-0x30)
1100 #define PRB1_BASE (0x2040-0x30) /* 830,gen3 */
1101 #define PRB2_BASE (0x2050-0x30) /* gen3 */
1102 #define SRB0_BASE (0x2100-0x30) /* gen2 */
1103 #define SRB1_BASE (0x2110-0x30) /* gen2 */
1104 #define SRB2_BASE (0x2120-0x30) /* 830 */
1105 #define SRB3_BASE (0x2130-0x30) /* 830 */
1106 #define RENDER_RING_BASE        0x02000
1107 #define BSD_RING_BASE           0x04000
1108 #define GEN6_BSD_RING_BASE      0x12000
1109 #define GEN8_BSD2_RING_BASE     0x1c000
1110 #define VEBOX_RING_BASE         0x1a000
1111 #define BLT_RING_BASE           0x22000
1112 #define RING_TAIL(base)         ((base)+0x30)
1113 #define RING_HEAD(base)         ((base)+0x34)
1114 #define RING_START(base)        ((base)+0x38)
1115 #define RING_CTL(base)          ((base)+0x3c)
1116 #define RING_SYNC_0(base)       ((base)+0x40)
1117 #define RING_SYNC_1(base)       ((base)+0x44)
1118 #define RING_SYNC_2(base)       ((base)+0x48)
1119 #define GEN6_RVSYNC     (RING_SYNC_0(RENDER_RING_BASE))
1120 #define GEN6_RBSYNC     (RING_SYNC_1(RENDER_RING_BASE))
1121 #define GEN6_RVESYNC    (RING_SYNC_2(RENDER_RING_BASE))
1122 #define GEN6_VBSYNC     (RING_SYNC_0(GEN6_BSD_RING_BASE))
1123 #define GEN6_VRSYNC     (RING_SYNC_1(GEN6_BSD_RING_BASE))
1124 #define GEN6_VVESYNC    (RING_SYNC_2(GEN6_BSD_RING_BASE))
1125 #define GEN6_BRSYNC     (RING_SYNC_0(BLT_RING_BASE))
1126 #define GEN6_BVSYNC     (RING_SYNC_1(BLT_RING_BASE))
1127 #define GEN6_BVESYNC    (RING_SYNC_2(BLT_RING_BASE))
1128 #define GEN6_VEBSYNC    (RING_SYNC_0(VEBOX_RING_BASE))
1129 #define GEN6_VERSYNC    (RING_SYNC_1(VEBOX_RING_BASE))
1130 #define GEN6_VEVSYNC    (RING_SYNC_2(VEBOX_RING_BASE))
1131 #define GEN6_NOSYNC 0
1132 #define RING_PSMI_CTL(base)     ((base)+0x50)
1133 #define RING_MAX_IDLE(base)     ((base)+0x54)
1134 #define RING_HWS_PGA(base)      ((base)+0x80)
1135 #define RING_HWS_PGA_GEN6(base) ((base)+0x2080)
1136
1137 #define GEN7_WR_WATERMARK       0x4028
1138 #define GEN7_GFX_PRIO_CTRL      0x402C
1139 #define ARB_MODE                0x4030
1140 #define   ARB_MODE_SWIZZLE_SNB  (1<<4)
1141 #define   ARB_MODE_SWIZZLE_IVB  (1<<5)
1142 #define GEN7_GFX_PEND_TLB0      0x4034
1143 #define GEN7_GFX_PEND_TLB1      0x4038
1144 /* L3, CVS, ZTLB, RCC, CASC LRA min, max values */
1145 #define GEN7_LRA_LIMITS_BASE    0x403C
1146 #define GEN7_LRA_LIMITS_REG_NUM 13
1147 #define GEN7_MEDIA_MAX_REQ_COUNT        0x4070
1148 #define GEN7_GFX_MAX_REQ_COUNT          0x4074
1149
1150 #define GAMTARBMODE             0x04a08
1151 #define   ARB_MODE_BWGTLB_DISABLE (1<<9)
1152 #define   ARB_MODE_SWIZZLE_BDW  (1<<1)
1153 #define RENDER_HWS_PGA_GEN7     (0x04080)
1154 #define RING_FAULT_REG(ring)    (0x4094 + 0x100*(ring)->id)
1155 #define   RING_FAULT_GTTSEL_MASK (1<<11)
1156 #define   RING_FAULT_SRCID(x)   ((x >> 3) & 0xff)
1157 #define   RING_FAULT_FAULT_TYPE(x) ((x >> 1) & 0x3)
1158 #define   RING_FAULT_VALID      (1<<0)
1159 #define DONE_REG                0x40b0
1160 #define GEN8_PRIVATE_PAT        0x40e0
1161 #define BSD_HWS_PGA_GEN7        (0x04180)
1162 #define BLT_HWS_PGA_GEN7        (0x04280)
1163 #define VEBOX_HWS_PGA_GEN7      (0x04380)
1164 #define RING_ACTHD(base)        ((base)+0x74)
1165 #define RING_ACTHD_UDW(base)    ((base)+0x5c)
1166 #define RING_NOPID(base)        ((base)+0x94)
1167 #define RING_IMR(base)          ((base)+0xa8)
1168 #define RING_HWSTAM(base)       ((base)+0x98)
1169 #define RING_TIMESTAMP(base)    ((base)+0x358)
1170 #define   TAIL_ADDR             0x001FFFF8
1171 #define   HEAD_WRAP_COUNT       0xFFE00000
1172 #define   HEAD_WRAP_ONE         0x00200000
1173 #define   HEAD_ADDR             0x001FFFFC
1174 #define   RING_NR_PAGES         0x001FF000
1175 #define   RING_REPORT_MASK      0x00000006
1176 #define   RING_REPORT_64K       0x00000002
1177 #define   RING_REPORT_128K      0x00000004
1178 #define   RING_NO_REPORT        0x00000000
1179 #define   RING_VALID_MASK       0x00000001
1180 #define   RING_VALID            0x00000001
1181 #define   RING_INVALID          0x00000000
1182 #define   RING_WAIT_I8XX        (1<<0) /* gen2, PRBx_HEAD */
1183 #define   RING_WAIT             (1<<11) /* gen3+, PRBx_CTL */
1184 #define   RING_WAIT_SEMAPHORE   (1<<10) /* gen6+ */
1185
1186 #define GEN7_TLB_RD_ADDR        0x4700
1187
1188 #if 0
1189 #define PRB0_TAIL       0x02030
1190 #define PRB0_HEAD       0x02034
1191 #define PRB0_START      0x02038
1192 #define PRB0_CTL        0x0203c
1193 #define PRB1_TAIL       0x02040 /* 915+ only */
1194 #define PRB1_HEAD       0x02044 /* 915+ only */
1195 #define PRB1_START      0x02048 /* 915+ only */
1196 #define PRB1_CTL        0x0204c /* 915+ only */
1197 #endif
1198 #define IPEIR_I965      0x02064
1199 #define IPEHR_I965      0x02068
1200 #define INSTDONE_I965   0x0206c
1201 #define GEN7_INSTDONE_1         0x0206c
1202 #define GEN7_SC_INSTDONE        0x07100
1203 #define GEN7_SAMPLER_INSTDONE   0x0e160
1204 #define GEN7_ROW_INSTDONE       0x0e164
1205 #define I915_NUM_INSTDONE_REG   4
1206 #define RING_IPEIR(base)        ((base)+0x64)
1207 #define RING_IPEHR(base)        ((base)+0x68)
1208 #define RING_INSTDONE(base)     ((base)+0x6c)
1209 #define RING_INSTPS(base)       ((base)+0x70)
1210 #define RING_DMA_FADD(base)     ((base)+0x78)
1211 #define RING_DMA_FADD_UDW(base) ((base)+0x60) /* gen8+ */
1212 #define RING_INSTPM(base)       ((base)+0xc0)
1213 #define RING_MI_MODE(base)      ((base)+0x9c)
1214 #define INSTPS          0x02070 /* 965+ only */
1215 #define INSTDONE1       0x0207c /* 965+ only */
1216 #define ACTHD_I965      0x02074
1217 #define HWS_PGA         0x02080
1218 #define HWS_ADDRESS_MASK        0xfffff000
1219 #define HWS_START_ADDRESS_SHIFT 4
1220 #define PWRCTXA         0x2088 /* 965GM+ only */
1221 #define   PWRCTX_EN     (1<<0)
1222 #define IPEIR           0x02088
1223 #define IPEHR           0x0208c
1224 #define INSTDONE        0x02090
1225 #define NOPID           0x02094
1226 #define HWSTAM          0x02098
1227 #define DMA_FADD_I8XX   0x020d0
1228 #define RING_BBSTATE(base)      ((base)+0x110)
1229 #define RING_BBADDR(base)       ((base)+0x140)
1230 #define RING_BBADDR_UDW(base)   ((base)+0x168) /* gen8+ */
1231
1232 #define ERROR_GEN6      0x040a0
1233 #define GEN7_ERR_INT    0x44040
1234 #define   ERR_INT_POISON                (1<<31)
1235 #define   ERR_INT_MMIO_UNCLAIMED        (1<<13)
1236 #define   ERR_INT_PIPE_CRC_DONE_C       (1<<8)
1237 #define   ERR_INT_FIFO_UNDERRUN_C       (1<<6)
1238 #define   ERR_INT_PIPE_CRC_DONE_B       (1<<5)
1239 #define   ERR_INT_FIFO_UNDERRUN_B       (1<<3)
1240 #define   ERR_INT_PIPE_CRC_DONE_A       (1<<2)
1241 #define   ERR_INT_PIPE_CRC_DONE(pipe)   (1<<(2 + pipe*3))
1242 #define   ERR_INT_FIFO_UNDERRUN_A       (1<<0)
1243 #define   ERR_INT_FIFO_UNDERRUN(pipe)   (1<<(pipe*3))
1244
1245 #define FPGA_DBG                0x42300
1246 #define   FPGA_DBG_RM_NOCLAIM   (1<<31)
1247
1248 #define DERRMR          0x44050
1249 /* Note that HBLANK events are reserved on bdw+ */
1250 #define   DERRMR_PIPEA_SCANLINE         (1<<0)
1251 #define   DERRMR_PIPEA_PRI_FLIP_DONE    (1<<1)
1252 #define   DERRMR_PIPEA_SPR_FLIP_DONE    (1<<2)
1253 #define   DERRMR_PIPEA_VBLANK           (1<<3)
1254 #define   DERRMR_PIPEA_HBLANK           (1<<5)
1255 #define   DERRMR_PIPEB_SCANLINE         (1<<8)
1256 #define   DERRMR_PIPEB_PRI_FLIP_DONE    (1<<9)
1257 #define   DERRMR_PIPEB_SPR_FLIP_DONE    (1<<10)
1258 #define   DERRMR_PIPEB_VBLANK           (1<<11)
1259 #define   DERRMR_PIPEB_HBLANK           (1<<13)
1260 /* Note that PIPEC is not a simple translation of PIPEA/PIPEB */
1261 #define   DERRMR_PIPEC_SCANLINE         (1<<14)
1262 #define   DERRMR_PIPEC_PRI_FLIP_DONE    (1<<15)
1263 #define   DERRMR_PIPEC_SPR_FLIP_DONE    (1<<20)
1264 #define   DERRMR_PIPEC_VBLANK           (1<<21)
1265 #define   DERRMR_PIPEC_HBLANK           (1<<22)
1266
1267
1268 /* GM45+ chicken bits -- debug workaround bits that may be required
1269  * for various sorts of correct behavior.  The top 16 bits of each are
1270  * the enables for writing to the corresponding low bit.
1271  */
1272 #define _3D_CHICKEN     0x02084
1273 #define  _3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB      (1 << 10)
1274 #define _3D_CHICKEN2    0x0208c
1275 /* Disables pipelining of read flushes past the SF-WIZ interface.
1276  * Required on all Ironlake steppings according to the B-Spec, but the
1277  * particular danger of not doing so is not specified.
1278  */
1279 # define _3D_CHICKEN2_WM_READ_PIPELINED                 (1 << 14)
1280 #define _3D_CHICKEN3    0x02090
1281 #define  _3D_CHICKEN_SF_DISABLE_OBJEND_CULL             (1 << 10)
1282 #define  _3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL          (1 << 5)
1283 #define  _3D_CHICKEN_SDE_LIMIT_FIFO_POLY_DEPTH(x)       ((x)<<1) /* gen8+ */
1284 #define  _3D_CHICKEN3_SF_DISABLE_PIPELINED_ATTR_FETCH   (1 << 1) /* gen6 */
1285
1286 #define MI_MODE         0x0209c
1287 # define VS_TIMER_DISPATCH                              (1 << 6)
1288 # define MI_FLUSH_ENABLE                                (1 << 12)
1289 # define ASYNC_FLIP_PERF_DISABLE                        (1 << 14)
1290 # define MODE_IDLE                                      (1 << 9)
1291 # define STOP_RING                                      (1 << 8)
1292
1293 #define GEN6_GT_MODE    0x20d0
1294 #define GEN7_GT_MODE    0x7008
1295 #define   GEN6_WIZ_HASHING(hi, lo)                      (((hi) << 9) | ((lo) << 7))
1296 #define   GEN6_WIZ_HASHING_8x8                          GEN6_WIZ_HASHING(0, 0)
1297 #define   GEN6_WIZ_HASHING_8x4                          GEN6_WIZ_HASHING(0, 1)
1298 #define   GEN6_WIZ_HASHING_16x4                         GEN6_WIZ_HASHING(1, 0)
1299 #define   GEN6_WIZ_HASHING_MASK                         GEN6_WIZ_HASHING(1, 1)
1300 #define   GEN6_TD_FOUR_ROW_DISPATCH_DISABLE             (1 << 5)
1301
1302 #define GFX_MODE        0x02520
1303 #define GFX_MODE_GEN7   0x0229c
1304 #define RING_MODE_GEN7(ring)    ((ring)->mmio_base+0x29c)
1305 #define   GFX_RUN_LIST_ENABLE           (1<<15)
1306 #define   GFX_TLB_INVALIDATE_EXPLICIT   (1<<13)
1307 #define   GFX_SURFACE_FAULT_ENABLE      (1<<12)
1308 #define   GFX_REPLAY_MODE               (1<<11)
1309 #define   GFX_PSMI_GRANULARITY          (1<<10)
1310 #define   GFX_PPGTT_ENABLE              (1<<9)
1311
1312 #define VLV_DISPLAY_BASE 0x180000
1313 #define VLV_MIPI_BASE VLV_DISPLAY_BASE
1314
1315 #define VLV_GU_CTL0     (VLV_DISPLAY_BASE + 0x2030)
1316 #define VLV_GU_CTL1     (VLV_DISPLAY_BASE + 0x2034)
1317 #define SCPD0           0x0209c /* 915+ only */
1318 #define IER             0x020a0
1319 #define IIR             0x020a4
1320 #define IMR             0x020a8
1321 #define ISR             0x020ac
1322 #define VLV_GUNIT_CLOCK_GATE    (VLV_DISPLAY_BASE + 0x2060)
1323 #define   GINT_DIS              (1<<22)
1324 #define   GCFG_DIS              (1<<8)
1325 #define VLV_GUNIT_CLOCK_GATE2   (VLV_DISPLAY_BASE + 0x2064)
1326 #define VLV_IIR_RW      (VLV_DISPLAY_BASE + 0x2084)
1327 #define VLV_IER         (VLV_DISPLAY_BASE + 0x20a0)
1328 #define VLV_IIR         (VLV_DISPLAY_BASE + 0x20a4)
1329 #define VLV_IMR         (VLV_DISPLAY_BASE + 0x20a8)
1330 #define VLV_ISR         (VLV_DISPLAY_BASE + 0x20ac)
1331 #define VLV_PCBR        (VLV_DISPLAY_BASE + 0x2120)
1332 #define VLV_PCBR_ADDR_SHIFT     12
1333
1334 #define   DISPLAY_PLANE_FLIP_PENDING(plane) (1<<(11-(plane))) /* A and B only */
1335 #define EIR             0x020b0
1336 #define EMR             0x020b4
1337 #define ESR             0x020b8
1338 #define   GM45_ERROR_PAGE_TABLE                         (1<<5)
1339 #define   GM45_ERROR_MEM_PRIV                           (1<<4)
1340 #define   I915_ERROR_PAGE_TABLE                         (1<<4)
1341 #define   GM45_ERROR_CP_PRIV                            (1<<3)
1342 #define   I915_ERROR_MEMORY_REFRESH                     (1<<1)
1343 #define   I915_ERROR_INSTRUCTION                        (1<<0)
1344 #define INSTPM          0x020c0
1345 #define   INSTPM_SELF_EN (1<<12) /* 915GM only */
1346 #define   INSTPM_AGPBUSY_INT_EN (1<<11) /* gen3: when disabled, pending interrupts
1347                                         will not assert AGPBUSY# and will only
1348                                         be delivered when out of C3. */
1349 #define   INSTPM_FORCE_ORDERING                         (1<<7) /* GEN6+ */
1350 #define   INSTPM_TLB_INVALIDATE (1<<9)
1351 #define   INSTPM_SYNC_FLUSH     (1<<5)
1352 #define ACTHD           0x020c8
1353 #define MEM_MODE        0x020cc
1354 #define   MEM_DISPLAY_B_TRICKLE_FEED_DISABLE (1<<3) /* 830 only */
1355 #define   MEM_DISPLAY_A_TRICKLE_FEED_DISABLE (1<<2) /* 830/845 only */
1356 #define   MEM_DISPLAY_TRICKLE_FEED_DISABLE (1<<2) /* 85x only */
1357 #define FW_BLC          0x020d8
1358 #define FW_BLC2         0x020dc
1359 #define FW_BLC_SELF     0x020e0 /* 915+ only */
1360 #define   FW_BLC_SELF_EN_MASK      (1<<31)
1361 #define   FW_BLC_SELF_FIFO_MASK    (1<<16) /* 945 only */
1362 #define   FW_BLC_SELF_EN           (1<<15) /* 945 only */
1363 #define MM_BURST_LENGTH     0x00700000
1364 #define MM_FIFO_WATERMARK   0x0001F000
1365 #define LM_BURST_LENGTH     0x00000700
1366 #define LM_FIFO_WATERMARK   0x0000001F
1367 #define MI_ARB_STATE    0x020e4 /* 915+ only */
1368
1369 /* Make render/texture TLB fetches lower priorty than associated data
1370  *   fetches. This is not turned on by default
1371  */
1372 #define   MI_ARB_RENDER_TLB_LOW_PRIORITY        (1 << 15)
1373
1374 /* Isoch request wait on GTT enable (Display A/B/C streams).
1375  * Make isoch requests stall on the TLB update. May cause
1376  * display underruns (test mode only)
1377  */
1378 #define   MI_ARB_ISOCH_WAIT_GTT                 (1 << 14)
1379
1380 /* Block grant count for isoch requests when block count is
1381  * set to a finite value.
1382  */
1383 #define   MI_ARB_BLOCK_GRANT_MASK               (3 << 12)
1384 #define   MI_ARB_BLOCK_GRANT_8                  (0 << 12)       /* for 3 display planes */
1385 #define   MI_ARB_BLOCK_GRANT_4                  (1 << 12)       /* for 2 display planes */
1386 #define   MI_ARB_BLOCK_GRANT_2                  (2 << 12)       /* for 1 display plane */
1387 #define   MI_ARB_BLOCK_GRANT_0                  (3 << 12)       /* don't use */
1388
1389 /* Enable render writes to complete in C2/C3/C4 power states.
1390  * If this isn't enabled, render writes are prevented in low
1391  * power states. That seems bad to me.
1392  */
1393 #define   MI_ARB_C3_LP_WRITE_ENABLE             (1 << 11)
1394
1395 /* This acknowledges an async flip immediately instead
1396  * of waiting for 2TLB fetches.
1397  */
1398 #define   MI_ARB_ASYNC_FLIP_ACK_IMMEDIATE       (1 << 10)
1399
1400 /* Enables non-sequential data reads through arbiter
1401  */
1402 #define   MI_ARB_DUAL_DATA_PHASE_DISABLE        (1 << 9)
1403
1404 /* Disable FSB snooping of cacheable write cycles from binner/render
1405  * command stream
1406  */
1407 #define   MI_ARB_CACHE_SNOOP_DISABLE            (1 << 8)
1408
1409 /* Arbiter time slice for non-isoch streams */
1410 #define   MI_ARB_TIME_SLICE_MASK                (7 << 5)
1411 #define   MI_ARB_TIME_SLICE_1                   (0 << 5)
1412 #define   MI_ARB_TIME_SLICE_2                   (1 << 5)
1413 #define   MI_ARB_TIME_SLICE_4                   (2 << 5)
1414 #define   MI_ARB_TIME_SLICE_6                   (3 << 5)
1415 #define   MI_ARB_TIME_SLICE_8                   (4 << 5)
1416 #define   MI_ARB_TIME_SLICE_10                  (5 << 5)
1417 #define   MI_ARB_TIME_SLICE_14                  (6 << 5)
1418 #define   MI_ARB_TIME_SLICE_16                  (7 << 5)
1419
1420 /* Low priority grace period page size */
1421 #define   MI_ARB_LOW_PRIORITY_GRACE_4KB         (0 << 4)        /* default */
1422 #define   MI_ARB_LOW_PRIORITY_GRACE_8KB         (1 << 4)
1423
1424 /* Disable display A/B trickle feed */
1425 #define   MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE   (1 << 2)
1426
1427 /* Set display plane priority */
1428 #define   MI_ARB_DISPLAY_PRIORITY_A_B           (0 << 0)        /* display A > display B */
1429 #define   MI_ARB_DISPLAY_PRIORITY_B_A           (1 << 0)        /* display B > display A */
1430
1431 #define MI_STATE        0x020e4 /* gen2 only */
1432 #define   MI_AGPBUSY_INT_EN                     (1 << 1) /* 85x only */
1433 #define   MI_AGPBUSY_830_MODE                   (1 << 0) /* 85x only */
1434
1435 #define CACHE_MODE_0    0x02120 /* 915+ only */
1436 #define   CM0_PIPELINED_RENDER_FLUSH_DISABLE (1<<8)
1437 #define   CM0_IZ_OPT_DISABLE      (1<<6)
1438 #define   CM0_ZR_OPT_DISABLE      (1<<5)
1439 #define   CM0_STC_EVICT_DISABLE_LRA_SNB (1<<5)
1440 #define   CM0_DEPTH_EVICT_DISABLE (1<<4)
1441 #define   CM0_COLOR_EVICT_DISABLE (1<<3)
1442 #define   CM0_DEPTH_WRITE_DISABLE (1<<1)
1443 #define   CM0_RC_OP_FLUSH_DISABLE (1<<0)
1444 #define GFX_FLSH_CNTL   0x02170 /* 915+ only */
1445 #define GFX_FLSH_CNTL_GEN6      0x101008
1446 #define   GFX_FLSH_CNTL_EN      (1<<0)
1447 #define ECOSKPD         0x021d0
1448 #define   ECO_GATING_CX_ONLY    (1<<3)
1449 #define   ECO_FLIP_DONE         (1<<0)
1450
1451 #define CACHE_MODE_0_GEN7       0x7000 /* IVB+ */
1452 #define RC_OP_FLUSH_ENABLE (1<<0)
1453 #define   HIZ_RAW_STALL_OPT_DISABLE (1<<2)
1454 #define CACHE_MODE_1            0x7004 /* IVB+ */
1455 #define   PIXEL_SUBSPAN_COLLECT_OPT_DISABLE     (1<<6)
1456 #define   GEN8_4x4_STC_OPTIMIZATION_DISABLE     (1<<6)
1457
1458 #define GEN6_BLITTER_ECOSKPD    0x221d0
1459 #define   GEN6_BLITTER_LOCK_SHIFT                       16
1460 #define   GEN6_BLITTER_FBC_NOTIFY                       (1<<3)
1461
1462 #define GEN6_RC_SLEEP_PSMI_CONTROL      0x2050
1463 #define   GEN6_PSMI_SLEEP_MSG_DISABLE   (1 << 0)
1464 #define   GEN8_RC_SEMA_IDLE_MSG_DISABLE (1 << 12)
1465 #define   GEN8_FF_DOP_CLOCK_GATE_DISABLE        (1<<10)
1466
1467 #define GEN6_BSD_SLEEP_PSMI_CONTROL     0x12050
1468 #define   GEN6_BSD_SLEEP_MSG_DISABLE    (1 << 0)
1469 #define   GEN6_BSD_SLEEP_FLUSH_DISABLE  (1 << 2)
1470 #define   GEN6_BSD_SLEEP_INDICATOR      (1 << 3)
1471 #define   GEN6_BSD_GO_INDICATOR         (1 << 4)
1472
1473 /* On modern GEN architectures interrupt control consists of two sets
1474  * of registers. The first set pertains to the ring generating the
1475  * interrupt. The second control is for the functional block generating the
1476  * interrupt. These are PM, GT, DE, etc.
1477  *
1478  * Luckily *knocks on wood* all the ring interrupt bits match up with the
1479  * GT interrupt bits, so we don't need to duplicate the defines.
1480  *
1481  * These defines should cover us well from SNB->HSW with minor exceptions
1482  * it can also work on ILK.
1483  */
1484 #define GT_BLT_FLUSHDW_NOTIFY_INTERRUPT         (1 << 26)
1485 #define GT_BLT_CS_ERROR_INTERRUPT               (1 << 25)
1486 #define GT_BLT_USER_INTERRUPT                   (1 << 22)
1487 #define GT_BSD_CS_ERROR_INTERRUPT               (1 << 15)
1488 #define GT_BSD_USER_INTERRUPT                   (1 << 12)
1489 #define GT_RENDER_L3_PARITY_ERROR_INTERRUPT_S1  (1 << 11) /* hsw+; rsvd on snb, ivb, vlv */
1490 #define GT_CONTEXT_SWITCH_INTERRUPT             (1 <<  8)
1491 #define GT_RENDER_L3_PARITY_ERROR_INTERRUPT     (1 <<  5) /* !snb */
1492 #define GT_RENDER_PIPECTL_NOTIFY_INTERRUPT      (1 <<  4)
1493 #define GT_RENDER_CS_MASTER_ERROR_INTERRUPT     (1 <<  3)
1494 #define GT_RENDER_SYNC_STATUS_INTERRUPT         (1 <<  2)
1495 #define GT_RENDER_DEBUG_INTERRUPT               (1 <<  1)
1496 #define GT_RENDER_USER_INTERRUPT                (1 <<  0)
1497
1498 #define PM_VEBOX_CS_ERROR_INTERRUPT             (1 << 12) /* hsw+ */
1499 #define PM_VEBOX_USER_INTERRUPT                 (1 << 10) /* hsw+ */
1500
1501 #define GT_PARITY_ERROR(dev) \
1502         (GT_RENDER_L3_PARITY_ERROR_INTERRUPT | \
1503          (IS_HASWELL(dev) ? GT_RENDER_L3_PARITY_ERROR_INTERRUPT_S1 : 0))
1504
1505 /* These are all the "old" interrupts */
1506 #define ILK_BSD_USER_INTERRUPT                          (1<<5)
1507
1508 #define I915_PM_INTERRUPT                               (1<<31)
1509 #define I915_ISP_INTERRUPT                              (1<<22)
1510 #define I915_LPE_PIPE_B_INTERRUPT                       (1<<21)
1511 #define I915_LPE_PIPE_A_INTERRUPT                       (1<<20)
1512 #define I915_MIPIB_INTERRUPT                            (1<<19)
1513 #define I915_MIPIA_INTERRUPT                            (1<<18)
1514 #define I915_PIPE_CONTROL_NOTIFY_INTERRUPT              (1<<18)
1515 #define I915_DISPLAY_PORT_INTERRUPT                     (1<<17)
1516 #define I915_DISPLAY_PIPE_C_HBLANK_INTERRUPT            (1<<16)
1517 #define I915_MASTER_ERROR_INTERRUPT                     (1<<15)
1518 #define I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT      (1<<15)
1519 #define I915_DISPLAY_PIPE_B_HBLANK_INTERRUPT            (1<<14)
1520 #define I915_GMCH_THERMAL_SENSOR_EVENT_INTERRUPT        (1<<14) /* p-state */
1521 #define I915_DISPLAY_PIPE_A_HBLANK_INTERRUPT            (1<<13)
1522 #define I915_HWB_OOM_INTERRUPT                          (1<<13)
1523 #define I915_LPE_PIPE_C_INTERRUPT                       (1<<12)
1524 #define I915_SYNC_STATUS_INTERRUPT                      (1<<12)
1525 #define I915_MISC_INTERRUPT                             (1<<11)
1526 #define I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT     (1<<11)
1527 #define I915_DISPLAY_PIPE_C_VBLANK_INTERRUPT            (1<<10)
1528 #define I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT     (1<<10)
1529 #define I915_DISPLAY_PIPE_C_EVENT_INTERRUPT             (1<<9)
1530 #define I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT       (1<<9)
1531 #define I915_DISPLAY_PIPE_C_DPBM_INTERRUPT              (1<<8)
1532 #define I915_DISPLAY_PLANE_C_FLIP_PENDING_INTERRUPT     (1<<8)
1533 #define I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT            (1<<7)
1534 #define I915_DISPLAY_PIPE_A_EVENT_INTERRUPT             (1<<6)
1535 #define I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT            (1<<5)
1536 #define I915_DISPLAY_PIPE_B_EVENT_INTERRUPT             (1<<4)
1537 #define I915_DISPLAY_PIPE_A_DPBM_INTERRUPT              (1<<3)
1538 #define I915_DISPLAY_PIPE_B_DPBM_INTERRUPT              (1<<2)
1539 #define I915_DEBUG_INTERRUPT                            (1<<2)
1540 #define I915_WINVALID_INTERRUPT                         (1<<1)
1541 #define I915_USER_INTERRUPT                             (1<<1)
1542 #define I915_ASLE_INTERRUPT                             (1<<0)
1543 #define I915_BSD_USER_INTERRUPT                         (1<<25)
1544
1545 #define GEN6_BSD_RNCID                  0x12198
1546
1547 #define GEN7_FF_THREAD_MODE             0x20a0
1548 #define   GEN7_FF_SCHED_MASK            0x0077070
1549 #define   GEN8_FF_DS_REF_CNT_FFME       (1 << 19)
1550 #define   GEN7_FF_TS_SCHED_HS1          (0x5<<16)
1551 #define   GEN7_FF_TS_SCHED_HS0          (0x3<<16)
1552 #define   GEN7_FF_TS_SCHED_LOAD_BALANCE (0x1<<16)
1553 #define   GEN7_FF_TS_SCHED_HW           (0x0<<16) /* Default */
1554 #define   GEN7_FF_VS_REF_CNT_FFME       (1 << 15)
1555 #define   GEN7_FF_VS_SCHED_HS1          (0x5<<12)
1556 #define   GEN7_FF_VS_SCHED_HS0          (0x3<<12)
1557 #define   GEN7_FF_VS_SCHED_LOAD_BALANCE (0x1<<12) /* Default */
1558 #define   GEN7_FF_VS_SCHED_HW           (0x0<<12)
1559 #define   GEN7_FF_DS_SCHED_HS1          (0x5<<4)
1560 #define   GEN7_FF_DS_SCHED_HS0          (0x3<<4)
1561 #define   GEN7_FF_DS_SCHED_LOAD_BALANCE (0x1<<4)  /* Default */
1562 #define   GEN7_FF_DS_SCHED_HW           (0x0<<4)
1563
1564 /*
1565  * Framebuffer compression (915+ only)
1566  */
1567
1568 #define FBC_CFB_BASE            0x03200 /* 4k page aligned */
1569 #define FBC_LL_BASE             0x03204 /* 4k page aligned */
1570 #define FBC_CONTROL             0x03208
1571 #define   FBC_CTL_EN            (1<<31)
1572 #define   FBC_CTL_PERIODIC      (1<<30)
1573 #define   FBC_CTL_INTERVAL_SHIFT (16)
1574 #define   FBC_CTL_UNCOMPRESSIBLE (1<<14)
1575 #define   FBC_CTL_C3_IDLE       (1<<13)
1576 #define   FBC_CTL_STRIDE_SHIFT  (5)
1577 #define   FBC_CTL_FENCENO_SHIFT (0)
1578 #define FBC_COMMAND             0x0320c
1579 #define   FBC_CMD_COMPRESS      (1<<0)
1580 #define FBC_STATUS              0x03210
1581 #define   FBC_STAT_COMPRESSING  (1<<31)
1582 #define   FBC_STAT_COMPRESSED   (1<<30)
1583 #define   FBC_STAT_MODIFIED     (1<<29)
1584 #define   FBC_STAT_CURRENT_LINE_SHIFT   (0)
1585 #define FBC_CONTROL2            0x03214
1586 #define   FBC_CTL_FENCE_DBL     (0<<4)
1587 #define   FBC_CTL_IDLE_IMM      (0<<2)
1588 #define   FBC_CTL_IDLE_FULL     (1<<2)
1589 #define   FBC_CTL_IDLE_LINE     (2<<2)
1590 #define   FBC_CTL_IDLE_DEBUG    (3<<2)
1591 #define   FBC_CTL_CPU_FENCE     (1<<1)
1592 #define   FBC_CTL_PLANE(plane)  ((plane)<<0)
1593 #define FBC_FENCE_OFF           0x03218 /* BSpec typo has 321Bh */
1594 #define FBC_TAG                 0x03300
1595
1596 #define FBC_LL_SIZE             (1536)
1597
1598 /* Framebuffer compression for GM45+ */
1599 #define DPFC_CB_BASE            0x3200
1600 #define DPFC_CONTROL            0x3208
1601 #define   DPFC_CTL_EN           (1<<31)
1602 #define   DPFC_CTL_PLANE(plane) ((plane)<<30)
1603 #define   IVB_DPFC_CTL_PLANE(plane)     ((plane)<<29)
1604 #define   DPFC_CTL_FENCE_EN     (1<<29)
1605 #define   IVB_DPFC_CTL_FENCE_EN (1<<28)
1606 #define   DPFC_CTL_PERSISTENT_MODE      (1<<25)
1607 #define   DPFC_SR_EN            (1<<10)
1608 #define   DPFC_CTL_LIMIT_1X     (0<<6)
1609 #define   DPFC_CTL_LIMIT_2X     (1<<6)
1610 #define   DPFC_CTL_LIMIT_4X     (2<<6)
1611 #define DPFC_RECOMP_CTL         0x320c
1612 #define   DPFC_RECOMP_STALL_EN  (1<<27)
1613 #define   DPFC_RECOMP_STALL_WM_SHIFT (16)
1614 #define   DPFC_RECOMP_STALL_WM_MASK (0x07ff0000)
1615 #define   DPFC_RECOMP_TIMER_COUNT_SHIFT (0)
1616 #define   DPFC_RECOMP_TIMER_COUNT_MASK (0x0000003f)
1617 #define DPFC_STATUS             0x3210
1618 #define   DPFC_INVAL_SEG_SHIFT  (16)
1619 #define   DPFC_INVAL_SEG_MASK   (0x07ff0000)
1620 #define   DPFC_COMP_SEG_SHIFT   (0)
1621 #define   DPFC_COMP_SEG_MASK    (0x000003ff)
1622 #define DPFC_STATUS2            0x3214
1623 #define DPFC_FENCE_YOFF         0x3218
1624 #define DPFC_CHICKEN            0x3224
1625 #define   DPFC_HT_MODIFY        (1<<31)
1626
1627 /* Framebuffer compression for Ironlake */
1628 #define ILK_DPFC_CB_BASE        0x43200
1629 #define ILK_DPFC_CONTROL        0x43208
1630 #define   FBC_CTL_FALSE_COLOR   (1<<10)
1631 /* The bit 28-8 is reserved */
1632 #define   DPFC_RESERVED         (0x1FFFFF00)
1633 #define ILK_DPFC_RECOMP_CTL     0x4320c
1634 #define ILK_DPFC_STATUS         0x43210
1635 #define ILK_DPFC_FENCE_YOFF     0x43218
1636 #define ILK_DPFC_CHICKEN        0x43224
1637 #define ILK_FBC_RT_BASE         0x2128
1638 #define   ILK_FBC_RT_VALID      (1<<0)
1639 #define   SNB_FBC_FRONT_BUFFER  (1<<1)
1640
1641 #define ILK_DISPLAY_CHICKEN1    0x42000
1642 #define   ILK_FBCQ_DIS          (1<<22)
1643 #define   ILK_PABSTRETCH_DIS    (1<<21)
1644
1645
1646 /*
1647  * Framebuffer compression for Sandybridge
1648  *
1649  * The following two registers are of type GTTMMADR
1650  */
1651 #define SNB_DPFC_CTL_SA         0x100100
1652 #define   SNB_CPU_FENCE_ENABLE  (1<<29)
1653 #define DPFC_CPU_FENCE_OFFSET   0x100104
1654
1655 /* Framebuffer compression for Ivybridge */
1656 #define IVB_FBC_RT_BASE                 0x7020
1657
1658 #define IPS_CTL         0x43408
1659 #define   IPS_ENABLE    (1 << 31)
1660
1661 #define MSG_FBC_REND_STATE      0x50380
1662 #define   FBC_REND_NUKE         (1<<2)
1663 #define   FBC_REND_CACHE_CLEAN  (1<<1)
1664
1665 /*
1666  * GPIO regs
1667  */
1668 #define GPIOA                   0x5010
1669 #define GPIOB                   0x5014
1670 #define GPIOC                   0x5018
1671 #define GPIOD                   0x501c
1672 #define GPIOE                   0x5020
1673 #define GPIOF                   0x5024
1674 #define GPIOG                   0x5028
1675 #define GPIOH                   0x502c
1676 # define GPIO_CLOCK_DIR_MASK            (1 << 0)
1677 # define GPIO_CLOCK_DIR_IN              (0 << 1)
1678 # define GPIO_CLOCK_DIR_OUT             (1 << 1)
1679 # define GPIO_CLOCK_VAL_MASK            (1 << 2)
1680 # define GPIO_CLOCK_VAL_OUT             (1 << 3)
1681 # define GPIO_CLOCK_VAL_IN              (1 << 4)
1682 # define GPIO_CLOCK_PULLUP_DISABLE      (1 << 5)
1683 # define GPIO_DATA_DIR_MASK             (1 << 8)
1684 # define GPIO_DATA_DIR_IN               (0 << 9)
1685 # define GPIO_DATA_DIR_OUT              (1 << 9)
1686 # define GPIO_DATA_VAL_MASK             (1 << 10)
1687 # define GPIO_DATA_VAL_OUT              (1 << 11)
1688 # define GPIO_DATA_VAL_IN               (1 << 12)
1689 # define GPIO_DATA_PULLUP_DISABLE       (1 << 13)
1690
1691 #define GMBUS0                  0x5100 /* clock/port select */
1692 #define   GMBUS_RATE_100KHZ     (0<<8)
1693 #define   GMBUS_RATE_50KHZ      (1<<8)
1694 #define   GMBUS_RATE_400KHZ     (2<<8) /* reserved on Pineview */
1695 #define   GMBUS_RATE_1MHZ       (3<<8) /* reserved on Pineview */
1696 #define   GMBUS_HOLD_EXT        (1<<7) /* 300ns hold time, rsvd on Pineview */
1697 #define   GMBUS_PORT_DISABLED   0
1698 #define   GMBUS_PORT_SSC        1
1699 #define   GMBUS_PORT_VGADDC     2
1700 #define   GMBUS_PORT_PANEL      3
1701 #define   GMBUS_PORT_DPD_CHV    3 /* HDMID_CHV */
1702 #define   GMBUS_PORT_DPC        4 /* HDMIC */
1703 #define   GMBUS_PORT_DPB        5 /* SDVO, HDMIB */
1704 #define   GMBUS_PORT_DPD        6 /* HDMID */
1705 #define   GMBUS_PORT_RESERVED   7 /* 7 reserved */
1706 #define   GMBUS_NUM_PORTS       (GMBUS_PORT_DPD - GMBUS_PORT_SSC + 1)
1707 #define GMBUS1                  0x5104 /* command/status */
1708 #define   GMBUS_SW_CLR_INT      (1<<31)
1709 #define   GMBUS_SW_RDY          (1<<30)
1710 #define   GMBUS_ENT             (1<<29) /* enable timeout */
1711 #define   GMBUS_CYCLE_NONE      (0<<25)
1712 #define   GMBUS_CYCLE_WAIT      (1<<25)
1713 #define   GMBUS_CYCLE_INDEX     (2<<25)
1714 #define   GMBUS_CYCLE_STOP      (4<<25)
1715 #define   GMBUS_BYTE_COUNT_SHIFT 16
1716 #define   GMBUS_SLAVE_INDEX_SHIFT 8
1717 #define   GMBUS_SLAVE_ADDR_SHIFT 1
1718 #define   GMBUS_SLAVE_READ      (1<<0)
1719 #define   GMBUS_SLAVE_WRITE     (0<<0)
1720 #define GMBUS2                  0x5108 /* status */
1721 #define   GMBUS_INUSE           (1<<15)
1722 #define   GMBUS_HW_WAIT_PHASE   (1<<14)
1723 #define   GMBUS_STALL_TIMEOUT   (1<<13)
1724 #define   GMBUS_INT             (1<<12)
1725 #define   GMBUS_HW_RDY          (1<<11)
1726 #define   GMBUS_SATOER          (1<<10)
1727 #define   GMBUS_ACTIVE          (1<<9)
1728 #define GMBUS3                  0x510c /* data buffer bytes 3-0 */
1729 #define GMBUS4                  0x5110 /* interrupt mask (Pineview+) */
1730 #define   GMBUS_SLAVE_TIMEOUT_EN (1<<4)
1731 #define   GMBUS_NAK_EN          (1<<3)
1732 #define   GMBUS_IDLE_EN         (1<<2)
1733 #define   GMBUS_HW_WAIT_EN      (1<<1)
1734 #define   GMBUS_HW_RDY_EN       (1<<0)
1735 #define GMBUS5                  0x5120 /* byte index */
1736 #define   GMBUS_2BYTE_INDEX_EN  (1<<31)
1737
1738 /*
1739  * Clock control & power management
1740  */
1741 #define _DPLL_A (dev_priv->info.display_mmio_offset + 0x6014)
1742 #define _DPLL_B (dev_priv->info.display_mmio_offset + 0x6018)
1743 #define _CHV_DPLL_C (dev_priv->info.display_mmio_offset + 0x6030)
1744 #define DPLL(pipe) _PIPE3((pipe), _DPLL_A, _DPLL_B, _CHV_DPLL_C)
1745
1746 #define VGA0    0x6000
1747 #define VGA1    0x6004
1748 #define VGA_PD  0x6010
1749 #define   VGA0_PD_P2_DIV_4      (1 << 7)
1750 #define   VGA0_PD_P1_DIV_2      (1 << 5)
1751 #define   VGA0_PD_P1_SHIFT      0
1752 #define   VGA0_PD_P1_MASK       (0x1f << 0)
1753 #define   VGA1_PD_P2_DIV_4      (1 << 15)
1754 #define   VGA1_PD_P1_DIV_2      (1 << 13)
1755 #define   VGA1_PD_P1_SHIFT      8
1756 #define   VGA1_PD_P1_MASK       (0x1f << 8)
1757 #define   DPLL_VCO_ENABLE               (1 << 31)
1758 #define   DPLL_SDVO_HIGH_SPEED          (1 << 30)
1759 #define   DPLL_DVO_2X_MODE              (1 << 30)
1760 #define   DPLL_EXT_BUFFER_ENABLE_VLV    (1 << 30)
1761 #define   DPLL_SYNCLOCK_ENABLE          (1 << 29)
1762 #define   DPLL_REFA_CLK_ENABLE_VLV      (1 << 29)
1763 #define   DPLL_VGA_MODE_DIS             (1 << 28)
1764 #define   DPLLB_MODE_DAC_SERIAL         (1 << 26) /* i915 */
1765 #define   DPLLB_MODE_LVDS               (2 << 26) /* i915 */
1766 #define   DPLL_MODE_MASK                (3 << 26)
1767 #define   DPLL_DAC_SERIAL_P2_CLOCK_DIV_10 (0 << 24) /* i915 */
1768 #define   DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 (1 << 24) /* i915 */
1769 #define   DPLLB_LVDS_P2_CLOCK_DIV_14    (0 << 24) /* i915 */
1770 #define   DPLLB_LVDS_P2_CLOCK_DIV_7     (1 << 24) /* i915 */
1771 #define   DPLL_P2_CLOCK_DIV_MASK        0x03000000 /* i915 */
1772 #define   DPLL_FPA01_P1_POST_DIV_MASK   0x00ff0000 /* i915 */
1773 #define   DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW  0x00ff8000 /* Pineview */
1774 #define   DPLL_LOCK_VLV                 (1<<15)
1775 #define   DPLL_INTEGRATED_CRI_CLK_VLV   (1<<14)
1776 #define   DPLL_INTEGRATED_CLOCK_VLV     (1<<13)
1777 #define   DPLL_SSC_REF_CLOCK_CHV        (1<<13)
1778 #define   DPLL_PORTC_READY_MASK         (0xf << 4)
1779 #define   DPLL_PORTB_READY_MASK         (0xf)
1780
1781 #define   DPLL_FPA01_P1_POST_DIV_MASK_I830      0x001f0000
1782
1783 /* Additional CHV pll/phy registers */
1784 #define DPIO_PHY_STATUS                 (VLV_DISPLAY_BASE + 0x6240)
1785 #define   DPLL_PORTD_READY_MASK         (0xf)
1786 #define DISPLAY_PHY_CONTROL (VLV_DISPLAY_BASE + 0x60100)
1787 #define   PHY_COM_LANE_RESET_DEASSERT(phy) (1 << (phy))
1788 #define DISPLAY_PHY_STATUS (VLV_DISPLAY_BASE + 0x60104)
1789 #define   PHY_POWERGOOD(phy)    (((phy) == DPIO_PHY0) ? (1<<31) : (1<<30))
1790
1791 /*
1792  * The i830 generation, in LVDS mode, defines P1 as the bit number set within
1793  * this field (only one bit may be set).
1794  */
1795 #define   DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000
1796 #define   DPLL_FPA01_P1_POST_DIV_SHIFT  16
1797 #define   DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW 15
1798 /* i830, required in DVO non-gang */
1799 #define   PLL_P2_DIVIDE_BY_4            (1 << 23)
1800 #define   PLL_P1_DIVIDE_BY_TWO          (1 << 21) /* i830 */
1801 #define   PLL_REF_INPUT_DREFCLK         (0 << 13)
1802 #define   PLL_REF_INPUT_TVCLKINA        (1 << 13) /* i830 */
1803 #define   PLL_REF_INPUT_TVCLKINBC       (2 << 13) /* SDVO TVCLKIN */
1804 #define   PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13)
1805 #define   PLL_REF_INPUT_MASK            (3 << 13)
1806 #define   PLL_LOAD_PULSE_PHASE_SHIFT            9
1807 /* Ironlake */
1808 # define PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT     9
1809 # define PLL_REF_SDVO_HDMI_MULTIPLIER_MASK      (7 << 9)
1810 # define PLL_REF_SDVO_HDMI_MULTIPLIER(x)        (((x)-1) << 9)
1811 # define DPLL_FPA1_P1_POST_DIV_SHIFT            0
1812 # define DPLL_FPA1_P1_POST_DIV_MASK             0xff
1813
1814 /*
1815  * Parallel to Serial Load Pulse phase selection.
1816  * Selects the phase for the 10X DPLL clock for the PCIe
1817  * digital display port. The range is 4 to 13; 10 or more
1818  * is just a flip delay. The default is 6
1819  */
1820 #define   PLL_LOAD_PULSE_PHASE_MASK             (0xf << PLL_LOAD_PULSE_PHASE_SHIFT)
1821 #define   DISPLAY_RATE_SELECT_FPA1              (1 << 8)
1822 /*
1823  * SDVO multiplier for 945G/GM. Not used on 965.
1824  */
1825 #define   SDVO_MULTIPLIER_MASK                  0x000000ff
1826 #define   SDVO_MULTIPLIER_SHIFT_HIRES           4
1827 #define   SDVO_MULTIPLIER_SHIFT_VGA             0
1828
1829 #define _DPLL_A_MD (dev_priv->info.display_mmio_offset + 0x601c)
1830 #define _DPLL_B_MD (dev_priv->info.display_mmio_offset + 0x6020)
1831 #define _CHV_DPLL_C_MD (dev_priv->info.display_mmio_offset + 0x603c)
1832 #define DPLL_MD(pipe) _PIPE3((pipe), _DPLL_A_MD, _DPLL_B_MD, _CHV_DPLL_C_MD)
1833
1834 /*
1835  * UDI pixel divider, controlling how many pixels are stuffed into a packet.
1836  *
1837  * Value is pixels minus 1.  Must be set to 1 pixel for SDVO.
1838  */
1839 #define   DPLL_MD_UDI_DIVIDER_MASK              0x3f000000
1840 #define   DPLL_MD_UDI_DIVIDER_SHIFT             24
1841 /* UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */
1842 #define   DPLL_MD_VGA_UDI_DIVIDER_MASK          0x003f0000
1843 #define   DPLL_MD_VGA_UDI_DIVIDER_SHIFT         16
1844 /*
1845  * SDVO/UDI pixel multiplier.
1846  *
1847  * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus
1848  * clock rate is 10 times the DPLL clock.  At low resolution/refresh rate
1849  * modes, the bus rate would be below the limits, so SDVO allows for stuffing
1850  * dummy bytes in the datastream at an increased clock rate, with both sides of
1851  * the link knowing how many bytes are fill.
1852  *
1853  * So, for a mode with a dotclock of 65Mhz, we would want to double the clock
1854  * rate to 130Mhz to get a bus rate of 1.30Ghz.  The DPLL clock rate would be
1855  * set to 130Mhz, and the SDVO multiplier set to 2x in this register and
1856  * through an SDVO command.
1857  *
1858  * This register field has values of multiplication factor minus 1, with
1859  * a maximum multiplier of 5 for SDVO.
1860  */
1861 #define   DPLL_MD_UDI_MULTIPLIER_MASK           0x00003f00
1862 #define   DPLL_MD_UDI_MULTIPLIER_SHIFT          8
1863 /*
1864  * SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK.
1865  * This best be set to the default value (3) or the CRT won't work. No,
1866  * I don't entirely understand what this does...
1867  */
1868 #define   DPLL_MD_VGA_UDI_MULTIPLIER_MASK       0x0000003f
1869 #define   DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT      0
1870
1871 #define _FPA0   0x06040
1872 #define _FPA1   0x06044
1873 #define _FPB0   0x06048
1874 #define _FPB1   0x0604c
1875 #define FP0(pipe) _PIPE(pipe, _FPA0, _FPB0)
1876 #define FP1(pipe) _PIPE(pipe, _FPA1, _FPB1)
1877 #define   FP_N_DIV_MASK         0x003f0000
1878 #define   FP_N_PINEVIEW_DIV_MASK        0x00ff0000
1879 #define   FP_N_DIV_SHIFT                16
1880 #define   FP_M1_DIV_MASK        0x00003f00
1881 #define   FP_M1_DIV_SHIFT                8
1882 #define   FP_M2_DIV_MASK        0x0000003f
1883 #define   FP_M2_PINEVIEW_DIV_MASK       0x000000ff
1884 #define   FP_M2_DIV_SHIFT                0
1885 #define DPLL_TEST       0x606c
1886 #define   DPLLB_TEST_SDVO_DIV_1         (0 << 22)
1887 #define   DPLLB_TEST_SDVO_DIV_2         (1 << 22)
1888 #define   DPLLB_TEST_SDVO_DIV_4         (2 << 22)
1889 #define   DPLLB_TEST_SDVO_DIV_MASK      (3 << 22)
1890 #define   DPLLB_TEST_N_BYPASS           (1 << 19)
1891 #define   DPLLB_TEST_M_BYPASS           (1 << 18)
1892 #define   DPLLB_INPUT_BUFFER_ENABLE     (1 << 16)
1893 #define   DPLLA_TEST_N_BYPASS           (1 << 3)
1894 #define   DPLLA_TEST_M_BYPASS           (1 << 2)
1895 #define   DPLLA_INPUT_BUFFER_ENABLE     (1 << 0)
1896 #define D_STATE         0x6104
1897 #define  DSTATE_GFX_RESET_I830                  (1<<6)
1898 #define  DSTATE_PLL_D3_OFF                      (1<<3)
1899 #define  DSTATE_GFX_CLOCK_GATING                (1<<1)
1900 #define  DSTATE_DOT_CLOCK_GATING                (1<<0)
1901 #define DSPCLK_GATE_D   (dev_priv->info.display_mmio_offset + 0x6200)
1902 # define DPUNIT_B_CLOCK_GATE_DISABLE            (1 << 30) /* 965 */
1903 # define VSUNIT_CLOCK_GATE_DISABLE              (1 << 29) /* 965 */
1904 # define VRHUNIT_CLOCK_GATE_DISABLE             (1 << 28) /* 965 */
1905 # define VRDUNIT_CLOCK_GATE_DISABLE             (1 << 27) /* 965 */
1906 # define AUDUNIT_CLOCK_GATE_DISABLE             (1 << 26) /* 965 */
1907 # define DPUNIT_A_CLOCK_GATE_DISABLE            (1 << 25) /* 965 */
1908 # define DPCUNIT_CLOCK_GATE_DISABLE             (1 << 24) /* 965 */
1909 # define TVRUNIT_CLOCK_GATE_DISABLE             (1 << 23) /* 915-945 */
1910 # define TVCUNIT_CLOCK_GATE_DISABLE             (1 << 22) /* 915-945 */
1911 # define TVFUNIT_CLOCK_GATE_DISABLE             (1 << 21) /* 915-945 */
1912 # define TVEUNIT_CLOCK_GATE_DISABLE             (1 << 20) /* 915-945 */
1913 # define DVSUNIT_CLOCK_GATE_DISABLE             (1 << 19) /* 915-945 */
1914 # define DSSUNIT_CLOCK_GATE_DISABLE             (1 << 18) /* 915-945 */
1915 # define DDBUNIT_CLOCK_GATE_DISABLE             (1 << 17) /* 915-945 */
1916 # define DPRUNIT_CLOCK_GATE_DISABLE             (1 << 16) /* 915-945 */
1917 # define DPFUNIT_CLOCK_GATE_DISABLE             (1 << 15) /* 915-945 */
1918 # define DPBMUNIT_CLOCK_GATE_DISABLE            (1 << 14) /* 915-945 */
1919 # define DPLSUNIT_CLOCK_GATE_DISABLE            (1 << 13) /* 915-945 */
1920 # define DPLUNIT_CLOCK_GATE_DISABLE             (1 << 12) /* 915-945 */
1921 # define DPOUNIT_CLOCK_GATE_DISABLE             (1 << 11)
1922 # define DPBUNIT_CLOCK_GATE_DISABLE             (1 << 10)
1923 # define DCUNIT_CLOCK_GATE_DISABLE              (1 << 9)
1924 # define DPUNIT_CLOCK_GATE_DISABLE              (1 << 8)
1925 # define VRUNIT_CLOCK_GATE_DISABLE              (1 << 7) /* 915+: reserved */
1926 # define OVHUNIT_CLOCK_GATE_DISABLE             (1 << 6) /* 830-865 */
1927 # define DPIOUNIT_CLOCK_GATE_DISABLE            (1 << 6) /* 915-945 */
1928 # define OVFUNIT_CLOCK_GATE_DISABLE             (1 << 5)
1929 # define OVBUNIT_CLOCK_GATE_DISABLE             (1 << 4)
1930 /*
1931  * This bit must be set on the 830 to prevent hangs when turning off the
1932  * overlay scaler.
1933  */
1934 # define OVRUNIT_CLOCK_GATE_DISABLE             (1 << 3)
1935 # define OVCUNIT_CLOCK_GATE_DISABLE             (1 << 2)
1936 # define OVUUNIT_CLOCK_GATE_DISABLE             (1 << 1)
1937 # define ZVUNIT_CLOCK_GATE_DISABLE              (1 << 0) /* 830 */
1938 # define OVLUNIT_CLOCK_GATE_DISABLE             (1 << 0) /* 845,865 */
1939
1940 #define RENCLK_GATE_D1          0x6204
1941 # define BLITTER_CLOCK_GATE_DISABLE             (1 << 13) /* 945GM only */
1942 # define MPEG_CLOCK_GATE_DISABLE                (1 << 12) /* 945GM only */
1943 # define PC_FE_CLOCK_GATE_DISABLE               (1 << 11)
1944 # define PC_BE_CLOCK_GATE_DISABLE               (1 << 10)
1945 # define WINDOWER_CLOCK_GATE_DISABLE            (1 << 9)
1946 # define INTERPOLATOR_CLOCK_GATE_DISABLE        (1 << 8)
1947 # define COLOR_CALCULATOR_CLOCK_GATE_DISABLE    (1 << 7)
1948 # define MOTION_COMP_CLOCK_GATE_DISABLE         (1 << 6)
1949 # define MAG_CLOCK_GATE_DISABLE                 (1 << 5)
1950 /* This bit must be unset on 855,865 */
1951 # define MECI_CLOCK_GATE_DISABLE                (1 << 4)
1952 # define DCMP_CLOCK_GATE_DISABLE                (1 << 3)
1953 # define MEC_CLOCK_GATE_DISABLE                 (1 << 2)
1954 # define MECO_CLOCK_GATE_DISABLE                (1 << 1)
1955 /* This bit must be set on 855,865. */
1956 # define SV_CLOCK_GATE_DISABLE                  (1 << 0)
1957 # define I915_MPEG_CLOCK_GATE_DISABLE           (1 << 16)
1958 # define I915_VLD_IP_PR_CLOCK_GATE_DISABLE      (1 << 15)
1959 # define I915_MOTION_COMP_CLOCK_GATE_DISABLE    (1 << 14)
1960 # define I915_BD_BF_CLOCK_GATE_DISABLE          (1 << 13)
1961 # define I915_SF_SE_CLOCK_GATE_DISABLE          (1 << 12)
1962 # define I915_WM_CLOCK_GATE_DISABLE             (1 << 11)
1963 # define I915_IZ_CLOCK_GATE_DISABLE             (1 << 10)
1964 # define I915_PI_CLOCK_GATE_DISABLE             (1 << 9)
1965 # define I915_DI_CLOCK_GATE_DISABLE             (1 << 8)
1966 # define I915_SH_SV_CLOCK_GATE_DISABLE          (1 << 7)
1967 # define I915_PL_DG_QC_FT_CLOCK_GATE_DISABLE    (1 << 6)
1968 # define I915_SC_CLOCK_GATE_DISABLE             (1 << 5)
1969 # define I915_FL_CLOCK_GATE_DISABLE             (1 << 4)
1970 # define I915_DM_CLOCK_GATE_DISABLE             (1 << 3)
1971 # define I915_PS_CLOCK_GATE_DISABLE             (1 << 2)
1972 # define I915_CC_CLOCK_GATE_DISABLE             (1 << 1)
1973 # define I915_BY_CLOCK_GATE_DISABLE             (1 << 0)
1974
1975 # define I965_RCZ_CLOCK_GATE_DISABLE            (1 << 30)
1976 /* This bit must always be set on 965G/965GM */
1977 # define I965_RCC_CLOCK_GATE_DISABLE            (1 << 29)
1978 # define I965_RCPB_CLOCK_GATE_DISABLE           (1 << 28)
1979 # define I965_DAP_CLOCK_GATE_DISABLE            (1 << 27)
1980 # define I965_ROC_CLOCK_GATE_DISABLE            (1 << 26)
1981 # define I965_GW_CLOCK_GATE_DISABLE             (1 << 25)
1982 # define I965_TD_CLOCK_GATE_DISABLE             (1 << 24)
1983 /* This bit must always be set on 965G */
1984 # define I965_ISC_CLOCK_GATE_DISABLE            (1 << 23)
1985 # define I965_IC_CLOCK_GATE_DISABLE             (1 << 22)
1986 # define I965_EU_CLOCK_GATE_DISABLE             (1 << 21)
1987 # define I965_IF_CLOCK_GATE_DISABLE             (1 << 20)
1988 # define I965_TC_CLOCK_GATE_DISABLE             (1 << 19)
1989 # define I965_SO_CLOCK_GATE_DISABLE             (1 << 17)
1990 # define I965_FBC_CLOCK_GATE_DISABLE            (1 << 16)
1991 # define I965_MARI_CLOCK_GATE_DISABLE           (1 << 15)
1992 # define I965_MASF_CLOCK_GATE_DISABLE           (1 << 14)
1993 # define I965_MAWB_CLOCK_GATE_DISABLE           (1 << 13)
1994 # define I965_EM_CLOCK_GATE_DISABLE             (1 << 12)
1995 # define I965_UC_CLOCK_GATE_DISABLE             (1 << 11)
1996 # define I965_SI_CLOCK_GATE_DISABLE             (1 << 6)
1997 # define I965_MT_CLOCK_GATE_DISABLE             (1 << 5)
1998 # define I965_PL_CLOCK_GATE_DISABLE             (1 << 4)
1999 # define I965_DG_CLOCK_GATE_DISABLE             (1 << 3)
2000 # define I965_QC_CLOCK_GATE_DISABLE             (1 << 2)
2001 # define I965_FT_CLOCK_GATE_DISABLE             (1 << 1)
2002 # define I965_DM_CLOCK_GATE_DISABLE             (1 << 0)
2003
2004 #define RENCLK_GATE_D2          0x6208
2005 #define VF_UNIT_CLOCK_GATE_DISABLE              (1 << 9)
2006 #define GS_UNIT_CLOCK_GATE_DISABLE              (1 << 7)
2007 #define CL_UNIT_CLOCK_GATE_DISABLE              (1 << 6)
2008
2009 #define VDECCLK_GATE_D          0x620C          /* g4x only */
2010 #define  VCP_UNIT_CLOCK_GATE_DISABLE            (1 << 4)
2011
2012 #define RAMCLK_GATE_D           0x6210          /* CRL only */
2013 #define DEUC                    0x6214          /* CRL only */
2014
2015 #define FW_BLC_SELF_VLV         (VLV_DISPLAY_BASE + 0x6500)
2016 #define  FW_CSPWRDWNEN          (1<<15)
2017
2018 #define MI_ARB_VLV              (VLV_DISPLAY_BASE + 0x6504)
2019
2020 #define CZCLK_CDCLK_FREQ_RATIO  (VLV_DISPLAY_BASE + 0x6508)
2021 #define   CDCLK_FREQ_SHIFT      4
2022 #define   CDCLK_FREQ_MASK       (0x1f << CDCLK_FREQ_SHIFT)
2023 #define   CZCLK_FREQ_MASK       0xf
2024 #define GMBUSFREQ_VLV           (VLV_DISPLAY_BASE + 0x6510)
2025
2026 /*
2027  * Palette regs
2028  */
2029 #define PALETTE_A_OFFSET 0xa000
2030 #define PALETTE_B_OFFSET 0xa800
2031 #define CHV_PALETTE_C_OFFSET 0xc000
2032 #define PALETTE(pipe) (dev_priv->info.palette_offsets[pipe] + \
2033                        dev_priv->info.display_mmio_offset)
2034
2035 /* MCH MMIO space */
2036
2037 /*
2038  * MCHBAR mirror.
2039  *
2040  * This mirrors the MCHBAR MMIO space whose location is determined by
2041  * device 0 function 0's pci config register 0x44 or 0x48 and matches it in
2042  * every way.  It is not accessible from the CP register read instructions.
2043  *
2044  * Starting from Haswell, you can't write registers using the MCHBAR mirror,
2045  * just read.
2046  */
2047 #define MCHBAR_MIRROR_BASE      0x10000
2048
2049 #define MCHBAR_MIRROR_BASE_SNB  0x140000
2050
2051 /* Memory controller frequency in MCHBAR for Haswell (possible SNB+) */
2052 #define DCLK (MCHBAR_MIRROR_BASE_SNB + 0x5e04)
2053
2054 /* 915-945 and GM965 MCH register controlling DRAM channel access */
2055 #define DCC                     0x10200
2056 #define DCC_ADDRESSING_MODE_SINGLE_CHANNEL              (0 << 0)
2057 #define DCC_ADDRESSING_MODE_DUAL_CHANNEL_ASYMMETRIC     (1 << 0)
2058 #define DCC_ADDRESSING_MODE_DUAL_CHANNEL_INTERLEAVED    (2 << 0)
2059 #define DCC_ADDRESSING_MODE_MASK                        (3 << 0)
2060 #define DCC_CHANNEL_XOR_DISABLE                         (1 << 10)
2061 #define DCC_CHANNEL_XOR_BIT_17                          (1 << 9)
2062 #define DCC2                    0x10204
2063 #define DCC2_MODIFIED_ENHANCED_DISABLE                  (1 << 20)
2064
2065 /* Pineview MCH register contains DDR3 setting */
2066 #define CSHRDDR3CTL            0x101a8
2067 #define CSHRDDR3CTL_DDR3       (1 << 2)
2068
2069 /* 965 MCH register controlling DRAM channel configuration */
2070 #define C0DRB3                  0x10206
2071 #define C1DRB3                  0x10606
2072
2073 /* snb MCH registers for reading the DRAM channel configuration */
2074 #define MAD_DIMM_C0                     (MCHBAR_MIRROR_BASE_SNB + 0x5004)
2075 #define MAD_DIMM_C1                     (MCHBAR_MIRROR_BASE_SNB + 0x5008)
2076 #define MAD_DIMM_C2                     (MCHBAR_MIRROR_BASE_SNB + 0x500C)
2077 #define   MAD_DIMM_ECC_MASK             (0x3 << 24)
2078 #define   MAD_DIMM_ECC_OFF              (0x0 << 24)
2079 #define   MAD_DIMM_ECC_IO_ON_LOGIC_OFF  (0x1 << 24)
2080 #define   MAD_DIMM_ECC_IO_OFF_LOGIC_ON  (0x2 << 24)
2081 #define   MAD_DIMM_ECC_ON               (0x3 << 24)
2082 #define   MAD_DIMM_ENH_INTERLEAVE       (0x1 << 22)
2083 #define   MAD_DIMM_RANK_INTERLEAVE      (0x1 << 21)
2084 #define   MAD_DIMM_B_WIDTH_X16          (0x1 << 20) /* X8 chips if unset */
2085 #define   MAD_DIMM_A_WIDTH_X16          (0x1 << 19) /* X8 chips if unset */
2086 #define   MAD_DIMM_B_DUAL_RANK          (0x1 << 18)
2087 #define   MAD_DIMM_A_DUAL_RANK          (0x1 << 17)
2088 #define   MAD_DIMM_A_SELECT             (0x1 << 16)
2089 /* DIMM sizes are in multiples of 256mb. */
2090 #define   MAD_DIMM_B_SIZE_SHIFT         8
2091 #define   MAD_DIMM_B_SIZE_MASK          (0xff << MAD_DIMM_B_SIZE_SHIFT)
2092 #define   MAD_DIMM_A_SIZE_SHIFT         0
2093 #define   MAD_DIMM_A_SIZE_MASK          (0xff << MAD_DIMM_A_SIZE_SHIFT)
2094
2095 /* snb MCH registers for priority tuning */
2096 #define MCH_SSKPD                       (MCHBAR_MIRROR_BASE_SNB + 0x5d10)
2097 #define   MCH_SSKPD_WM0_MASK            0x3f
2098 #define   MCH_SSKPD_WM0_VAL             0xc
2099
2100 #define MCH_SECP_NRG_STTS               (MCHBAR_MIRROR_BASE_SNB + 0x592c)
2101
2102 /* Clocking configuration register */
2103 #define CLKCFG                  0x10c00
2104 #define CLKCFG_FSB_400                                  (5 << 0)        /* hrawclk 100 */
2105 #define CLKCFG_FSB_533                                  (1 << 0)        /* hrawclk 133 */
2106 #define CLKCFG_FSB_667                                  (3 << 0)        /* hrawclk 166 */
2107 #define CLKCFG_FSB_800                                  (2 << 0)        /* hrawclk 200 */
2108 #define CLKCFG_FSB_1067                                 (6 << 0)        /* hrawclk 266 */
2109 #define CLKCFG_FSB_1333                                 (7 << 0)        /* hrawclk 333 */
2110 /* Note, below two are guess */
2111 #define CLKCFG_FSB_1600                                 (4 << 0)        /* hrawclk 400 */
2112 #define CLKCFG_FSB_1600_ALT                             (0 << 0)        /* hrawclk 400 */
2113 #define CLKCFG_FSB_MASK                                 (7 << 0)
2114 #define CLKCFG_MEM_533                                  (1 << 4)
2115 #define CLKCFG_MEM_667                                  (2 << 4)
2116 #define CLKCFG_MEM_800                                  (3 << 4)
2117 #define CLKCFG_MEM_MASK                                 (7 << 4)
2118
2119 #define TSC1                    0x11001
2120 #define   TSE                   (1<<0)
2121 #define TR1                     0x11006
2122 #define TSFS                    0x11020
2123 #define   TSFS_SLOPE_MASK       0x0000ff00
2124 #define   TSFS_SLOPE_SHIFT      8
2125 #define   TSFS_INTR_MASK        0x000000ff
2126
2127 #define CRSTANDVID              0x11100
2128 #define PXVFREQ_BASE            0x11110 /* P[0-15]VIDFREQ (0x1114c) (Ironlake) */
2129 #define   PXVFREQ_PX_MASK       0x7f000000
2130 #define   PXVFREQ_PX_SHIFT      24
2131 #define VIDFREQ_BASE            0x11110
2132 #define VIDFREQ1                0x11110 /* VIDFREQ1-4 (0x1111c) (Cantiga) */
2133 #define VIDFREQ2                0x11114
2134 #define VIDFREQ3                0x11118
2135 #define VIDFREQ4                0x1111c
2136 #define   VIDFREQ_P0_MASK       0x1f000000
2137 #define   VIDFREQ_P0_SHIFT      24
2138 #define   VIDFREQ_P0_CSCLK_MASK 0x00f00000
2139 #define   VIDFREQ_P0_CSCLK_SHIFT 20
2140 #define   VIDFREQ_P0_CRCLK_MASK 0x000f0000
2141 #define   VIDFREQ_P0_CRCLK_SHIFT 16
2142 #define   VIDFREQ_P1_MASK       0x00001f00
2143 #define   VIDFREQ_P1_SHIFT      8
2144 #define   VIDFREQ_P1_CSCLK_MASK 0x000000f0
2145 #define   VIDFREQ_P1_CSCLK_SHIFT 4
2146 #define   VIDFREQ_P1_CRCLK_MASK 0x0000000f
2147 #define INTTOEXT_BASE_ILK       0x11300
2148 #define INTTOEXT_BASE           0x11120 /* INTTOEXT1-8 (0x1113c) */
2149 #define   INTTOEXT_MAP3_SHIFT   24
2150 #define   INTTOEXT_MAP3_MASK    (0x1f << INTTOEXT_MAP3_SHIFT)
2151 #define   INTTOEXT_MAP2_SHIFT   16
2152 #define   INTTOEXT_MAP2_MASK    (0x1f << INTTOEXT_MAP2_SHIFT)
2153 #define   INTTOEXT_MAP1_SHIFT   8
2154 #define   INTTOEXT_MAP1_MASK    (0x1f << INTTOEXT_MAP1_SHIFT)
2155 #define   INTTOEXT_MAP0_SHIFT   0
2156 #define   INTTOEXT_MAP0_MASK    (0x1f << INTTOEXT_MAP0_SHIFT)
2157 #define MEMSWCTL                0x11170 /* Ironlake only */
2158 #define   MEMCTL_CMD_MASK       0xe000
2159 #define   MEMCTL_CMD_SHIFT      13
2160 #define   MEMCTL_CMD_RCLK_OFF   0
2161 #define   MEMCTL_CMD_RCLK_ON    1
2162 #define   MEMCTL_CMD_CHFREQ     2
2163 #define   MEMCTL_CMD_CHVID      3
2164 #define   MEMCTL_CMD_VMMOFF     4
2165 #define   MEMCTL_CMD_VMMON      5
2166 #define   MEMCTL_CMD_STS        (1<<12) /* write 1 triggers command, clears
2167                                            when command complete */
2168 #define   MEMCTL_FREQ_MASK      0x0f00 /* jitter, from 0-15 */
2169 #define   MEMCTL_FREQ_SHIFT     8
2170 #define   MEMCTL_SFCAVM         (1<<7)
2171 #define   MEMCTL_TGT_VID_MASK   0x007f
2172 #define MEMIHYST                0x1117c
2173 #define MEMINTREN               0x11180 /* 16 bits */
2174 #define   MEMINT_RSEXIT_EN      (1<<8)
2175 #define   MEMINT_CX_SUPR_EN     (1<<7)
2176 #define   MEMINT_CONT_BUSY_EN   (1<<6)
2177 #define   MEMINT_AVG_BUSY_EN    (1<<5)
2178 #define   MEMINT_EVAL_CHG_EN    (1<<4)
2179 #define   MEMINT_MON_IDLE_EN    (1<<3)
2180 #define   MEMINT_UP_EVAL_EN     (1<<2)
2181 #define   MEMINT_DOWN_EVAL_EN   (1<<1)
2182 #define   MEMINT_SW_CMD_EN      (1<<0)
2183 #define MEMINTRSTR              0x11182 /* 16 bits */
2184 #define   MEM_RSEXIT_MASK       0xc000
2185 #define   MEM_RSEXIT_SHIFT      14
2186 #define   MEM_CONT_BUSY_MASK    0x3000
2187 #define   MEM_CONT_BUSY_SHIFT   12
2188 #define   MEM_AVG_BUSY_MASK     0x0c00
2189 #define   MEM_AVG_BUSY_SHIFT    10
2190 #define   MEM_EVAL_CHG_MASK     0x0300
2191 #define   MEM_EVAL_BUSY_SHIFT   8
2192 #define   MEM_MON_IDLE_MASK     0x00c0
2193 #define   MEM_MON_IDLE_SHIFT    6
2194 #define   MEM_UP_EVAL_MASK      0x0030
2195 #define   MEM_UP_EVAL_SHIFT     4
2196 #define   MEM_DOWN_EVAL_MASK    0x000c
2197 #define   MEM_DOWN_EVAL_SHIFT   2
2198 #define   MEM_SW_CMD_MASK       0x0003
2199 #define   MEM_INT_STEER_GFX     0
2200 #define   MEM_INT_STEER_CMR     1
2201 #define   MEM_INT_STEER_SMI     2
2202 #define   MEM_INT_STEER_SCI     3
2203 #define MEMINTRSTS              0x11184
2204 #define   MEMINT_RSEXIT         (1<<7)
2205 #define   MEMINT_CONT_BUSY      (1<<6)
2206 #define   MEMINT_AVG_BUSY       (1<<5)
2207 #define   MEMINT_EVAL_CHG       (1<<4)
2208 #define   MEMINT_MON_IDLE       (1<<3)
2209 #define   MEMINT_UP_EVAL        (1<<2)
2210 #define   MEMINT_DOWN_EVAL      (1<<1)
2211 #define   MEMINT_SW_CMD         (1<<0)
2212 #define MEMMODECTL              0x11190
2213 #define   MEMMODE_BOOST_EN      (1<<31)
2214 #define   MEMMODE_BOOST_FREQ_MASK 0x0f000000 /* jitter for boost, 0-15 */
2215 #define   MEMMODE_BOOST_FREQ_SHIFT 24
2216 #define   MEMMODE_IDLE_MODE_MASK 0x00030000
2217 #define   MEMMODE_IDLE_MODE_SHIFT 16
2218 #define   MEMMODE_IDLE_MODE_EVAL 0
2219 #define   MEMMODE_IDLE_MODE_CONT 1
2220 #define   MEMMODE_HWIDLE_EN     (1<<15)
2221 #define   MEMMODE_SWMODE_EN     (1<<14)
2222 #define   MEMMODE_RCLK_GATE     (1<<13)
2223 #define   MEMMODE_HW_UPDATE     (1<<12)
2224 #define   MEMMODE_FSTART_MASK   0x00000f00 /* starting jitter, 0-15 */
2225 #define   MEMMODE_FSTART_SHIFT  8
2226 #define   MEMMODE_FMAX_MASK     0x000000f0 /* max jitter, 0-15 */
2227 #define   MEMMODE_FMAX_SHIFT    4
2228 #define   MEMMODE_FMIN_MASK     0x0000000f /* min jitter, 0-15 */
2229 #define RCBMAXAVG               0x1119c
2230 #define MEMSWCTL2               0x1119e /* Cantiga only */
2231 #define   SWMEMCMD_RENDER_OFF   (0 << 13)
2232 #define   SWMEMCMD_RENDER_ON    (1 << 13)
2233 #define   SWMEMCMD_SWFREQ       (2 << 13)
2234 #define   SWMEMCMD_TARVID       (3 << 13)
2235 #define   SWMEMCMD_VRM_OFF      (4 << 13)
2236 #define   SWMEMCMD_VRM_ON       (5 << 13)
2237 #define   CMDSTS                (1<<12)
2238 #define   SFCAVM                (1<<11)
2239 #define   SWFREQ_MASK           0x0380 /* P0-7 */
2240 #define   SWFREQ_SHIFT          7
2241 #define   TARVID_MASK           0x001f
2242 #define MEMSTAT_CTG             0x111a0
2243 #define RCBMINAVG               0x111a0
2244 #define RCUPEI                  0x111b0
2245 #define RCDNEI                  0x111b4
2246 #define RSTDBYCTL               0x111b8
2247 #define   RS1EN                 (1<<31)
2248 #define   RS2EN                 (1<<30)
2249 #define   RS3EN                 (1<<29)
2250 #define   D3RS3EN               (1<<28) /* Display D3 imlies RS3 */
2251 #define   SWPROMORSX            (1<<27) /* RSx promotion timers ignored */
2252 #define   RCWAKERW              (1<<26) /* Resetwarn from PCH causes wakeup */
2253 #define   DPRSLPVREN            (1<<25) /* Fast voltage ramp enable */
2254 #define   GFXTGHYST             (1<<24) /* Hysteresis to allow trunk gating */
2255 #define   RCX_SW_EXIT           (1<<23) /* Leave RSx and prevent re-entry */
2256 #define   RSX_STATUS_MASK       (7<<20)
2257 #define   RSX_STATUS_ON         (0<<20)
2258 #define   RSX_STATUS_RC1        (1<<20)
2259 #define   RSX_STATUS_RC1E       (2<<20)
2260 #define   RSX_STATUS_RS1        (3<<20)
2261 #define   RSX_STATUS_RS2        (4<<20) /* aka rc6 */
2262 #define   RSX_STATUS_RSVD       (5<<20) /* deep rc6 unsupported on ilk */
2263 #define   RSX_STATUS_RS3        (6<<20) /* rs3 unsupported on ilk */
2264 #define   RSX_STATUS_RSVD2      (7<<20)
2265 #define   UWRCRSXE              (1<<19) /* wake counter limit prevents rsx */
2266 #define   RSCRP                 (1<<18) /* rs requests control on rs1/2 reqs */
2267 #define   JRSC                  (1<<17) /* rsx coupled to cpu c-state */
2268 #define   RS2INC0               (1<<16) /* allow rs2 in cpu c0 */
2269 #define   RS1CONTSAV_MASK       (3<<14)
2270 #define   RS1CONTSAV_NO_RS1     (0<<14) /* rs1 doesn't save/restore context */
2271 #define   RS1CONTSAV_RSVD       (1<<14)
2272 #define   RS1CONTSAV_SAVE_RS1   (2<<14) /* rs1 saves context */
2273 #define   RS1CONTSAV_FULL_RS1   (3<<14) /* rs1 saves and restores context */
2274 #define   NORMSLEXLAT_MASK      (3<<12)
2275 #define   SLOW_RS123            (0<<12)
2276 #define   SLOW_RS23             (1<<12)
2277 #define   SLOW_RS3              (2<<12)
2278 #define   NORMAL_RS123          (3<<12)
2279 #define   RCMODE_TIMEOUT        (1<<11) /* 0 is eval interval method */
2280 #define   IMPROMOEN             (1<<10) /* promo is immediate or delayed until next idle interval (only for timeout method above) */
2281 #define   RCENTSYNC             (1<<9) /* rs coupled to cpu c-state (3/6/7) */
2282 #define   STATELOCK             (1<<7) /* locked to rs_cstate if 0 */
2283 #define   RS_CSTATE_MASK        (3<<4)
2284 #define   RS_CSTATE_C367_RS1    (0<<4)
2285 #define   RS_CSTATE_C36_RS1_C7_RS2 (1<<4)
2286 #define   RS_CSTATE_RSVD        (2<<4)
2287 #define   RS_CSTATE_C367_RS2    (3<<4)
2288 #define   REDSAVES              (1<<3) /* no context save if was idle during rs0 */
2289 #define   REDRESTORES           (1<<2) /* no restore if was idle during rs0 */
2290 #define VIDCTL                  0x111c0
2291 #define VIDSTS                  0x111c8
2292 #define VIDSTART                0x111cc /* 8 bits */
2293 #define MEMSTAT_ILK                     0x111f8
2294 #define   MEMSTAT_VID_MASK      0x7f00
2295 #define   MEMSTAT_VID_SHIFT     8
2296 #define   MEMSTAT_PSTATE_MASK   0x00f8
2297 #define   MEMSTAT_PSTATE_SHIFT  3
2298 #define   MEMSTAT_MON_ACTV      (1<<2)
2299 #define   MEMSTAT_SRC_CTL_MASK  0x0003
2300 #define   MEMSTAT_SRC_CTL_CORE  0
2301 #define   MEMSTAT_SRC_CTL_TRB   1
2302 #define   MEMSTAT_SRC_CTL_THM   2
2303 #define   MEMSTAT_SRC_CTL_STDBY 3
2304 #define RCPREVBSYTUPAVG         0x113b8
2305 #define RCPREVBSYTDNAVG         0x113bc
2306 #define PMMISC                  0x11214
2307 #define   MCPPCE_EN             (1<<0) /* enable PM_MSG from PCH->MPC */
2308 #define SDEW                    0x1124c
2309 #define CSIEW0                  0x11250
2310 #define CSIEW1                  0x11254
2311 #define CSIEW2                  0x11258
2312 #define PEW                     0x1125c
2313 #define DEW                     0x11270
2314 #define MCHAFE                  0x112c0
2315 #define CSIEC                   0x112e0
2316 #define DMIEC                   0x112e4
2317 #define DDREC                   0x112e8
2318 #define PEG0EC                  0x112ec
2319 #define PEG1EC                  0x112f0
2320 #define GFXEC                   0x112f4
2321 #define RPPREVBSYTUPAVG         0x113b8
2322 #define RPPREVBSYTDNAVG         0x113bc
2323 #define ECR                     0x11600
2324 #define   ECR_GPFE              (1<<31)
2325 #define   ECR_IMONE             (1<<30)
2326 #define   ECR_CAP_MASK          0x0000001f /* Event range, 0-31 */
2327 #define OGW0                    0x11608
2328 #define OGW1                    0x1160c
2329 #define EG0                     0x11610
2330 #define EG1                     0x11614
2331 #define EG2                     0x11618
2332 #define EG3                     0x1161c
2333 #define EG4                     0x11620
2334 #define EG5                     0x11624
2335 #define EG6                     0x11628
2336 #define EG7                     0x1162c
2337 #define PXW                     0x11664
2338 #define PXWL                    0x11680
2339 #define LCFUSE02                0x116c0
2340 #define   LCFUSE_HIV_MASK       0x000000ff
2341 #define CSIPLL0                 0x12c10
2342 #define DDRMPLL1                0X12c20
2343 #define PEG_BAND_GAP_DATA       0x14d68
2344
2345 #define GEN6_GT_THREAD_STATUS_REG 0x13805c
2346 #define GEN6_GT_THREAD_STATUS_CORE_MASK 0x7
2347
2348 #define GEN6_GT_PERF_STATUS     (MCHBAR_MIRROR_BASE_SNB + 0x5948)
2349 #define GEN6_RP_STATE_LIMITS    (MCHBAR_MIRROR_BASE_SNB + 0x5994)
2350 #define GEN6_RP_STATE_CAP       (MCHBAR_MIRROR_BASE_SNB + 0x5998)
2351
2352 /*
2353  * Logical Context regs
2354  */
2355 #define CCID                    0x2180
2356 #define   CCID_EN               (1<<0)
2357 /*
2358  * Notes on SNB/IVB/VLV context size:
2359  * - Power context is saved elsewhere (LLC or stolen)
2360  * - Ring/execlist context is saved on SNB, not on IVB
2361  * - Extended context size already includes render context size
2362  * - We always need to follow the extended context size.
2363  *   SNB BSpec has comments indicating that we should use the
2364  *   render context size instead if execlists are disabled, but
2365  *   based on empirical testing that's just nonsense.
2366  * - Pipelined/VF state is saved on SNB/IVB respectively
2367  * - GT1 size just indicates how much of render context
2368  *   doesn't need saving on GT1
2369  */
2370 #define CXT_SIZE                0x21a0
2371 #define GEN6_CXT_POWER_SIZE(cxt_reg)    ((cxt_reg >> 24) & 0x3f)
2372 #define GEN6_CXT_RING_SIZE(cxt_reg)     ((cxt_reg >> 18) & 0x3f)
2373 #define GEN6_CXT_RENDER_SIZE(cxt_reg)   ((cxt_reg >> 12) & 0x3f)
2374 #define GEN6_CXT_EXTENDED_SIZE(cxt_reg) ((cxt_reg >> 6) & 0x3f)
2375 #define GEN6_CXT_PIPELINE_SIZE(cxt_reg) ((cxt_reg >> 0) & 0x3f)
2376 #define GEN6_CXT_TOTAL_SIZE(cxt_reg)    (GEN6_CXT_RING_SIZE(cxt_reg) + \
2377                                         GEN6_CXT_EXTENDED_SIZE(cxt_reg) + \
2378                                         GEN6_CXT_PIPELINE_SIZE(cxt_reg))
2379 #define GEN7_CXT_SIZE           0x21a8
2380 #define GEN7_CXT_POWER_SIZE(ctx_reg)    ((ctx_reg >> 25) & 0x7f)
2381 #define GEN7_CXT_RING_SIZE(ctx_reg)     ((ctx_reg >> 22) & 0x7)
2382 #define GEN7_CXT_RENDER_SIZE(ctx_reg)   ((ctx_reg >> 16) & 0x3f)
2383 #define GEN7_CXT_EXTENDED_SIZE(ctx_reg) ((ctx_reg >> 9) & 0x7f)
2384 #define GEN7_CXT_GT1_SIZE(ctx_reg)      ((ctx_reg >> 6) & 0x7)
2385 #define GEN7_CXT_VFSTATE_SIZE(ctx_reg)  ((ctx_reg >> 0) & 0x3f)
2386 #define GEN7_CXT_TOTAL_SIZE(ctx_reg)    (GEN7_CXT_EXTENDED_SIZE(ctx_reg) + \
2387                                          GEN7_CXT_VFSTATE_SIZE(ctx_reg))
2388 /* Haswell does have the CXT_SIZE register however it does not appear to be
2389  * valid. Now, docs explain in dwords what is in the context object. The full
2390  * size is 70720 bytes, however, the power context and execlist context will
2391  * never be saved (power context is stored elsewhere, and execlists don't work
2392  * on HSW) - so the final size is 66944 bytes, which rounds to 17 pages.
2393  */
2394 #define HSW_CXT_TOTAL_SIZE              (17 * PAGE_SIZE)
2395 /* Same as Haswell, but 72064 bytes now. */
2396 #define GEN8_CXT_TOTAL_SIZE             (18 * PAGE_SIZE)
2397
2398 #define CHV_CLK_CTL1                    0x101100
2399 #define VLV_CLK_CTL2                    0x101104
2400 #define   CLK_CTL2_CZCOUNT_30NS_SHIFT   28
2401
2402 /*
2403  * Overlay regs
2404  */
2405
2406 #define OVADD                   0x30000
2407 #define DOVSTA                  0x30008
2408 #define OC_BUF                  (0x3<<20)
2409 #define OGAMC5                  0x30010
2410 #define OGAMC4                  0x30014
2411 #define OGAMC3                  0x30018
2412 #define OGAMC2                  0x3001c
2413 #define OGAMC1                  0x30020
2414 #define OGAMC0                  0x30024
2415
2416 /*
2417  * Display engine regs
2418  */
2419
2420 /* Pipe A CRC regs */
2421 #define _PIPE_CRC_CTL_A                 0x60050
2422 #define   PIPE_CRC_ENABLE               (1 << 31)
2423 /* ivb+ source selection */
2424 #define   PIPE_CRC_SOURCE_PRIMARY_IVB   (0 << 29)
2425 #define   PIPE_CRC_SOURCE_SPRITE_IVB    (1 << 29)
2426 #define   PIPE_CRC_SOURCE_PF_IVB        (2 << 29)
2427 /* ilk+ source selection */
2428 #define   PIPE_CRC_SOURCE_PRIMARY_ILK   (0 << 28)
2429 #define   PIPE_CRC_SOURCE_SPRITE_ILK    (1 << 28)
2430 #define   PIPE_CRC_SOURCE_PIPE_ILK      (2 << 28)
2431 /* embedded DP port on the north display block, reserved on ivb */
2432 #define   PIPE_CRC_SOURCE_PORT_A_ILK    (4 << 28)
2433 #define   PIPE_CRC_SOURCE_FDI_ILK       (5 << 28) /* reserved on ivb */
2434 /* vlv source selection */
2435 #define   PIPE_CRC_SOURCE_PIPE_VLV      (0 << 27)
2436 #define   PIPE_CRC_SOURCE_HDMIB_VLV     (1 << 27)
2437 #define   PIPE_CRC_SOURCE_HDMIC_VLV     (2 << 27)
2438 /* with DP port the pipe source is invalid */
2439 #define   PIPE_CRC_SOURCE_DP_D_VLV      (3 << 27)
2440 #define   PIPE_CRC_SOURCE_DP_B_VLV      (6 << 27)
2441 #define   PIPE_CRC_SOURCE_DP_C_VLV      (7 << 27)
2442 /* gen3+ source selection */
2443 #define   PIPE_CRC_SOURCE_PIPE_I9XX     (0 << 28)
2444 #define   PIPE_CRC_SOURCE_SDVOB_I9XX    (1 << 28)
2445 #define   PIPE_CRC_SOURCE_SDVOC_I9XX    (2 << 28)
2446 /* with DP/TV port the pipe source is invalid */
2447 #define   PIPE_CRC_SOURCE_DP_D_G4X      (3 << 28)
2448 #define   PIPE_CRC_SOURCE_TV_PRE        (4 << 28)
2449 #define   PIPE_CRC_SOURCE_TV_POST       (5 << 28)
2450 #define   PIPE_CRC_SOURCE_DP_B_G4X      (6 << 28)
2451 #define   PIPE_CRC_SOURCE_DP_C_G4X      (7 << 28)
2452 /* gen2 doesn't have source selection bits */
2453 #define   PIPE_CRC_INCLUDE_BORDER_I8XX  (1 << 30)
2454
2455 #define _PIPE_CRC_RES_1_A_IVB           0x60064
2456 #define _PIPE_CRC_RES_2_A_IVB           0x60068
2457 #define _PIPE_CRC_RES_3_A_IVB           0x6006c
2458 #define _PIPE_CRC_RES_4_A_IVB           0x60070
2459 #define _PIPE_CRC_RES_5_A_IVB           0x60074
2460
2461 #define _PIPE_CRC_RES_RED_A             0x60060
2462 #define _PIPE_CRC_RES_GREEN_A           0x60064
2463 #define _PIPE_CRC_RES_BLUE_A            0x60068
2464 #define _PIPE_CRC_RES_RES1_A_I915       0x6006c
2465 #define _PIPE_CRC_RES_RES2_A_G4X        0x60080
2466
2467 /* Pipe B CRC regs */
2468 #define _PIPE_CRC_RES_1_B_IVB           0x61064
2469 #define _PIPE_CRC_RES_2_B_IVB           0x61068
2470 #define _PIPE_CRC_RES_3_B_IVB           0x6106c
2471 #define _PIPE_CRC_RES_4_B_IVB           0x61070
2472 #define _PIPE_CRC_RES_5_B_IVB           0x61074
2473
2474 #define PIPE_CRC_CTL(pipe) _TRANSCODER2(pipe, _PIPE_CRC_CTL_A)
2475 #define PIPE_CRC_RES_1_IVB(pipe)        \
2476         _TRANSCODER2(pipe, _PIPE_CRC_RES_1_A_IVB)
2477 #define PIPE_CRC_RES_2_IVB(pipe)        \
2478         _TRANSCODER2(pipe, _PIPE_CRC_RES_2_A_IVB)
2479 #define PIPE_CRC_RES_3_IVB(pipe)        \
2480         _TRANSCODER2(pipe, _PIPE_CRC_RES_3_A_IVB)
2481 #define PIPE_CRC_RES_4_IVB(pipe)        \
2482         _TRANSCODER2(pipe, _PIPE_CRC_RES_4_A_IVB)
2483 #define PIPE_CRC_RES_5_IVB(pipe)        \
2484         _TRANSCODER2(pipe, _PIPE_CRC_RES_5_A_IVB)
2485
2486 #define PIPE_CRC_RES_RED(pipe) \
2487         _TRANSCODER2(pipe, _PIPE_CRC_RES_RED_A)
2488 #define PIPE_CRC_RES_GREEN(pipe) \
2489         _TRANSCODER2(pipe, _PIPE_CRC_RES_GREEN_A)
2490 #define PIPE_CRC_RES_BLUE(pipe) \
2491         _TRANSCODER2(pipe, _PIPE_CRC_RES_BLUE_A)
2492 #define PIPE_CRC_RES_RES1_I915(pipe) \
2493         _TRANSCODER2(pipe, _PIPE_CRC_RES_RES1_A_I915)
2494 #define PIPE_CRC_RES_RES2_G4X(pipe) \
2495         _TRANSCODER2(pipe, _PIPE_CRC_RES_RES2_A_G4X)
2496
2497 /* Pipe A timing regs */
2498 #define _HTOTAL_A       0x60000
2499 #define _HBLANK_A       0x60004
2500 #define _HSYNC_A        0x60008
2501 #define _VTOTAL_A       0x6000c
2502 #define _VBLANK_A       0x60010
2503 #define _VSYNC_A        0x60014
2504 #define _PIPEASRC       0x6001c
2505 #define _BCLRPAT_A      0x60020
2506 #define _VSYNCSHIFT_A   0x60028
2507 #define _PIPE_MULT_A    0x6002c
2508
2509 /* Pipe B timing regs */
2510 #define _HTOTAL_B       0x61000
2511 #define _HBLANK_B       0x61004
2512 #define _HSYNC_B        0x61008
2513 #define _VTOTAL_B       0x6100c
2514 #define _VBLANK_B       0x61010
2515 #define _VSYNC_B        0x61014
2516 #define _PIPEBSRC       0x6101c
2517 #define _BCLRPAT_B      0x61020
2518 #define _VSYNCSHIFT_B   0x61028
2519 #define _PIPE_MULT_B    0x6102c
2520
2521 #define TRANSCODER_A_OFFSET 0x60000
2522 #define TRANSCODER_B_OFFSET 0x61000
2523 #define TRANSCODER_C_OFFSET 0x62000
2524 #define CHV_TRANSCODER_C_OFFSET 0x63000
2525 #define TRANSCODER_EDP_OFFSET 0x6f000
2526
2527 #define _TRANSCODER2(pipe, reg) (dev_priv->info.trans_offsets[(pipe)] - \
2528         dev_priv->info.trans_offsets[TRANSCODER_A] + (reg) + \
2529         dev_priv->info.display_mmio_offset)
2530
2531 #define HTOTAL(trans) _TRANSCODER2(trans, _HTOTAL_A)
2532 #define HBLANK(trans) _TRANSCODER2(trans, _HBLANK_A)
2533 #define HSYNC(trans) _TRANSCODER2(trans, _HSYNC_A)
2534 #define VTOTAL(trans) _TRANSCODER2(trans, _VTOTAL_A)
2535 #define VBLANK(trans) _TRANSCODER2(trans, _VBLANK_A)
2536 #define VSYNC(trans) _TRANSCODER2(trans, _VSYNC_A)
2537 #define BCLRPAT(trans) _TRANSCODER2(trans, _BCLRPAT_A)
2538 #define VSYNCSHIFT(trans) _TRANSCODER2(trans, _VSYNCSHIFT_A)
2539 #define PIPESRC(trans) _TRANSCODER2(trans, _PIPEASRC)
2540 #define PIPE_MULT(trans) _TRANSCODER2(trans, _PIPE_MULT_A)
2541
2542 /* HSW+ eDP PSR registers */
2543 #define EDP_PSR_BASE(dev)                       (IS_HASWELL(dev) ? 0x64800 : 0x6f800)
2544 #define EDP_PSR_CTL(dev)                        (EDP_PSR_BASE(dev) + 0)
2545 #define   EDP_PSR_ENABLE                        (1<<31)
2546 #define   BDW_PSR_SINGLE_FRAME                  (1<<30)
2547 #define   EDP_PSR_LINK_DISABLE                  (0<<27)
2548 #define   EDP_PSR_LINK_STANDBY                  (1<<27)
2549 #define   EDP_PSR_MIN_LINK_ENTRY_TIME_MASK      (3<<25)
2550 #define   EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES   (0<<25)
2551 #define   EDP_PSR_MIN_LINK_ENTRY_TIME_4_LINES   (1<<25)
2552 #define   EDP_PSR_MIN_LINK_ENTRY_TIME_2_LINES   (2<<25)
2553 #define   EDP_PSR_MIN_LINK_ENTRY_TIME_0_LINES   (3<<25)
2554 #define   EDP_PSR_MAX_SLEEP_TIME_SHIFT          20
2555 #define   EDP_PSR_SKIP_AUX_EXIT                 (1<<12)
2556 #define   EDP_PSR_TP1_TP2_SEL                   (0<<11)
2557 #define   EDP_PSR_TP1_TP3_SEL                   (1<<11)
2558 #define   EDP_PSR_TP2_TP3_TIME_500us            (0<<8)
2559 #define   EDP_PSR_TP2_TP3_TIME_100us            (1<<8)
2560 #define   EDP_PSR_TP2_TP3_TIME_2500us           (2<<8)
2561 #define   EDP_PSR_TP2_TP3_TIME_0us              (3<<8)
2562 #define   EDP_PSR_TP1_TIME_500us                (0<<4)
2563 #define   EDP_PSR_TP1_TIME_100us                (1<<4)
2564 #define   EDP_PSR_TP1_TIME_2500us               (2<<4)
2565 #define   EDP_PSR_TP1_TIME_0us                  (3<<4)
2566 #define   EDP_PSR_IDLE_FRAME_SHIFT              0
2567
2568 #define EDP_PSR_AUX_CTL(dev)                    (EDP_PSR_BASE(dev) + 0x10)
2569 #define EDP_PSR_AUX_DATA1(dev)                  (EDP_PSR_BASE(dev) + 0x14)
2570 #define EDP_PSR_AUX_DATA2(dev)                  (EDP_PSR_BASE(dev) + 0x18)
2571 #define EDP_PSR_AUX_DATA3(dev)                  (EDP_PSR_BASE(dev) + 0x1c)
2572 #define EDP_PSR_AUX_DATA4(dev)                  (EDP_PSR_BASE(dev) + 0x20)
2573 #define EDP_PSR_AUX_DATA5(dev)                  (EDP_PSR_BASE(dev) + 0x24)
2574
2575 #define EDP_PSR_STATUS_CTL(dev)                 (EDP_PSR_BASE(dev) + 0x40)
2576 #define   EDP_PSR_STATUS_STATE_MASK             (7<<29)
2577 #define   EDP_PSR_STATUS_STATE_IDLE             (0<<29)
2578 #define   EDP_PSR_STATUS_STATE_SRDONACK         (1<<29)
2579 #define   EDP_PSR_STATUS_STATE_SRDENT           (2<<29)
2580 #define   EDP_PSR_STATUS_STATE_BUFOFF           (3<<29)
2581 #define   EDP_PSR_STATUS_STATE_BUFON            (4<<29)
2582 #define   EDP_PSR_STATUS_STATE_AUXACK           (5<<29)
2583 #define   EDP_PSR_STATUS_STATE_SRDOFFACK        (6<<29)
2584 #define   EDP_PSR_STATUS_LINK_MASK              (3<<26)
2585 #define   EDP_PSR_STATUS_LINK_FULL_OFF          (0<<26)
2586 #define   EDP_PSR_STATUS_LINK_FULL_ON           (1<<26)
2587 #define   EDP_PSR_STATUS_LINK_STANDBY           (2<<26)
2588 #define   EDP_PSR_STATUS_MAX_SLEEP_TIMER_SHIFT  20
2589 #define   EDP_PSR_STATUS_MAX_SLEEP_TIMER_MASK   0x1f
2590 #define   EDP_PSR_STATUS_COUNT_SHIFT            16
2591 #define   EDP_PSR_STATUS_COUNT_MASK             0xf
2592 #define   EDP_PSR_STATUS_AUX_ERROR              (1<<15)
2593 #define   EDP_PSR_STATUS_AUX_SENDING            (1<<12)
2594 #define   EDP_PSR_STATUS_SENDING_IDLE           (1<<9)
2595 #define   EDP_PSR_STATUS_SENDING_TP2_TP3        (1<<8)
2596 #define   EDP_PSR_STATUS_SENDING_TP1            (1<<4)
2597 #define   EDP_PSR_STATUS_IDLE_MASK              0xf
2598
2599 #define EDP_PSR_PERF_CNT(dev)           (EDP_PSR_BASE(dev) + 0x44)
2600 #define   EDP_PSR_PERF_CNT_MASK         0xffffff
2601
2602 #define EDP_PSR_DEBUG_CTL(dev)          (EDP_PSR_BASE(dev) + 0x60)
2603 #define   EDP_PSR_DEBUG_MASK_LPSP       (1<<27)
2604 #define   EDP_PSR_DEBUG_MASK_MEMUP      (1<<26)
2605 #define   EDP_PSR_DEBUG_MASK_HPD        (1<<25)
2606
2607 /* VGA port control */
2608 #define ADPA                    0x61100
2609 #define PCH_ADPA                0xe1100
2610 #define VLV_ADPA                (VLV_DISPLAY_BASE + ADPA)
2611
2612 #define   ADPA_DAC_ENABLE       (1<<31)
2613 #define   ADPA_DAC_DISABLE      0
2614 #define   ADPA_PIPE_SELECT_MASK (1<<30)
2615 #define   ADPA_PIPE_A_SELECT    0
2616 #define   ADPA_PIPE_B_SELECT    (1<<30)
2617 #define   ADPA_PIPE_SELECT(pipe) ((pipe) << 30)
2618 /* CPT uses bits 29:30 for pch transcoder select */
2619 #define   ADPA_CRT_HOTPLUG_MASK  0x03ff0000 /* bit 25-16 */
2620 #define   ADPA_CRT_HOTPLUG_MONITOR_NONE  (0<<24)
2621 #define   ADPA_CRT_HOTPLUG_MONITOR_MASK  (3<<24)
2622 #define   ADPA_CRT_HOTPLUG_MONITOR_COLOR (3<<24)
2623 #define   ADPA_CRT_HOTPLUG_MONITOR_MONO  (2<<24)
2624 #define   ADPA_CRT_HOTPLUG_ENABLE        (1<<23)
2625 #define   ADPA_CRT_HOTPLUG_PERIOD_64     (0<<22)
2626 #define   ADPA_CRT_HOTPLUG_PERIOD_128    (1<<22)
2627 #define   ADPA_CRT_HOTPLUG_WARMUP_5MS    (0<<21)
2628 #define   ADPA_CRT_HOTPLUG_WARMUP_10MS   (1<<21)
2629 #define   ADPA_CRT_HOTPLUG_SAMPLE_2S     (0<<20)
2630 #define   ADPA_CRT_HOTPLUG_SAMPLE_4S     (1<<20)
2631 #define   ADPA_CRT_HOTPLUG_VOLTAGE_40    (0<<18)
2632 #define   ADPA_CRT_HOTPLUG_VOLTAGE_50    (1<<18)
2633 #define   ADPA_CRT_HOTPLUG_VOLTAGE_60    (2<<18)
2634 #define   ADPA_CRT_HOTPLUG_VOLTAGE_70    (3<<18)
2635 #define   ADPA_CRT_HOTPLUG_VOLREF_325MV  (0<<17)
2636 #define   ADPA_CRT_HOTPLUG_VOLREF_475MV  (1<<17)
2637 #define   ADPA_CRT_HOTPLUG_FORCE_TRIGGER (1<<16)
2638 #define   ADPA_USE_VGA_HVPOLARITY (1<<15)
2639 #define   ADPA_SETS_HVPOLARITY  0
2640 #define   ADPA_VSYNC_CNTL_DISABLE (1<<10)
2641 #define   ADPA_VSYNC_CNTL_ENABLE 0
2642 #define   ADPA_HSYNC_CNTL_DISABLE (1<<11)
2643 #define   ADPA_HSYNC_CNTL_ENABLE 0
2644 #define   ADPA_VSYNC_ACTIVE_HIGH (1<<4)
2645 #define   ADPA_VSYNC_ACTIVE_LOW 0
2646 #define   ADPA_HSYNC_ACTIVE_HIGH (1<<3)
2647 #define   ADPA_HSYNC_ACTIVE_LOW 0
2648 #define   ADPA_DPMS_MASK        (~(3<<10))
2649 #define   ADPA_DPMS_ON          (0<<10)
2650 #define   ADPA_DPMS_SUSPEND     (1<<10)
2651 #define   ADPA_DPMS_STANDBY     (2<<10)
2652 #define   ADPA_DPMS_OFF         (3<<10)
2653
2654
2655 /* Hotplug control (945+ only) */
2656 #define PORT_HOTPLUG_EN         (dev_priv->info.display_mmio_offset + 0x61110)
2657 #define   PORTB_HOTPLUG_INT_EN                  (1 << 29)
2658 #define   PORTC_HOTPLUG_INT_EN                  (1 << 28)
2659 #define   PORTD_HOTPLUG_INT_EN                  (1 << 27)
2660 #define   SDVOB_HOTPLUG_INT_EN                  (1 << 26)
2661 #define   SDVOC_HOTPLUG_INT_EN                  (1 << 25)
2662 #define   TV_HOTPLUG_INT_EN                     (1 << 18)
2663 #define   CRT_HOTPLUG_INT_EN                    (1 << 9)
2664 #define HOTPLUG_INT_EN_MASK                     (PORTB_HOTPLUG_INT_EN | \
2665                                                  PORTC_HOTPLUG_INT_EN | \
2666                                                  PORTD_HOTPLUG_INT_EN | \
2667                                                  SDVOC_HOTPLUG_INT_EN | \
2668                                                  SDVOB_HOTPLUG_INT_EN | \
2669                                                  CRT_HOTPLUG_INT_EN)
2670 #define   CRT_HOTPLUG_FORCE_DETECT              (1 << 3)
2671 #define CRT_HOTPLUG_ACTIVATION_PERIOD_32        (0 << 8)
2672 /* must use period 64 on GM45 according to docs */
2673 #define CRT_HOTPLUG_ACTIVATION_PERIOD_64        (1 << 8)
2674 #define CRT_HOTPLUG_DAC_ON_TIME_2M              (0 << 7)
2675 #define CRT_HOTPLUG_DAC_ON_TIME_4M              (1 << 7)
2676 #define CRT_HOTPLUG_VOLTAGE_COMPARE_40          (0 << 5)
2677 #define CRT_HOTPLUG_VOLTAGE_COMPARE_50          (1 << 5)
2678 #define CRT_HOTPLUG_VOLTAGE_COMPARE_60          (2 << 5)
2679 #define CRT_HOTPLUG_VOLTAGE_COMPARE_70          (3 << 5)
2680 #define CRT_HOTPLUG_VOLTAGE_COMPARE_MASK        (3 << 5)
2681 #define CRT_HOTPLUG_DETECT_DELAY_1G             (0 << 4)
2682 #define CRT_HOTPLUG_DETECT_DELAY_2G             (1 << 4)
2683 #define CRT_HOTPLUG_DETECT_VOLTAGE_325MV        (0 << 2)
2684 #define CRT_HOTPLUG_DETECT_VOLTAGE_475MV        (1 << 2)
2685
2686 #define PORT_HOTPLUG_STAT       (dev_priv->info.display_mmio_offset + 0x61114)
2687 /*
2688  * HDMI/DP bits are gen4+
2689  *
2690  * WARNING: Bspec for hpd status bits on gen4 seems to be completely confused.
2691  * Please check the detailed lore in the commit message for for experimental
2692  * evidence.
2693  */
2694 #define   PORTD_HOTPLUG_LIVE_STATUS_G4X         (1 << 29)
2695 #define   PORTC_HOTPLUG_LIVE_STATUS_G4X         (1 << 28)
2696 #define   PORTB_HOTPLUG_LIVE_STATUS_G4X         (1 << 27)
2697 /* VLV DP/HDMI bits again match Bspec */
2698 #define   PORTD_HOTPLUG_LIVE_STATUS_VLV         (1 << 27)
2699 #define   PORTC_HOTPLUG_LIVE_STATUS_VLV         (1 << 28)
2700 #define   PORTB_HOTPLUG_LIVE_STATUS_VLV         (1 << 29)
2701 #define   PORTD_HOTPLUG_INT_STATUS              (3 << 21)
2702 #define   PORTD_HOTPLUG_INT_LONG_PULSE          (2 << 21)
2703 #define   PORTD_HOTPLUG_INT_SHORT_PULSE         (1 << 21)
2704 #define   PORTC_HOTPLUG_INT_STATUS              (3 << 19)
2705 #define   PORTC_HOTPLUG_INT_LONG_PULSE          (2 << 19)
2706 #define   PORTC_HOTPLUG_INT_SHORT_PULSE         (1 << 19)
2707 #define   PORTB_HOTPLUG_INT_STATUS              (3 << 17)
2708 #define   PORTB_HOTPLUG_INT_LONG_PULSE          (2 << 17)
2709 #define   PORTB_HOTPLUG_INT_SHORT_PLUSE         (1 << 17)
2710 /* CRT/TV common between gen3+ */
2711 #define   CRT_HOTPLUG_INT_STATUS                (1 << 11)
2712 #define   TV_HOTPLUG_INT_STATUS                 (1 << 10)
2713 #define   CRT_HOTPLUG_MONITOR_MASK              (3 << 8)
2714 #define   CRT_HOTPLUG_MONITOR_COLOR             (3 << 8)
2715 #define   CRT_HOTPLUG_MONITOR_MONO              (2 << 8)
2716 #define   CRT_HOTPLUG_MONITOR_NONE              (0 << 8)
2717 #define   DP_AUX_CHANNEL_D_INT_STATUS_G4X       (1 << 6)
2718 #define   DP_AUX_CHANNEL_C_INT_STATUS_G4X       (1 << 5)
2719 #define   DP_AUX_CHANNEL_B_INT_STATUS_G4X       (1 << 4)
2720 #define   DP_AUX_CHANNEL_MASK_INT_STATUS_G4X    (7 << 4)
2721
2722 /* SDVO is different across gen3/4 */
2723 #define   SDVOC_HOTPLUG_INT_STATUS_G4X          (1 << 3)
2724 #define   SDVOB_HOTPLUG_INT_STATUS_G4X          (1 << 2)
2725 /*
2726  * Bspec seems to be seriously misleaded about the SDVO hpd bits on i965g/gm,
2727  * since reality corrobates that they're the same as on gen3. But keep these
2728  * bits here (and the comment!) to help any other lost wanderers back onto the
2729  * right tracks.
2730  */
2731 #define   SDVOC_HOTPLUG_INT_STATUS_I965         (3 << 4)
2732 #define   SDVOB_HOTPLUG_INT_STATUS_I965         (3 << 2)
2733 #define   SDVOC_HOTPLUG_INT_STATUS_I915         (1 << 7)
2734 #define   SDVOB_HOTPLUG_INT_STATUS_I915         (1 << 6)
2735 #define   HOTPLUG_INT_STATUS_G4X                (CRT_HOTPLUG_INT_STATUS | \
2736                                                  SDVOB_HOTPLUG_INT_STATUS_G4X | \
2737                                                  SDVOC_HOTPLUG_INT_STATUS_G4X | \
2738                                                  PORTB_HOTPLUG_INT_STATUS | \
2739                                                  PORTC_HOTPLUG_INT_STATUS | \
2740                                                  PORTD_HOTPLUG_INT_STATUS)
2741
2742 #define HOTPLUG_INT_STATUS_I915                 (CRT_HOTPLUG_INT_STATUS | \
2743                                                  SDVOB_HOTPLUG_INT_STATUS_I915 | \
2744                                                  SDVOC_HOTPLUG_INT_STATUS_I915 | \
2745                                                  PORTB_HOTPLUG_INT_STATUS | \
2746                                                  PORTC_HOTPLUG_INT_STATUS | \
2747                                                  PORTD_HOTPLUG_INT_STATUS)
2748
2749 /* SDVO and HDMI port control.
2750  * The same register may be used for SDVO or HDMI */
2751 #define GEN3_SDVOB      0x61140
2752 #define GEN3_SDVOC      0x61160
2753 #define GEN4_HDMIB      GEN3_SDVOB
2754 #define GEN4_HDMIC      GEN3_SDVOC
2755 #define CHV_HDMID       0x6116C
2756 #define PCH_SDVOB       0xe1140
2757 #define PCH_HDMIB       PCH_SDVOB
2758 #define PCH_HDMIC       0xe1150
2759 #define PCH_HDMID       0xe1160
2760
2761 #define PORT_DFT_I9XX                           0x61150
2762 #define   DC_BALANCE_RESET                      (1 << 25)
2763 #define PORT_DFT2_G4X           (dev_priv->info.display_mmio_offset + 0x61154)
2764 #define   DC_BALANCE_RESET_VLV                  (1 << 31)
2765 #define   PIPE_SCRAMBLE_RESET_MASK              (0x3 << 0)
2766 #define   PIPE_B_SCRAMBLE_RESET                 (1 << 1)
2767 #define   PIPE_A_SCRAMBLE_RESET                 (1 << 0)
2768
2769 /* Gen 3 SDVO bits: */
2770 #define   SDVO_ENABLE                           (1 << 31)
2771 #define   SDVO_PIPE_SEL(pipe)                   ((pipe) << 30)
2772 #define   SDVO_PIPE_SEL_MASK                    (1 << 30)
2773 #define   SDVO_PIPE_B_SELECT                    (1 << 30)
2774 #define   SDVO_STALL_SELECT                     (1 << 29)
2775 #define   SDVO_INTERRUPT_ENABLE                 (1 << 26)
2776 /*
2777  * 915G/GM SDVO pixel multiplier.
2778  * Programmed value is multiplier - 1, up to 5x.
2779  * \sa DPLL_MD_UDI_MULTIPLIER_MASK
2780  */
2781 #define   SDVO_PORT_MULTIPLY_MASK               (7 << 23)
2782 #define   SDVO_PORT_MULTIPLY_SHIFT              23
2783 #define   SDVO_PHASE_SELECT_MASK                (15 << 19)
2784 #define   SDVO_PHASE_SELECT_DEFAULT             (6 << 19)
2785 #define   SDVO_CLOCK_OUTPUT_INVERT              (1 << 18)
2786 #define   SDVOC_GANG_MODE                       (1 << 16) /* Port C only */
2787 #define   SDVO_BORDER_ENABLE                    (1 << 7) /* SDVO only */
2788 #define   SDVOB_PCIE_CONCURRENCY                (1 << 3) /* Port B only */
2789 #define   SDVO_DETECTED                         (1 << 2)
2790 /* Bits to be preserved when writing */
2791 #define   SDVOB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14) | \
2792                                SDVO_INTERRUPT_ENABLE)
2793 #define   SDVOC_PRESERVE_MASK ((1 << 17) | SDVO_INTERRUPT_ENABLE)
2794
2795 /* Gen 4 SDVO/HDMI bits: */
2796 #define   SDVO_COLOR_FORMAT_8bpc                (0 << 26)
2797 #define   SDVO_COLOR_FORMAT_MASK                (7 << 26)
2798 #define   SDVO_ENCODING_SDVO                    (0 << 10)
2799 #define   SDVO_ENCODING_HDMI                    (2 << 10)
2800 #define   HDMI_MODE_SELECT_HDMI                 (1 << 9) /* HDMI only */
2801 #define   HDMI_MODE_SELECT_DVI                  (0 << 9) /* HDMI only */
2802 #define   HDMI_COLOR_RANGE_16_235               (1 << 8) /* HDMI only */
2803 #define   SDVO_AUDIO_ENABLE                     (1 << 6)
2804 /* VSYNC/HSYNC bits new with 965, default is to be set */
2805 #define   SDVO_VSYNC_ACTIVE_HIGH                (1 << 4)
2806 #define   SDVO_HSYNC_ACTIVE_HIGH                (1 << 3)
2807
2808 /* Gen 5 (IBX) SDVO/HDMI bits: */
2809 #define   HDMI_COLOR_FORMAT_12bpc               (3 << 26) /* HDMI only */
2810 #define   SDVOB_HOTPLUG_ENABLE                  (1 << 23) /* SDVO only */
2811
2812 /* Gen 6 (CPT) SDVO/HDMI bits: */
2813 #define   SDVO_PIPE_SEL_CPT(pipe)               ((pipe) << 29)
2814 #define   SDVO_PIPE_SEL_MASK_CPT                (3 << 29)
2815
2816 /* CHV SDVO/HDMI bits: */
2817 #define   SDVO_PIPE_SEL_CHV(pipe)               ((pipe) << 24)
2818 #define   SDVO_PIPE_SEL_MASK_CHV                (3 << 24)
2819
2820
2821 /* DVO port control */
2822 #define DVOA                    0x61120
2823 #define DVOB                    0x61140
2824 #define DVOC                    0x61160
2825 #define   DVO_ENABLE                    (1 << 31)
2826 #define   DVO_PIPE_B_SELECT             (1 << 30)
2827 #define   DVO_PIPE_STALL_UNUSED         (0 << 28)
2828 #define   DVO_PIPE_STALL                (1 << 28)
2829 #define   DVO_PIPE_STALL_TV             (2 << 28)
2830 #define   DVO_PIPE_STALL_MASK           (3 << 28)
2831 #define   DVO_USE_VGA_SYNC              (1 << 15)
2832 #define   DVO_DATA_ORDER_I740           (0 << 14)
2833 #define   DVO_DATA_ORDER_FP             (1 << 14)
2834 #define   DVO_VSYNC_DISABLE             (1 << 11)
2835 #define   DVO_HSYNC_DISABLE             (1 << 10)
2836 #define   DVO_VSYNC_TRISTATE            (1 << 9)
2837 #define   DVO_HSYNC_TRISTATE            (1 << 8)
2838 #define   DVO_BORDER_ENABLE             (1 << 7)
2839 #define   DVO_DATA_ORDER_GBRG           (1 << 6)
2840 #define   DVO_DATA_ORDER_RGGB           (0 << 6)
2841 #define   DVO_DATA_ORDER_GBRG_ERRATA    (0 << 6)
2842 #define   DVO_DATA_ORDER_RGGB_ERRATA    (1 << 6)
2843 #define   DVO_VSYNC_ACTIVE_HIGH         (1 << 4)
2844 #define   DVO_HSYNC_ACTIVE_HIGH         (1 << 3)
2845 #define   DVO_BLANK_ACTIVE_HIGH         (1 << 2)
2846 #define   DVO_OUTPUT_CSTATE_PIXELS      (1 << 1)        /* SDG only */
2847 #define   DVO_OUTPUT_SOURCE_SIZE_PIXELS (1 << 0)        /* SDG only */
2848 #define   DVO_PRESERVE_MASK             (0x7<<24)
2849 #define DVOA_SRCDIM             0x61124
2850 #define DVOB_SRCDIM             0x61144
2851 #define DVOC_SRCDIM             0x61164
2852 #define   DVO_SRCDIM_HORIZONTAL_SHIFT   12
2853 #define   DVO_SRCDIM_VERTICAL_SHIFT     0
2854
2855 /* LVDS port control */
2856 #define LVDS                    0x61180
2857 /*
2858  * Enables the LVDS port.  This bit must be set before DPLLs are enabled, as
2859  * the DPLL semantics change when the LVDS is assigned to that pipe.
2860  */
2861 #define   LVDS_PORT_EN                  (1 << 31)
2862 /* Selects pipe B for LVDS data.  Must be set on pre-965. */
2863 #define   LVDS_PIPEB_SELECT             (1 << 30)
2864 #define   LVDS_PIPE_MASK                (1 << 30)
2865 #define   LVDS_PIPE(pipe)               ((pipe) << 30)
2866 /* LVDS dithering flag on 965/g4x platform */
2867 #define   LVDS_ENABLE_DITHER            (1 << 25)
2868 /* LVDS sync polarity flags. Set to invert (i.e. negative) */
2869 #define   LVDS_VSYNC_POLARITY           (1 << 21)
2870 #define   LVDS_HSYNC_POLARITY           (1 << 20)
2871
2872 /* Enable border for unscaled (or aspect-scaled) display */
2873 #define   LVDS_BORDER_ENABLE            (1 << 15)
2874 /*
2875  * Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
2876  * pixel.
2877  */
2878 #define   LVDS_A0A2_CLKA_POWER_MASK     (3 << 8)
2879 #define   LVDS_A0A2_CLKA_POWER_DOWN     (0 << 8)
2880 #define   LVDS_A0A2_CLKA_POWER_UP       (3 << 8)
2881 /*
2882  * Controls the A3 data pair, which contains the additional LSBs for 24 bit
2883  * mode.  Only enabled if LVDS_A0A2_CLKA_POWER_UP also indicates it should be
2884  * on.
2885  */
2886 #define   LVDS_A3_POWER_MASK            (3 << 6)
2887 #define   LVDS_A3_POWER_DOWN            (0 << 6)
2888 #define   LVDS_A3_POWER_UP              (3 << 6)
2889 /*
2890  * Controls the CLKB pair.  This should only be set when LVDS_B0B3_POWER_UP
2891  * is set.
2892  */
2893 #define   LVDS_CLKB_POWER_MASK          (3 << 4)
2894 #define   LVDS_CLKB_POWER_DOWN          (0 << 4)
2895 #define   LVDS_CLKB_POWER_UP            (3 << 4)
2896 /*
2897  * Controls the B0-B3 data pairs.  This must be set to match the DPLL p2
2898  * setting for whether we are in dual-channel mode.  The B3 pair will
2899  * additionally only be powered up when LVDS_A3_POWER_UP is set.
2900  */
2901 #define   LVDS_B0B3_POWER_MASK          (3 << 2)
2902 #define   LVDS_B0B3_POWER_DOWN          (0 << 2)
2903 #define   LVDS_B0B3_POWER_UP            (3 << 2)
2904
2905 /* Video Data Island Packet control */
2906 #define VIDEO_DIP_DATA          0x61178
2907 /* Read the description of VIDEO_DIP_DATA (before Haswel) or VIDEO_DIP_ECC
2908  * (Haswell and newer) to see which VIDEO_DIP_DATA byte corresponds to each byte
2909  * of the infoframe structure specified by CEA-861. */
2910 #define   VIDEO_DIP_DATA_SIZE   32
2911 #define   VIDEO_DIP_VSC_DATA_SIZE       36
2912 #define VIDEO_DIP_CTL           0x61170
2913 /* Pre HSW: */
2914 #define   VIDEO_DIP_ENABLE              (1 << 31)
2915 #define   VIDEO_DIP_PORT(port)          ((port) << 29)
2916 #define   VIDEO_DIP_PORT_MASK           (3 << 29)
2917 #define   VIDEO_DIP_ENABLE_GCP          (1 << 25)
2918 #define   VIDEO_DIP_ENABLE_AVI          (1 << 21)
2919 #define   VIDEO_DIP_ENABLE_VENDOR       (2 << 21)
2920 #define   VIDEO_DIP_ENABLE_GAMUT        (4 << 21)
2921 #define   VIDEO_DIP_ENABLE_SPD          (8 << 21)
2922 #define   VIDEO_DIP_SELECT_AVI          (0 << 19)
2923 #define   VIDEO_DIP_SELECT_VENDOR       (1 << 19)
2924 #define   VIDEO_DIP_SELECT_SPD          (3 << 19)
2925 #define   VIDEO_DIP_SELECT_MASK         (3 << 19)
2926 #define   VIDEO_DIP_FREQ_ONCE           (0 << 16)
2927 #define   VIDEO_DIP_FREQ_VSYNC          (1 << 16)
2928 #define   VIDEO_DIP_FREQ_2VSYNC         (2 << 16)
2929 #define   VIDEO_DIP_FREQ_MASK           (3 << 16)
2930 /* HSW and later: */
2931 #define   VIDEO_DIP_ENABLE_VSC_HSW      (1 << 20)
2932 #define   VIDEO_DIP_ENABLE_GCP_HSW      (1 << 16)
2933 #define   VIDEO_DIP_ENABLE_AVI_HSW      (1 << 12)
2934 #define   VIDEO_DIP_ENABLE_VS_HSW       (1 << 8)
2935 #define   VIDEO_DIP_ENABLE_GMP_HSW      (1 << 4)
2936 #define   VIDEO_DIP_ENABLE_SPD_HSW      (1 << 0)
2937
2938 /* Panel power sequencing */
2939 #define PP_STATUS       0x61200
2940 #define   PP_ON         (1 << 31)
2941 /*
2942  * Indicates that all dependencies of the panel are on:
2943  *
2944  * - PLL enabled
2945  * - pipe enabled
2946  * - LVDS/DVOB/DVOC on
2947  */
2948 #define   PP_READY              (1 << 30)
2949 #define   PP_SEQUENCE_NONE      (0 << 28)
2950 #define   PP_SEQUENCE_POWER_UP  (1 << 28)
2951 #define   PP_SEQUENCE_POWER_DOWN (2 << 28)
2952 #define   PP_SEQUENCE_MASK      (3 << 28)
2953 #define   PP_SEQUENCE_SHIFT     28
2954 #define   PP_CYCLE_DELAY_ACTIVE (1 << 27)
2955 #define   PP_SEQUENCE_STATE_MASK 0x0000000f
2956 #define   PP_SEQUENCE_STATE_OFF_IDLE    (0x0 << 0)
2957 #define   PP_SEQUENCE_STATE_OFF_S0_1    (0x1 << 0)
2958 #define   PP_SEQUENCE_STATE_OFF_S0_2    (0x2 << 0)
2959 #define   PP_SEQUENCE_STATE_OFF_S0_3    (0x3 << 0)
2960 #define   PP_SEQUENCE_STATE_ON_IDLE     (0x8 << 0)
2961 #define   PP_SEQUENCE_STATE_ON_S1_0     (0x9 << 0)
2962 #define   PP_SEQUENCE_STATE_ON_S1_2     (0xa << 0)
2963 #define   PP_SEQUENCE_STATE_ON_S1_3     (0xb << 0)
2964 #define   PP_SEQUENCE_STATE_RESET       (0xf << 0)
2965 #define PP_CONTROL      0x61204
2966 #define   POWER_TARGET_ON       (1 << 0)
2967 #define PP_ON_DELAYS    0x61208
2968 #define PP_OFF_DELAYS   0x6120c
2969 #define PP_DIVISOR      0x61210
2970
2971 /* Panel fitting */
2972 #define PFIT_CONTROL    (dev_priv->info.display_mmio_offset + 0x61230)
2973 #define   PFIT_ENABLE           (1 << 31)
2974 #define   PFIT_PIPE_MASK        (3 << 29)
2975 #define   PFIT_PIPE_SHIFT       29
2976 #define   VERT_INTERP_DISABLE   (0 << 10)
2977 #define   VERT_INTERP_BILINEAR  (1 << 10)
2978 #define   VERT_INTERP_MASK      (3 << 10)
2979 #define   VERT_AUTO_SCALE       (1 << 9)
2980 #define   HORIZ_INTERP_DISABLE  (0 << 6)
2981 #define   HORIZ_INTERP_BILINEAR (1 << 6)
2982 #define   HORIZ_INTERP_MASK     (3 << 6)
2983 #define   HORIZ_AUTO_SCALE      (1 << 5)
2984 #define   PANEL_8TO6_DITHER_ENABLE (1 << 3)
2985 #define   PFIT_FILTER_FUZZY     (0 << 24)
2986 #define   PFIT_SCALING_AUTO     (0 << 26)
2987 #define   PFIT_SCALING_PROGRAMMED (1 << 26)
2988 #define   PFIT_SCALING_PILLAR   (2 << 26)
2989 #define   PFIT_SCALING_LETTER   (3 << 26)
2990 #define PFIT_PGM_RATIOS (dev_priv->info.display_mmio_offset + 0x61234)
2991 /* Pre-965 */
2992 #define         PFIT_VERT_SCALE_SHIFT           20
2993 #define         PFIT_VERT_SCALE_MASK            0xfff00000
2994 #define         PFIT_HORIZ_SCALE_SHIFT          4
2995 #define         PFIT_HORIZ_SCALE_MASK           0x0000fff0
2996 /* 965+ */
2997 #define         PFIT_VERT_SCALE_SHIFT_965       16
2998 #define         PFIT_VERT_SCALE_MASK_965        0x1fff0000
2999 #define         PFIT_HORIZ_SCALE_SHIFT_965      0
3000 #define         PFIT_HORIZ_SCALE_MASK_965       0x00001fff
3001
3002 #define PFIT_AUTO_RATIOS (dev_priv->info.display_mmio_offset + 0x61238)
3003
3004 #define _VLV_BLC_PWM_CTL2_A (dev_priv->info.display_mmio_offset + 0x61250)
3005 #define _VLV_BLC_PWM_CTL2_B (dev_priv->info.display_mmio_offset + 0x61350)
3006 #define VLV_BLC_PWM_CTL2(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL2_A, \
3007                                      _VLV_BLC_PWM_CTL2_B)
3008
3009 #define _VLV_BLC_PWM_CTL_A (dev_priv->info.display_mmio_offset + 0x61254)
3010 #define _VLV_BLC_PWM_CTL_B (dev_priv->info.display_mmio_offset + 0x61354)
3011 #define VLV_BLC_PWM_CTL(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL_A, \
3012                                     _VLV_BLC_PWM_CTL_B)
3013
3014 #define _VLV_BLC_HIST_CTL_A (dev_priv->info.display_mmio_offset + 0x61260)
3015 #define _VLV_BLC_HIST_CTL_B (dev_priv->info.display_mmio_offset + 0x61360)
3016 #define VLV_BLC_HIST_CTL(pipe) _PIPE(pipe, _VLV_BLC_HIST_CTL_A, \
3017                                      _VLV_BLC_HIST_CTL_B)
3018
3019 /* Backlight control */
3020 #define BLC_PWM_CTL2    (dev_priv->info.display_mmio_offset + 0x61250) /* 965+ only */
3021 #define   BLM_PWM_ENABLE                (1 << 31)
3022 #define   BLM_COMBINATION_MODE          (1 << 30) /* gen4 only */
3023 #define   BLM_PIPE_SELECT               (1 << 29)
3024 #define   BLM_PIPE_SELECT_IVB           (3 << 29)
3025 #define   BLM_PIPE_A                    (0 << 29)
3026 #define   BLM_PIPE_B                    (1 << 29)
3027 #define   BLM_PIPE_C                    (2 << 29) /* ivb + */
3028 #define   BLM_TRANSCODER_A              BLM_PIPE_A /* hsw */
3029 #define   BLM_TRANSCODER_B              BLM_PIPE_B
3030 #define   BLM_TRANSCODER_C              BLM_PIPE_C
3031 #define   BLM_TRANSCODER_EDP            (3 << 29)
3032 #define   BLM_PIPE(pipe)                ((pipe) << 29)
3033 #define   BLM_POLARITY_I965             (1 << 28) /* gen4 only */
3034 #define   BLM_PHASE_IN_INTERUPT_STATUS  (1 << 26)
3035 #define   BLM_PHASE_IN_ENABLE           (1 << 25)
3036 #define   BLM_PHASE_IN_INTERUPT_ENABL   (1 << 24)
3037 #define   BLM_PHASE_IN_TIME_BASE_SHIFT  (16)
3038 #define   BLM_PHASE_IN_TIME_BASE_MASK   (0xff << 16)
3039 #define   BLM_PHASE_IN_COUNT_SHIFT      (8)
3040 #define   BLM_PHASE_IN_COUNT_MASK       (0xff << 8)
3041 #define   BLM_PHASE_IN_INCR_SHIFT       (0)
3042 #define   BLM_PHASE_IN_INCR_MASK        (0xff << 0)
3043 #define BLC_PWM_CTL     (dev_priv->info.display_mmio_offset + 0x61254)
3044 /*
3045  * This is the most significant 15 bits of the number of backlight cycles in a
3046  * complete cycle of the modulated backlight control.
3047  *
3048  * The actual value is this field multiplied by two.
3049  */
3050 #define   BACKLIGHT_MODULATION_FREQ_SHIFT       (17)
3051 #define   BACKLIGHT_MODULATION_FREQ_MASK        (0x7fff << 17)
3052 #define   BLM_LEGACY_MODE                       (1 << 16) /* gen2 only */
3053 /*
3054  * This is the number of cycles out of the backlight modulation cycle for which
3055  * the backlight is on.
3056  *
3057  * This field must be no greater than the number of cycles in the complete
3058  * backlight modulation cycle.
3059  */
3060 #define   BACKLIGHT_DUTY_CYCLE_SHIFT            (0)
3061 #define   BACKLIGHT_DUTY_CYCLE_MASK             (0xffff)
3062 #define   BACKLIGHT_DUTY_CYCLE_MASK_PNV         (0xfffe)