summaryrefslogtreecommitdiff
path: root/sys/dev/pci/tdvfbreg.h
blob: f9dac77f405c09af1344bc4fc257bafd7c5593b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/*	$NetBSD: tdvfbreg.h,v 1.3 2012/07/20 21:31:28 rkujawa Exp $	*/

/*
 * Copyright (c) 2012 The NetBSD Foundation, Inc. 
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Radoslaw Kujawa.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/* 3Dfx Voodoo 2 register definition (mostly from specification) */

#ifndef TDVFBREG_H
#define TDVFBREG_H

#define TDV_SST_CLK		50000	/* 50MHz, max is around 60MHz */
#define TDV_CVG_CLK		75000	/* 75MHz, max is around 90MHz */

/* CVG PCI config registers */
#define TDV_MM_BAR		0x10

#define TDV_INITENABLE_REG	0x40
#define TDV_INITENABLE_EN_INIT  __BIT(0)	
#define TDV_INITENABLE_EN_FIFO	__BIT(1)	
#define TDV_INITENABLE_REMAPDAC __BIT(2)
#define TDV_VCLK_ENABLE_REG	0xC0	/* undocumented? */
#define TDV_VCLK_DISABLE_REG	0xE0	/* undocumented? */

/* CVG address space */
#define TDV_OFF_MMREG		0x0	/* memory mapped registers */
#define TDV_OFF_FB		0x400000/* frame buffer */
#define TDV_FB_SIZE		0x3FFFFF/* 4MB */

/* CVG registers */
#define TDV_OFF_STATUS		0x0
#define TDV_STATUS_FBI_BUSY	__BIT(7) /* FBI == CVG Bruce */
#define TDV_STATUS_TREX_BUSY	__BIT(8) /* TREX == CVG Chuck */
#define TDV_STATUS_GFX_BUSY	__BIT(9)

#define TDV_OFF_ALPHAMODE	0x10C

#define TDV_OFF_FBZMODE		0x0110
#define TDV_FBZMODE_CLIPPING	__BIT(0)	
#define TDV_FBZMODE_RGB_WR	__BIT(9)
#define TDV_FBZMODE_ALPHA_WR	__BIT(10)
#define TDV_FBZMODE_INVERT_Y	__BIT(17)

#define TDV_OFF_LFBMODE		0x0114
#define TDV_LFBMODE_565		0 //__BIT(0)	
#define TDV_LFBMODE_8888	5 
#define TDV_LFBMODE_PIXPIPE	__BIT(8)
#define TDV_LFBMODE_WSW_WR	__BIT(11)
#define TDV_LFBMODE_BSW_WR	__BIT(12)
#define TDV_LFBMODE_WSW_RD	__BIT(15)
#define TDV_LFBMODE_BSW_RD	__BIT(16) 

#define TDV_OFF_CLIP_LR		0x0118
#define TDV_OFF_CLIP_TB		0x011C

#define TDV_OFF_NOPCMD		0x0120

#define TDV_OFF_FBIINIT0	0x0210
#define TDV_FBIINIT0_VGA_PASS	__BIT(0)
#define TDV_FBIINIT0_FBI_RST	__BIT(1)
#define TDV_FBIINIT0_FIFO_RST	__BIT(2)

#define TDV_OFF_FBIINIT1	0x0214
#define TDV_FBIINIT1_PCIWAIT	__BIT(1)
#define TDV_FBIINIT1_LFB_EN	__BIT(3)
#define TDV_FBIINIT1_TILES_X	4	/* shift, bits 4-7 */
#define TDV_FBIINIT1_VIDEO_RST	__BIT(8)
#define TDV_FBIINIT1_BLANKING	__BIT(12)
#define TDV_FBIINIT1_DR_DATA	__BIT(13)
#define TDV_FBIINIT1_DR_BLANKING __BIT(14)
#define TDV_FBIINIT1_DR_HVSYNC	__BIT(15)
#define TDV_FBIINIT1_DR_DCLK	__BIT(16)
#define TDV_FBIINIT1_IN_VCLK_2X 0	/* __BIT(17) */
#define TDV_FBIINIT1_VCLK_SRC	20	/* shift, bits 20-21 actually */
#define TDV_FBIINIT1_VCLK_2X	0x2
#define TDV_FBIINIT1_TILES_X_MSB 24
#define TDV_FBIINIT1_VIDMASK	0x8080010F

#define TDV_OFF_FBIINIT2	0x0218
#define TDV_OFF_DAC_READ	TDV_OFF_FBIINIT2
#define TDV_FBIINIT2_FAST_RAS	__BIT(5)
#define TDV_FBIINIT2_DRAM_OE	__BIT(6)
#define TDV_FBIINIT2_SWB_ALG	0 //__BITS(9,10) /* 00 - based on DAC vsync */
#define TDV_FBIINIT2_FIFO_RDA	__BIT(21)
#define TDV_FBIINIT2_DRAM_REFR	__BIT(22)
#define TDV_FBIINIT2_DRAM_REFLD	23	/* shift, bits 23-31 */
#define TDV_FBIINIT2_DRAM_REF16 0x30	/* 16ms */

#define TDV_OFF_FBIINIT3	0x021C
#define TDV_FBIINIT3_TREX_DIS	__BIT(6)

#define TDV_OFF_FBIINIT4	0x0200
#define TDV_FBIINIT4_PCIWAIT	__BIT(0)
#define TDV_FBIINIT4_LFB_RDA	__BIT(1)

#define TDV_OFF_BACKPORCH	0x0208
#define TDV_OFF_VDIMENSIONS	0x020C
#define TDV_OFF_HSYNC		0x0220
#define TDV_OFF_VSYNC		0x0224

#define TDV_OFF_DAC_DATA	0x022C
#define TDV_DAC_DATA_READ	__BIT(11)

#define TDV_OFF_FBIINIT5	0x0244
#define TDV_FBIINIT5_VIDMASK	0xFA40FFFF
#define TDV_FBIINIT5_PHSYNC	__BIT(23)	
#define TDV_FBIINIT5_PVSYNC	__BIT(24)

#define TDV_OFF_FBIINIT6	0x0248
#define TDV_FBIINIT6_TILES_X_LSB 30

#define TDV_OFF_BLTSRC		0x02C0
#define TDV_OFF_BLTDST		0x02C4
#define TDV_OFF_BLTXYSTRIDE	0x02C8
#define TDV_OFF_BLTSRCCHROMA	0x02CC
#define TDV_OFF_BLTDSTCHROMA	0x02D0
#define TDV_OFF_BLTCLIPX	0x02D4
#define TDV_OFF_BLTCLIPY	0x02D8
#define TDV_OFF_BLTSRCXY	0x02E0
#define TDV_OFF_BLTDSTXY	0x02E4
#define TDV_OFF_BLTSIZE		0x02E8
#define TDV_OFF_BLTROP		0x02EC
#define TDV_BLTROP_COPY		0x0CCCC
#define TDV_BLTROP_INVERT	0x05555
#define TDV_BLTROP_XOR		0x06666
#define TDV_OFF_BLTCOLOR	0x02F0
#define TDV_OFF_BLTCMD		0x02F8
#define TDV_BLTCMD_SCR2SCR	0
#define TDV_BLTCMD_CPU2SCR	1
#define TDV_BLTCMD_RECTFILL	2
#define TDV_BLTCMD_LAUNCH	__BIT(31)
#define TDV_BLTCMD_FMT_565	2
#define TDV_BLTCMD_CLIPRECT	__BIT(16)
#define TDV_BLTCMD_DSTTILED	__BIT(15)
#define TDV_OFF_DATA		0x02FC /* CPU2SCR */

/* DAC */
#define TDV_GENDAC_REFFREQ	14318
#define TDV_GENDAC_MAXVCO	250000	/* not sure about that */

#define TDV_GENDAC_MIN_N1	1
#define TDV_GENDAC_MAX_N1	31
#define TDV_GENDAC_MIN_N2	0
#define TDV_GENDAC_MAX_N2	3
#define TDV_GENDAC_MIN_M	1
#define TDV_GENDAC_MAX_M	127	

#define TDV_GENDAC_ADDRMASK	0x07

#define TDV_GENDAC_WR		0x0
#define TDV_GENDAC_LUT		0x01
#define TDV_GENDAC_PIXMASK	0x02
#define TDV_GENDAC_RD		0x03

#define TDV_GENDAC_PLLWR	0x04
#define TDV_GENDAC_PLLDATA	0x05
#define TDV_GENDAC_CMD		0x06
#define TDV_GENDAC_CMD_16BITS	0x50
#define TDV_GENDAC_CMD_24BITS	0x60
#define TDV_GENDAC_CMD_PWDOWN	__BIT(0)
#define TDV_GENDAC_PLLRD	0x07

#define TDV_GENDAC_PLL_A	0xA
#define TDV_GENDAC_PLL_0	0x0

#define TDV_GENDAC_PLL_CTRL	0x0
#define TDV_GENDAC_PLL_VIDCLK	__BIT(5)
#define TDV_GENDAC_PLL_VIDCLK0	0	
#define TDV_GENDAC_PLL_CVGCLKA	0

#define TDV_GENDAC_CVGPLLMASK	0xEF
#define TDV_GENDAC_VIDPLLMASK	0xD8

#define TDV_GENDAC_DFLT_F1_M	0x55
#define TDV_GENDAC_DFLT_F1_N	0x49
#define TDV_GENDAC_DFLT_F7_M	0x71
#define TDV_GENDAC_DFLT_F7_N	0x29
#define TDV_GENDAC_DFLT_FB_M	0x79
#define TDV_GENDAC_DFLT_FB_N	0x2E

#endif /* TDVFBREG_H */