Tizen 2.0 Release
[profile/ivi/osmesa.git] / src / mesa / drivers / dri / i810 / server / i810_reg.h
1 /**************************************************************************
2
3 Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
4 All Rights Reserved.
5
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the
8 "Software"), to deal in the Software without restriction, including
9 without limitation the rights to use, copy, modify, merge, publish,
10 distribute, sub license, and/or sell copies of the Software, and to
11 permit persons to whom the Software is furnished to do so, subject to
12 the following conditions:
13
14 The above copyright notice and this permission notice (including the
15 next paragraph) shall be included in all copies or substantial portions
16 of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
22 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
26 **************************************************************************/
27
28 /*
29  * Authors:
30  *   Keith Whitwell <keith@tungstengraphics.com>
31  *
32  *   based on the i740 driver by
33  *        Kevin E. Martin <kevin@precisioninsight.com> 
34  *   
35  *
36  */
37
38 #ifndef _I810_REG_H
39 #define _I810_REG_H
40
41 /* I/O register offsets
42  */
43 #define SRX 0x3C4               /* p208 */
44 #define GRX 0x3CE               /* p213 */
45 #define ARX 0x3C0               /* p224 */
46
47 /* VGA Color Palette Registers */
48 #define DACMASK  0x3C6          /* p232 */
49 #define DACSTATE 0x3C7          /* p232 */
50 #define DACRX    0x3C7          /* p233 */
51 #define DACWX    0x3C8          /* p233 */
52 #define DACDATA  0x3C9          /* p233 */
53
54 /* CRT Controller Registers (CRX) */
55 #define START_ADDR_HI        0x0C /* p246 */
56 #define START_ADDR_LO        0x0D /* p247 */
57 #define VERT_SYNC_END        0x11 /* p249 */
58 #define EXT_VERT_TOTAL       0x30 /* p257 */
59 #define EXT_VERT_DISPLAY     0x31 /* p258 */
60 #define EXT_VERT_SYNC_START  0x32 /* p259 */
61 #define EXT_VERT_BLANK_START 0x33 /* p260 */
62 #define EXT_HORIZ_TOTAL      0x35 /* p261 */
63 #define EXT_HORIZ_BLANK      0x39 /* p261 */
64 #define EXT_START_ADDR       0x40 /* p262 */
65 #define EXT_START_ADDR_ENABLE    0x80 
66 #define EXT_OFFSET           0x41 /* p263 */
67 #define EXT_START_ADDR_HI    0x42 /* p263 */
68 #define INTERLACE_CNTL       0x70 /* p264 */
69 #define INTERLACE_ENABLE         0x80 
70 #define INTERLACE_DISABLE        0x00 
71
72 /* Miscellaneous Output Register 
73  */
74 #define MSR_R          0x3CC    /* p207 */
75 #define MSR_W          0x3C2    /* p207 */
76 #define IO_ADDR_SELECT     0x01
77
78 #define MDA_BASE       0x3B0    /* p207 */
79 #define CGA_BASE       0x3D0    /* p207 */
80
81 /* CR80 - IO Control, p264
82  */
83 #define IO_CTNL            0x80
84 #define EXTENDED_ATTR_CNTL     0x02
85 #define EXTENDED_CRTC_CNTL     0x01
86
87 /* GR10 - Address mapping, p221
88  */
89 #define ADDRESS_MAPPING    0x10
90 #define PAGE_TO_LOCAL_MEM_ENABLE 0x10
91 #define GTT_MEM_MAP_ENABLE     0x08
92 #define PACKED_MODE_ENABLE     0x04
93 #define LINEAR_MODE_ENABLE     0x02
94 #define PAGE_MAPPING_ENABLE    0x01
95
96 /* Blitter control, p378
97  */
98 #define BITBLT_CNTL        0x7000c
99 #define COLEXP_MODE            0x30
100 #define COLEXP_8BPP            0x00
101 #define COLEXP_16BPP           0x10
102 #define COLEXP_24BPP           0x20
103 #define COLEXP_RESERVED        0x30
104 #define BITBLT_STATUS          0x01
105
106 /* p375. 
107  */
108 #define DISPLAY_CNTL       0x70008
109 #define VGA_WRAP_MODE          0x02
110 #define VGA_WRAP_AT_256KB      0x00
111 #define VGA_NO_WRAP            0x02
112 #define GUI_MODE               0x01
113 #define STANDARD_VGA_MODE      0x00
114 #define HIRES_MODE             0x01
115
116 /* p375
117  */
118 #define PIXPIPE_CONFIG_0   0x70009
119 #define DAC_8_BIT              0x80
120 #define DAC_6_BIT              0x00
121 #define HW_CURSOR_ENABLE       0x10
122 #define EXTENDED_PALETTE       0x01
123
124 /* p375
125  */
126 #define PIXPIPE_CONFIG_1   0x7000a
127 #define DISPLAY_COLOR_MODE     0x0F
128 #define DISPLAY_VGA_MODE       0x00
129 #define DISPLAY_8BPP_MODE      0x02
130 #define DISPLAY_15BPP_MODE     0x04
131 #define DISPLAY_16BPP_MODE     0x05
132 #define DISPLAY_24BPP_MODE     0x06
133 #define DISPLAY_32BPP_MODE     0x07
134
135 /* p375
136  */
137 #define PIXPIPE_CONFIG_2   0x7000b
138 #define DISPLAY_GAMMA_ENABLE   0x08
139 #define DISPLAY_GAMMA_DISABLE  0x00
140 #define OVERLAY_GAMMA_ENABLE   0x04
141 #define OVERLAY_GAMMA_DISABLE  0x00
142
143
144 /* p380
145  */
146 #define DISPLAY_BASE       0x70020
147 #define DISPLAY_BASE_MASK  0x03fffffc
148
149
150 /* Cursor control registers, pp383-384
151  */
152 /* Desktop (845G, 865G) */
153 #define CURSOR_CONTROL     0x70080
154 #define CURSOR_ENABLE          0x80000000
155 #define CURSOR_GAMMA_ENABLE    0x40000000
156 #define CURSOR_STRIDE_MASK     0x30000000
157 #define CURSOR_FORMAT_SHIFT    24
158 #define CURSOR_FORMAT_MASK     (0x07 << CURSOR_FORMAT_SHIFT)
159 #define CURSOR_FORMAT_2C       (0x00 << CURSOR_FORMAT_SHIFT)
160 #define CURSOR_FORMAT_3C       (0x01 << CURSOR_FORMAT_SHIFT)
161 #define CURSOR_FORMAT_4C       (0x02 << CURSOR_FORMAT_SHIFT)
162 #define CURSOR_FORMAT_ARGB     (0x04 << CURSOR_FORMAT_SHIFT)
163 #define CURSOR_FORMAT_XRGB     (0x05 << CURSOR_FORMAT_SHIFT)
164
165 /* Mobile and i810 */
166 #define CURSOR_A_CONTROL   CURSOR_CONTROL
167 #define CURSOR_ORIGIN_SCREEN   0x00     /* i810 only */
168 #define CURSOR_ORIGIN_DISPLAY  0x1      /* i810 only */
169 #define CURSOR_MODE            0x27
170 #define CURSOR_MODE_DISABLE    0x00
171 #define CURSOR_MODE_32_4C_AX   0x01     /* i810 only */
172 #define CURSOR_MODE_64_3C      0x04
173 #define CURSOR_MODE_64_4C_AX   0x05
174 #define CURSOR_MODE_64_4C      0x06
175 #define CURSOR_MODE_64_32B_AX  0x07
176 #define CURSOR_MODE_64_ARGB_AX (0x20 | CURSOR_MODE_64_32B_AX)
177 #define MCURSOR_PIPE_SELECT    (1 << 28)
178 #define MCURSOR_PIPE_A         0x00
179 #define MCURSOR_PIPE_B         (1 << 28)
180 #define MCURSOR_GAMMA_ENABLE   (1 << 26)
181 #define MCURSOR_MEM_TYPE_LOCAL (1 << 25)
182
183
184 #define CURSOR_BASEADDR    0x70084
185 #define CURSOR_A_BASE      CURSOR_BASEADDR
186 #define CURSOR_BASEADDR_MASK 0x1FFFFF00
187 #define CURSOR_A_POSITION  0x70088
188 #define CURSOR_POS_SIGN        0x8000
189 #define CURSOR_POS_MASK        0x007FF
190 #define CURSOR_X_SHIFT         0
191 #define CURSOR_Y_SHIFT         16
192 #define CURSOR_X_LO        0x70088
193 #define CURSOR_X_HI        0x70089
194 #define CURSOR_X_POS           0x00
195 #define CURSOR_X_NEG           0x80
196 #define CURSOR_Y_LO        0x7008A
197 #define CURSOR_Y_HI        0x7008B
198 #define CURSOR_Y_POS           0x00
199 #define CURSOR_Y_NEG           0x80
200
201 #define CURSOR_A_PALETTE0  0x70090
202 #define CURSOR_A_PALETTE1  0x70094
203 #define CURSOR_A_PALETTE2  0x70098
204 #define CURSOR_A_PALETTE3  0x7009C
205
206 #define CURSOR_SIZE        0x700A0
207 #define CURSOR_SIZE_MASK       0x3FF
208 #define CURSOR_SIZE_HSHIFT     0
209 #define CURSOR_SIZE_VSHIFT     12
210
211
212 /* Similar registers exist in Device 0 on the i810 (pp55-65), but I'm
213  * not sure they refer to local (graphics) memory.
214  *
215  * These details are for the local memory control registers,
216  * (pp301-310).  The test machines are not equiped with local memory,
217  * so nothing is tested.  Only a single row seems to be supported.
218  */
219 #define DRAM_ROW_TYPE      0x3000
220 #define DRAM_ROW_0             0x01
221 #define DRAM_ROW_0_SDRAM       0x01
222 #define DRAM_ROW_0_EMPTY       0x00
223 #define DRAM_ROW_CNTL_LO   0x3001
224 #define DRAM_PAGE_MODE_CTRL    0x10
225 #define DRAM_RAS_TO_CAS_OVRIDE 0x08
226 #define DRAM_CAS_LATENCY       0x04
227 #define DRAM_RAS_TIMING        0x02
228 #define DRAM_RAS_PRECHARGE     0x01
229 #define DRAM_ROW_CNTL_HI   0x3002
230 #define DRAM_REFRESH_RATE      0x18
231 #define DRAM_REFRESH_DISABLE   0x00
232 #define DRAM_REFRESH_60HZ      0x08
233 #define DRAM_REFRESH_FAST_TEST 0x10
234 #define DRAM_REFRESH_RESERVED  0x18
235 #define DRAM_SMS               0x07
236 #define DRAM_SMS_NORMAL        0x00
237 #define DRAM_SMS_NOP_ENABLE    0x01
238 #define DRAM_SMS_ABPCE         0x02
239 #define DRAM_SMS_MRCE          0x03
240 #define DRAM_SMS_CBRCE         0x04
241
242 /* p307
243  */
244 #define DPMS_SYNC_SELECT   0x5002
245 #define VSYNC_CNTL             0x08
246 #define VSYNC_ON               0x00
247 #define VSYNC_OFF              0x08
248 #define HSYNC_CNTL             0x02
249 #define HSYNC_ON               0x00
250 #define HSYNC_OFF              0x02
251
252
253
254 /* p317, 319
255  */
256 #define VCLK2_VCO_M        0x6008 /* treat as 16 bit? (includes msbs) */
257 #define VCLK2_VCO_N        0x600a
258 #define VCLK2_VCO_DIV_SEL  0x6012
259
260 #define VCLK_DIVISOR_VGA0   0x6000
261 #define VCLK_DIVISOR_VGA1   0x6004
262 #define VCLK_POST_DIV       0x6010
263
264 #define POST_DIV_SELECT        0x70
265 #define POST_DIV_1             0x00
266 #define POST_DIV_2             0x10
267 #define POST_DIV_4             0x20
268 #define POST_DIV_8             0x30
269 #define POST_DIV_16            0x40
270 #define POST_DIV_32            0x50
271 #define VCO_LOOP_DIV_BY_4M     0x00
272 #define VCO_LOOP_DIV_BY_16M    0x04
273
274
275 /* Instruction Parser Mode Register 
276  *    - p281
277  *    - 2 new bits.
278  */
279 #define INST_PM                  0x20c0 
280 #define AGP_SYNC_PACKET_FLUSH_ENABLE 0x20 /* reserved */
281 #define SYNC_PACKET_FLUSH_ENABLE     0x10
282 #define TWO_D_INST_DISABLE           0x08
283 #define THREE_D_INST_DISABLE         0x04
284 #define STATE_VAR_UPDATE_DISABLE     0x02
285 #define PAL_STIP_DISABLE             0x01
286
287 #define INST_DONE                0x2090
288 #define INST_PS                  0x20c4
289
290 #define MEMMODE                  0x20dc
291
292
293 /* Instruction parser error register.  p279
294  */
295 #define IPEIR                  0x2088
296 #define IPEHR                  0x208C
297
298
299 /* General error reporting regs, p296
300  */
301 #define EIR               0x20B0
302 #define EMR               0x20B4
303 #define ESR               0x20B8
304 #define IP_ERR                    0x0001
305 #define ERROR_RESERVED            0xffc6
306
307
308 /* Interrupt Control Registers 
309  *   - new bits for i810
310  *   - new register hwstam (mask)
311  */
312 #define HWSTAM               0x2098 /* p290 */
313 #define IER                  0x20a0 /* p291 */
314 #define IIR                  0x20a4 /* p292 */
315 #define IMR                  0x20a8 /* p293 */
316 #define ISR                  0x20ac /* p294 */
317 #define HW_ERROR                 0x8000
318 #define SYNC_STATUS_TOGGLE       0x1000
319 #define DPY_0_FLIP_PENDING       0x0800
320 #define DPY_1_FLIP_PENDING       0x0400 /* not implemented on i810 */
321 #define OVL_0_FLIP_PENDING       0x0200
322 #define OVL_1_FLIP_PENDING       0x0100 /* not implemented on i810 */
323 #define DPY_0_VBLANK             0x0080
324 #define DPY_0_EVENT              0x0040
325 #define DPY_1_VBLANK             0x0020 /* not implemented on i810 */
326 #define DPY_1_EVENT              0x0010 /* not implemented on i810 */
327 #define HOST_PORT_EVENT          0x0008 /*  */
328 #define CAPTURE_EVENT            0x0004 /*  */
329 #define USER_DEFINED             0x0002
330 #define BREAKPOINT               0x0001
331
332
333 #define INTR_RESERVED            (0x6000 |              \
334                                   DPY_1_FLIP_PENDING |  \
335                                   OVL_1_FLIP_PENDING |  \
336                                   DPY_1_VBLANK |        \
337                                   DPY_1_EVENT |         \
338                                   HOST_PORT_EVENT |     \
339                                   CAPTURE_EVENT )
340
341 /* FIFO Watermark and Burst Length Control Register 
342  *
343  * - different offset and contents on i810 (p299) (fewer bits per field)
344  * - some overlay fields added
345  * - what does it all mean?
346  */
347 #define FWATER_BLC       0x20d8
348 #define FWATER_BLC2      0x20dc
349 #define MM_BURST_LENGTH     0x00700000
350 #define MM_FIFO_WATERMARK   0x0001F000
351 #define LM_BURST_LENGTH     0x00000700
352 #define LM_FIFO_WATERMARK   0x0000001F
353
354
355 /* Fence/Tiling ranges [0..7]
356  */
357 #define FENCE            0x2000
358 #define FENCE_NR         8
359
360 #define I830_FENCE_START_MASK   0x07f80000
361
362 #define FENCE_START_MASK    0x03F80000
363 #define FENCE_X_MAJOR       0x00000000
364 #define FENCE_Y_MAJOR       0x00001000
365 #define FENCE_SIZE_MASK     0x00000700
366 #define FENCE_SIZE_512K     0x00000000
367 #define FENCE_SIZE_1M       0x00000100
368 #define FENCE_SIZE_2M       0x00000200
369 #define FENCE_SIZE_4M       0x00000300
370 #define FENCE_SIZE_8M       0x00000400
371 #define FENCE_SIZE_16M      0x00000500
372 #define FENCE_SIZE_32M      0x00000600
373 #define FENCE_SIZE_64M      0x00000700
374 #define FENCE_PITCH_MASK    0x00000070
375 #define FENCE_PITCH_1       0x00000000
376 #define FENCE_PITCH_2       0x00000010
377 #define FENCE_PITCH_4       0x00000020
378 #define FENCE_PITCH_8       0x00000030
379 #define FENCE_PITCH_16      0x00000040
380 #define FENCE_PITCH_32      0x00000050
381 #define FENCE_PITCH_64      0x00000060
382 #define FENCE_VALID         0x00000001
383
384
385 /* Registers to control page table, p274
386  */
387 #define PGETBL_CTL       0x2020
388 #define PGETBL_ADDR_MASK    0xFFFFF000
389 #define PGETBL_ENABLE_MASK  0x00000001
390 #define PGETBL_ENABLED      0x00000001
391
392 /* Register containing pge table error results, p276
393  */
394 #define PGE_ERR          0x2024
395 #define PGE_ERR_ADDR_MASK   0xFFFFF000
396 #define PGE_ERR_ID_MASK     0x00000038
397 #define PGE_ERR_CAPTURE     0x00000000
398 #define PGE_ERR_OVERLAY     0x00000008
399 #define PGE_ERR_DISPLAY     0x00000010
400 #define PGE_ERR_HOST        0x00000018
401 #define PGE_ERR_RENDER      0x00000020
402 #define PGE_ERR_BLITTER     0x00000028
403 #define PGE_ERR_MAPPING     0x00000030
404 #define PGE_ERR_CMD_PARSER  0x00000038
405 #define PGE_ERR_TYPE_MASK   0x00000007
406 #define PGE_ERR_INV_TABLE   0x00000000
407 #define PGE_ERR_INV_PTE     0x00000001
408 #define PGE_ERR_MIXED_TYPES 0x00000002
409 #define PGE_ERR_PAGE_MISS   0x00000003
410 #define PGE_ERR_ILLEGAL_TRX 0x00000004
411 #define PGE_ERR_LOCAL_MEM   0x00000005
412 #define PGE_ERR_TILED       0x00000006
413
414
415
416 /* Page table entries loaded via mmio region, p323
417  */
418 #define PTE_BASE         0x10000
419 #define PTE_ADDR_MASK       0x3FFFF000
420 #define PTE_TYPE_MASK       0x00000006
421 #define PTE_LOCAL           0x00000002
422 #define PTE_MAIN_UNCACHED   0x00000000
423 #define PTE_MAIN_CACHED     0x00000006
424 #define PTE_VALID_MASK      0x00000001
425 #define PTE_VALID           0x00000001
426
427
428 /* Ring buffer registers, p277, overview p19
429  */
430 #define LP_RING     0x2030
431 #define HP_RING     0x2040
432
433 #define RING_TAIL      0x00
434 #define TAIL_ADDR           0x000FFFF8
435 #define I830_TAIL_MASK      0x001FFFF8
436
437 #define RING_HEAD      0x04
438 #define HEAD_WRAP_COUNT     0xFFE00000
439 #define HEAD_WRAP_ONE       0x00200000
440 #define HEAD_ADDR           0x001FFFFC
441 #define I830_HEAD_MASK      0x001FFFFC
442
443 #define RING_START     0x08
444 #define START_ADDR          0x00FFFFF8
445 #define I830_RING_START_MASK    0xFFFFF000
446
447 #define RING_LEN       0x0C
448 #define RING_NR_PAGES       0x000FF000 
449 #define I830_RING_NR_PAGES      0x001FF000
450 #define RING_REPORT_MASK    0x00000006
451 #define RING_REPORT_64K     0x00000002
452 #define RING_REPORT_128K    0x00000004
453 #define RING_NO_REPORT      0x00000000
454 #define RING_VALID_MASK     0x00000001
455 #define RING_VALID          0x00000001
456 #define RING_INVALID        0x00000000
457
458
459
460 /* BitBlt Instructions
461  *
462  * There are many more masks & ranges yet to add.
463  */
464 #define BR00_BITBLT_CLIENT   0x40000000
465 #define BR00_OP_COLOR_BLT    0x10000000
466 #define BR00_OP_SRC_COPY_BLT 0x10C00000
467 #define BR00_OP_FULL_BLT     0x11400000
468 #define BR00_OP_MONO_SRC_BLT 0x11800000
469 #define BR00_OP_MONO_SRC_COPY_BLT 0x11000000
470 #define BR00_OP_MONO_PAT_BLT 0x11C00000
471 #define BR00_OP_MONO_SRC_COPY_IMMEDIATE_BLT (0x61 << 22)
472 #define BR00_OP_TEXT_IMMEDIATE_BLT 0xc000000
473
474
475 #define BR00_TPCY_DISABLE    0x00000000
476 #define BR00_TPCY_ENABLE     0x00000010
477
478 #define BR00_TPCY_ROP        0x00000000
479 #define BR00_TPCY_NO_ROP     0x00000020
480 #define BR00_TPCY_EQ         0x00000000
481 #define BR00_TPCY_NOT_EQ     0x00000040
482
483 #define BR00_PAT_MSB_FIRST   0x00000000 /* ? */
484
485 #define BR00_PAT_VERT_ALIGN  0x000000e0
486
487 #define BR00_LENGTH          0x0000000F
488
489 #define BR09_DEST_ADDR       0x03FFFFFF
490
491 #define BR11_SOURCE_PITCH    0x00003FFF
492
493 #define BR12_SOURCE_ADDR     0x03FFFFFF
494
495 #define BR13_SOLID_PATTERN   0x80000000
496 #define BR13_RIGHT_TO_LEFT   0x40000000
497 #define BR13_LEFT_TO_RIGHT   0x00000000
498 #define BR13_MONO_TRANSPCY   0x20000000
499 #define BR13_USE_DYN_DEPTH   0x04000000
500 #define BR13_DYN_8BPP        0x00000000
501 #define BR13_DYN_16BPP       0x01000000
502 #define BR13_DYN_24BPP       0x02000000
503 #define BR13_ROP_MASK        0x00FF0000
504 #define BR13_DEST_PITCH      0x0000FFFF
505 #define BR13_PITCH_SIGN_BIT  0x00008000
506
507 #define BR14_DEST_HEIGHT     0xFFFF0000
508 #define BR14_DEST_WIDTH      0x0000FFFF
509
510 #define BR15_PATTERN_ADDR    0x03FFFFFF
511
512 #define BR16_SOLID_PAT_COLOR 0x00FFFFFF
513 #define BR16_BACKGND_PAT_CLR 0x00FFFFFF
514
515 #define BR17_FGND_PAT_CLR    0x00FFFFFF
516
517 #define BR18_SRC_BGND_CLR    0x00FFFFFF
518 #define BR19_SRC_FGND_CLR    0x00FFFFFF
519
520
521 /* Instruction parser instructions
522  */
523
524 #define INST_PARSER_CLIENT   0x00000000
525 #define INST_OP_FLUSH        0x02000000
526 #define INST_FLUSH_MAP_CACHE 0x00000001
527
528
529 #define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23))
530
531
532 /* Registers in the i810 host-pci bridge pci config space which affect
533  * the i810 graphics operations.  
534  */
535 #define SMRAM_MISCC         0x70
536 #define GMS                    0x000000c0
537 #define GMS_DISABLE            0x00000000
538 #define GMS_ENABLE_BARE        0x00000040
539 #define GMS_ENABLE_512K        0x00000080
540 #define GMS_ENABLE_1M          0x000000c0
541 #define USMM                   0x00000030 
542 #define USMM_DISABLE           0x00000000
543 #define USMM_TSEG_ZERO         0x00000010
544 #define USMM_TSEG_512K         0x00000020
545 #define USMM_TSEG_1M           0x00000030  
546 #define GFX_MEM_WIN_SIZE       0x00010000
547 #define GFX_MEM_WIN_32M        0x00010000
548 #define GFX_MEM_WIN_64M        0x00000000
549
550 /* Overkill?  I don't know.  Need to figure out top of mem to make the
551  * SMRAM calculations come out.  Linux seems to have problems
552  * detecting it all on its own, so this seems a reasonable double
553  * check to any user supplied 'mem=...' boot param.
554  *
555  * ... unfortunately this reg doesn't work according to spec on the
556  * test hardware.
557  */
558 #define WHTCFG_PAMR_DRP      0x50
559 #define SYS_DRAM_ROW_0_SHIFT    16
560 #define SYS_DRAM_ROW_1_SHIFT    20
561 #define DRAM_MASK           0x0f
562 #define DRAM_VALUE_0        0
563 #define DRAM_VALUE_1        8
564 /* No 2 value defined */
565 #define DRAM_VALUE_3        16
566 #define DRAM_VALUE_4        16
567 #define DRAM_VALUE_5        24
568 #define DRAM_VALUE_6        32
569 #define DRAM_VALUE_7        32
570 #define DRAM_VALUE_8        48
571 #define DRAM_VALUE_9        64
572 #define DRAM_VALUE_A        64
573 #define DRAM_VALUE_B        96
574 #define DRAM_VALUE_C        128
575 #define DRAM_VALUE_D        128
576 #define DRAM_VALUE_E        192
577 #define DRAM_VALUE_F        256 /* nice one, geezer */
578 #define LM_FREQ_MASK        0x10
579 #define LM_FREQ_133         0x10
580 #define LM_FREQ_100         0x00
581
582
583
584
585 /* These are 3d state registers, but the state is invarient, so we let
586  * the X server handle it:
587  */
588
589
590
591 /* GFXRENDERSTATE_COLOR_CHROMA_KEY, p135
592  */
593 #define GFX_OP_COLOR_CHROMA_KEY  ((0x3<<29)|(0x1d<<24)|(0x2<<16)|0x1)
594 #define CC1_UPDATE_KILL_WRITE    (1<<28)
595 #define CC1_ENABLE_KILL_WRITE    (1<<27)
596 #define CC1_DISABLE_KILL_WRITE    0
597 #define CC1_UPDATE_COLOR_IDX     (1<<26)
598 #define CC1_UPDATE_CHROMA_LOW    (1<<25)
599 #define CC1_UPDATE_CHROMA_HI     (1<<24)
600 #define CC1_CHROMA_LOW_MASK      ((1<<24)-1)
601 #define CC2_COLOR_IDX_SHIFT      24
602 #define CC2_COLOR_IDX_MASK       (0xff<<24)
603 #define CC2_CHROMA_HI_MASK       ((1<<24)-1)
604
605
606 #define GFX_CMD_CONTEXT_SEL      ((0<<29)|(0x5<<23))
607 #define CS_UPDATE_LOAD           (1<<17)
608 #define CS_UPDATE_USE            (1<<16)
609 #define CS_UPDATE_LOAD           (1<<17)
610 #define CS_LOAD_CTX0             0
611 #define CS_LOAD_CTX1             (1<<8)
612 #define CS_USE_CTX0              0
613 #define CS_USE_CTX1              (1<<0)
614
615 /* I810 LCD/TV registers */
616 #define LCD_TV_HTOTAL   0x60000
617 #define LCD_TV_C        0x60018
618 #define LCD_TV_OVRACT   0x6001C
619
620 #define LCD_TV_ENABLE (1 << 31)
621 #define LCD_TV_VGAMOD (1 << 28)
622
623 /* I830 CRTC registers */
624 #define HTOTAL_A        0x60000
625 #define HBLANK_A        0x60004
626 #define HSYNC_A         0x60008
627 #define VTOTAL_A        0x6000c
628 #define VBLANK_A        0x60010
629 #define VSYNC_A         0x60014
630 #define PIPEASRC        0x6001c
631 #define BCLRPAT_A       0x60020
632
633 #define HTOTAL_B        0x61000
634 #define HBLANK_B        0x61004
635 #define HSYNC_B         0x61008
636 #define VTOTAL_B        0x6100c
637 #define VBLANK_B        0x61010
638 #define VSYNC_B         0x61014
639 #define PIPEBSRC        0x6101c
640 #define BCLRPAT_B       0x61020
641
642 #define DPLL_A          0x06014
643 #define DPLL_B          0x06018
644 #define FPA0            0x06040
645 #define FPA1            0x06044
646
647 #define I830_HTOTAL_MASK        0xfff0000
648 #define I830_HACTIVE_MASK       0x7ff
649
650 #define I830_HBLANKEND_MASK     0xfff0000
651 #define I830_HBLANKSTART_MASK    0xfff
652
653 #define I830_HSYNCEND_MASK      0xfff0000
654 #define I830_HSYNCSTART_MASK    0xfff
655
656 #define I830_VTOTAL_MASK        0xfff0000
657 #define I830_VACTIVE_MASK       0x7ff
658
659 #define I830_VBLANKEND_MASK     0xfff0000
660 #define I830_VBLANKSTART_MASK    0xfff
661
662 #define I830_VSYNCEND_MASK      0xfff0000
663 #define I830_VSYNCSTART_MASK    0xfff
664
665 #define I830_PIPEA_HORZ_MASK    0x7ff0000
666 #define I830_PIPEA_VERT_MASK    0x7ff
667
668 #define ADPA                    0x61100
669 #define ADPA_DAC_ENABLE         (1<<31)
670 #define ADPA_DAC_DISABLE        0
671 #define ADPA_PIPE_SELECT_MASK   (1<<30)
672 #define ADPA_PIPE_A_SELECT      0
673 #define ADPA_PIPE_B_SELECT      (1<<30)
674 #define ADPA_USE_VGA_HVPOLARITY (1<<15)
675 #define ADPA_SETS_HVPOLARITY    0
676 #define ADPA_VSYNC_CNTL_DISABLE (1<<11)
677 #define ADPA_VSYNC_CNTL_ENABLE  0
678 #define ADPA_HSYNC_CNTL_DISABLE (1<<10)
679 #define ADPA_HSYNC_CNTL_ENABLE  0
680 #define ADPA_VSYNC_ACTIVE_HIGH  (1<<4)
681 #define ADPA_VSYNC_ACTIVE_LOW   0
682 #define ADPA_HSYNC_ACTIVE_HIGH  (1<<3)
683 #define ADPA_HSYNC_ACTIVE_LOW   0
684
685
686 #define DVOA                    0x61120
687 #define DVOB                    0x61140
688 #define DVOC                    0x61160
689 #define DVO_ENABLE              (1<<31)
690
691 #define DVOA_SRCDIM             0x61124
692 #define DVOB_SRCDIM             0x61144
693 #define DVOC_SRCDIM             0x61164
694
695 #define LVDS                    0x61180
696
697 #define PIPEACONF 0x70008
698 #define PIPEACONF_ENABLE        (1<<31)
699 #define PIPEACONF_DISABLE       0
700 #define PIPEACONF_DOUBLE_WIDE   (1<<30)
701 #define PIPEACONF_SINGLE_WIDE   0
702 #define PIPEACONF_PIPE_UNLOCKED 0
703 #define PIPEACONF_PIPE_LOCKED   (1<<25)
704 #define PIPEACONF_PALETTE       0
705 #define PIPEACONF_GAMMA         (1<<24)
706
707 #define PIPEBCONF 0x71008
708 #define PIPEBCONF_ENABLE        (1<<31)
709 #define PIPEBCONF_DISABLE       0
710 #define PIPEBCONF_GAMMA         (1<<24)
711 #define PIPEBCONF_PALETTE       0
712
713 #define DSPACNTR                0x70180
714 #define DSPBCNTR                0x71180
715 #define DISPLAY_PLANE_ENABLE                    (1<<31)
716 #define DISPLAY_PLANE_DISABLE                   0
717 #define DISPPLANE_GAMMA_ENABLE                  (1<<30)
718 #define DISPPLANE_GAMMA_DISABLE                 0
719 #define DISPPLANE_PIXFORMAT_MASK                (0xf<<26)
720 #define DISPPLANE_8BPP                          (0x2<<26)
721 #define DISPPLANE_15_16BPP                      (0x4<<26)
722 #define DISPPLANE_16BPP                         (0x5<<26)
723 #define DISPPLANE_32BPP_NO_ALPHA                (0x6<<26)
724 #define DISPPLANE_32BPP                         (0x7<<26)
725 #define DISPPLANE_STEREO_ENABLE                 (1<<25)
726 #define DISPPLANE_STEREO_DISABLE                0
727 #define DISPPLANE_SEL_PIPE_MASK                 (1<<24)
728 #define DISPPLANE_SEL_PIPE_A                    0
729 #define DISPPLANE_SEL_PIPE_B                    (1<<24)
730 #define DISPPLANE_SRC_KEY_ENABLE                (1<<22)
731 #define DISPPLANE_SRC_KEY_DISABLE               0
732 #define DISPPLANE_LINE_DOUBLE                   (1<<20)
733 #define DISPPLANE_NO_LINE_DOUBLE                0
734 #define DISPPLANE_STEREO_POLARITY_FIRST         0
735 #define DISPPLANE_STEREO_POLARITY_SECOND        (1<<18)
736 /* plane B only */
737 #define DISPPLANE_ALPHA_TRANS_ENABLE            (1<<15)
738 #define DISPPLANE_ALPHA_TRANS_DISABLE           0
739 #define DISPPLANE_SPRITE_ABOVE_DISPLAYA         0
740 #define DISPPLANE_SPRITE_ABOVE_OVERLAY          (1)
741
742 #define DSPABASE                0x70184
743 #define DSPASTRIDE              0x70188
744
745 #define DSPBBASE                0x71184
746 #define DSPBADDR                DSPBBASE
747 #define DSPBSTRIDE              0x71188
748
749 /* Various masks for reserved bits, etc. */
750 #define I830_FWATER1_MASK        (~((1<<11)|(1<<10)|(1<<9)|      \
751         (1<<8)|(1<<26)|(1<<25)|(1<<24)|(1<<5)|(1<<4)|(1<<3)|    \
752         (1<<2)|(1<<1)|1|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)))
753 #define I830_FWATER2_MASK ~(0)
754
755 #define DV0A_RESERVED ((1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
756 #define DV0B_RESERVED ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
757 #define VGA0_N_DIVISOR_MASK     ((1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
758 #define VGA0_M1_DIVISOR_MASK    ((1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
759 #define VGA0_M2_DIVISOR_MASK    ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
760 #define VGA0_M1M2N_RESERVED     ~(VGA0_N_DIVISOR_MASK|VGA0_M1_DIVISOR_MASK|VGA0_M2_DIVISOR_MASK)
761 #define VGA0_POSTDIV_MASK       ((1<<7)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
762 #define VGA1_POSTDIV_MASK       ((1<<15)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
763 #define VGA_POSTDIV_RESERVED    ~(VGA0_POSTDIV_MASK|VGA1_POSTDIV_MASK|(1<<7)|(1<<15))
764 #define DPLLA_POSTDIV_MASK ((1<<23)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
765 #define DPLLA_RESERVED     ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<22)|(1<<15)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
766 #define ADPA_RESERVED   ((1<<2)|(1<<1)|1|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
767 #define SUPER_WORD              32
768 #define BURST_A_MASK    ((1<<11)|(1<<10)|(1<<9)|(1<<8))
769 #define BURST_B_MASK    ((1<<26)|(1<<25)|(1<<24))
770 #define WATER_A_MASK    ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
771 #define WATER_B_MASK    ((1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
772 #define WATER_RESERVED  ((1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<7)|(1<<6))
773 #define PIPEACONF_RESERVED ((1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
774 #define PIPEBCONF_RESERVED ((1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
775 #define DSPACNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0xffff)
776 #define DSPBCNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0x7ffe)
777
778 #define I830_GMCH_CTRL          0x52
779
780 #define I830_GMCH_ENABLED       0x4
781 #define I830_GMCH_MEM_MASK      0x1
782 #define I830_GMCH_MEM_64M       0x1
783 #define I830_GMCH_MEM_128M      0
784
785 #define I830_GMCH_GMS_MASK                      0x70
786 #define I830_GMCH_GMS_DISABLED          0x00
787 #define I830_GMCH_GMS_LOCAL                     0x10
788 #define I830_GMCH_GMS_STOLEN_512        0x20
789 #define I830_GMCH_GMS_STOLEN_1024       0x30
790 #define I830_GMCH_GMS_STOLEN_8192       0x40
791
792 #define I830_RDRAM_CHANNEL_TYPE         0x03010
793 #define I830_RDRAM_ND(x)                        (((x) & 0x20) >> 5)
794 #define I830_RDRAM_DDT(x)                       (((x) & 0x18) >> 3)
795
796 #define I855_GMCH_GMS_MASK                      (0x7 << 4)
797 #define I855_GMCH_GMS_DISABLED                  0x00
798 #define I855_GMCH_GMS_STOLEN_1M                 (0x1 << 4)
799 #define I855_GMCH_GMS_STOLEN_4M                 (0x2 << 4)
800 #define I855_GMCH_GMS_STOLEN_8M                 (0x3 << 4)
801 #define I855_GMCH_GMS_STOLEN_16M                (0x4 << 4)
802 #define I855_GMCH_GMS_STOLEN_32M                (0x5 << 4)
803
804 #define I85X_CAPID                      0x44
805 #define I85X_VARIANT_MASK                       0x7
806 #define I85X_VARIANT_SHIFT                      5
807 #define I855_GME                                0x0
808 #define I855_GM                                 0x4
809 #define I852_GME                                0x2
810 #define I852_GM                                 0x5
811
812 /* BLT commands */
813 #define COLOR_BLT_CMD           ((2<<29)|(0x40<<22)|(0x3))
814 #define COLOR_BLT_WRITE_ALPHA   (1<<21)
815 #define COLOR_BLT_WRITE_RGB     (1<<20)
816
817 #define XY_COLOR_BLT_CMD                ((2<<29)|(0x50<<22)|(0x4))
818 #define XY_COLOR_BLT_WRITE_ALPHA        (1<<21)
819 #define XY_COLOR_BLT_WRITE_RGB          (1<<20)
820
821 #define XY_SETUP_CLIP_BLT_CMD           ((2<<29)|(3<<22)|1)
822
823 #define XY_SRC_COPY_BLT_CMD             ((2<<29)|(0x53<<22)|6)
824 #define XY_SRC_COPY_BLT_WRITE_ALPHA     (1<<21)
825 #define XY_SRC_COPY_BLT_WRITE_RGB       (1<<20)
826
827 #define SRC_COPY_BLT_CMD                ((2<<29)|(0x43<<22)|0x4)
828 #define SRC_COPY_BLT_WRITE_ALPHA        (1<<21)
829 #define SRC_COPY_BLT_WRITE_RGB          (1<<20)
830
831 #define XY_MONO_PAT_BLT_CMD             ((0x2<<29)|(0x52<<22)|0x7)
832 #define XY_MONO_PAT_VERT_SEED           ((1<<10)|(1<<9)|(1<<8))
833 #define XY_MONO_PAT_HORT_SEED           ((1<<14)|(1<<13)|(1<<12))
834 #define XY_MONO_PAT_BLT_WRITE_ALPHA     (1<<21)
835 #define XY_MONO_PAT_BLT_WRITE_RGB       (1<<20)
836
837 #define XY_MONO_SRC_BLT_CMD             ((0x2<<29)|(0x54<<22)|(0x6))
838 #define XY_MONO_SRC_BLT_WRITE_ALPHA     (1<<21)
839 #define XY_MONO_SRC_BLT_WRITE_RGB       (1<<20)
840
841 /* 3d state */
842 #define STATE3D_FOG_MODE                ((3<<29)|(0x1d<<24)|(0x89<<16)|2)
843 #define FOG_MODE_VERTEX                 (1<<31)
844 #define STATE3D_MAP_COORD_TRANSFORM     ((3<<29)|(0x1d<<24)|(0x8c<<16))
845 #define DISABLE_TEX_TRANSFORM           (1<<28)
846 #define TEXTURE_SET(x)                  (x<<29)
847 #define STATE3D_RASTERIZATION_RULES     ((3<<29)|(0x07<<24))
848 #define POINT_RASTER_ENABLE             (1<<15)
849 #define POINT_RASTER_OGL                (1<<13)
850 #define STATE3D_VERTEX_TRANSFORM        ((3<<29)|(0x1d<<24)|(0x8b<<16))
851 #define DISABLE_VIEWPORT_TRANSFORM      (1<<31)
852 #define DISABLE_PERSPECTIVE_DIVIDE      (1<<29)
853
854 #define MI_SET_CONTEXT                  (0x18<<23)
855 #define CTXT_NO_RESTORE                 (1)
856 #define CTXT_PALETTE_SAVE_DISABLE       (1<<3)
857 #define CTXT_PALETTE_RESTORE_DISABLE    (1<<2)
858
859 /* Dword 0 */
860 #define MI_VERTEX_BUFFER                (0x17<<23)
861 #define MI_VERTEX_BUFFER_IDX(x)         (x<<20)
862 #define MI_VERTEX_BUFFER_PITCH(x)       (x<<13)
863 #define MI_VERTEX_BUFFER_WIDTH(x)       (x<<6)
864 /* Dword 1 */
865 #define MI_VERTEX_BUFFER_DISABLE        (1)
866
867 /* Overlay Flip */
868 #define MI_OVERLAY_FLIP                 (0x11<<23)
869 #define MI_OVERLAY_FLIP_CONTINUE        (0<<21)
870 #define MI_OVERLAY_FLIP_ON              (1<<21)
871 #define MI_OVERLAY_FLIP_OFF             (2<<21)
872
873 /* Wait for Events */
874 #define MI_WAIT_FOR_EVENT               (0x03<<23)
875 #define MI_WAIT_FOR_OVERLAY_FLIP        (1<<16)
876
877 /* Flush */
878 #define MI_FLUSH                        (0x04<<23)
879 #define MI_WRITE_DIRTY_STATE            (1<<4)
880 #define MI_END_SCENE                    (1<<3)
881 #define MI_INHIBIT_RENDER_CACHE_FLUSH   (1<<2)
882 #define MI_INVALIDATE_MAP_CACHE         (1<<0)
883
884 /* Noop */
885 #define MI_NOOP                         0x00
886 #define MI_NOOP_WRITE_ID                (1<<22)
887 #define MI_NOOP_ID_MASK                 (1<<22 - 1)
888
889 #define STATE3D_COLOR_FACTOR    ((0x3<<29)|(0x1d<<24)|(0x01<<16))
890
891 /* STATE3D_FOG_MODE stuff */
892 #define ENABLE_FOG_SOURCE       (1<<27)
893 #define ENABLE_FOG_CONST        (1<<24)
894 #define ENABLE_FOG_DENSITY      (1<<23)
895
896
897 #define MAX_DISPLAY_PIPES       2
898
899 typedef enum {
900    CrtIndex = 0,
901    TvIndex,
902    DfpIndex,
903    LfpIndex,
904    Tv2Index,
905    Dfp2Index,
906    UnknownIndex,
907    Unknown2Index,
908    NumDisplayTypes,
909    NumKnownDisplayTypes = UnknownIndex
910 } DisplayType;
911
912 /* What's connected to the pipes (as reported by the BIOS) */
913 #define PIPE_ACTIVE_MASK                0xff
914 #define PIPE_CRT_ACTIVE                 (1 << CrtIndex)
915 #define PIPE_TV_ACTIVE                  (1 << TvIndex)
916 #define PIPE_DFP_ACTIVE                 (1 << DfpIndex)
917 #define PIPE_LCD_ACTIVE                 (1 << LfpIndex)
918 #define PIPE_TV2_ACTIVE                 (1 << Tv2Index)
919 #define PIPE_DFP2_ACTIVE                (1 << Dfp2Index)
920 #define PIPE_UNKNOWN_ACTIVE             ((1 << UnknownIndex) |  \
921                                          (1 << Unknown2Index))
922
923 #define PIPE_SIZED_DISP_MASK            (PIPE_DFP_ACTIVE |      \
924                                          PIPE_LCD_ACTIVE |      \
925                                          PIPE_DFP2_ACTIVE)
926
927 #define PIPE_A_SHIFT                    0
928 #define PIPE_B_SHIFT                    8
929 #define PIPE_SHIFT(n)                   ((n) == 0 ? \
930                                          PIPE_A_SHIFT : PIPE_B_SHIFT)
931
932 /*
933  * Some BIOS scratch area registers.  The 845 (and 830?) store the amount
934  * of video memory available to the BIOS in SWF1.
935  */
936
937 #define SWF0                    0x71410
938 #define SWF1                    0x71414
939 #define SWF2                    0x71418
940 #define SWF3                    0x7141c
941 #define SWF4                    0x71420
942 #define SWF5                    0x71424
943 #define SWF6                    0x71428
944
945 /*
946  * 855 scratch registers.
947  */
948 #define SWF00                   0x70410
949 #define SWF01                   0x70414
950 #define SWF02                   0x70418
951 #define SWF03                   0x7041c
952 #define SWF04                   0x70420
953 #define SWF05                   0x70424
954 #define SWF06                   0x70428
955
956 #define SWF10                   SWF0
957 #define SWF11                   SWF1
958 #define SWF12                   SWF2
959 #define SWF13                   SWF3
960 #define SWF14                   SWF4
961 #define SWF15                   SWF5
962 #define SWF16                   SWF6
963
964 #define SWF30                   0x72414
965 #define SWF31                   0x72418
966 #define SWF32                   0x7241c
967
968 /*
969  * Overlay registers.  These are overlay registers accessed via MMIO.
970  * Those loaded via the overlay register page are defined in i830_video.c.
971  */
972 #define OVADD                   0x30000
973
974 #define DOVSTA                  0x30008
975 #define OC_BUF                  (0x3<<20)
976
977 #define OGAMC5                  0x30010
978 #define OGAMC4                  0x30014
979 #define OGAMC3                  0x30018
980 #define OGAMC2                  0x3001c
981 #define OGAMC1                  0x30020
982 #define OGAMC0                  0x30024
983
984
985 /*
986  * Palette registers
987  */
988 #define PALETTE_A               0x0a000
989 #define PALETTE_B               0x0a800
990
991 #endif /* _I810_REG_H */