]> code.ossystems Code Review - openembedded-core.git/blob
9a035b544c6dad1fcba5aa1a066aa309887f5849
[openembedded-core.git] /
1 From: Jesse Barnes <jbarnes@virtuousgeek.org>
2 Date: Tue, 29 Jul 2008 18:54:06 +0000 (-0700)
3 Subject: i915: Use more consistent names for regs, and store them in a separate file.
4 X-Git-Tag: v2.6.12-rc2
5 X-Git-Url: http://gitweb.freedesktop.org/?p=users/anholt/anholt/linux-2.6.git;a=commitdiff;h=db1cbbd8c4d42e58e9acb3e7af59ad1bb238260d
6
7 i915: Use more consistent names for regs, and store them in a separate file.
8
9 Signed-off-by: Eric Anholt <eric@anholt.net>
10 ---
11
12 --- a/drivers/gpu/drm/i915/i915_dma.c
13 +++ b/drivers/gpu/drm/i915/i915_dma.c
14 @@ -40,11 +40,11 @@ int i915_wait_ring(struct drm_device * d
15  {
16         drm_i915_private_t *dev_priv = dev->dev_private;
17         drm_i915_ring_buffer_t *ring = &(dev_priv->ring);
18 -       u32 last_head = I915_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
19 +       u32 last_head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
20         int i;
21  
22         for (i = 0; i < 10000; i++) {
23 -               ring->head = I915_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
24 +               ring->head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
25                 ring->space = ring->head - (ring->tail + 8);
26                 if (ring->space < 0)
27                         ring->space += ring->Size;
28 @@ -67,8 +67,8 @@ void i915_kernel_lost_context(struct drm
29         drm_i915_private_t *dev_priv = dev->dev_private;
30         drm_i915_ring_buffer_t *ring = &(dev_priv->ring);
31  
32 -       ring->head = I915_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
33 -       ring->tail = I915_READ(LP_RING + RING_TAIL) & TAIL_ADDR;
34 +       ring->head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
35 +       ring->tail = I915_READ(PRB0_TAIL) & TAIL_ADDR;
36         ring->space = ring->head - (ring->tail + 8);
37         if (ring->space < 0)
38                 ring->space += ring->Size;
39 @@ -98,13 +98,13 @@ static int i915_dma_cleanup(struct drm_d
40                 drm_pci_free(dev, dev_priv->status_page_dmah);
41                 dev_priv->status_page_dmah = NULL;
42                 /* Need to rewrite hardware status page */
43 -               I915_WRITE(0x02080, 0x1ffff000);
44 +               I915_WRITE(HWS_PGA, 0x1ffff000);
45         }
46  
47         if (dev_priv->status_gfx_addr) {
48                 dev_priv->status_gfx_addr = 0;
49                 drm_core_ioremapfree(&dev_priv->hws_map, dev);
50 -               I915_WRITE(0x2080, 0x1ffff000);
51 +               I915_WRITE(HWS_PGA, 0x1ffff000);
52         }
53  
54         return 0;
55 @@ -170,7 +170,7 @@ static int i915_initialize(struct drm_de
56                 dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr;
57  
58                 memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
59 -               I915_WRITE(0x02080, dev_priv->dma_status_page);
60 +               I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
61         }
62         DRM_DEBUG("Enabled hardware status page\n");
63         return 0;
64 @@ -201,9 +201,9 @@ static int i915_dma_resume(struct drm_de
65         DRM_DEBUG("hw status page @ %p\n", dev_priv->hw_status_page);
66  
67         if (dev_priv->status_gfx_addr != 0)
68 -               I915_WRITE(0x02080, dev_priv->status_gfx_addr);
69 +               I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
70         else
71 -               I915_WRITE(0x02080, dev_priv->dma_status_page);
72 +               I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
73         DRM_DEBUG("Enabled hardware status page\n");
74  
75         return 0;
76 @@ -402,8 +402,8 @@ static void i915_emit_breadcrumb(struct 
77                 dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1;
78  
79         BEGIN_LP_RING(4);
80 -       OUT_RING(CMD_STORE_DWORD_IDX);
81 -       OUT_RING(20);
82 +       OUT_RING(MI_STORE_DWORD_INDEX);
83 +       OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT);
84         OUT_RING(dev_priv->counter);
85         OUT_RING(0);
86         ADVANCE_LP_RING();
87 @@ -505,7 +505,7 @@ static int i915_dispatch_flip(struct drm
88         i915_kernel_lost_context(dev);
89  
90         BEGIN_LP_RING(2);
91 -       OUT_RING(INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE);
92 +       OUT_RING(MI_FLUSH | MI_READ_FLUSH);
93         OUT_RING(0);
94         ADVANCE_LP_RING();
95  
96 @@ -530,8 +530,8 @@ static int i915_dispatch_flip(struct drm
97         dev_priv->sarea_priv->last_enqueue = dev_priv->counter++;
98  
99         BEGIN_LP_RING(4);
100 -       OUT_RING(CMD_STORE_DWORD_IDX);
101 -       OUT_RING(20);
102 +       OUT_RING(MI_STORE_DWORD_INDEX);
103 +       OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT);
104         OUT_RING(dev_priv->counter);
105         OUT_RING(0);
106         ADVANCE_LP_RING();
107 @@ -728,8 +728,8 @@ static int i915_set_status_page(struct d
108         dev_priv->hw_status_page = dev_priv->hws_map.handle;
109  
110         memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
111 -       I915_WRITE(0x02080, dev_priv->status_gfx_addr);
112 -       DRM_DEBUG("load hws 0x2080 with gfx mem 0x%x\n",
113 +       I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
114 +       DRM_DEBUG("load hws HWS_PGA with gfx mem 0x%x\n",
115                         dev_priv->status_gfx_addr);
116         DRM_DEBUG("load hws at %p\n", dev_priv->hw_status_page);
117         return 0;
118 --- a/drivers/gpu/drm/i915/i915_drv.c
119 +++ b/drivers/gpu/drm/i915/i915_drv.c
120 @@ -279,13 +279,13 @@ static int i915_suspend(struct drm_devic
121         dev_priv->saveDSPASTRIDE = I915_READ(DSPASTRIDE);
122         dev_priv->saveDSPASIZE = I915_READ(DSPASIZE);
123         dev_priv->saveDSPAPOS = I915_READ(DSPAPOS);
124 -       dev_priv->saveDSPABASE = I915_READ(DSPABASE);
125 +       dev_priv->saveDSPAADDR = I915_READ(DSPAADDR);
126         if (IS_I965G(dev)) {
127                 dev_priv->saveDSPASURF = I915_READ(DSPASURF);
128                 dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
129         }
130         i915_save_palette(dev, PIPE_A);
131 -       dev_priv->savePIPEASTAT = I915_READ(I915REG_PIPEASTAT);
132 +       dev_priv->savePIPEASTAT = I915_READ(PIPEASTAT);
133  
134         /* Pipe & plane B info */
135         dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF);
136 @@ -307,13 +307,13 @@ static int i915_suspend(struct drm_devic
137         dev_priv->saveDSPBSTRIDE = I915_READ(DSPBSTRIDE);
138         dev_priv->saveDSPBSIZE = I915_READ(DSPBSIZE);
139         dev_priv->saveDSPBPOS = I915_READ(DSPBPOS);
140 -       dev_priv->saveDSPBBASE = I915_READ(DSPBBASE);
141 +       dev_priv->saveDSPBADDR = I915_READ(DSPBADDR);
142         if (IS_I965GM(dev) || IS_IGD_GM(dev)) {
143                 dev_priv->saveDSPBSURF = I915_READ(DSPBSURF);
144                 dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
145         }
146         i915_save_palette(dev, PIPE_B);
147 -       dev_priv->savePIPEBSTAT = I915_READ(I915REG_PIPEBSTAT);
148 +       dev_priv->savePIPEBSTAT = I915_READ(PIPEBSTAT);
149  
150         /* CRT state */
151         dev_priv->saveADPA = I915_READ(ADPA);
152 @@ -328,9 +328,9 @@ static int i915_suspend(struct drm_devic
153                 dev_priv->saveLVDS = I915_READ(LVDS);
154         if (!IS_I830(dev) && !IS_845G(dev))
155                 dev_priv->savePFIT_CONTROL = I915_READ(PFIT_CONTROL);
156 -       dev_priv->saveLVDSPP_ON = I915_READ(LVDSPP_ON);
157 -       dev_priv->saveLVDSPP_OFF = I915_READ(LVDSPP_OFF);
158 -       dev_priv->savePP_CYCLE = I915_READ(PP_CYCLE);
159 +       dev_priv->savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS);
160 +       dev_priv->savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS);
161 +       dev_priv->savePP_DIVISOR = I915_READ(PP_DIVISOR);
162  
163         /* FIXME: save TV & SDVO state */
164  
165 @@ -341,19 +341,19 @@ static int i915_suspend(struct drm_devic
166         dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
167  
168         /* Interrupt state */
169 -       dev_priv->saveIIR = I915_READ(I915REG_INT_IDENTITY_R);
170 -       dev_priv->saveIER = I915_READ(I915REG_INT_ENABLE_R);
171 -       dev_priv->saveIMR = I915_READ(I915REG_INT_MASK_R);
172 +       dev_priv->saveIIR = I915_READ(IIR);
173 +       dev_priv->saveIER = I915_READ(IER);
174 +       dev_priv->saveIMR = I915_READ(IMR);
175  
176         /* VGA state */
177 -       dev_priv->saveVCLK_DIVISOR_VGA0 = I915_READ(VCLK_DIVISOR_VGA0);
178 -       dev_priv->saveVCLK_DIVISOR_VGA1 = I915_READ(VCLK_DIVISOR_VGA1);
179 -       dev_priv->saveVCLK_POST_DIV = I915_READ(VCLK_POST_DIV);
180 +       dev_priv->saveVGA0 = I915_READ(VGA0);
181 +       dev_priv->saveVGA1 = I915_READ(VGA1);
182 +       dev_priv->saveVGA_PD = I915_READ(VGA_PD);
183         dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
184  
185         /* Clock gating state */
186         dev_priv->saveD_STATE = I915_READ(D_STATE);
187 -       dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D);
188 +       dev_priv->saveCG_2D_DIS = I915_READ(CG_2D_DIS);
189  
190         /* Cache mode state */
191         dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
192 @@ -363,7 +363,7 @@ static int i915_suspend(struct drm_devic
193  
194         /* Scratch space */
195         for (i = 0; i < 16; i++) {
196 -               dev_priv->saveSWF0[i] = I915_READ(SWF0 + (i << 2));
197 +               dev_priv->saveSWF0[i] = I915_READ(SWF00 + (i << 2));
198                 dev_priv->saveSWF1[i] = I915_READ(SWF10 + (i << 2));
199         }
200         for (i = 0; i < 3; i++)
201 @@ -424,7 +424,7 @@ static int i915_resume(struct drm_device
202         I915_WRITE(DSPASIZE, dev_priv->saveDSPASIZE);
203         I915_WRITE(DSPAPOS, dev_priv->saveDSPAPOS);
204         I915_WRITE(PIPEASRC, dev_priv->savePIPEASRC);
205 -       I915_WRITE(DSPABASE, dev_priv->saveDSPABASE);
206 +       I915_WRITE(DSPAADDR, dev_priv->saveDSPAADDR);
207         I915_WRITE(DSPASTRIDE, dev_priv->saveDSPASTRIDE);
208         if (IS_I965G(dev)) {
209                 I915_WRITE(DSPASURF, dev_priv->saveDSPASURF);
210 @@ -436,7 +436,7 @@ static int i915_resume(struct drm_device
211         i915_restore_palette(dev, PIPE_A);
212         /* Enable the plane */
213         I915_WRITE(DSPACNTR, dev_priv->saveDSPACNTR);
214 -       I915_WRITE(DSPABASE, I915_READ(DSPABASE));
215 +       I915_WRITE(DSPAADDR, I915_READ(DSPAADDR));
216  
217         /* Pipe & plane B info */
218         if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) {
219 @@ -466,7 +466,7 @@ static int i915_resume(struct drm_device
220         I915_WRITE(DSPBSIZE, dev_priv->saveDSPBSIZE);
221         I915_WRITE(DSPBPOS, dev_priv->saveDSPBPOS);
222         I915_WRITE(PIPEBSRC, dev_priv->savePIPEBSRC);
223 -       I915_WRITE(DSPBBASE, dev_priv->saveDSPBBASE);
224 +       I915_WRITE(DSPBADDR, dev_priv->saveDSPBADDR);
225         I915_WRITE(DSPBSTRIDE, dev_priv->saveDSPBSTRIDE);
226         if (IS_I965G(dev)) {
227                 I915_WRITE(DSPBSURF, dev_priv->saveDSPBSURF);
228 @@ -478,7 +478,7 @@ static int i915_resume(struct drm_device
229         i915_restore_palette(dev, PIPE_B);
230         /* Enable the plane */
231         I915_WRITE(DSPBCNTR, dev_priv->saveDSPBCNTR);
232 -       I915_WRITE(DSPBBASE, I915_READ(DSPBBASE));
233 +       I915_WRITE(DSPBADDR, I915_READ(DSPBADDR));
234  
235         /* CRT state */
236         I915_WRITE(ADPA, dev_priv->saveADPA);
237 @@ -493,9 +493,9 @@ static int i915_resume(struct drm_device
238  
239         I915_WRITE(PFIT_PGM_RATIOS, dev_priv->savePFIT_PGM_RATIOS);
240         I915_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL);
241 -       I915_WRITE(LVDSPP_ON, dev_priv->saveLVDSPP_ON);
242 -       I915_WRITE(LVDSPP_OFF, dev_priv->saveLVDSPP_OFF);
243 -       I915_WRITE(PP_CYCLE, dev_priv->savePP_CYCLE);
244 +       I915_WRITE(PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
245 +       I915_WRITE(PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
246 +       I915_WRITE(PP_DIVISOR, dev_priv->savePP_DIVISOR);
247         I915_WRITE(PP_CONTROL, dev_priv->savePP_CONTROL);
248  
249         /* FIXME: restore TV & SDVO state */
250 @@ -508,14 +508,14 @@ static int i915_resume(struct drm_device
251  
252         /* VGA state */
253         I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL);
254 -       I915_WRITE(VCLK_DIVISOR_VGA0, dev_priv->saveVCLK_DIVISOR_VGA0);
255 -       I915_WRITE(VCLK_DIVISOR_VGA1, dev_priv->saveVCLK_DIVISOR_VGA1);
256 -       I915_WRITE(VCLK_POST_DIV, dev_priv->saveVCLK_POST_DIV);
257 +       I915_WRITE(VGA0, dev_priv->saveVGA0);
258 +       I915_WRITE(VGA1, dev_priv->saveVGA1);
259 +       I915_WRITE(VGA_PD, dev_priv->saveVGA_PD);
260         udelay(150);
261  
262         /* Clock gating state */
263         I915_WRITE (D_STATE, dev_priv->saveD_STATE);
264 -       I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D);
265 +       I915_WRITE(CG_2D_DIS, dev_priv->saveCG_2D_DIS);
266  
267         /* Cache mode state */
268         I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
269 @@ -524,7 +524,7 @@ static int i915_resume(struct drm_device
270         I915_WRITE (MI_ARB_STATE, dev_priv->saveMI_ARB_STATE | 0xffff0000);
271  
272         for (i = 0; i < 16; i++) {
273 -               I915_WRITE(SWF0 + (i << 2), dev_priv->saveSWF0[i]);
274 +               I915_WRITE(SWF00 + (i << 2), dev_priv->saveSWF0[i]);
275                 I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i+7]);
276         }
277         for (i = 0; i < 3; i++)
278 --- a/drivers/gpu/drm/i915/i915_drv.h
279 +++ b/drivers/gpu/drm/i915/i915_drv.h
280 @@ -30,6 +30,8 @@
281  #ifndef _I915_DRV_H_
282  #define _I915_DRV_H_
283  
284 +#include "i915_reg.h"
285 +
286  /* General customization:
287   */
288  
289 @@ -138,7 +140,7 @@ typedef struct drm_i915_private {
290         u32 saveDSPASTRIDE;
291         u32 saveDSPASIZE;
292         u32 saveDSPAPOS;
293 -       u32 saveDSPABASE;
294 +       u32 saveDSPAADDR;
295         u32 saveDSPASURF;
296         u32 saveDSPATILEOFF;
297         u32 savePFIT_PGM_RATIOS;
298 @@ -159,24 +161,24 @@ typedef struct drm_i915_private {
299         u32 saveDSPBSTRIDE;
300         u32 saveDSPBSIZE;
301         u32 saveDSPBPOS;
302 -       u32 saveDSPBBASE;
303 +       u32 saveDSPBADDR;
304         u32 saveDSPBSURF;
305         u32 saveDSPBTILEOFF;
306 -       u32 saveVCLK_DIVISOR_VGA0;
307 -       u32 saveVCLK_DIVISOR_VGA1;
308 -       u32 saveVCLK_POST_DIV;
309 +       u32 saveVGA0;
310 +       u32 saveVGA1;
311 +       u32 saveVGA_PD;
312         u32 saveVGACNTRL;
313         u32 saveADPA;
314         u32 saveLVDS;
315 -       u32 saveLVDSPP_ON;
316 -       u32 saveLVDSPP_OFF;
317 +       u32 savePP_ON_DELAYS;
318 +       u32 savePP_OFF_DELAYS;
319         u32 saveDVOA;
320         u32 saveDVOB;
321         u32 saveDVOC;
322         u32 savePP_ON;
323         u32 savePP_OFF;
324         u32 savePP_CONTROL;
325 -       u32 savePP_CYCLE;
326 +       u32 savePP_DIVISOR;
327         u32 savePFIT_CONTROL;
328         u32 save_palette_a[256];
329         u32 save_palette_b[256];
330 @@ -189,7 +191,7 @@ typedef struct drm_i915_private {
331         u32 saveIMR;
332         u32 saveCACHE_MODE_0;
333         u32 saveD_STATE;
334 -       u32 saveDSPCLK_GATE_D;
335 +       u32 saveCG_2D_DIS;
336         u32 saveMI_ARB_STATE;
337         u32 saveSWF0[16];
338         u32 saveSWF1[16];
339 @@ -283,816 +285,26 @@ extern void i915_mem_release(struct drm_
340         if (I915_VERBOSE) DRM_DEBUG("ADVANCE_LP_RING %x\n", outring);   \
341         dev_priv->ring.tail = outring;                                  \
342         dev_priv->ring.space -= outcount * 4;                           \
343 -       I915_WRITE(LP_RING + RING_TAIL, outring);                       \
344 +       I915_WRITE(PRB0_TAIL, outring);                 \
345  } while(0)
346  
347 -extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
348 -
349 -/* Extended config space */
350 -#define LBB 0xf4
351 -
352 -/* VGA stuff */
353 -
354 -#define VGA_ST01_MDA 0x3ba
355 -#define VGA_ST01_CGA 0x3da
356 -
357 -#define VGA_MSR_WRITE 0x3c2
358 -#define VGA_MSR_READ 0x3cc
359 -#define   VGA_MSR_MEM_EN (1<<1)
360 -#define   VGA_MSR_CGA_MODE (1<<0)
361 -
362 -#define VGA_SR_INDEX 0x3c4
363 -#define VGA_SR_DATA 0x3c5
364 -
365 -#define VGA_AR_INDEX 0x3c0
366 -#define   VGA_AR_VID_EN (1<<5)
367 -#define VGA_AR_DATA_WRITE 0x3c0
368 -#define VGA_AR_DATA_READ 0x3c1
369 -
370 -#define VGA_GR_INDEX 0x3ce
371 -#define VGA_GR_DATA 0x3cf
372 -/* GR05 */
373 -#define   VGA_GR_MEM_READ_MODE_SHIFT 3
374 -#define     VGA_GR_MEM_READ_MODE_PLANE 1
375 -/* GR06 */
376 -#define   VGA_GR_MEM_MODE_MASK 0xc
377 -#define   VGA_GR_MEM_MODE_SHIFT 2
378 -#define   VGA_GR_MEM_A0000_AFFFF 0
379 -#define   VGA_GR_MEM_A0000_BFFFF 1
380 -#define   VGA_GR_MEM_B0000_B7FFF 2
381 -#define   VGA_GR_MEM_B0000_BFFFF 3
382 -
383 -#define VGA_DACMASK 0x3c6
384 -#define VGA_DACRX 0x3c7
385 -#define VGA_DACWX 0x3c8
386 -#define VGA_DACDATA 0x3c9
387 -
388 -#define VGA_CR_INDEX_MDA 0x3b4
389 -#define VGA_CR_DATA_MDA 0x3b5
390 -#define VGA_CR_INDEX_CGA 0x3d4
391 -#define VGA_CR_DATA_CGA 0x3d5
392 -
393 -#define GFX_OP_USER_INTERRUPT          ((0<<29)|(2<<23))
394 -#define GFX_OP_BREAKPOINT_INTERRUPT    ((0<<29)|(1<<23))
395 -#define CMD_REPORT_HEAD                        (7<<23)
396 -#define CMD_STORE_DWORD_IDX            ((0x21<<23) | 0x1)
397 -#define CMD_OP_BATCH_BUFFER  ((0x0<<29)|(0x30<<23)|0x1)
398 -
399 -#define INST_PARSER_CLIENT   0x00000000
400 -#define INST_OP_FLUSH        0x02000000
401 -#define INST_FLUSH_MAP_CACHE 0x00000001
402 -
403 -#define BB1_START_ADDR_MASK   (~0x7)
404 -#define BB1_PROTECTED         (1<<0)
405 -#define BB1_UNPROTECTED       (0<<0)
406 -#define BB2_END_ADDR_MASK     (~0x7)
407 -
408 -/* Framebuffer compression */
409 -#define FBC_CFB_BASE           0x03200 /* 4k page aligned */
410 -#define FBC_LL_BASE            0x03204 /* 4k page aligned */
411 -#define FBC_CONTROL            0x03208
412 -#define   FBC_CTL_EN           (1<<31)
413 -#define   FBC_CTL_PERIODIC     (1<<30)
414 -#define   FBC_CTL_INTERVAL_SHIFT (16)
415 -#define   FBC_CTL_UNCOMPRESSIBLE (1<<14)
416 -#define   FBC_CTL_STRIDE_SHIFT (5)
417 -#define   FBC_CTL_FENCENO      (1<<0)
418 -#define FBC_COMMAND            0x0320c
419 -#define   FBC_CMD_COMPRESS     (1<<0)
420 -#define FBC_STATUS             0x03210
421 -#define   FBC_STAT_COMPRESSING (1<<31)
422 -#define   FBC_STAT_COMPRESSED  (1<<30)
423 -#define   FBC_STAT_MODIFIED    (1<<29)
424 -#define   FBC_STAT_CURRENT_LINE        (1<<0)
425 -#define FBC_CONTROL2           0x03214
426 -#define   FBC_CTL_FENCE_DBL    (0<<4)
427 -#define   FBC_CTL_IDLE_IMM     (0<<2)
428 -#define   FBC_CTL_IDLE_FULL    (1<<2)
429 -#define   FBC_CTL_IDLE_LINE    (2<<2)
430 -#define   FBC_CTL_IDLE_DEBUG   (3<<2)
431 -#define   FBC_CTL_CPU_FENCE    (1<<1)
432 -#define   FBC_CTL_PLANEA       (0<<0)
433 -#define   FBC_CTL_PLANEB       (1<<0)
434 -#define FBC_FENCE_OFF          0x0321b
435 -
436 -#define FBC_LL_SIZE            (1536)
437 -#define FBC_LL_PAD             (32)
438 -
439 -/* Interrupt bits:
440 - */
441 -#define USER_INT_FLAG    (1<<1)
442 -#define VSYNC_PIPEB_FLAG (1<<5)
443 -#define VSYNC_PIPEA_FLAG (1<<7)
444 -#define HWB_OOM_FLAG     (1<<13) /* binner out of memory */
445 -
446 -#define I915REG_HWSTAM         0x02098
447 -#define I915REG_INT_IDENTITY_R 0x020a4
448 -#define I915REG_INT_MASK_R     0x020a8
449 -#define I915REG_INT_ENABLE_R   0x020a0
450 -
451 -#define I915REG_PIPEASTAT      0x70024
452 -#define I915REG_PIPEBSTAT      0x71024
453 -
454 -#define I915_VBLANK_INTERRUPT_ENABLE   (1UL<<17)
455 -#define I915_VBLANK_CLEAR              (1UL<<1)
456 -
457 -#define SRX_INDEX              0x3c4
458 -#define SRX_DATA               0x3c5
459 -#define SR01                   1
460 -#define SR01_SCREEN_OFF                (1<<5)
461 -
462 -#define PPCR                   0x61204
463 -#define PPCR_ON                        (1<<0)
464 -
465 -#define DVOB                   0x61140
466 -#define DVOB_ON                        (1<<31)
467 -#define DVOC                   0x61160
468 -#define DVOC_ON                        (1<<31)
469 -#define LVDS                   0x61180
470 -#define LVDS_ON                        (1<<31)
471 -
472 -#define ADPA                   0x61100
473 -#define ADPA_DPMS_MASK         (~(3<<10))
474 -#define ADPA_DPMS_ON           (0<<10)
475 -#define ADPA_DPMS_SUSPEND      (1<<10)
476 -#define ADPA_DPMS_STANDBY      (2<<10)
477 -#define ADPA_DPMS_OFF          (3<<10)
478 -
479 -#define NOPID                   0x2094
480 -#define LP_RING                        0x2030
481 -#define HP_RING                        0x2040
482 -/* The binner has its own ring buffer:
483 - */
484 -#define HWB_RING               0x2400
485 -
486 -#define RING_TAIL              0x00
487 -#define TAIL_ADDR              0x001FFFF8
488 -#define RING_HEAD              0x04
489 -#define HEAD_WRAP_COUNT                0xFFE00000
490 -#define HEAD_WRAP_ONE          0x00200000
491 -#define HEAD_ADDR              0x001FFFFC
492 -#define RING_START             0x08
493 -#define START_ADDR             0x0xFFFFF000
494 -#define RING_LEN               0x0C
495 -#define RING_NR_PAGES          0x001FF000
496 -#define RING_REPORT_MASK       0x00000006
497 -#define RING_REPORT_64K                0x00000002
498 -#define RING_REPORT_128K       0x00000004
499 -#define RING_NO_REPORT         0x00000000
500 -#define RING_VALID_MASK                0x00000001
501 -#define RING_VALID             0x00000001
502 -#define RING_INVALID           0x00000000
503 -
504 -/* Instruction parser error reg:
505 - */
506 -#define IPEIR                  0x2088
507 -
508 -/* Scratch pad debug 0 reg:
509 - */
510 -#define SCPD0                  0x209c
511 -
512 -/* Error status reg:
513 - */
514 -#define ESR                    0x20b8
515 -
516 -/* Secondary DMA fetch address debug reg:
517 - */
518 -#define DMA_FADD_S             0x20d4
519 -
520 -/* Memory Interface Arbitration State
521 - */
522 -#define MI_ARB_STATE           0x20e4
523 -
524 -/* Cache mode 0 reg.
525 - *  - Manipulating render cache behaviour is central
526 - *    to the concept of zone rendering, tuning this reg can help avoid
527 - *    unnecessary render cache reads and even writes (for z/stencil)
528 - *    at beginning and end of scene.
529 - *
530 - * - To change a bit, write to this reg with a mask bit set and the
531 - * bit of interest either set or cleared.  EG: (BIT<<16) | BIT to set.
532 - */
533 -#define Cache_Mode_0           0x2120
534 -#define CACHE_MODE_0           0x2120
535 -#define CM0_MASK_SHIFT          16
536 -#define CM0_IZ_OPT_DISABLE      (1<<6)
537 -#define CM0_ZR_OPT_DISABLE      (1<<5)
538 -#define CM0_DEPTH_EVICT_DISABLE (1<<4)
539 -#define CM0_COLOR_EVICT_DISABLE (1<<3)
540 -#define CM0_DEPTH_WRITE_DISABLE (1<<1)
541 -#define CM0_RC_OP_FLUSH_DISABLE (1<<0)
542 -
543 -
544 -/* Graphics flush control.  A CPU write flushes the GWB of all writes.
545 - * The data is discarded.
546 - */
547 -#define GFX_FLSH_CNTL          0x2170
548 -
549 -/* Binner control.  Defines the location of the bin pointer list:
550 - */
551 -#define BINCTL                 0x2420
552 -#define BC_MASK                        (1 << 9)
553 -
554 -/* Binned scene info.
555 - */
556 -#define BINSCENE               0x2428
557 -#define BS_OP_LOAD             (1 << 8)
558 -#define BS_MASK                        (1 << 22)
559 -
560 -/* Bin command parser debug reg:
561 - */
562 -#define BCPD                   0x2480
563 -
564 -/* Bin memory control debug reg:
565 - */
566 -#define BMCD                   0x2484
567 -
568 -/* Bin data cache debug reg:
569 - */
570 -#define BDCD                   0x2488
571 -
572 -/* Binner pointer cache debug reg:
573 - */
574 -#define BPCD                   0x248c
575 -
576 -/* Binner scratch pad debug reg:
577 - */
578 -#define BINSKPD                        0x24f0
579 -
580 -/* HWB scratch pad debug reg:
581 - */
582 -#define HWBSKPD                        0x24f4
583 -
584 -/* Binner memory pool reg:
585 - */
586 -#define BMP_BUFFER             0x2430
587 -#define BMP_PAGE_SIZE_4K       (0 << 10)
588 -#define BMP_BUFFER_SIZE_SHIFT  1
589 -#define BMP_ENABLE             (1 << 0)
590 -
591 -/* Get/put memory from the binner memory pool:
592 - */
593 -#define BMP_GET                        0x2438
594 -#define BMP_PUT                        0x2440
595 -#define BMP_OFFSET_SHIFT       5
596 -
597 -/* 3D state packets:
598 - */
599 -#define GFX_OP_RASTER_RULES    ((0x3<<29)|(0x7<<24))
600 -
601 -#define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
602 -#define SC_UPDATE_SCISSOR       (0x1<<1)
603 -#define SC_ENABLE_MASK          (0x1<<0)
604 -#define SC_ENABLE               (0x1<<0)
605 -
606 -#define GFX_OP_LOAD_INDIRECT   ((0x3<<29)|(0x1d<<24)|(0x7<<16))
607 -
608 -#define GFX_OP_SCISSOR_INFO    ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
609 -#define SCI_YMIN_MASK      (0xffff<<16)
610 -#define SCI_XMIN_MASK      (0xffff<<0)
611 -#define SCI_YMAX_MASK      (0xffff<<16)
612 -#define SCI_XMAX_MASK      (0xffff<<0)
613 -
614 -#define GFX_OP_SCISSOR_ENABLE   ((0x3<<29)|(0x1c<<24)|(0x10<<19))
615 -#define GFX_OP_SCISSOR_RECT     ((0x3<<29)|(0x1d<<24)|(0x81<<16)|1)
616 -#define GFX_OP_COLOR_FACTOR      ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
617 -#define GFX_OP_STIPPLE           ((0x3<<29)|(0x1d<<24)|(0x83<<16))
618 -#define GFX_OP_MAP_INFO          ((0x3<<29)|(0x1d<<24)|0x4)
619 -#define GFX_OP_DESTBUFFER_VARS   ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
620 -#define GFX_OP_DRAWRECT_INFO     ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
621 -
622 -#define GFX_OP_DRAWRECT_INFO_I965 ((0x7900<<16)|0x2)
623 -
624 -#define SRC_COPY_BLT_CMD                ((2<<29)|(0x43<<22)|4)
625 -#define XY_SRC_COPY_BLT_CMD            ((2<<29)|(0x53<<22)|6)
626 -#define XY_SRC_COPY_BLT_WRITE_ALPHA    (1<<21)
627 -#define XY_SRC_COPY_BLT_WRITE_RGB      (1<<20)
628 -#define XY_SRC_COPY_BLT_SRC_TILED      (1<<15)
629 -#define XY_SRC_COPY_BLT_DST_TILED      (1<<11)
630 -
631 -#define MI_BATCH_BUFFER                ((0x30<<23)|1)
632 -#define MI_BATCH_BUFFER_START  (0x31<<23)
633 -#define MI_BATCH_BUFFER_END    (0xA<<23)
634 -#define MI_BATCH_NON_SECURE    (1)
635 -#define MI_BATCH_NON_SECURE_I965 (1<<8)
636 -
637 -#define MI_WAIT_FOR_EVENT       ((0x3<<23))
638 -#define MI_WAIT_FOR_PLANE_B_FLIP      (1<<6)
639 -#define MI_WAIT_FOR_PLANE_A_FLIP      (1<<2)
640 -#define MI_WAIT_FOR_PLANE_A_SCANLINES (1<<1)
641 -
642 -#define MI_LOAD_SCAN_LINES_INCL  ((0x12<<23))
643 -
644 -#define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2)
645 -#define ASYNC_FLIP                (1<<22)
646 -#define DISPLAY_PLANE_A           (0<<20)
647 -#define DISPLAY_PLANE_B           (1<<20)
648 -
649 -/* Display regs */
650 -#define DSPACNTR                0x70180
651 -#define DSPBCNTR                0x71180
652 -#define DISPPLANE_SEL_PIPE_MASK                 (1<<24)
653 -
654 -/* Define the region of interest for the binner:
655 - */
656 -#define CMD_OP_BIN_CONTROL      ((0x3<<29)|(0x1d<<24)|(0x84<<16)|4)
657 -
658 -#define CMD_OP_DESTBUFFER_INFO  ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
659 -
660 -#define CMD_MI_FLUSH         (0x04 << 23)
661 -#define MI_NO_WRITE_FLUSH    (1 << 2)
662 -#define MI_READ_FLUSH        (1 << 0)
663 -#define MI_EXE_FLUSH         (1 << 1)
664 -#define MI_END_SCENE         (1 << 4) /* flush binner and incr scene count */
665 -#define MI_SCENE_COUNT       (1 << 3) /* just increment scene count */
666 -
667 -#define BREADCRUMB_BITS 31
668 -#define BREADCRUMB_MASK ((1U << BREADCRUMB_BITS) - 1)
669 -
670 -#define READ_BREADCRUMB(dev_priv)  (((volatile u32*)(dev_priv->hw_status_page))[5])
671 -#define READ_HWSP(dev_priv, reg)  (((volatile u32*)(dev_priv->hw_status_page))[reg])
672 -
673 -#define BLC_PWM_CTL            0x61254
674 -#define BACKLIGHT_MODULATION_FREQ_SHIFT                (17)
675 -
676 -#define BLC_PWM_CTL2           0x61250
677  /**
678 - * This is the most significant 15 bits of the number of backlight cycles in a
679 - * complete cycle of the modulated backlight control.
680 + * Reads a dword out of the status page, which is written to from the command
681 + * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
682 + * MI_STORE_DATA_IMM.
683 + *
684 + * The following dwords have a reserved meaning:
685 + * 0: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
686 + * 4: ring 0 head pointer
687 + * 5: ring 1 head pointer (915-class)
688 + * 6: ring 2 head pointer (915-class)
689   *
690 - * The actual value is this field multiplied by two.
691 + * The area from dword 0x10 to 0x3ff is available for driver usage.
692   */
693 -#define BACKLIGHT_MODULATION_FREQ_MASK         (0x7fff << 17)
694 -#define BLM_LEGACY_MODE                                (1 << 16)
695 -/**
696 - * This is the number of cycles out of the backlight modulation cycle for which
697 - * the backlight is on.
698 - *
699 - * This field must be no greater than the number of cycles in the complete
700 - * backlight modulation cycle.
701 - */
702 -#define BACKLIGHT_DUTY_CYCLE_SHIFT             (0)
703 -#define BACKLIGHT_DUTY_CYCLE_MASK              (0xffff)
704 -
705 -#define I915_GCFGC                     0xf0
706 -#define I915_LOW_FREQUENCY_ENABLE              (1 << 7)
707 -#define I915_DISPLAY_CLOCK_190_200_MHZ         (0 << 4)
708 -#define I915_DISPLAY_CLOCK_333_MHZ             (4 << 4)
709 -#define I915_DISPLAY_CLOCK_MASK                        (7 << 4)
710 -
711 -#define I855_HPLLCC                    0xc0
712 -#define I855_CLOCK_CONTROL_MASK                        (3 << 0)
713 -#define I855_CLOCK_133_200                     (0 << 0)
714 -#define I855_CLOCK_100_200                     (1 << 0)
715 -#define I855_CLOCK_100_133                     (2 << 0)
716 -#define I855_CLOCK_166_250                     (3 << 0)
717 -
718 -/* p317, 319
719 - */
720 -#define VCLK2_VCO_M        0x6008 /* treat as 16 bit? (includes msbs) */
721 -#define VCLK2_VCO_N        0x600a
722 -#define VCLK2_VCO_DIV_SEL  0x6012
723 -
724 -#define VCLK_DIVISOR_VGA0   0x6000
725 -#define VCLK_DIVISOR_VGA1   0x6004
726 -#define VCLK_POST_DIV      0x6010
727 -/** Selects a post divisor of 4 instead of 2. */
728 -# define VGA1_PD_P2_DIV_4      (1 << 15)
729 -/** Overrides the p2 post divisor field */
730 -# define VGA1_PD_P1_DIV_2      (1 << 13)
731 -# define VGA1_PD_P1_SHIFT      8
732 -/** P1 value is 2 greater than this field */
733 -# define VGA1_PD_P1_MASK       (0x1f << 8)
734 -/** Selects a post divisor of 4 instead of 2. */
735 -# define VGA0_PD_P2_DIV_4      (1 << 7)
736 -/** Overrides the p2 post divisor field */
737 -# define VGA0_PD_P1_DIV_2      (1 << 5)
738 -# define VGA0_PD_P1_SHIFT      0
739 -/** P1 value is 2 greater than this field */
740 -# define VGA0_PD_P1_MASK       (0x1f << 0)
741 -
742 -/* PCI D state control register */
743 -#define D_STATE                0x6104
744 -#define DSPCLK_GATE_D  0x6200
745 -
746 -/* I830 CRTC registers */
747 -#define HTOTAL_A       0x60000
748 -#define HBLANK_A       0x60004
749 -#define HSYNC_A                0x60008
750 -#define VTOTAL_A       0x6000c
751 -#define VBLANK_A       0x60010
752 -#define VSYNC_A                0x60014
753 -#define PIPEASRC       0x6001c
754 -#define BCLRPAT_A      0x60020
755 -#define VSYNCSHIFT_A   0x60028
756 -
757 -#define HTOTAL_B       0x61000
758 -#define HBLANK_B       0x61004
759 -#define HSYNC_B                0x61008
760 -#define VTOTAL_B       0x6100c
761 -#define VBLANK_B       0x61010
762 -#define VSYNC_B                0x61014
763 -#define PIPEBSRC       0x6101c
764 -#define BCLRPAT_B      0x61020
765 -#define VSYNCSHIFT_B   0x61028
766 -
767 -#define PP_STATUS      0x61200
768 -# define PP_ON                                 (1 << 31)
769 -/**
770 - * Indicates that all dependencies of the panel are on:
771 - *
772 - * - PLL enabled
773 - * - pipe enabled
774 - * - LVDS/DVOB/DVOC on
775 - */
776 -# define PP_READY                              (1 << 30)
777 -# define PP_SEQUENCE_NONE                      (0 << 28)
778 -# define PP_SEQUENCE_ON                                (1 << 28)
779 -# define PP_SEQUENCE_OFF                       (2 << 28)
780 -# define PP_SEQUENCE_MASK                      0x30000000
781 -#define PP_CONTROL     0x61204
782 -# define POWER_TARGET_ON                       (1 << 0)
783 -
784 -#define LVDSPP_ON       0x61208
785 -#define LVDSPP_OFF      0x6120c
786 -#define PP_CYCLE        0x61210
787 -
788 -#define PFIT_CONTROL   0x61230
789 -# define PFIT_ENABLE                           (1 << 31)
790 -# define PFIT_PIPE_MASK                                (3 << 29)
791 -# define PFIT_PIPE_SHIFT                       29
792 -# define VERT_INTERP_DISABLE                   (0 << 10)
793 -# define VERT_INTERP_BILINEAR                  (1 << 10)
794 -# define VERT_INTERP_MASK                      (3 << 10)
795 -# define VERT_AUTO_SCALE                       (1 << 9)
796 -# define HORIZ_INTERP_DISABLE                  (0 << 6)
797 -# define HORIZ_INTERP_BILINEAR                 (1 << 6)
798 -# define HORIZ_INTERP_MASK                     (3 << 6)
799 -# define HORIZ_AUTO_SCALE                      (1 << 5)
800 -# define PANEL_8TO6_DITHER_ENABLE              (1 << 3)
801 -
802 -#define PFIT_PGM_RATIOS        0x61234
803 -# define PFIT_VERT_SCALE_MASK                  0xfff00000
804 -# define PFIT_HORIZ_SCALE_MASK                 0x0000fff0
805 -
806 -#define PFIT_AUTO_RATIOS       0x61238
807 -
808 -
809 -#define DPLL_A         0x06014
810 -#define DPLL_B         0x06018
811 -# define DPLL_VCO_ENABLE                       (1 << 31)
812 -# define DPLL_DVO_HIGH_SPEED                   (1 << 30)
813 -# define DPLL_SYNCLOCK_ENABLE                  (1 << 29)
814 -# define DPLL_VGA_MODE_DIS                     (1 << 28)
815 -# define DPLLB_MODE_DAC_SERIAL                 (1 << 26) /* i915 */
816 -# define DPLLB_MODE_LVDS                       (2 << 26) /* i915 */
817 -# define DPLL_MODE_MASK                                (3 << 26)
818 -# define DPLL_DAC_SERIAL_P2_CLOCK_DIV_10       (0 << 24) /* i915 */
819 -# define DPLL_DAC_SERIAL_P2_CLOCK_DIV_5                (1 << 24) /* i915 */
820 -# define DPLLB_LVDS_P2_CLOCK_DIV_14            (0 << 24) /* i915 */
821 -# define DPLLB_LVDS_P2_CLOCK_DIV_7             (1 << 24) /* i915 */
822 -# define DPLL_P2_CLOCK_DIV_MASK                        0x03000000 /* i915 */
823 -# define DPLL_FPA01_P1_POST_DIV_MASK           0x00ff0000 /* i915 */
824 -/**
825 - *  The i830 generation, in DAC/serial mode, defines p1 as two plus this
826 - * bitfield, or just 2 if PLL_P1_DIVIDE_BY_TWO is set.
827 - */
828 -# define DPLL_FPA01_P1_POST_DIV_MASK_I830      0x001f0000
829 -/**
830 - * The i830 generation, in LVDS mode, defines P1 as the bit number set within
831 - * this field (only one bit may be set).
832 - */
833 -# define DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000
834 -# define DPLL_FPA01_P1_POST_DIV_SHIFT          16
835 -# define PLL_P2_DIVIDE_BY_4                    (1 << 23) /* i830, required in DVO non-gang */
836 -# define PLL_P1_DIVIDE_BY_TWO                  (1 << 21) /* i830 */
837 -# define PLL_REF_INPUT_DREFCLK                 (0 << 13)
838 -# define PLL_REF_INPUT_TVCLKINA                        (1 << 13) /* i830 */
839 -# define PLL_REF_INPUT_TVCLKINBC               (2 << 13) /* SDVO TVCLKIN */
840 -# define PLLB_REF_INPUT_SPREADSPECTRUMIN       (3 << 13)
841 -# define PLL_REF_INPUT_MASK                    (3 << 13)
842 -# define PLL_LOAD_PULSE_PHASE_SHIFT            9
843 -/*
844 - * Parallel to Serial Load Pulse phase selection.
845 - * Selects the phase for the 10X DPLL clock for the PCIe
846 - * digital display port. The range is 4 to 13; 10 or more
847 - * is just a flip delay. The default is 6
848 - */
849 -# define PLL_LOAD_PULSE_PHASE_MASK             (0xf << PLL_LOAD_PULSE_PHASE_SHIFT)
850 -# define DISPLAY_RATE_SELECT_FPA1              (1 << 8)
851 -
852 -/**
853 - * SDVO multiplier for 945G/GM. Not used on 965.
854 - *
855 - * \sa DPLL_MD_UDI_MULTIPLIER_MASK
856 - */
857 -# define SDVO_MULTIPLIER_MASK                  0x000000ff
858 -# define SDVO_MULTIPLIER_SHIFT_HIRES           4
859 -# define SDVO_MULTIPLIER_SHIFT_VGA             0
860 -
861 -/** @defgroup DPLL_MD
862 - * @{
863 - */
864 -/** Pipe A SDVO/UDI clock multiplier/divider register for G965. */
865 -#define DPLL_A_MD              0x0601c
866 -/** Pipe B SDVO/UDI clock multiplier/divider register for G965. */
867 -#define DPLL_B_MD              0x06020
868 -/**
869 - * UDI pixel divider, controlling how many pixels are stuffed into a packet.
870 - *
871 - * Value is pixels minus 1.  Must be set to 1 pixel for SDVO.
872 - */
873 -# define DPLL_MD_UDI_DIVIDER_MASK              0x3f000000
874 -# define DPLL_MD_UDI_DIVIDER_SHIFT             24
875 -/** UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */
876 -# define DPLL_MD_VGA_UDI_DIVIDER_MASK          0x003f0000
877 -# define DPLL_MD_VGA_UDI_DIVIDER_SHIFT         16
878 -/**
879 - * SDVO/UDI pixel multiplier.
880 - *
881 - * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus
882 - * clock rate is 10 times the DPLL clock.  At low resolution/refresh rate
883 - * modes, the bus rate would be below the limits, so SDVO allows for stuffing
884 - * dummy bytes in the datastream at an increased clock rate, with both sides of
885 - * the link knowing how many bytes are fill.
886 - *
887 - * So, for a mode with a dotclock of 65Mhz, we would want to double the clock
888 - * rate to 130Mhz to get a bus rate of 1.30Ghz.  The DPLL clock rate would be
889 - * set to 130Mhz, and the SDVO multiplier set to 2x in this register and
890 - * through an SDVO command.
891 - *
892 - * This register field has values of multiplication factor minus 1, with
893 - * a maximum multiplier of 5 for SDVO.
894 - */
895 -# define DPLL_MD_UDI_MULTIPLIER_MASK           0x00003f00
896 -# define DPLL_MD_UDI_MULTIPLIER_SHIFT          8
897 -/** SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK.
898 - * This best be set to the default value (3) or the CRT won't work. No,
899 - * I don't entirely understand what this does...
900 - */
901 -# define DPLL_MD_VGA_UDI_MULTIPLIER_MASK       0x0000003f
902 -# define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT      0
903 -/** @} */
904 -
905 -#define DPLL_TEST              0x606c
906 -# define DPLLB_TEST_SDVO_DIV_1                 (0 << 22)
907 -# define DPLLB_TEST_SDVO_DIV_2                 (1 << 22)
908 -# define DPLLB_TEST_SDVO_DIV_4                 (2 << 22)
909 -# define DPLLB_TEST_SDVO_DIV_MASK              (3 << 22)
910 -# define DPLLB_TEST_N_BYPASS                   (1 << 19)
911 -# define DPLLB_TEST_M_BYPASS                   (1 << 18)
912 -# define DPLLB_INPUT_BUFFER_ENABLE             (1 << 16)
913 -# define DPLLA_TEST_N_BYPASS                   (1 << 3)
914 -# define DPLLA_TEST_M_BYPASS                   (1 << 2)
915 -# define DPLLA_INPUT_BUFFER_ENABLE             (1 << 0)
916 -
917 -#define ADPA                   0x61100
918 -#define ADPA_DAC_ENABLE                (1<<31)
919 -#define ADPA_DAC_DISABLE       0
920 -#define ADPA_PIPE_SELECT_MASK  (1<<30)
921 -#define ADPA_PIPE_A_SELECT     0
922 -#define ADPA_PIPE_B_SELECT     (1<<30)
923 -#define ADPA_USE_VGA_HVPOLARITY (1<<15)
924 -#define ADPA_SETS_HVPOLARITY   0
925 -#define ADPA_VSYNC_CNTL_DISABLE (1<<11)
926 -#define ADPA_VSYNC_CNTL_ENABLE 0
927 -#define ADPA_HSYNC_CNTL_DISABLE (1<<10)
928 -#define ADPA_HSYNC_CNTL_ENABLE 0
929 -#define ADPA_VSYNC_ACTIVE_HIGH (1<<4)
930 -#define ADPA_VSYNC_ACTIVE_LOW  0
931 -#define ADPA_HSYNC_ACTIVE_HIGH (1<<3)
932 -#define ADPA_HSYNC_ACTIVE_LOW  0
933 -
934 -#define FPA0           0x06040
935 -#define FPA1           0x06044
936 -#define FPB0           0x06048
937 -#define FPB1           0x0604c
938 -# define FP_N_DIV_MASK                         0x003f0000
939 -# define FP_N_DIV_SHIFT                                16
940 -# define FP_M1_DIV_MASK                                0x00003f00
941 -# define FP_M1_DIV_SHIFT                       8
942 -# define FP_M2_DIV_MASK                                0x0000003f
943 -# define FP_M2_DIV_SHIFT                       0
944 -
945 -
946 -#define PORT_HOTPLUG_EN                0x61110
947 -# define SDVOB_HOTPLUG_INT_EN                  (1 << 26)
948 -# define SDVOC_HOTPLUG_INT_EN                  (1 << 25)
949 -# define TV_HOTPLUG_INT_EN                     (1 << 18)
950 -# define CRT_HOTPLUG_INT_EN                    (1 << 9)
951 -# define CRT_HOTPLUG_FORCE_DETECT              (1 << 3)
952 -
953 -#define PORT_HOTPLUG_STAT      0x61114
954 -# define CRT_HOTPLUG_INT_STATUS                        (1 << 11)
955 -# define TV_HOTPLUG_INT_STATUS                 (1 << 10)
956 -# define CRT_HOTPLUG_MONITOR_MASK              (3 << 8)
957 -# define CRT_HOTPLUG_MONITOR_COLOR             (3 << 8)
958 -# define CRT_HOTPLUG_MONITOR_MONO              (2 << 8)
959 -# define CRT_HOTPLUG_MONITOR_NONE              (0 << 8)
960 -# define SDVOC_HOTPLUG_INT_STATUS              (1 << 7)
961 -# define SDVOB_HOTPLUG_INT_STATUS              (1 << 6)
962 -
963 -#define SDVOB                  0x61140
964 -#define SDVOC                  0x61160
965 -#define SDVO_ENABLE                            (1 << 31)
966 -#define SDVO_PIPE_B_SELECT                     (1 << 30)
967 -#define SDVO_STALL_SELECT                      (1 << 29)
968 -#define SDVO_INTERRUPT_ENABLE                  (1 << 26)
969 -/**
970 - * 915G/GM SDVO pixel multiplier.
971 - *
972 - * Programmed value is multiplier - 1, up to 5x.
973 - *
974 - * \sa DPLL_MD_UDI_MULTIPLIER_MASK
975 - */
976 -#define SDVO_PORT_MULTIPLY_MASK                        (7 << 23)
977 -#define SDVO_PORT_MULTIPLY_SHIFT               23
978 -#define SDVO_PHASE_SELECT_MASK                 (15 << 19)
979 -#define SDVO_PHASE_SELECT_DEFAULT              (6 << 19)
980 -#define SDVO_CLOCK_OUTPUT_INVERT               (1 << 18)
981 -#define SDVOC_GANG_MODE                                (1 << 16)
982 -#define SDVO_BORDER_ENABLE                     (1 << 7)
983 -#define SDVOB_PCIE_CONCURRENCY                 (1 << 3)
984 -#define SDVO_DETECTED                          (1 << 2)
985 -/* Bits to be preserved when writing */
986 -#define SDVOB_PRESERVE_MASK                    ((1 << 17) | (1 << 16) | (1 << 14))
987 -#define SDVOC_PRESERVE_MASK                    (1 << 17)
988 -
989 -/** @defgroup LVDS
990 - * @{
991 - */
992 -/**
993 - * This register controls the LVDS output enable, pipe selection, and data
994 - * format selection.
995 - *
996 - * All of the clock/data pairs are force powered down by power sequencing.
997 - */
998 -#define LVDS                   0x61180
999 -/**
1000 - * Enables the LVDS port.  This bit must be set before DPLLs are enabled, as
1001 - * the DPLL semantics change when the LVDS is assigned to that pipe.
1002 - */
1003 -# define LVDS_PORT_EN                  (1 << 31)
1004 -/** Selects pipe B for LVDS data.  Must be set on pre-965. */
1005 -# define LVDS_PIPEB_SELECT             (1 << 30)
1006 -
1007 -/**
1008 - * Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
1009 - * pixel.
1010 - */
1011 -# define LVDS_A0A2_CLKA_POWER_MASK     (3 << 8)
1012 -# define LVDS_A0A2_CLKA_POWER_DOWN     (0 << 8)
1013 -# define LVDS_A0A2_CLKA_POWER_UP       (3 << 8)
1014 -/**
1015 - * Controls the A3 data pair, which contains the additional LSBs for 24 bit
1016 - * mode.  Only enabled if LVDS_A0A2_CLKA_POWER_UP also indicates it should be
1017 - * on.
1018 - */
1019 -# define LVDS_A3_POWER_MASK            (3 << 6)
1020 -# define LVDS_A3_POWER_DOWN            (0 << 6)
1021 -# define LVDS_A3_POWER_UP              (3 << 6)
1022 -/**
1023 - * Controls the CLKB pair.  This should only be set when LVDS_B0B3_POWER_UP
1024 - * is set.
1025 - */
1026 -# define LVDS_CLKB_POWER_MASK          (3 << 4)
1027 -# define LVDS_CLKB_POWER_DOWN          (0 << 4)
1028 -# define LVDS_CLKB_POWER_UP            (3 << 4)
1029 -
1030 -/**
1031 - * Controls the B0-B3 data pairs.  This must be set to match the DPLL p2
1032 - * setting for whether we are in dual-channel mode.  The B3 pair will
1033 - * additionally only be powered up when LVDS_A3_POWER_UP is set.
1034 - */
1035 -# define LVDS_B0B3_POWER_MASK          (3 << 2)
1036 -# define LVDS_B0B3_POWER_DOWN          (0 << 2)
1037 -# define LVDS_B0B3_POWER_UP            (3 << 2)
1038 -
1039 -#define PIPEACONF 0x70008
1040 -#define PIPEACONF_ENABLE       (1<<31)
1041 -#define PIPEACONF_DISABLE      0
1042 -#define PIPEACONF_DOUBLE_WIDE  (1<<30)
1043 -#define I965_PIPECONF_ACTIVE   (1<<30)
1044 -#define PIPEACONF_SINGLE_WIDE  0
1045 -#define PIPEACONF_PIPE_UNLOCKED 0
1046 -#define PIPEACONF_PIPE_LOCKED  (1<<25)
1047 -#define PIPEACONF_PALETTE      0
1048 -#define PIPEACONF_GAMMA                (1<<24)
1049 -#define PIPECONF_FORCE_BORDER  (1<<25)
1050 -#define PIPECONF_PROGRESSIVE   (0 << 21)
1051 -#define PIPECONF_INTERLACE_W_FIELD_INDICATION  (6 << 21)
1052 -#define PIPECONF_INTERLACE_FIELD_0_ONLY                (7 << 21)
1053 -
1054 -#define DSPARB   0x70030
1055 -#define DSPARB_CSTART_MASK     (0x7f << 7)
1056 -#define DSPARB_CSTART_SHIFT    7
1057 -#define DSPARB_BSTART_MASK     (0x7f)           
1058 -#define DSPARB_BSTART_SHIFT    0
1059 -
1060 -#define PIPEBCONF 0x71008
1061 -#define PIPEBCONF_ENABLE       (1<<31)
1062 -#define PIPEBCONF_DISABLE      0
1063 -#define PIPEBCONF_DOUBLE_WIDE  (1<<30)
1064 -#define PIPEBCONF_DISABLE      0
1065 -#define PIPEBCONF_GAMMA                (1<<24)
1066 -#define PIPEBCONF_PALETTE      0
1067 -
1068 -#define PIPEBGCMAXRED          0x71010
1069 -#define PIPEBGCMAXGREEN                0x71014
1070 -#define PIPEBGCMAXBLUE         0x71018
1071 -#define PIPEBSTAT              0x71024
1072 -#define PIPEBFRAMEHIGH         0x71040
1073 -#define PIPEBFRAMEPIXEL                0x71044
1074 -
1075 -#define DSPACNTR               0x70180
1076 -#define DSPBCNTR               0x71180
1077 -#define DISPLAY_PLANE_ENABLE                   (1<<31)
1078 -#define DISPLAY_PLANE_DISABLE                  0
1079 -#define DISPPLANE_GAMMA_ENABLE                 (1<<30)
1080 -#define DISPPLANE_GAMMA_DISABLE                        0
1081 -#define DISPPLANE_PIXFORMAT_MASK               (0xf<<26)
1082 -#define DISPPLANE_8BPP                         (0x2<<26)
1083 -#define DISPPLANE_15_16BPP                     (0x4<<26)
1084 -#define DISPPLANE_16BPP                                (0x5<<26)
1085 -#define DISPPLANE_32BPP_NO_ALPHA               (0x6<<26)
1086 -#define DISPPLANE_32BPP                                (0x7<<26)
1087 -#define DISPPLANE_STEREO_ENABLE                        (1<<25)
1088 -#define DISPPLANE_STEREO_DISABLE               0
1089 -#define DISPPLANE_SEL_PIPE_MASK                        (1<<24)
1090 -#define DISPPLANE_SEL_PIPE_A                   0
1091 -#define DISPPLANE_SEL_PIPE_B                   (1<<24)
1092 -#define DISPPLANE_SRC_KEY_ENABLE               (1<<22)
1093 -#define DISPPLANE_SRC_KEY_DISABLE              0
1094 -#define DISPPLANE_LINE_DOUBLE                  (1<<20)
1095 -#define DISPPLANE_NO_LINE_DOUBLE               0
1096 -#define DISPPLANE_STEREO_POLARITY_FIRST                0
1097 -#define DISPPLANE_STEREO_POLARITY_SECOND       (1<<18)
1098 -/* plane B only */
1099 -#define DISPPLANE_ALPHA_TRANS_ENABLE           (1<<15)
1100 -#define DISPPLANE_ALPHA_TRANS_DISABLE          0
1101 -#define DISPPLANE_SPRITE_ABOVE_DISPLAYA                0
1102 -#define DISPPLANE_SPRITE_ABOVE_OVERLAY         (1)
1103 -
1104 -#define DSPABASE               0x70184
1105 -#define DSPASTRIDE             0x70188
1106 -
1107 -#define DSPBBASE               0x71184
1108 -#define DSPBADDR               DSPBBASE
1109 -#define DSPBSTRIDE             0x71188
1110 -
1111 -#define DSPAKEYVAL             0x70194
1112 -#define DSPAKEYMASK            0x70198
1113 -
1114 -#define DSPAPOS                        0x7018C /* reserved */
1115 -#define DSPASIZE               0x70190
1116 -#define DSPBPOS                        0x7118C
1117 -#define DSPBSIZE               0x71190
1118 -
1119 -#define DSPASURF               0x7019C
1120 -#define DSPATILEOFF            0x701A4
1121 -
1122 -#define DSPBSURF               0x7119C
1123 -#define DSPBTILEOFF            0x711A4
1124 -
1125 -#define VGACNTRL               0x71400
1126 -# define VGA_DISP_DISABLE                      (1 << 31)
1127 -# define VGA_2X_MODE                           (1 << 30)
1128 -# define VGA_PIPE_B_SELECT                     (1 << 29)
1129 -
1130 -/*
1131 - * Some BIOS scratch area registers.  The 845 (and 830?) store the amount
1132 - * of video memory available to the BIOS in SWF1.
1133 - */
1134 -
1135 -#define SWF0                   0x71410
1136 -
1137 -/*
1138 - * 855 scratch registers.
1139 - */
1140 -#define SWF10                  0x70410
1141 -
1142 -#define SWF30                  0x72414
1143 -
1144 -/*
1145 - * Overlay registers.  These are overlay registers accessed via MMIO.
1146 - * Those loaded via the overlay register page are defined in i830_video.c.
1147 - */
1148 -#define OVADD                  0x30000
1149 -
1150 -#define DOVSTA                 0x30008
1151 -#define OC_BUF                 (0x3<<20)
1152 +#define READ_HWSP(dev_priv, reg)  (((volatile u32*)(dev_priv->hw_status_page))[reg])
1153 +#define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, 5)
1154  
1155 -#define OGAMC5                 0x30010
1156 -#define OGAMC4                 0x30014
1157 -#define OGAMC3                 0x30018
1158 -#define OGAMC2                 0x3001c
1159 -#define OGAMC1                 0x30020
1160 -#define OGAMC0                 0x30024
1161 -/*
1162 - * Palette registers
1163 - */
1164 -#define PALETTE_A              0x0a000
1165 -#define PALETTE_B              0x0a800
1166 +extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1167  
1168  #define IS_I830(dev) ((dev)->pci_device == 0x3577)
1169  #define IS_845G(dev) ((dev)->pci_device == 0x2562)
1170 --- a/drivers/gpu/drm/i915/i915_irq.c
1171 +++ b/drivers/gpu/drm/i915/i915_irq.c
1172 @@ -31,10 +31,6 @@
1173  #include "i915_drm.h"
1174  #include "i915_drv.h"
1175  
1176 -#define USER_INT_FLAG (1<<1)
1177 -#define VSYNC_PIPEB_FLAG (1<<5)
1178 -#define VSYNC_PIPEA_FLAG (1<<7)
1179 -
1180  #define MAX_NOPID ((u32)~0)
1181  
1182  /**
1183 @@ -236,40 +232,43 @@ irqreturn_t i915_driver_irq_handler(DRM_
1184         u16 temp;
1185         u32 pipea_stats, pipeb_stats;
1186  
1187 -       pipea_stats = I915_READ(I915REG_PIPEASTAT);
1188 -       pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
1189 +       pipea_stats = I915_READ(PIPEASTAT);
1190 +       pipeb_stats = I915_READ(PIPEBSTAT);
1191  
1192 -       temp = I915_READ16(I915REG_INT_IDENTITY_R);
1193 +       temp = I915_READ16(IIR);
1194  
1195 -       temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);
1196 +       temp &= (I915_USER_INTERRUPT |
1197 +                I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT |
1198 +                I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT);
1199  
1200         DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);
1201  
1202         if (temp == 0)
1203                 return IRQ_NONE;
1204  
1205 -       I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
1206 -       (void) I915_READ16(I915REG_INT_IDENTITY_R);
1207 +       I915_WRITE16(IIR, temp);
1208 +       (void) I915_READ16(IIR);
1209         DRM_READMEMORYBARRIER();
1210  
1211         dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
1212  
1213 -       if (temp & USER_INT_FLAG)
1214 +       if (temp & I915_USER_INTERRUPT)
1215                 DRM_WAKEUP(&dev_priv->irq_queue);
1216  
1217 -       if (temp & (VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG)) {
1218 +       if (temp & (I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT |
1219 +                   I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT)) {
1220                 int vblank_pipe = dev_priv->vblank_pipe;
1221  
1222                 if ((vblank_pipe &
1223                      (DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B))
1224                     == (DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B)) {
1225 -                       if (temp & VSYNC_PIPEA_FLAG)
1226 +                       if (temp & I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT)
1227                                 atomic_inc(&dev->vbl_received);
1228 -                       if (temp & VSYNC_PIPEB_FLAG)
1229 +                       if (temp & I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT)
1230                                 atomic_inc(&dev->vbl_received2);
1231 -               } else if (((temp & VSYNC_PIPEA_FLAG) &&
1232 +               } else if (((temp & I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT) &&
1233                             (vblank_pipe & DRM_I915_VBLANK_PIPE_A)) ||
1234 -                          ((temp & VSYNC_PIPEB_FLAG) &&
1235 +                          ((temp & I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT) &&
1236                             (vblank_pipe & DRM_I915_VBLANK_PIPE_B)))
1237                         atomic_inc(&dev->vbl_received);
1238  
1239 @@ -278,12 +277,12 @@ irqreturn_t i915_driver_irq_handler(DRM_
1240  
1241                 if (dev_priv->swaps_pending > 0)
1242                         drm_locked_tasklet(dev, i915_vblank_tasklet);
1243 -               I915_WRITE(I915REG_PIPEASTAT,
1244 +               I915_WRITE(PIPEASTAT,
1245                         pipea_stats|I915_VBLANK_INTERRUPT_ENABLE|
1246 -                       I915_VBLANK_CLEAR);
1247 -               I915_WRITE(I915REG_PIPEBSTAT,
1248 +                       PIPE_VBLANK_INTERRUPT_STATUS);
1249 +               I915_WRITE(PIPEBSTAT,
1250                         pipeb_stats|I915_VBLANK_INTERRUPT_ENABLE|
1251 -                       I915_VBLANK_CLEAR);
1252 +                       PIPE_VBLANK_INTERRUPT_STATUS);
1253         }
1254  
1255         return IRQ_HANDLED;
1256 @@ -304,12 +303,12 @@ static int i915_emit_irq(struct drm_devi
1257                 dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1;
1258  
1259         BEGIN_LP_RING(6);
1260 -       OUT_RING(CMD_STORE_DWORD_IDX);
1261 -       OUT_RING(20);
1262 +       OUT_RING(MI_STORE_DWORD_INDEX);
1263 +       OUT_RING(5 << MI_STORE_DWORD_INDEX_SHIFT);
1264         OUT_RING(dev_priv->counter);
1265         OUT_RING(0);
1266         OUT_RING(0);
1267 -       OUT_RING(GFX_OP_USER_INTERRUPT);
1268 +       OUT_RING(MI_USER_INTERRUPT);
1269         ADVANCE_LP_RING();
1270  
1271         return dev_priv->counter;
1272 @@ -421,11 +420,11 @@ static void i915_enable_interrupt (struc
1273  
1274         flag = 0;
1275         if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_A)
1276 -               flag |= VSYNC_PIPEA_FLAG;
1277 +               flag |= I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT;
1278         if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
1279 -               flag |= VSYNC_PIPEB_FLAG;
1280 +               flag |= I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT;
1281  
1282 -       I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | flag);
1283 +       I915_WRITE16(IER, I915_USER_INTERRUPT | flag);
1284  }
1285  
1286  /* Set the vblank monitor pipe
1287 @@ -465,11 +464,11 @@ int i915_vblank_pipe_get(struct drm_devi
1288                 return -EINVAL;
1289         }
1290  
1291 -       flag = I915_READ(I915REG_INT_ENABLE_R);
1292 +       flag = I915_READ(IER);
1293         pipe->pipe = 0;
1294 -       if (flag & VSYNC_PIPEA_FLAG)
1295 +       if (flag & I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT)
1296                 pipe->pipe |= DRM_I915_VBLANK_PIPE_A;
1297 -       if (flag & VSYNC_PIPEB_FLAG)
1298 +       if (flag & I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT)
1299                 pipe->pipe |= DRM_I915_VBLANK_PIPE_B;
1300  
1301         return 0;
1302 @@ -587,9 +586,9 @@ void i915_driver_irq_preinstall(struct d
1303  {
1304         drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
1305  
1306 -       I915_WRITE16(I915REG_HWSTAM, 0xfffe);
1307 -       I915_WRITE16(I915REG_INT_MASK_R, 0x0);
1308 -       I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
1309 +       I915_WRITE16(HWSTAM, 0xfffe);
1310 +       I915_WRITE16(IMR, 0x0);
1311 +       I915_WRITE16(IER, 0x0);
1312  }
1313  
1314  void i915_driver_irq_postinstall(struct drm_device * dev)
1315 @@ -614,10 +613,10 @@ void i915_driver_irq_uninstall(struct dr
1316         if (!dev_priv)
1317                 return;
1318  
1319 -       I915_WRITE16(I915REG_HWSTAM, 0xffff);
1320 -       I915_WRITE16(I915REG_INT_MASK_R, 0xffff);
1321 -       I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
1322 +       I915_WRITE16(HWSTAM, 0xffff);
1323 +       I915_WRITE16(IMR, 0xffff);
1324 +       I915_WRITE16(IER, 0x0);
1325  
1326 -       temp = I915_READ16(I915REG_INT_IDENTITY_R);
1327 -       I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
1328 +       temp = I915_READ16(IIR);
1329 +       I915_WRITE16(IIR, temp);
1330  }
1331 --- /dev/null
1332 +++ b/drivers/gpu/drm/i915/i915_reg.h
1333 @@ -0,0 +1,1405 @@
1334 +/* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
1335 + * All Rights Reserved.
1336 + *
1337 + * Permission is hereby granted, free of charge, to any person obtaining a
1338 + * copy of this software and associated documentation files (the
1339 + * "Software"), to deal in the Software without restriction, including
1340 + * without limitation the rights to use, copy, modify, merge, publish,
1341 + * distribute, sub license, and/or sell copies of the Software, and to
1342 + * permit persons to whom the Software is furnished to do so, subject to
1343 + * the following conditions:
1344 + *
1345 + * The above copyright notice and this permission notice (including the
1346 + * next paragraph) shall be included in all copies or substantial portions
1347 + * of the Software.
1348 + *
1349 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1350 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1351 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
1352 + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
1353 + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
1354 + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
1355 + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1356 + */
1357 +
1358 +#ifndef _I915_REG_H_
1359 +#define _I915_REG_H_
1360 +
1361 +/* MCH MMIO space */
1362 +/** 915-945 and GM965 MCH register controlling DRAM channel access */
1363 +#define DCC            0x200
1364 +#define DCC_ADDRESSING_MODE_SINGLE_CHANNEL             (0 << 0)
1365 +#define DCC_ADDRESSING_MODE_DUAL_CHANNEL_ASYMMETRIC    (1 << 0)
1366 +#define DCC_ADDRESSING_MODE_DUAL_CHANNEL_INTERLEAVED   (2 << 0)
1367 +#define DCC_ADDRESSING_MODE_MASK                       (3 << 0)
1368 +#define DCC_CHANNEL_XOR_DISABLE                                (1 << 10)
1369 +
1370 +/** 965 MCH register controlling DRAM channel configuration */
1371 +#define CHDECMISC              0x111
1372 +#define CHDECMISC_FLEXMEMORY           (1 << 1)
1373 +
1374 +/*
1375 + * The Bridge device's PCI config space has information about the
1376 + * fb aperture size and the amount of pre-reserved memory.
1377 + */
1378 +#define INTEL_GMCH_CTRL                0x52
1379 +#define INTEL_GMCH_ENABLED     0x4
1380 +#define INTEL_GMCH_MEM_MASK    0x1
1381 +#define INTEL_GMCH_MEM_64M     0x1
1382 +#define INTEL_GMCH_MEM_128M    0
1383 +
1384 +#define INTEL_855_GMCH_GMS_MASK                (0x7 << 4)
1385 +#define INTEL_855_GMCH_GMS_DISABLED    (0x0 << 4)
1386 +#define INTEL_855_GMCH_GMS_STOLEN_1M   (0x1 << 4)
1387 +#define INTEL_855_GMCH_GMS_STOLEN_4M   (0x2 << 4)
1388 +#define INTEL_855_GMCH_GMS_STOLEN_8M   (0x3 << 4)
1389 +#define INTEL_855_GMCH_GMS_STOLEN_16M  (0x4 << 4)
1390 +#define INTEL_855_GMCH_GMS_STOLEN_32M  (0x5 << 4)
1391 +
1392 +#define INTEL_915G_GMCH_GMS_STOLEN_48M (0x6 << 4)
1393 +#define INTEL_915G_GMCH_GMS_STOLEN_64M (0x7 << 4)
1394 +
1395 +/* PCI config space */
1396 +
1397 +#define HPLLCC 0xc0 /* 855 only */
1398 +#define   GC_CLOCK_CONTROL_MASK                (3 << 0)
1399 +#define   GC_CLOCK_133_200             (0 << 0)
1400 +#define   GC_CLOCK_100_200             (1 << 0)
1401 +#define   GC_CLOCK_100_133             (2 << 0)
1402 +#define   GC_CLOCK_166_250             (3 << 0)
1403 +#define GCFGC  0xf0 /* 915+ only */
1404 +#define   GC_LOW_FREQUENCY_ENABLE      (1 << 7)
1405 +#define   GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
1406 +#define   GC_DISPLAY_CLOCK_333_MHZ     (4 << 4)
1407 +#define   GC_DISPLAY_CLOCK_MASK                (7 << 4)
1408 +#define LBB    0xf4
1409 +
1410 +/* VGA stuff */
1411 +
1412 +#define VGA_ST01_MDA 0x3ba
1413 +#define VGA_ST01_CGA 0x3da
1414 +
1415 +#define VGA_MSR_WRITE 0x3c2
1416 +#define VGA_MSR_READ 0x3cc
1417 +#define   VGA_MSR_MEM_EN (1<<1)
1418 +#define   VGA_MSR_CGA_MODE (1<<0)
1419 +
1420 +#define VGA_SR_INDEX 0x3c4
1421 +#define VGA_SR_DATA 0x3c5
1422 +
1423 +#define VGA_AR_INDEX 0x3c0
1424 +#define   VGA_AR_VID_EN (1<<5)
1425 +#define VGA_AR_DATA_WRITE 0x3c0
1426 +#define VGA_AR_DATA_READ 0x3c1
1427 +
1428 +#define VGA_GR_INDEX 0x3ce
1429 +#define VGA_GR_DATA 0x3cf
1430 +/* GR05 */
1431 +#define   VGA_GR_MEM_READ_MODE_SHIFT 3
1432 +#define     VGA_GR_MEM_READ_MODE_PLANE 1
1433 +/* GR06 */
1434 +#define   VGA_GR_MEM_MODE_MASK 0xc
1435 +#define   VGA_GR_MEM_MODE_SHIFT 2
1436 +#define   VGA_GR_MEM_A0000_AFFFF 0
1437 +#define   VGA_GR_MEM_A0000_BFFFF 1
1438 +#define   VGA_GR_MEM_B0000_B7FFF 2
1439 +#define   VGA_GR_MEM_B0000_BFFFF 3
1440 +
1441 +#define VGA_DACMASK 0x3c6
1442 +#define VGA_DACRX 0x3c7
1443 +#define VGA_DACWX 0x3c8
1444 +#define VGA_DACDATA 0x3c9
1445 +
1446 +#define VGA_CR_INDEX_MDA 0x3b4
1447 +#define VGA_CR_DATA_MDA 0x3b5
1448 +#define VGA_CR_INDEX_CGA 0x3d4
1449 +#define VGA_CR_DATA_CGA 0x3d5
1450 +
1451 +/*
1452 + * Memory interface instructions used by the kernel
1453 + */
1454 +#define MI_INSTR(opcode, flags) (((opcode) << 23) | (flags))
1455 +
1456 +#define MI_NOOP                        MI_INSTR(0, 0)
1457 +#define MI_USER_INTERRUPT      MI_INSTR(0x02, 0)
1458 +#define MI_WAIT_FOR_EVENT       MI_INSTR(0x03, 0)
1459 +#define   MI_WAIT_FOR_PLANE_B_FLIP      (1<<6)
1460 +#define   MI_WAIT_FOR_PLANE_A_FLIP      (1<<2)
1461 +#define   MI_WAIT_FOR_PLANE_A_SCANLINES (1<<1)
1462 +#define MI_FLUSH               MI_INSTR(0x04, 0)
1463 +#define   MI_READ_FLUSH                (1 << 0)
1464 +#define   MI_EXE_FLUSH         (1 << 1)
1465 +#define   MI_NO_WRITE_FLUSH    (1 << 2)
1466 +#define   MI_SCENE_COUNT       (1 << 3) /* just increment scene count */
1467 +#define   MI_END_SCENE         (1 << 4) /* flush binner and incr scene count */
1468 +#define MI_BATCH_BUFFER_END    MI_INSTR(0x0a, 0)
1469 +#define MI_REPORT_HEAD         MI_INSTR(0x07, 0)
1470 +#define MI_LOAD_SCAN_LINES_INCL MI_INSTR(0x12, 0)
1471 +#define MI_STORE_DWORD_IMM     MI_INSTR(0x20, 1)
1472 +#define   MI_MEM_VIRTUAL       (1 << 22) /* 965+ only */
1473 +#define MI_STORE_DWORD_INDEX   MI_INSTR(0x21, 1)
1474 +#define   MI_STORE_DWORD_INDEX_SHIFT 2
1475 +#define MI_LOAD_REGISTER_IMM   MI_INSTR(0x22, 1)
1476 +#define MI_BATCH_BUFFER                MI_INSTR(0x30, 1)
1477 +#define   MI_BATCH_NON_SECURE  (1)
1478 +#define   MI_BATCH_NON_SECURE_I965 (1<<8)
1479 +#define MI_BATCH_BUFFER_START  MI_INSTR(0x31, 0)
1480 +
1481 +/*
1482 + * 3D instructions used by the kernel
1483 + */
1484 +#define GFX_INSTR(opcode, flags) ((0x3 << 29) | ((opcode) << 24) | (flags))
1485 +
1486 +#define GFX_OP_RASTER_RULES    ((0x3<<29)|(0x7<<24))
1487 +#define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
1488 +#define   SC_UPDATE_SCISSOR       (0x1<<1)
1489 +#define   SC_ENABLE_MASK          (0x1<<0)
1490 +#define   SC_ENABLE               (0x1<<0)
1491 +#define GFX_OP_LOAD_INDIRECT   ((0x3<<29)|(0x1d<<24)|(0x7<<16))
1492 +#define GFX_OP_SCISSOR_INFO    ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
1493 +#define   SCI_YMIN_MASK      (0xffff<<16)
1494 +#define   SCI_XMIN_MASK      (0xffff<<0)
1495 +#define   SCI_YMAX_MASK      (0xffff<<16)
1496 +#define   SCI_XMAX_MASK      (0xffff<<0)
1497 +#define GFX_OP_SCISSOR_ENABLE   ((0x3<<29)|(0x1c<<24)|(0x10<<19))
1498 +#define GFX_OP_SCISSOR_RECT     ((0x3<<29)|(0x1d<<24)|(0x81<<16)|1)
1499 +#define GFX_OP_COLOR_FACTOR      ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
1500 +#define GFX_OP_STIPPLE           ((0x3<<29)|(0x1d<<24)|(0x83<<16))
1501 +#define GFX_OP_MAP_INFO          ((0x3<<29)|(0x1d<<24)|0x4)
1502 +#define GFX_OP_DESTBUFFER_VARS   ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
1503 +#define GFX_OP_DESTBUFFER_INFO  ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
1504 +#define GFX_OP_DRAWRECT_INFO     ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
1505 +#define GFX_OP_DRAWRECT_INFO_I965  ((0x7900<<16)|0x2)
1506 +#define SRC_COPY_BLT_CMD                ((2<<29)|(0x43<<22)|4)
1507 +#define XY_SRC_COPY_BLT_CMD            ((2<<29)|(0x53<<22)|6)
1508 +#define XY_MONO_SRC_COPY_IMM_BLT       ((2<<29)|(0x71<<22)|5)
1509 +#define XY_SRC_COPY_BLT_WRITE_ALPHA    (1<<21)
1510 +#define XY_SRC_COPY_BLT_WRITE_RGB      (1<<20)
1511 +#define   BLT_DEPTH_8                  (0<<24)
1512 +#define   BLT_DEPTH_16_565             (1<<24)
1513 +#define   BLT_DEPTH_16_1555            (2<<24)
1514 +#define   BLT_DEPTH_32                 (3<<24)
1515 +#define   BLT_ROP_GXCOPY               (0xcc<<16)
1516 +#define XY_SRC_COPY_BLT_SRC_TILED      (1<<15) /* 965+ only */
1517 +#define XY_SRC_COPY_BLT_DST_TILED      (1<<11) /* 965+ only */
1518 +#define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2)
1519 +#define   ASYNC_FLIP                (1<<22)
1520 +#define   DISPLAY_PLANE_A           (0<<20)
1521 +#define   DISPLAY_PLANE_B           (1<<20)
1522 +
1523 +/*
1524 + * Instruction and interrupt control regs
1525 + */
1526 +
1527 +#define PRB0_TAIL      0x02030
1528 +#define PRB0_HEAD      0x02034
1529 +#define PRB0_START     0x02038
1530 +#define PRB0_CTL       0x0203c
1531 +#define   TAIL_ADDR            0x001FFFF8
1532 +#define   HEAD_WRAP_COUNT      0xFFE00000
1533 +#define   HEAD_WRAP_ONE                0x00200000
1534 +#define   HEAD_ADDR            0x001FFFFC
1535 +#define   RING_NR_PAGES                0x001FF000
1536 +#define   RING_REPORT_MASK     0x00000006
1537 +#define   RING_REPORT_64K      0x00000002
1538 +#define   RING_REPORT_128K     0x00000004
1539 +#define   RING_NO_REPORT       0x00000000
1540 +#define   RING_VALID_MASK      0x00000001
1541 +#define   RING_VALID           0x00000001
1542 +#define   RING_INVALID         0x00000000
1543 +#define PRB1_TAIL      0x02040 /* 915+ only */
1544 +#define PRB1_HEAD      0x02044 /* 915+ only */
1545 +#define PRB1_START     0x02048 /* 915+ only */
1546 +#define PRB1_CTL       0x0204c /* 915+ only */
1547 +#define ACTHD_I965     0x02074
1548 +#define HWS_PGA                0x02080
1549 +#define HWS_ADDRESS_MASK       0xfffff000
1550 +#define HWS_START_ADDRESS_SHIFT        4
1551 +#define IPEIR          0x02088
1552 +#define NOPID          0x02094
1553 +#define HWSTAM         0x02098
1554 +#define SCPD0          0x0209c /* 915+ only */
1555 +#define IER            0x020a0
1556 +#define IIR            0x020a4
1557 +#define IMR            0x020a8
1558 +#define ISR            0x020ac
1559 +#define   I915_PIPE_CONTROL_NOTIFY_INTERRUPT           (1<<18)
1560 +#define   I915_DISPLAY_PORT_INTERRUPT                  (1<<17)
1561 +#define   I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT   (1<<15)
1562 +#define   I915_GMCH_THERMAL_SENSOR_EVENT_INTERRUPT     (1<<14)
1563 +#define   I915_HWB_OOM_INTERRUPT                       (1<<13)
1564 +#define   I915_SYNC_STATUS_INTERRUPT                   (1<<12)
1565 +#define   I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT  (1<<11)
1566 +#define   I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT  (1<<10)
1567 +#define   I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT    (1<<9)
1568 +#define   I915_DISPLAY_PLANE_C_FLIP_PENDING_INTERRUPT  (1<<8)
1569 +#define   I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT         (1<<7)
1570 +#define   I915_DISPLAY_PIPE_A_EVENT_INTERRUPT          (1<<6)
1571 +#define   I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT         (1<<5)
1572 +#define   I915_DISPLAY_PIPE_B_EVENT_INTERRUPT          (1<<4)
1573 +#define   I915_DEBUG_INTERRUPT                         (1<<2)
1574 +#define   I915_USER_INTERRUPT                          (1<<1)
1575 +#define   I915_ASLE_INTERRUPT                          (1<<0)
1576 +#define EIR            0x020b0
1577 +#define EMR            0x020b4
1578 +#define ESR            0x020b8
1579 +#define INSTPM         0x020c0
1580 +#define ACTHD          0x020c8
1581 +#define FW_BLC         0x020d8
1582 +#define FW_BLC_SELF    0x020e0 /* 915+ only */
1583 +#define MI_ARB_STATE   0x020e4 /* 915+ only */
1584 +#define CACHE_MODE_0   0x02120 /* 915+ only */
1585 +#define   CM0_MASK_SHIFT          16
1586 +#define   CM0_IZ_OPT_DISABLE      (1<<6)
1587 +#define   CM0_ZR_OPT_DISABLE      (1<<5)
1588 +#define   CM0_DEPTH_EVICT_DISABLE (1<<4)
1589 +#define   CM0_COLOR_EVICT_DISABLE (1<<3)
1590 +#define   CM0_DEPTH_WRITE_DISABLE (1<<1)
1591 +#define   CM0_RC_OP_FLUSH_DISABLE (1<<0)
1592 +#define GFX_FLSH_CNTL  0x02170 /* 915+ only */
1593 +
1594 +/*
1595 + * Framebuffer compression (915+ only)
1596 + */
1597 +
1598 +#define FBC_CFB_BASE           0x03200 /* 4k page aligned */
1599 +#define FBC_LL_BASE            0x03204 /* 4k page aligned */
1600 +#define FBC_CONTROL            0x03208
1601 +#define   FBC_CTL_EN           (1<<31)
1602 +#define   FBC_CTL_PERIODIC     (1<<30)
1603 +#define   FBC_CTL_INTERVAL_SHIFT (16)
1604 +#define   FBC_CTL_UNCOMPRESSIBLE (1<<14)
1605 +#define   FBC_CTL_STRIDE_SHIFT (5)
1606 +#define   FBC_CTL_FENCENO      (1<<0)
1607 +#define FBC_COMMAND            0x0320c
1608 +#define   FBC_CMD_COMPRESS     (1<<0)
1609 +#define FBC_STATUS             0x03210
1610 +#define   FBC_STAT_COMPRESSING (1<<31)
1611 +#define   FBC_STAT_COMPRESSED  (1<<30)
1612 +#define   FBC_STAT_MODIFIED    (1<<29)
1613 +#define   FBC_STAT_CURRENT_LINE        (1<<0)
1614 +#define FBC_CONTROL2           0x03214
1615 +#define   FBC_CTL_FENCE_DBL    (0<<4)
1616 +#define   FBC_CTL_IDLE_IMM     (0<<2)
1617 +#define   FBC_CTL_IDLE_FULL    (1<<2)
1618 +#define   FBC_CTL_IDLE_LINE    (2<<2)
1619 +#define   FBC_CTL_IDLE_DEBUG   (3<<2)
1620 +#define   FBC_CTL_CPU_FENCE    (1<<1)
1621 +#define   FBC_CTL_PLANEA       (0<<0)
1622 +#define   FBC_CTL_PLANEB       (1<<0)
1623 +#define FBC_FENCE_OFF          0x0321b
1624 +
1625 +#define FBC_LL_SIZE            (1536)
1626 +
1627 +/*
1628 + * GPIO regs
1629 + */
1630 +#define GPIOA                  0x5010
1631 +#define GPIOB                  0x5014
1632 +#define GPIOC                  0x5018
1633 +#define GPIOD                  0x501c
1634 +#define GPIOE                  0x5020
1635 +#define GPIOF                  0x5024
1636 +#define GPIOG                  0x5028
1637 +#define GPIOH                  0x502c
1638 +# define GPIO_CLOCK_DIR_MASK           (1 << 0)
1639 +# define GPIO_CLOCK_DIR_IN             (0 << 1)
1640 +# define GPIO_CLOCK_DIR_OUT            (1 << 1)
1641 +# define GPIO_CLOCK_VAL_MASK           (1 << 2)
1642 +# define GPIO_CLOCK_VAL_OUT            (1 << 3)
1643 +# define GPIO_CLOCK_VAL_IN             (1 << 4)
1644 +# define GPIO_CLOCK_PULLUP_DISABLE     (1 << 5)
1645 +# define GPIO_DATA_DIR_MASK            (1 << 8)
1646 +# define GPIO_DATA_DIR_IN              (0 << 9)
1647 +# define GPIO_DATA_DIR_OUT             (1 << 9)
1648 +# define GPIO_DATA_VAL_MASK            (1 << 10)
1649 +# define GPIO_DATA_VAL_OUT             (1 << 11)
1650 +# define GPIO_DATA_VAL_IN              (1 << 12)
1651 +# define GPIO_DATA_PULLUP_DISABLE      (1 << 13)
1652 +
1653 +/*
1654 + * Clock control & power management
1655 + */
1656 +
1657 +#define VGA0   0x6000
1658 +#define VGA1   0x6004
1659 +#define VGA_PD 0x6010
1660 +#define   VGA0_PD_P2_DIV_4     (1 << 7)
1661 +#define   VGA0_PD_P1_DIV_2     (1 << 5)
1662 +#define   VGA0_PD_P1_SHIFT     0
1663 +#define   VGA0_PD_P1_MASK      (0x1f << 0)
1664 +#define   VGA1_PD_P2_DIV_4     (1 << 15)
1665 +#define   VGA1_PD_P1_DIV_2     (1 << 13)
1666 +#define   VGA1_PD_P1_SHIFT     8
1667 +#define   VGA1_PD_P1_MASK      (0x1f << 8)
1668 +#define DPLL_A 0x06014
1669 +#define DPLL_B 0x06018
1670 +#define   DPLL_VCO_ENABLE              (1 << 31)
1671 +#define   DPLL_DVO_HIGH_SPEED          (1 << 30)
1672 +#define   DPLL_SYNCLOCK_ENABLE         (1 << 29)
1673 +#define   DPLL_VGA_MODE_DIS            (1 << 28)
1674 +#define   DPLLB_MODE_DAC_SERIAL                (1 << 26) /* i915 */
1675 +#define   DPLLB_MODE_LVDS              (2 << 26) /* i915 */
1676 +#define   DPLL_MODE_MASK               (3 << 26)
1677 +#define   DPLL_DAC_SERIAL_P2_CLOCK_DIV_10 (0 << 24) /* i915 */
1678 +#define   DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 (1 << 24) /* i915 */
1679 +#define   DPLLB_LVDS_P2_CLOCK_DIV_14   (0 << 24) /* i915 */
1680 +#define   DPLLB_LVDS_P2_CLOCK_DIV_7    (1 << 24) /* i915 */
1681 +#define   DPLL_P2_CLOCK_DIV_MASK       0x03000000 /* i915 */
1682 +#define   DPLL_FPA01_P1_POST_DIV_MASK  0x00ff0000 /* i915 */
1683 +
1684 +#define I915_FIFO_UNDERRUN_STATUS              (1UL<<31)
1685 +#define I915_CRC_ERROR_ENABLE                  (1UL<<29)
1686 +#define I915_CRC_DONE_ENABLE                   (1UL<<28)
1687 +#define I915_GMBUS_EVENT_ENABLE                        (1UL<<27)
1688 +#define I915_VSYNC_INTERRUPT_ENABLE            (1UL<<25)
1689 +#define I915_DISPLAY_LINE_COMPARE_ENABLE       (1UL<<24)
1690 +#define I915_DPST_EVENT_ENABLE                 (1UL<<23)
1691 +#define I915_LEGACY_BLC_EVENT_ENABLE           (1UL<<22)
1692 +#define I915_ODD_FIELD_INTERRUPT_ENABLE                (1UL<<21)
1693 +#define I915_EVEN_FIELD_INTERRUPT_ENABLE       (1UL<<20)
1694 +#define I915_START_VBLANK_INTERRUPT_ENABLE     (1UL<<18)       /* 965 or later */
1695 +#define I915_VBLANK_INTERRUPT_ENABLE           (1UL<<17)
1696 +#define I915_OVERLAY_UPDATED_ENABLE            (1UL<<16)
1697 +#define I915_CRC_ERROR_INTERRUPT_STATUS                (1UL<<13)
1698 +#define I915_CRC_DONE_INTERRUPT_STATUS         (1UL<<12)
1699 +#define I915_GMBUS_INTERRUPT_STATUS            (1UL<<11)
1700 +#define I915_VSYNC_INTERRUPT_STATUS            (1UL<<9)
1701 +#define I915_DISPLAY_LINE_COMPARE_STATUS       (1UL<<8)
1702 +#define I915_DPST_EVENT_STATUS                 (1UL<<7)
1703 +#define I915_LEGACY_BLC_EVENT_STATUS           (1UL<<6)
1704 +#define I915_ODD_FIELD_INTERRUPT_STATUS                (1UL<<5)
1705 +#define I915_EVEN_FIELD_INTERRUPT_STATUS       (1UL<<4)
1706 +#define I915_START_VBLANK_INTERRUPT_STATUS     (1UL<<2)        /* 965 or later */
1707 +#define I915_VBLANK_INTERRUPT_STATUS           (1UL<<1)
1708 +#define I915_OVERLAY_UPDATED_STATUS            (1UL<<0)
1709 +
1710 +#define SRX_INDEX              0x3c4
1711 +#define SRX_DATA               0x3c5
1712 +#define SR01                   1
1713 +#define SR01_SCREEN_OFF                (1<<5)
1714 +
1715 +#define PPCR                   0x61204
1716 +#define PPCR_ON                        (1<<0)
1717 +
1718 +#define DVOB                   0x61140
1719 +#define DVOB_ON                        (1<<31)
1720 +#define DVOC                   0x61160
1721 +#define DVOC_ON                        (1<<31)
1722 +#define LVDS                   0x61180
1723 +#define LVDS_ON                        (1<<31)
1724 +
1725 +#define ADPA                   0x61100
1726 +#define ADPA_DPMS_MASK         (~(3<<10))
1727 +#define ADPA_DPMS_ON           (0<<10)
1728 +#define ADPA_DPMS_SUSPEND      (1<<10)
1729 +#define ADPA_DPMS_STANDBY      (2<<10)
1730 +#define ADPA_DPMS_OFF          (3<<10)
1731 +
1732 +#define RING_TAIL              0x00
1733 +#define TAIL_ADDR              0x001FFFF8
1734 +#define RING_HEAD              0x04
1735 +#define HEAD_WRAP_COUNT                0xFFE00000
1736 +#define HEAD_WRAP_ONE          0x00200000
1737 +#define HEAD_ADDR              0x001FFFFC
1738 +#define RING_START             0x08
1739 +#define START_ADDR             0xFFFFF000
1740 +#define RING_LEN               0x0C
1741 +#define RING_NR_PAGES          0x001FF000
1742 +#define RING_REPORT_MASK       0x00000006
1743 +#define RING_REPORT_64K                0x00000002
1744 +#define RING_REPORT_128K       0x00000004
1745 +#define RING_NO_REPORT         0x00000000
1746 +#define RING_VALID_MASK                0x00000001
1747 +#define RING_VALID             0x00000001
1748 +#define RING_INVALID           0x00000000
1749 +
1750 +/* Scratch pad debug 0 reg:
1751 + */
1752 +#define   DPLL_FPA01_P1_POST_DIV_MASK_I830     0x001f0000
1753 +/*
1754 + * The i830 generation, in LVDS mode, defines P1 as the bit number set within
1755 + * this field (only one bit may be set).
1756 + */
1757 +#define   DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS        0x003f0000
1758 +#define   DPLL_FPA01_P1_POST_DIV_SHIFT 16
1759 +/* i830, required in DVO non-gang */
1760 +#define   PLL_P2_DIVIDE_BY_4           (1 << 23)
1761 +#define   PLL_P1_DIVIDE_BY_TWO         (1 << 21) /* i830 */
1762 +#define   PLL_REF_INPUT_DREFCLK                (0 << 13)
1763 +#define   PLL_REF_INPUT_TVCLKINA       (1 << 13) /* i830 */
1764 +#define   PLL_REF_INPUT_TVCLKINBC      (2 << 13) /* SDVO TVCLKIN */
1765 +#define   PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13)
1766 +#define   PLL_REF_INPUT_MASK           (3 << 13)
1767 +#define   PLL_LOAD_PULSE_PHASE_SHIFT           9
1768 +/*
1769 + * Parallel to Serial Load Pulse phase selection.
1770 + * Selects the phase for the 10X DPLL clock for the PCIe
1771 + * digital display port. The range is 4 to 13; 10 or more
1772 + * is just a flip delay. The default is 6
1773 + */
1774 +#define   PLL_LOAD_PULSE_PHASE_MASK            (0xf << PLL_LOAD_PULSE_PHASE_SHIFT)
1775 +#define   DISPLAY_RATE_SELECT_FPA1             (1 << 8)
1776 +/*
1777 + * SDVO multiplier for 945G/GM. Not used on 965.
1778 + */
1779 +#define   SDVO_MULTIPLIER_MASK                 0x000000ff
1780 +#define   SDVO_MULTIPLIER_SHIFT_HIRES          4
1781 +#define   SDVO_MULTIPLIER_SHIFT_VGA            0
1782 +#define DPLL_A_MD 0x0601c /* 965+ only */
1783 +/*
1784 + * UDI pixel divider, controlling how many pixels are stuffed into a packet.
1785 + *
1786 + * Value is pixels minus 1.  Must be set to 1 pixel for SDVO.
1787 + */
1788 +#define   DPLL_MD_UDI_DIVIDER_MASK             0x3f000000
1789 +#define   DPLL_MD_UDI_DIVIDER_SHIFT            24
1790 +/* UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */
1791 +#define   DPLL_MD_VGA_UDI_DIVIDER_MASK         0x003f0000
1792 +#define   DPLL_MD_VGA_UDI_DIVIDER_SHIFT                16
1793 +/*
1794 + * SDVO/UDI pixel multiplier.
1795 + *
1796 + * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus
1797 + * clock rate is 10 times the DPLL clock.  At low resolution/refresh rate
1798 + * modes, the bus rate would be below the limits, so SDVO allows for stuffing
1799 + * dummy bytes in the datastream at an increased clock rate, with both sides of
1800 + * the link knowing how many bytes are fill.
1801 + *
1802 + * So, for a mode with a dotclock of 65Mhz, we would want to double the clock
1803 + * rate to 130Mhz to get a bus rate of 1.30Ghz.  The DPLL clock rate would be
1804 + * set to 130Mhz, and the SDVO multiplier set to 2x in this register and
1805 + * through an SDVO command.
1806 + *
1807 + * This register field has values of multiplication factor minus 1, with
1808 + * a maximum multiplier of 5 for SDVO.
1809 + */
1810 +#define   DPLL_MD_UDI_MULTIPLIER_MASK          0x00003f00
1811 +#define   DPLL_MD_UDI_MULTIPLIER_SHIFT         8
1812 +/*
1813 + * SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK.
1814 + * This best be set to the default value (3) or the CRT won't work. No,
1815 + * I don't entirely understand what this does...
1816 + */
1817 +#define   DPLL_MD_VGA_UDI_MULTIPLIER_MASK      0x0000003f
1818 +#define   DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT     0
1819 +#define DPLL_B_MD 0x06020 /* 965+ only */
1820 +#define FPA0   0x06040
1821 +#define FPA1   0x06044
1822 +#define FPB0   0x06048
1823 +#define FPB1   0x0604c
1824 +#define   FP_N_DIV_MASK                0x003f0000
1825 +#define   FP_N_DIV_SHIFT               16
1826 +#define   FP_M1_DIV_MASK       0x00003f00
1827 +#define   FP_M1_DIV_SHIFT               8
1828 +#define   FP_M2_DIV_MASK       0x0000003f
1829 +#define   FP_M2_DIV_SHIFT               0
1830 +#define DPLL_TEST      0x606c
1831 +#define   DPLLB_TEST_SDVO_DIV_1                (0 << 22)
1832 +#define   DPLLB_TEST_SDVO_DIV_2                (1 << 22)
1833 +#define   DPLLB_TEST_SDVO_DIV_4                (2 << 22)
1834 +#define   DPLLB_TEST_SDVO_DIV_MASK     (3 << 22)
1835 +#define   DPLLB_TEST_N_BYPASS          (1 << 19)
1836 +#define   DPLLB_TEST_M_BYPASS          (1 << 18)
1837 +#define   DPLLB_INPUT_BUFFER_ENABLE    (1 << 16)
1838 +#define   DPLLA_TEST_N_BYPASS          (1 << 3)
1839 +#define   DPLLA_TEST_M_BYPASS          (1 << 2)
1840 +#define   DPLLA_INPUT_BUFFER_ENABLE    (1 << 0)
1841 +#define D_STATE                0x6104
1842 +#define CG_2D_DIS      0x6200
1843 +#define CG_3D_DIS      0x6204
1844 +
1845 +/*
1846 + * Palette regs
1847 + */
1848 +
1849 +#define PALETTE_A              0x0a000
1850 +#define PALETTE_B              0x0a800
1851 +
1852 +/*
1853 + * Overlay regs
1854 + */
1855 +
1856 +#define OVADD                  0x30000
1857 +#define DOVSTA                 0x30008
1858 +#define OC_BUF                 (0x3<<20)
1859 +#define OGAMC5                 0x30010
1860 +#define OGAMC4                 0x30014
1861 +#define OGAMC3                 0x30018
1862 +#define OGAMC2                 0x3001c
1863 +#define OGAMC1                 0x30020
1864 +#define OGAMC0                 0x30024
1865 +
1866 +/*
1867 + * Display engine regs
1868 + */
1869 +
1870 +/* Pipe A timing regs */
1871 +#define HTOTAL_A       0x60000
1872 +#define HBLANK_A       0x60004
1873 +#define HSYNC_A                0x60008
1874 +#define VTOTAL_A       0x6000c
1875 +#define VBLANK_A       0x60010
1876 +#define VSYNC_A                0x60014
1877 +#define PIPEASRC       0x6001c
1878 +#define BCLRPAT_A      0x60020
1879 +
1880 +/* Pipe B timing regs */
1881 +#define HTOTAL_B       0x61000
1882 +#define HBLANK_B       0x61004
1883 +#define HSYNC_B                0x61008
1884 +#define VTOTAL_B       0x6100c
1885 +#define VBLANK_B       0x61010
1886 +#define VSYNC_B                0x61014
1887 +#define PIPEBSRC       0x6101c
1888 +#define BCLRPAT_B      0x61020
1889 +
1890 +/* VGA port control */
1891 +#define ADPA                   0x61100
1892 +#define   ADPA_DAC_ENABLE      (1<<31)
1893 +#define   ADPA_DAC_DISABLE     0
1894 +#define   ADPA_PIPE_SELECT_MASK        (1<<30)
1895 +#define   ADPA_PIPE_A_SELECT   0
1896 +#define   ADPA_PIPE_B_SELECT   (1<<30)
1897 +#define   ADPA_USE_VGA_HVPOLARITY (1<<15)
1898 +#define   ADPA_SETS_HVPOLARITY 0
1899 +#define   ADPA_VSYNC_CNTL_DISABLE (1<<11)
1900 +#define   ADPA_VSYNC_CNTL_ENABLE 0
1901 +#define   ADPA_HSYNC_CNTL_DISABLE (1<<10)
1902 +#define   ADPA_HSYNC_CNTL_ENABLE 0
1903 +#define   ADPA_VSYNC_ACTIVE_HIGH (1<<4)
1904 +#define   ADPA_VSYNC_ACTIVE_LOW        0
1905 +#define   ADPA_HSYNC_ACTIVE_HIGH (1<<3)
1906 +#define   ADPA_HSYNC_ACTIVE_LOW        0
1907 +#define   ADPA_DPMS_MASK       (~(3<<10))
1908 +#define   ADPA_DPMS_ON         (0<<10)
1909 +#define   ADPA_DPMS_SUSPEND    (1<<10)
1910 +#define   ADPA_DPMS_STANDBY    (2<<10)
1911 +#define   ADPA_DPMS_OFF                (3<<10)
1912 +
1913 +/* Hotplug control (945+ only) */
1914 +#define PORT_HOTPLUG_EN                0x61110
1915 +#define   SDVOB_HOTPLUG_INT_EN                 (1 << 26)
1916 +#define   SDVOC_HOTPLUG_INT_EN                 (1 << 25)
1917 +#define   TV_HOTPLUG_INT_EN                    (1 << 18)
1918 +#define   CRT_HOTPLUG_INT_EN                   (1 << 9)
1919 +#define   CRT_HOTPLUG_FORCE_DETECT             (1 << 3)
1920 +
1921 +#define PORT_HOTPLUG_STAT      0x61114
1922 +#define   CRT_HOTPLUG_INT_STATUS               (1 << 11)
1923 +#define   TV_HOTPLUG_INT_STATUS                        (1 << 10)
1924 +#define   CRT_HOTPLUG_MONITOR_MASK             (3 << 8)
1925 +#define   CRT_HOTPLUG_MONITOR_COLOR            (3 << 8)
1926 +#define   CRT_HOTPLUG_MONITOR_MONO             (2 << 8)
1927 +#define   CRT_HOTPLUG_MONITOR_NONE             (0 << 8)
1928 +#define   SDVOC_HOTPLUG_INT_STATUS             (1 << 7)
1929 +#define   SDVOB_HOTPLUG_INT_STATUS             (1 << 6)
1930 +
1931 +/* SDVO port control */
1932 +#define SDVOB                  0x61140
1933 +#define SDVOC                  0x61160
1934 +#define   SDVO_ENABLE          (1 << 31)
1935 +#define   SDVO_PIPE_B_SELECT   (1 << 30)
1936 +#define   SDVO_STALL_SELECT    (1 << 29)
1937 +#define   SDVO_INTERRUPT_ENABLE        (1 << 26)
1938 +/**
1939 + * 915G/GM SDVO pixel multiplier.
1940 + *
1941 + * Programmed value is multiplier - 1, up to 5x.
1942 + *
1943 + * \sa DPLL_MD_UDI_MULTIPLIER_MASK
1944 + */
1945 +#define   SDVO_PORT_MULTIPLY_MASK      (7 << 23)
1946 +#define   SDVO_PORT_MULTIPLY_SHIFT             23
1947 +#define   SDVO_PHASE_SELECT_MASK       (15 << 19)
1948 +#define   SDVO_PHASE_SELECT_DEFAULT    (6 << 19)
1949 +#define   SDVO_CLOCK_OUTPUT_INVERT     (1 << 18)
1950 +#define   SDVOC_GANG_MODE              (1 << 16)
1951 +#define   SDVO_BORDER_ENABLE           (1 << 7)
1952 +#define   SDVOB_PCIE_CONCURRENCY       (1 << 3)
1953 +#define   SDVO_DETECTED                        (1 << 2)
1954 +/* Bits to be preserved when writing */
1955 +#define   SDVOB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14) | (1 << 26))
1956 +#define   SDVOC_PRESERVE_MASK ((1 << 17) | (1 << 26))
1957 +
1958 +/* DVO port control */
1959 +#define DVOA                   0x61120
1960 +#define DVOB                   0x61140
1961 +#define DVOC                   0x61160
1962 +#define   DVO_ENABLE                   (1 << 31)
1963 +#define   DVO_PIPE_B_SELECT            (1 << 30)
1964 +#define   DVO_PIPE_STALL_UNUSED                (0 << 28)
1965 +#define   DVO_PIPE_STALL               (1 << 28)
1966 +#define   DVO_PIPE_STALL_TV            (2 << 28)
1967 +#define   DVO_PIPE_STALL_MASK          (3 << 28)
1968 +#define   DVO_USE_VGA_SYNC             (1 << 15)
1969 +#define   DVO_DATA_ORDER_I740          (0 << 14)
1970 +#define   DVO_DATA_ORDER_FP            (1 << 14)
1971 +#define   DVO_VSYNC_DISABLE            (1 << 11)
1972 +#define   DVO_HSYNC_DISABLE            (1 << 10)
1973 +#define   DVO_VSYNC_TRISTATE           (1 << 9)
1974 +#define   DVO_HSYNC_TRISTATE           (1 << 8)
1975 +#define   DVO_BORDER_ENABLE            (1 << 7)
1976 +#define   DVO_DATA_ORDER_GBRG          (1 << 6)
1977 +#define   DVO_DATA_ORDER_RGGB          (0 << 6)
1978 +#define   DVO_DATA_ORDER_GBRG_ERRATA   (0 << 6)
1979 +#define   DVO_DATA_ORDER_RGGB_ERRATA   (1 << 6)
1980 +#define   DVO_VSYNC_ACTIVE_HIGH                (1 << 4)
1981 +#define   DVO_HSYNC_ACTIVE_HIGH                (1 << 3)
1982 +#define   DVO_BLANK_ACTIVE_HIGH                (1 << 2)
1983 +#define   DVO_OUTPUT_CSTATE_PIXELS     (1 << 1)        /* SDG only */
1984 +#define   DVO_OUTPUT_SOURCE_SIZE_PIXELS        (1 << 0)        /* SDG only */
1985 +#define   DVO_PRESERVE_MASK            (0x7<<24)
1986 +#define DVOA_SRCDIM            0x61124
1987 +#define DVOB_SRCDIM            0x61144
1988 +#define DVOC_SRCDIM            0x61164
1989 +#define   DVO_SRCDIM_HORIZONTAL_SHIFT  12
1990 +#define   DVO_SRCDIM_VERTICAL_SHIFT    0
1991 +
1992 +/* LVDS port control */
1993 +#define LVDS                   0x61180
1994 +/*
1995 + * Enables the LVDS port.  This bit must be set before DPLLs are enabled, as
1996 + * the DPLL semantics change when the LVDS is assigned to that pipe.
1997 + */
1998 +#define   LVDS_PORT_EN                 (1 << 31)
1999 +/* Selects pipe B for LVDS data.  Must be set on pre-965. */
2000 +#define   LVDS_PIPEB_SELECT            (1 << 30)
2001 +/*
2002 + * Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
2003 + * pixel.
2004 + */
2005 +#define   LVDS_A0A2_CLKA_POWER_MASK    (3 << 8)
2006 +#define   LVDS_A0A2_CLKA_POWER_DOWN    (0 << 8)
2007 +#define   LVDS_A0A2_CLKA_POWER_UP      (3 << 8)
2008 +/*
2009 + * Controls the A3 data pair, which contains the additional LSBs for 24 bit
2010 + * mode.  Only enabled if LVDS_A0A2_CLKA_POWER_UP also indicates it should be
2011 + * on.
2012 + */
2013 +#define   LVDS_A3_POWER_MASK           (3 << 6)
2014 +#define   LVDS_A3_POWER_DOWN           (0 << 6)
2015 +#define   LVDS_A3_POWER_UP             (3 << 6)
2016 +/*
2017 + * Controls the CLKB pair.  This should only be set when LVDS_B0B3_POWER_UP
2018 + * is set.
2019 + */
2020 +#define   LVDS_CLKB_POWER_MASK         (3 << 4)
2021 +#define   LVDS_CLKB_POWER_DOWN         (0 << 4)
2022 +#define   LVDS_CLKB_POWER_UP           (3 << 4)
2023 +/*
2024 + * Controls the B0-B3 data pairs.  This must be set to match the DPLL p2
2025 + * setting for whether we are in dual-channel mode.  The B3 pair will
2026 + * additionally only be powered up when LVDS_A3_POWER_UP is set.
2027 + */
2028 +#define   LVDS_B0B3_POWER_MASK         (3 << 2)
2029 +#define   LVDS_B0B3_POWER_DOWN         (0 << 2)
2030 +#define   LVDS_B0B3_POWER_UP           (3 << 2)
2031 +
2032 +/* Panel power sequencing */
2033 +#define PP_STATUS      0x61200
2034 +#define   PP_ON                (1 << 31)
2035 +/*
2036 + * Indicates that all dependencies of the panel are on:
2037 + *
2038 + * - PLL enabled
2039 + * - pipe enabled
2040 + * - LVDS/DVOB/DVOC on
2041 + */
2042 +#define   PP_READY             (1 << 30)
2043 +#define   PP_SEQUENCE_NONE     (0 << 28)
2044 +#define   PP_SEQUENCE_ON       (1 << 28)
2045 +#define   PP_SEQUENCE_OFF      (2 << 28)
2046 +#define   PP_SEQUENCE_MASK     0x30000000
2047 +#define PP_CONTROL     0x61204
2048 +#define   POWER_TARGET_ON      (1 << 0)
2049 +#define PP_ON_DELAYS   0x61208
2050 +#define PP_OFF_DELAYS  0x6120c
2051 +#define PP_DIVISOR     0x61210
2052 +
2053 +/* Panel fitting */
2054 +#define PFIT_CONTROL   0x61230
2055 +#define   PFIT_ENABLE          (1 << 31)
2056 +#define   PFIT_PIPE_MASK       (3 << 29)
2057 +#define   PFIT_PIPE_SHIFT      29
2058 +#define   VERT_INTERP_DISABLE  (0 << 10)
2059 +#define   VERT_INTERP_BILINEAR (1 << 10)
2060 +#define   VERT_INTERP_MASK     (3 << 10)
2061 +#define   VERT_AUTO_SCALE      (1 << 9)
2062 +#define   HORIZ_INTERP_DISABLE (0 << 6)
2063 +#define   HORIZ_INTERP_BILINEAR        (1 << 6)
2064 +#define   HORIZ_INTERP_MASK    (3 << 6)
2065 +#define   HORIZ_AUTO_SCALE     (1 << 5)
2066 +#define   PANEL_8TO6_DITHER_ENABLE (1 << 3)
2067 +#define PFIT_PGM_RATIOS        0x61234
2068 +#define   PFIT_VERT_SCALE_MASK                 0xfff00000
2069 +#define   PFIT_HORIZ_SCALE_MASK                        0x0000fff0
2070 +#define PFIT_AUTO_RATIOS 0x61238
2071 +
2072 +/* Backlight control */
2073 +#define BLC_PWM_CTL            0x61254
2074 +#define   BACKLIGHT_MODULATION_FREQ_SHIFT              (17)
2075 +#define BLC_PWM_CTL2           0x61250 /* 965+ only */
2076 +/*
2077 + * This is the most significant 15 bits of the number of backlight cycles in a
2078 + * complete cycle of the modulated backlight control.
2079 + *
2080 + * The actual value is this field multiplied by two.
2081 + */
2082 +#define   BACKLIGHT_MODULATION_FREQ_MASK               (0x7fff << 17)
2083 +#define   BLM_LEGACY_MODE                              (1 << 16)
2084 +/*
2085 + * This is the number of cycles out of the backlight modulation cycle for which
2086 + * the backlight is on.
2087 + *
2088 + * This field must be no greater than the number of cycles in the complete
2089 + * backlight modulation cycle.
2090 + */
2091 +#define   BACKLIGHT_DUTY_CYCLE_SHIFT           (0)
2092 +#define   BACKLIGHT_DUTY_CYCLE_MASK            (0xffff)
2093 +
2094 +/* TV port control */
2095 +#define TV_CTL                 0x68000
2096 +/** Enables the TV encoder */
2097 +# define TV_ENC_ENABLE                 (1 << 31)
2098 +/** Sources the TV encoder input from pipe B instead of A. */
2099 +# define TV_ENC_PIPEB_SELECT           (1 << 30)
2100 +/** Outputs composite video (DAC A only) */
2101 +# define TV_ENC_OUTPUT_COMPOSITE       (0 << 28)
2102 +/** Outputs SVideo video (DAC B/C) */
2103 +# define TV_ENC_OUTPUT_SVIDEO          (1 << 28)
2104 +/** Outputs Component video (DAC A/B/C) */
2105 +# define TV_ENC_OUTPUT_COMPONENT       (2 << 28)
2106 +/** Outputs Composite and SVideo (DAC A/B/C) */
2107 +# define TV_ENC_OUTPUT_SVIDEO_COMPOSITE        (3 << 28)
2108 +# define TV_TRILEVEL_SYNC              (1 << 21)
2109 +/** Enables slow sync generation (945GM only) */
2110 +# define TV_SLOW_SYNC                  (1 << 20)
2111 +/** Selects 4x oversampling for 480i and 576p */
2112 +# define TV_OVERSAMPLE_4X              (0 << 18)
2113 +/** Selects 2x oversampling for 720p and 1080i */
2114 +# define TV_OVERSAMPLE_2X              (1 << 18)
2115 +/** Selects no oversampling for 1080p */
2116 +# define TV_OVERSAMPLE_NONE            (2 << 18)
2117 +/** Selects 8x oversampling */
2118 +# define TV_OVERSAMPLE_8X              (3 << 18)
2119 +/** Selects progressive mode rather than interlaced */
2120 +# define TV_PROGRESSIVE                        (1 << 17)
2121 +/** Sets the colorburst to PAL mode.  Required for non-M PAL modes. */
2122 +# define TV_PAL_BURST                  (1 << 16)
2123 +/** Field for setting delay of Y compared to C */
2124 +# define TV_YC_SKEW_MASK               (7 << 12)
2125 +/** Enables a fix for 480p/576p standard definition modes on the 915GM only */
2126 +# define TV_ENC_SDP_FIX                        (1 << 11)
2127 +/**
2128 + * Enables a fix for the 915GM only.
2129 + *
2130 + * Not sure what it does.
2131 + */
2132 +# define TV_ENC_C0_FIX                 (1 << 10)
2133 +/** Bits that must be preserved by software */
2134 +# define TV_CTL_SAVE                   ((3 << 8) | (3 << 6))
2135 +# define TV_FUSE_STATE_MASK            (3 << 4)
2136 +/** Read-only state that reports all features enabled */
2137 +# define TV_FUSE_STATE_ENABLED         (0 << 4)
2138 +/** Read-only state that reports that Macrovision is disabled in hardware*/
2139 +# define TV_FUSE_STATE_NO_MACROVISION  (1 << 4)
2140 +/** Read-only state that reports that TV-out is disabled in hardware. */
2141 +# define TV_FUSE_STATE_DISABLED                (2 << 4)
2142 +/** Normal operation */
2143 +# define TV_TEST_MODE_NORMAL           (0 << 0)
2144 +/** Encoder test pattern 1 - combo pattern */
2145 +# define TV_TEST_MODE_PATTERN_1                (1 << 0)
2146 +/** Encoder test pattern 2 - full screen vertical 75% color bars */
2147 +# define TV_TEST_MODE_PATTERN_2                (2 << 0)
2148 +/** Encoder test pattern 3 - full screen horizontal 75% color bars */
2149 +# define TV_TEST_MODE_PATTERN_3                (3 << 0)
2150 +/** Encoder test pattern 4 - random noise */
2151 +# define TV_TEST_MODE_PATTERN_4                (4 << 0)
2152 +/** Encoder test pattern 5 - linear color ramps */
2153 +# define TV_TEST_MODE_PATTERN_5                (5 << 0)
2154 +/**
2155 + * This test mode forces the DACs to 50% of full output.
2156 + *
2157 + * This is used for load detection in combination with TVDAC_SENSE_MASK
2158 + */
2159 +# define TV_TEST_MODE_MONITOR_DETECT   (7 << 0)
2160 +# define TV_TEST_MODE_MASK             (7 << 0)
2161 +
2162 +#define TV_DAC                 0x68004
2163 +/**
2164 + * Reports that DAC state change logic has reported change (RO).
2165 + *
2166 + * This gets cleared when TV_DAC_STATE_EN is cleared
2167 +*/
2168 +# define TVDAC_STATE_CHG               (1 << 31)
2169 +# define TVDAC_SENSE_MASK              (7 << 28)
2170 +/** Reports that DAC A voltage is above the detect threshold */
2171 +# define TVDAC_A_SENSE                 (1 << 30)
2172 +/** Reports that DAC B voltage is above the detect threshold */
2173 +# define TVDAC_B_SENSE                 (1 << 29)
2174 +/** Reports that DAC C voltage is above the detect threshold */
2175 +# define TVDAC_C_SENSE                 (1 << 28)
2176 +/**
2177 + * Enables DAC state detection logic, for load-based TV detection.
2178 + *
2179 + * The PLL of the chosen pipe (in TV_CTL) must be running, and the encoder set
2180 + * to off, for load detection to work.
2181 + */
2182 +# define TVDAC_STATE_CHG_EN            (1 << 27)
2183 +/** Sets the DAC A sense value to high */
2184 +# define TVDAC_A_SENSE_CTL             (1 << 26)
2185 +/** Sets the DAC B sense value to high */
2186 +# define TVDAC_B_SENSE_CTL             (1 << 25)
2187 +/** Sets the DAC C sense value to high */
2188 +# define TVDAC_C_SENSE_CTL             (1 << 24)
2189 +/** Overrides the ENC_ENABLE and DAC voltage levels */
2190 +# define DAC_CTL_OVERRIDE              (1 << 7)
2191 +/** Sets the slew rate.  Must be preserved in software */
2192 +# define ENC_TVDAC_SLEW_FAST           (1 << 6)
2193 +# define DAC_A_1_3_V                   (0 << 4)
2194 +# define DAC_A_1_1_V                   (1 << 4)
2195 +# define DAC_A_0_7_V                   (2 << 4)
2196 +# define DAC_A_OFF                     (3 << 4)
2197 +# define DAC_B_1_3_V                   (0 << 2)
2198 +# define DAC_B_1_1_V                   (1 << 2)
2199 +# define DAC_B_0_7_V                   (2 << 2)
2200 +# define DAC_B_OFF                     (3 << 2)
2201 +# define DAC_C_1_3_V                   (0 << 0)
2202 +# define DAC_C_1_1_V                   (1 << 0)
2203 +# define DAC_C_0_7_V                   (2 << 0)
2204 +# define DAC_C_OFF                     (3 << 0)
2205 +
2206 +/**
2207 + * CSC coefficients are stored in a floating point format with 9 bits of
2208 + * mantissa and 2 or 3 bits of exponent.  The exponent is represented as 2**-n,
2209 + * where 2-bit exponents are unsigned n, and 3-bit exponents are signed n with
2210 + * -1 (0x3) being the only legal negative value.
2211 + */
2212 +#define TV_CSC_Y               0x68010
2213 +# define TV_RY_MASK                    0x07ff0000
2214 +# define TV_RY_SHIFT                   16
2215 +# define TV_GY_MASK                    0x00000fff
2216 +# define TV_GY_SHIFT                   0
2217 +
2218 +#define TV_CSC_Y2              0x68014
2219 +# define TV_BY_MASK                    0x07ff0000
2220 +# define TV_BY_SHIFT                   16
2221 +/**
2222 + * Y attenuation for component video.
2223 + *
2224 + * Stored in 1.9 fixed point.
2225 + */
2226 +# define TV_AY_MASK                    0x000003ff
2227 +# define TV_AY_SHIFT                   0
2228 +
2229 +#define TV_CSC_U               0x68018
2230 +# define TV_RU_MASK                    0x07ff0000
2231 +# define TV_RU_SHIFT                   16
2232 +# define TV_GU_MASK                    0x000007ff
2233 +# define TV_GU_SHIFT                   0
2234 +
2235 +#define TV_CSC_U2              0x6801c
2236 +# define TV_BU_MASK                    0x07ff0000
2237 +# define TV_BU_SHIFT                   16
2238 +/**
2239 + * U attenuation for component video.
2240 + *
2241 + * Stored in 1.9 fixed point.
2242 + */
2243 +# define TV_AU_MASK                    0x000003ff
2244 +# define TV_AU_SHIFT                   0
2245 +
2246 +#define TV_CSC_V               0x68020
2247 +# define TV_RV_MASK                    0x0fff0000
2248 +# define TV_RV_SHIFT                   16
2249 +# define TV_GV_MASK                    0x000007ff
2250 +# define TV_GV_SHIFT                   0
2251 +
2252 +#define TV_CSC_V2              0x68024
2253 +# define TV_BV_MASK                    0x07ff0000
2254 +# define TV_BV_SHIFT                   16
2255 +/**
2256 + * V attenuation for component video.
2257 + *
2258 + * Stored in 1.9 fixed point.
2259 + */
2260 +# define TV_AV_MASK                    0x000007ff
2261 +# define TV_AV_SHIFT                   0
2262 +
2263 +#define TV_CLR_KNOBS           0x68028
2264 +/** 2s-complement brightness adjustment */
2265 +# define TV_BRIGHTNESS_MASK            0xff000000
2266 +# define TV_BRIGHTNESS_SHIFT           24
2267 +/** Contrast adjustment, as a 2.6 unsigned floating point number */
2268 +# define TV_CONTRAST_MASK              0x00ff0000
2269 +# define TV_CONTRAST_SHIFT             16
2270 +/** Saturation adjustment, as a 2.6 unsigned floating point number */
2271 +# define TV_SATURATION_MASK            0x0000ff00
2272 +# define TV_SATURATION_SHIFT           8
2273 +/** Hue adjustment, as an integer phase angle in degrees */
2274 +# define TV_HUE_MASK                   0x000000ff
2275 +# define TV_HUE_SHIFT                  0
2276 +
2277 +#define TV_CLR_LEVEL           0x6802c
2278 +/** Controls the DAC level for black */
2279 +# define TV_BLACK_LEVEL_MASK           0x01ff0000
2280 +# define TV_BLACK_LEVEL_SHIFT          16
2281 +/** Controls the DAC level for blanking */
2282 +# define TV_BLANK_LEVEL_MASK           0x000001ff
2283 +# define TV_BLANK_LEVEL_SHIFT          0
2284 +
2285 +#define TV_H_CTL_1             0x68030
2286 +/** Number of pixels in the hsync. */
2287 +# define TV_HSYNC_END_MASK             0x1fff0000
2288 +# define TV_HSYNC_END_SHIFT            16
2289 +/** Total number of pixels minus one in the line (display and blanking). */
2290 +# define TV_HTOTAL_MASK                        0x00001fff
2291 +# define TV_HTOTAL_SHIFT               0
2292 +
2293 +#define TV_H_CTL_2             0x68034
2294 +/** Enables the colorburst (needed for non-component color) */
2295 +# define TV_BURST_ENA                  (1 << 31)
2296 +/** Offset of the colorburst from the start of hsync, in pixels minus one. */
2297 +# define TV_HBURST_START_SHIFT         16
2298 +# define TV_HBURST_START_MASK          0x1fff0000
2299 +/** Length of the colorburst */
2300 +# define TV_HBURST_LEN_SHIFT           0
2301 +# define TV_HBURST_LEN_MASK            0x0001fff
2302 +
2303 +#define TV_H_CTL_3             0x68038
2304 +/** End of hblank, measured in pixels minus one from start of hsync */
2305 +# define TV_HBLANK_END_SHIFT           16
2306 +# define TV_HBLANK_END_MASK            0x1fff0000
2307 +/** Start of hblank, measured in pixels minus one from start of hsync */
2308 +# define TV_HBLANK_START_SHIFT         0
2309 +# define TV_HBLANK_START_MASK          0x0001fff
2310 +
2311 +#define TV_V_CTL_1             0x6803c
2312 +/** XXX */
2313 +# define TV_NBR_END_SHIFT              16
2314 +# define TV_NBR_END_MASK               0x07ff0000
2315 +/** XXX */
2316 +# define TV_VI_END_F1_SHIFT            8
2317 +# define TV_VI_END_F1_MASK             0x00003f00
2318 +/** XXX */
2319 +# define TV_VI_END_F2_SHIFT            0
2320 +# define TV_VI_END_F2_MASK             0x0000003f
2321 +
2322 +#define TV_V_CTL_2             0x68040
2323 +/** Length of vsync, in half lines */
2324 +# define TV_VSYNC_LEN_MASK             0x07ff0000
2325 +# define TV_VSYNC_LEN_SHIFT            16
2326 +/** Offset of the start of vsync in field 1, measured in one less than the
2327 + * number of half lines.
2328 + */
2329 +# define TV_VSYNC_START_F1_MASK                0x00007f00
2330 +# define TV_VSYNC_START_F1_SHIFT       8
2331 +/**
2332 + * Offset of the start of vsync in field 2, measured in one less than the
2333 + * number of half lines.
2334 + */
2335 +# define TV_VSYNC_START_F2_MASK                0x0000007f
2336 +# define TV_VSYNC_START_F2_SHIFT       0
2337 +
2338 +#define TV_V_CTL_3             0x68044
2339 +/** Enables generation of the equalization signal */
2340 +# define TV_EQUAL_ENA                  (1 << 31)
2341 +/** Length of vsync, in half lines */
2342 +# define TV_VEQ_LEN_MASK               0x007f0000
2343 +# define TV_VEQ_LEN_SHIFT              16
2344 +/** Offset of the start of equalization in field 1, measured in one less than
2345 + * the number of half lines.
2346 + */
2347 +# define TV_VEQ_START_F1_MASK          0x0007f00
2348 +# define TV_VEQ_START_F1_SHIFT         8
2349 +/**
2350 + * Offset of the start of equalization in field 2, measured in one less than
2351 + * the number of half lines.
2352 + */
2353 +# define TV_VEQ_START_F2_MASK          0x000007f
2354 +# define TV_VEQ_START_F2_SHIFT         0
2355 +
2356 +#define TV_V_CTL_4             0x68048
2357 +/**
2358 + * Offset to start of vertical colorburst, measured in one less than the
2359 + * number of lines from vertical start.
2360 + */
2361 +# define TV_VBURST_START_F1_MASK       0x003f0000
2362 +# define TV_VBURST_START_F1_SHIFT      16
2363 +/**
2364 + * Offset to the end of vertical colorburst, measured in one less than the
2365 + * number of lines from the start of NBR.
2366 + */
2367 +# define TV_VBURST_END_F1_MASK         0x000000ff
2368 +# define TV_VBURST_END_F1_SHIFT                0
2369 +
2370 +#define TV_V_CTL_5             0x6804c
2371 +/**
2372 + * Offset to start of vertical colorburst, measured in one less than the
2373 + * number of lines from vertical start.
2374 + */
2375 +# define TV_VBURST_START_F2_MASK       0x003f0000
2376 +# define TV_VBURST_START_F2_SHIFT      16
2377 +/**
2378 + * Offset to the end of vertical colorburst, measured in one less than the
2379 + * number of lines from the start of NBR.
2380 + */
2381 +# define TV_VBURST_END_F2_MASK         0x000000ff
2382 +# define TV_VBURST_END_F2_SHIFT                0
2383 +
2384 +#define TV_V_CTL_6             0x68050
2385 +/**
2386 + * Offset to start of vertical colorburst, measured in one less than the
2387 + * number of lines from vertical start.
2388 + */
2389 +# define TV_VBURST_START_F3_MASK       0x003f0000
2390 +# define TV_VBURST_START_F3_SHIFT      16
2391 +/**
2392 + * Offset to the end of vertical colorburst, measured in one less than the
2393 + * number of lines from the start of NBR.
2394 + */
2395 +# define TV_VBURST_END_F3_MASK         0x000000ff
2396 +# define TV_VBURST_END_F3_SHIFT                0
2397 +
2398 +#define TV_V_CTL_7             0x68054
2399 +/**
2400 + * Offset to start of vertical colorburst, measured in one less than the
2401 + * number of lines from vertical start.
2402 + */
2403 +# define TV_VBURST_START_F4_MASK       0x003f0000
2404 +# define TV_VBURST_START_F4_SHIFT      16
2405 +/**
2406 + * Offset to the end of vertical colorburst, measured in one less than the
2407 + * number of lines from the start of NBR.
2408 + */
2409 +# define TV_VBURST_END_F4_MASK         0x000000ff
2410 +# define TV_VBURST_END_F4_SHIFT                0
2411 +
2412 +#define TV_SC_CTL_1            0x68060
2413 +/** Turns on the first subcarrier phase generation DDA */
2414 +# define TV_SC_DDA1_EN                 (1 << 31)
2415 +/** Turns on the first subcarrier phase generation DDA */
2416 +# define TV_SC_DDA2_EN                 (1 << 30)
2417 +/** Turns on the first subcarrier phase generation DDA */
2418 +# define TV_SC_DDA3_EN                 (1 << 29)
2419 +/** Sets the subcarrier DDA to reset frequency every other field */
2420 +# define TV_SC_RESET_EVERY_2           (0 << 24)
2421 +/** Sets the subcarrier DDA to reset frequency every fourth field */
2422 +# define TV_SC_RESET_EVERY_4           (1 << 24)
2423 +/** Sets the subcarrier DDA to reset frequency every eighth field */
2424 +# define TV_SC_RESET_EVERY_8           (2 << 24)
2425 +/** Sets the subcarrier DDA to never reset the frequency */
2426 +# define TV_SC_RESET_NEVER             (3 << 24)
2427 +/** Sets the peak amplitude of the colorburst.*/
2428 +# define TV_BURST_LEVEL_MASK           0x00ff0000
2429 +# define TV_BURST_LEVEL_SHIFT          16
2430 +/** Sets the increment of the first subcarrier phase generation DDA */
2431 +# define TV_SCDDA1_INC_MASK            0x00000fff
2432 +# define TV_SCDDA1_INC_SHIFT           0
2433 +
2434 +#define TV_SC_CTL_2            0x68064
2435 +/** Sets the rollover for the second subcarrier phase generation DDA */
2436 +# define TV_SCDDA2_SIZE_MASK           0x7fff0000
2437 +# define TV_SCDDA2_SIZE_SHIFT          16
2438 +/** Sets the increent of the second subcarrier phase generation DDA */
2439 +# define TV_SCDDA2_INC_MASK            0x00007fff
2440 +# define TV_SCDDA2_INC_SHIFT           0
2441 +
2442 +#define TV_SC_CTL_3            0x68068
2443 +/** Sets the rollover for the third subcarrier phase generation DDA */
2444 +# define TV_SCDDA3_SIZE_MASK           0x7fff0000
2445 +# define TV_SCDDA3_SIZE_SHIFT          16
2446 +/** Sets the increent of the third subcarrier phase generation DDA */
2447 +# define TV_SCDDA3_INC_MASK            0x00007fff
2448 +# define TV_SCDDA3_INC_SHIFT           0
2449 +
2450 +#define TV_WIN_POS             0x68070
2451 +/** X coordinate of the display from the start of horizontal active */
2452 +# define TV_XPOS_MASK                  0x1fff0000
2453 +# define TV_XPOS_SHIFT                 16
2454 +/** Y coordinate of the display from the start of vertical active (NBR) */
2455 +# define TV_YPOS_MASK                  0x00000fff
2456 +# define TV_YPOS_SHIFT                 0
2457 +
2458 +#define TV_WIN_SIZE            0x68074
2459 +/** Horizontal size of the display window, measured in pixels*/
2460 +# define TV_XSIZE_MASK                 0x1fff0000
2461 +# define TV_XSIZE_SHIFT                        16
2462 +/**
2463 + * Vertical size of the display window, measured in pixels.
2464 + *
2465 + * Must be even for interlaced modes.
2466 + */
2467 +# define TV_YSIZE_MASK                 0x00000fff
2468 +# define TV_YSIZE_SHIFT                        0
2469 +
2470 +#define TV_FILTER_CTL_1                0x68080
2471 +/**
2472 + * Enables automatic scaling calculation.
2473 + *
2474 + * If set, the rest of the registers are ignored, and the calculated values can
2475 + * be read back from the register.
2476 + */
2477 +# define TV_AUTO_SCALE                 (1 << 31)
2478 +/**
2479 + * Disables the vertical filter.
2480 + *
2481 + * This is required on modes more than 1024 pixels wide */
2482 +# define TV_V_FILTER_BYPASS            (1 << 29)
2483 +/** Enables adaptive vertical filtering */
2484 +# define TV_VADAPT                     (1 << 28)
2485 +# define TV_VADAPT_MODE_MASK           (3 << 26)
2486 +/** Selects the least adaptive vertical filtering mode */
2487 +# define TV_VADAPT_MODE_LEAST          (0 << 26)
2488 +/** Selects the moderately adaptive vertical filtering mode */
2489 +# define TV_VADAPT_MODE_MODERATE       (1 << 26)
2490 +/** Selects the most adaptive vertical filtering mode */
2491 +# define TV_VADAPT_MODE_MOST           (3 << 26)
2492 +/**
2493 + * Sets the horizontal scaling factor.
2494 + *
2495 + * This should be the fractional part of the horizontal scaling factor divided
2496 + * by the oversampling rate.  TV_HSCALE should be less than 1, and set to:
2497 + *
2498 + * (src width - 1) / ((oversample * dest width) - 1)
2499 + */
2500 +# define TV_HSCALE_FRAC_MASK           0x00003fff
2501 +# define TV_HSCALE_FRAC_SHIFT          0
2502 +
2503 +#define TV_FILTER_CTL_2                0x68084
2504 +/**
2505 + * Sets the integer part of the 3.15 fixed-point vertical scaling factor.
2506 + *
2507 + * TV_VSCALE should be (src height - 1) / ((interlace * dest height) - 1)
2508 + */
2509 +# define TV_VSCALE_INT_MASK            0x00038000
2510 +# define TV_VSCALE_INT_SHIFT           15
2511 +/**
2512 + * Sets the fractional part of the 3.15 fixed-point vertical scaling factor.
2513 + *
2514 + * \sa TV_VSCALE_INT_MASK
2515 + */
2516 +# define TV_VSCALE_FRAC_MASK           0x00007fff
2517 +# define TV_VSCALE_FRAC_SHIFT          0
2518 +
2519 +#define TV_FILTER_CTL_3                0x68088
2520 +/**
2521 + * Sets the integer part of the 3.15 fixed-point vertical scaling factor.
2522 + *
2523 + * TV_VSCALE should be (src height - 1) / (1/4 * (dest height - 1))
2524 + *
2525 + * For progressive modes, TV_VSCALE_IP_INT should be set to zeroes.
2526 + */
2527 +# define TV_VSCALE_IP_INT_MASK         0x00038000
2528 +# define TV_VSCALE_IP_INT_SHIFT                15
2529 +/**
2530 + * Sets the fractional part of the 3.15 fixed-point vertical scaling factor.
2531 + *
2532 + * For progressive modes, TV_VSCALE_IP_INT should be set to zeroes.
2533 + *
2534 + * \sa TV_VSCALE_IP_INT_MASK
2535 + */
2536 +# define TV_VSCALE_IP_FRAC_MASK                0x00007fff
2537 +# define TV_VSCALE_IP_FRAC_SHIFT               0
2538 +
2539 +#define TV_CC_CONTROL          0x68090
2540 +# define TV_CC_ENABLE                  (1 << 31)
2541 +/**
2542 + * Specifies which field to send the CC data in.
2543 + *
2544 + * CC data is usually sent in field 0.
2545 + */
2546 +# define TV_CC_FID_MASK                        (1 << 27)
2547 +# define TV_CC_FID_SHIFT               27
2548 +/** Sets the horizontal position of the CC data.  Usually 135. */
2549 +# define TV_CC_HOFF_MASK               0x03ff0000
2550 +# define TV_CC_HOFF_SHIFT              16
2551 +/** Sets the vertical position of the CC data.  Usually 21 */
2552 +# define TV_CC_LINE_MASK               0x0000003f
2553 +# define TV_CC_LINE_SHIFT              0
2554 +
2555 +#define TV_CC_DATA             0x68094
2556 +# define TV_CC_RDY                     (1 << 31)
2557 +/** Second word of CC data to be transmitted. */
2558 +# define TV_CC_DATA_2_MASK             0x007f0000
2559 +# define TV_CC_DATA_2_SHIFT            16
2560 +/** First word of CC data to be transmitted. */
2561 +# define TV_CC_DATA_1_MASK             0x0000007f
2562 +# define TV_CC_DATA_1_SHIFT            0
2563 +
2564 +#define TV_H_LUMA_0            0x68100
2565 +#define TV_H_LUMA_59           0x681ec
2566 +#define TV_H_CHROMA_0          0x68200
2567 +#define TV_H_CHROMA_59         0x682ec
2568 +#define TV_V_LUMA_0            0x68300
2569 +#define TV_V_LUMA_42           0x683a8
2570 +#define TV_V_CHROMA_0          0x68400
2571 +#define TV_V_CHROMA_42         0x684a8
2572 +
2573 +/* Display & cursor control */
2574 +
2575 +/* Pipe A */
2576 +#define PIPEADSL               0x70000
2577 +#define PIPEACONF              0x70008
2578 +#define   PIPEACONF_ENABLE     (1<<31)
2579 +#define   PIPEACONF_DISABLE    0
2580 +#define   PIPEACONF_DOUBLE_WIDE        (1<<30)
2581 +#define   I965_PIPECONF_ACTIVE (1<<30)
2582 +#define   PIPEACONF_SINGLE_WIDE        0
2583 +#define   PIPEACONF_PIPE_UNLOCKED 0
2584 +#define   PIPEACONF_PIPE_LOCKED        (1<<25)
2585 +#define   PIPEACONF_PALETTE    0
2586 +#define   PIPEACONF_GAMMA              (1<<24)
2587 +#define   PIPECONF_FORCE_BORDER        (1<<25)
2588 +#define   PIPECONF_PROGRESSIVE (0 << 21)
2589 +#define   PIPECONF_INTERLACE_W_FIELD_INDICATION        (6 << 21)
2590 +#define   PIPECONF_INTERLACE_FIELD_0_ONLY              (7 << 21)
2591 +#define PIPEASTAT              0x70024
2592 +#define   PIPE_FIFO_UNDERRUN_STATUS            (1UL<<31)
2593 +#define   PIPE_CRC_ERROR_ENABLE                        (1UL<<29)
2594 +#define   PIPE_CRC_DONE_ENABLE                 (1UL<<28)
2595 +#define   PIPE_GMBUS_EVENT_ENABLE              (1UL<<27)
2596 +#define   PIPE_HOTPLUG_INTERRUPT_ENABLE                (1UL<<26)
2597 +#define   PIPE_VSYNC_INTERRUPT_ENABLE          (1UL<<25)
2598 +#define   PIPE_DISPLAY_LINE_COMPARE_ENABLE     (1UL<<24)
2599 +#define   PIPE_DPST_EVENT_ENABLE               (1UL<<23)
2600 +#define   PIPE_LEGACY_BLC_EVENT_ENABLE         (1UL<<22)
2601 +#define   PIPE_ODD_FIELD_INTERRUPT_ENABLE      (1UL<<21)
2602 +#define   PIPE_EVEN_FIELD_INTERRUPT_ENABLE     (1UL<<20)
2603 +#define   PIPE_HOTPLUG_TV_INTERRUPT_ENABLE     (1UL<<18) /* pre-965 */
2604 +#define   PIPE_START_VBLANK_INTERRUPT_ENABLE   (1UL<<18) /* 965 or later */
2605 +#define   PIPE_VBLANK_INTERRUPT_ENABLE         (1UL<<17)
2606 +#define   PIPE_OVERLAY_UPDATED_ENABLE          (1UL<<16)
2607 +#define   PIPE_CRC_ERROR_INTERRUPT_STATUS      (1UL<<13)
2608 +#define   PIPE_CRC_DONE_INTERRUPT_STATUS       (1UL<<12)
2609 +#define   PIPE_GMBUS_INTERRUPT_STATUS          (1UL<<11)
2610 +#define   PIPE_HOTPLUG_INTERRUPT_STATUS                (1UL<<10)
2611 +#define   PIPE_VSYNC_INTERRUPT_STATUS          (1UL<<9)
2612 +#define   PIPE_DISPLAY_LINE_COMPARE_STATUS     (1UL<<8)
2613 +#define   PIPE_DPST_EVENT_STATUS               (1UL<<7)
2614 +#define   PIPE_LEGACY_BLC_EVENT_STATUS         (1UL<<6)
2615 +#define   PIPE_ODD_FIELD_INTERRUPT_STATUS      (1UL<<5)
2616 +#define   PIPE_EVEN_FIELD_INTERRUPT_STATUS     (1UL<<4)
2617 +#define   PIPE_HOTPLUG_TV_INTERRUPT_STATUS     (1UL<<2) /* pre-965 */
2618 +#define   PIPE_START_VBLANK_INTERRUPT_STATUS   (1UL<<2) /* 965 or later */
2619 +#define   PIPE_VBLANK_INTERRUPT_STATUS         (1UL<<1)
2620 +#define   PIPE_OVERLAY_UPDATED_STATUS          (1UL<<0)
2621 +
2622 +#define DSPARB                 0x70030
2623 +#define   DSPARB_CSTART_MASK   (0x7f << 7)
2624 +#define   DSPARB_CSTART_SHIFT  7
2625 +#define   DSPARB_BSTART_MASK   (0x7f)
2626 +#define   DSPARB_BSTART_SHIFT  0
2627 +/*
2628 + * The two pipe frame counter registers are not synchronized, so
2629 + * reading a stable value is somewhat tricky. The following code
2630 + * should work:
2631 + *
2632 + *  do {
2633 + *    high1 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
2634 + *             PIPE_FRAME_HIGH_SHIFT;
2635 + *    low1 =  ((INREG(PIPEAFRAMEPIXEL) & PIPE_FRAME_LOW_MASK) >>
2636 + *             PIPE_FRAME_LOW_SHIFT);
2637 + *    high2 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
2638 + *             PIPE_FRAME_HIGH_SHIFT);
2639 + *  } while (high1 != high2);
2640 + *  frame = (high1 << 8) | low1;
2641 + */
2642 +#define PIPEAFRAMEHIGH          0x70040
2643 +#define   PIPE_FRAME_HIGH_MASK    0x0000ffff
2644 +#define   PIPE_FRAME_HIGH_SHIFT   0
2645 +#define PIPEAFRAMEPIXEL         0x70044
2646 +#define   PIPE_FRAME_LOW_MASK     0xff000000
2647 +#define   PIPE_FRAME_LOW_SHIFT    24
2648 +#define   PIPE_PIXEL_MASK         0x00ffffff
2649 +#define   PIPE_PIXEL_SHIFT        0
2650 +
2651 +/* Cursor A & B regs */
2652 +#define CURACNTR               0x70080
2653 +#define   CURSOR_MODE_DISABLE   0x00
2654 +#define   CURSOR_MODE_64_32B_AX 0x07
2655 +#define   CURSOR_MODE_64_ARGB_AX ((1 << 5) | CURSOR_MODE_64_32B_AX)
2656 +#define   MCURSOR_GAMMA_ENABLE  (1 << 26)
2657 +#define CURABASE               0x70084
2658 +#define CURAPOS                        0x70088
2659 +#define   CURSOR_POS_MASK       0x007FF
2660 +#define   CURSOR_POS_SIGN       0x8000
2661 +#define   CURSOR_X_SHIFT        0
2662 +#define   CURSOR_Y_SHIFT        16
2663 +#define CURBCNTR               0x700c0
2664 +#define CURBBASE               0x700c4
2665 +#define CURBPOS                        0x700c8
2666 +
2667 +/* Display A control */
2668 +#define DSPACNTR                0x70180
2669 +#define   DISPLAY_PLANE_ENABLE                 (1<<31)
2670 +#define   DISPLAY_PLANE_DISABLE                        0
2671 +#define   DISPPLANE_GAMMA_ENABLE               (1<<30)
2672 +#define   DISPPLANE_GAMMA_DISABLE              0
2673 +#define   DISPPLANE_PIXFORMAT_MASK             (0xf<<26)
2674 +#define   DISPPLANE_8BPP                       (0x2<<26)
2675 +#define   DISPPLANE_15_16BPP                   (0x4<<26)
2676 +#define   DISPPLANE_16BPP                      (0x5<<26)
2677 +#define   DISPPLANE_32BPP_NO_ALPHA             (0x6<<26)
2678 +#define   DISPPLANE_32BPP                      (0x7<<26)
2679 +#define   DISPPLANE_STEREO_ENABLE              (1<<25)
2680 +#define   DISPPLANE_STEREO_DISABLE             0
2681 +#define   DISPPLANE_SEL_PIPE_MASK              (1<<24)
2682 +#define   DISPPLANE_SEL_PIPE_A                 0
2683 +#define   DISPPLANE_SEL_PIPE_B                 (1<<24)
2684 +#define   DISPPLANE_SRC_KEY_ENABLE             (1<<22)
2685 +#define   DISPPLANE_SRC_KEY_DISABLE            0
2686 +#define   DISPPLANE_LINE_DOUBLE                        (1<<20)
2687 +#define   DISPPLANE_NO_LINE_DOUBLE             0
2688 +#define   DISPPLANE_STEREO_POLARITY_FIRST      0
2689 +#define   DISPPLANE_STEREO_POLARITY_SECOND     (1<<18)
2690 +#define DSPAADDR               0x70184
2691 +#define DSPASTRIDE             0x70188
2692 +#define DSPAPOS                        0x7018C /* reserved */
2693 +#define DSPASIZE               0x70190
2694 +#define DSPASURF               0x7019C /* 965+ only */
2695 +#define DSPATILEOFF            0x701A4 /* 965+ only */
2696 +
2697 +/* VBIOS flags */
2698 +#define SWF00                  0x71410
2699 +#define SWF01                  0x71414
2700 +#define SWF02                  0x71418
2701 +#define SWF03                  0x7141c
2702 +#define SWF04                  0x71420
2703 +#define SWF05                  0x71424
2704 +#define SWF06                  0x71428
2705 +#define SWF10                  0x70410
2706 +#define SWF11                  0x70414
2707 +#define SWF14                  0x71420
2708 +#define SWF30                  0x72414
2709 +#define SWF31                  0x72418
2710 +#define SWF32                  0x7241c
2711 +
2712 +/* Pipe B */
2713 +#define PIPEBDSL               0x71000
2714 +#define PIPEBCONF              0x71008
2715 +#define PIPEBSTAT              0x71024
2716 +#define PIPEBFRAMEHIGH         0x71040
2717 +#define PIPEBFRAMEPIXEL                0x71044
2718 +
2719 +/* Display B control */
2720 +#define DSPBCNTR               0x71180
2721 +#define   DISPPLANE_ALPHA_TRANS_ENABLE         (1<<15)
2722 +#define   DISPPLANE_ALPHA_TRANS_DISABLE                0
2723 +#define   DISPPLANE_SPRITE_ABOVE_DISPLAY       0
2724 +#define   DISPPLANE_SPRITE_ABOVE_OVERLAY       (1)
2725 +#define DSPBADDR               0x71184
2726 +#define DSPBSTRIDE             0x71188
2727 +#define DSPBPOS                        0x7118C
2728 +#define DSPBSIZE               0x71190
2729 +#define DSPBSURF               0x7119C
2730 +#define DSPBTILEOFF            0x711A4
2731 +
2732 +/* VBIOS regs */
2733 +#define VGACNTRL               0x71400
2734 +# define VGA_DISP_DISABLE                      (1 << 31)
2735 +# define VGA_2X_MODE                           (1 << 30)
2736 +# define VGA_PIPE_B_SELECT                     (1 << 29)
2737 +
2738 +#endif /* _I915_REG_H_ */
2739