Remove CVS keywords.
[mesa.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 */