veritefbreg.h revision 1.1 1 1.1 rkujawa /* $NetBSD: veritefbreg.h,v 1.1 2026/07/11 15:18:21 rkujawa Exp $ */
2 1.1 rkujawa
3 1.1 rkujawa /*
4 1.1 rkujawa * Copyright (c) 2026 The NetBSD Foundation, Inc.
5 1.1 rkujawa * All rights reserved.
6 1.1 rkujawa *
7 1.1 rkujawa * This code is derived from software contributed to The NetBSD Foundation
8 1.1 rkujawa * by Radoslaw Kujawa.
9 1.1 rkujawa *
10 1.1 rkujawa * Redistribution and use in source and binary forms, with or without
11 1.1 rkujawa * modification, are permitted provided that the following conditions
12 1.1 rkujawa * are met:
13 1.1 rkujawa * 1. Redistributions of source code must retain the above copyright
14 1.1 rkujawa * notice, this list of conditions and the following disclaimer.
15 1.1 rkujawa * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 rkujawa * notice, this list of conditions and the following disclaimer in the
17 1.1 rkujawa * documentation and/or other materials provided with the distribution.
18 1.1 rkujawa *
19 1.1 rkujawa * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 1.1 rkujawa * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 1.1 rkujawa * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 1.1 rkujawa * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 1.1 rkujawa * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 1.1 rkujawa * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 1.1 rkujawa * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 1.1 rkujawa * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 1.1 rkujawa * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 1.1 rkujawa * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 1.1 rkujawa */
30 1.1 rkujawa
31 1.1 rkujawa /*
32 1.1 rkujawa * Register definitions for the Rendition Verite.
33 1.1 rkujawa */
34 1.1 rkujawa
35 1.1 rkujawa #ifndef VERITEFBREG_H
36 1.1 rkujawa #define VERITEFBREG_H
37 1.1 rkujawa
38 1.1 rkujawa #define VFB_IO_BAR 0x14 /* I/O registers */
39 1.1 rkujawa #define VFB_FB_BAR 0x10 /* linear framebuffer aperture */
40 1.1 rkujawa #define VFB_MMIO_BAR 0x18 /* MMIO register/FIFO window */
41 1.1 rkujawa
42 1.1 rkujawa #define VFB_MMIO_REG_BASE 0x20000
43 1.1 rkujawa
44 1.1 rkujawa /*
45 1.1 rkujawa * Input FIFO windows: 32-bit writes, byte-swap variant selected by
46 1.1 rkujawa * address.
47 1.1 rkujawa */
48 1.1 rkujawa #define VFB_FIFO_SWAP_NO 0x00 /* no byte swap */
49 1.1 rkujawa #define VFB_FIFO_SWAP_END 0x04 /* swap bytes 3<>0, 2<>1 */
50 1.1 rkujawa #define VFB_FIFO_SWAP_INHW 0x08 /* swap bytes 3<>2, 1<>0 */
51 1.1 rkujawa #define VFB_FIFO_SWAP_HW 0x0c /* swap half-words */
52 1.1 rkujawa
53 1.1 rkujawa #define VFB_FIFOINFREE 0x40 /* input FIFO free entry count */
54 1.1 rkujawa #define VFB_FIFOINFREE_MASK 0x1f
55 1.1 rkujawa #define VFB_FIFO_SIZE 0x1f
56 1.1 rkujawa #define VFB_FIFOOUTVALID 0x41 /* output FIFO valid entry count */
57 1.1 rkujawa #define VFB_FIFOOUTVALID_MASK 0x07
58 1.1 rkujawa
59 1.1 rkujawa #define VFB_COMM 0x42 /* dual 4-bit comm ports */
60 1.1 rkujawa #define VFB_COMM_SYSSTATUS_MASK 0x0f /* host -> RISC */
61 1.1 rkujawa #define VFB_COMM_RISCSTATUS_MASK 0xf0 /* RISC -> host, r/o */
62 1.1 rkujawa
63 1.1 rkujawa #define VFB_MEMENDIAN 0x43 /* aperture byte-swap policy */
64 1.1 rkujawa #define VFB_MEMENDIAN_NO 0 /* no byte swap */
65 1.1 rkujawa #define VFB_MEMENDIAN_END 1 /* swap bytes 3<>0, 2<>1 */
66 1.1 rkujawa #define VFB_MEMENDIAN_INHW 2 /* swap bytes 3<>2, 1<>0 */
67 1.1 rkujawa #define VFB_MEMENDIAN_HW 3 /* swap half-words */
68 1.1 rkujawa #define VFB_MEMENDIAN_MASK 3
69 1.1 rkujawa
70 1.1 rkujawa #define VFB_INTR 0x44 /* interrupt status */
71 1.1 rkujawa #define VFB_INTREN 0x46 /* interrupt enable */
72 1.1 rkujawa #define VFB_INTR_VERT 0x01 /* vertical retrace */
73 1.1 rkujawa #define VFB_INTR_FIFOLOW 0x02 /* input FIFO above low water */
74 1.1 rkujawa #define VFB_INTR_RISC 0x04 /* RISC firmware interrupt */
75 1.1 rkujawa #define VFB_INTR_HALT 0x08 /* RISC halted */
76 1.1 rkujawa #define VFB_INTR_FIFOERROR 0x10 /* FIFO under/overflow */
77 1.1 rkujawa #define VFB_INTR_DMAERROR 0x20 /* PCI error during DMA */
78 1.1 rkujawa #define VFB_INTR_DMA 0x40 /* DMA done */
79 1.1 rkujawa #define VFB_INTR_X 0x80 /* external device passthrough */
80 1.1 rkujawa
81 1.1 rkujawa #define VFB_DEBUG 0x48 /* reset and RISC debug control */
82 1.1 rkujawa #define VFB_DEBUG_SOFTRESET 0x01 /* soft reset chip */
83 1.1 rkujawa #define VFB_DEBUG_HOLDRISC 0x02 /* hold RISC while set */
84 1.1 rkujawa #define VFB_DEBUG_STEPRISC 0x04 /* single-step RISC */
85 1.1 rkujawa #define VFB_DEBUG_DIRECTSCLK 0x08 /* no divide-by-2 for sys clock */
86 1.1 rkujawa #define VFB_DEBUG_SOFTVGARESET 0x10 /* assert VGA reset */
87 1.1 rkujawa #define VFB_DEBUG_SOFTXRESET 0x20 /* assert XReset to ext devices */
88 1.1 rkujawa
89 1.1 rkujawa #define VFB_LOWWATERMARK 0x49 /* input FIFO low water mark */
90 1.1 rkujawa
91 1.1 rkujawa #define VFB_STATUS 0x4a /* V2x00 only: busy blocks */
92 1.1 rkujawa #define VFB_STATUS_HOLD_MASK 0x8c /* must all be set before hold */
93 1.1 rkujawa #define VFB_STATUS_HELD 0x02 /* mirrors the Debug hold bit */
94 1.1 rkujawa
95 1.1 rkujawa #define VFB_XBUSCTL 0x4b /* V2x00 only */
96 1.1 rkujawa
97 1.1 rkujawa #define VFB_DMACMDPTR 0x50 /* DMA command list pointer */
98 1.1 rkujawa #define VFB_DMAADDRESS 0x54 /* DMA data address */
99 1.1 rkujawa #define VFB_DMACOUNT 0x58 /* DMA remaining transfer count */
100 1.1 rkujawa
101 1.1 rkujawa /* RISC state access window (debug port). */
102 1.1 rkujawa #define VFB_STATEINDEX 0x60
103 1.1 rkujawa #define VFB_STATEDATA 0x64
104 1.1 rkujawa #define VFB_STATEINDEX_IR 128 /* decoder instruction register */
105 1.1 rkujawa #define VFB_STATEINDEX_PC 129 /* program counter */
106 1.1 rkujawa #define VFB_STATEINDEX_S1 130 /* S1 operand bus */
107 1.1 rkujawa
108 1.1 rkujawa #define VFB_SCLKPLL 0x68 /* V2x00 only: system clock PLL */
109 1.1 rkujawa
110 1.1 rkujawa #define VFB_SCRATCH 0x70 /* 16-bit BIOS scratch space */
111 1.1 rkujawa
112 1.1 rkujawa #define VFB_MODE 0x72 /* legacy VGA vs native mode */
113 1.1 rkujawa #define VFB_MODE_VESA 0x01 /* enable 0xA0000 in native mode */
114 1.1 rkujawa #define VFB_MODE_VGA 0x02 /* VGA mode if set, else native */
115 1.1 rkujawa #define VFB_MODE_VGA32 0x04 /* enable VGA 32-bit accesses */
116 1.1 rkujawa #define VFB_MODE_DMAEN 0x08 /* enable DMA accesses */
117 1.1 rkujawa #define VFB_MODE_NATIVE 0x00 /* not VESA and not VGA */
118 1.1 rkujawa
119 1.1 rkujawa #define VFB_BANKSELECT 0x74 /* local memory to 0xA0000 mapping */
120 1.1 rkujawa
121 1.1 rkujawa /* CRTC */
122 1.1 rkujawa #define VFB_CRTCTEST 0x80
123 1.1 rkujawa #define VFB_CRTCTEST_VIDEOLATENCY_MASK 0x1f
124 1.1 rkujawa #define VFB_CRTCTEST_NOTVBLANK 0x10000
125 1.1 rkujawa #define VFB_CRTCTEST_VBLANK 0x40000
126 1.1 rkujawa
127 1.1 rkujawa #define VFB_CRTCCTL 0x84
128 1.1 rkujawa #define VFB_CRTCCTL_SCRNFMT_MASK 0xf
129 1.1 rkujawa #define VFB_CRTCCTL_VIDEOFIFOSIZE128 0x10
130 1.1 rkujawa #define VFB_CRTCCTL_ENABLEDDC 0x20
131 1.1 rkujawa #define VFB_CRTCCTL_DDCOUTPUT 0x40
132 1.1 rkujawa #define VFB_CRTCCTL_DDCDATA 0x80
133 1.1 rkujawa #define VFB_CRTCCTL_VSYNCHI 0x100
134 1.1 rkujawa #define VFB_CRTCCTL_HSYNCHI 0x200
135 1.1 rkujawa #define VFB_CRTCCTL_VSYNCENABLE 0x400
136 1.1 rkujawa #define VFB_CRTCCTL_HSYNCENABLE 0x800
137 1.1 rkujawa #define VFB_CRTCCTL_VIDEOENABLE 0x1000
138 1.1 rkujawa #define VFB_CRTCCTL_STEREOSCOPIC 0x2000
139 1.1 rkujawa #define VFB_CRTCCTL_FRAMEDISPLAYED 0x4000
140 1.1 rkujawa #define VFB_CRTCCTL_FRAMEBUFFERBGR 0x8000
141 1.1 rkujawa #define VFB_CRTCCTL_EVENFRAME 0x10000
142 1.1 rkujawa #define VFB_CRTCCTL_LINEDOUBLE 0x20000
143 1.1 rkujawa #define VFB_CRTCCTL_FRAMESWITCHED 0x40000
144 1.1 rkujawa #define VFB_CRTCCTL_VIDEOFIFOSIZE256 0x800000 /* V2x00 only */
145 1.1 rkujawa
146 1.1 rkujawa /*
147 1.1 rkujawa * CRTC horizontal timing
148 1.1 rkujawa */
149 1.1 rkujawa #define VFB_CRTCHORZ 0x88
150 1.1 rkujawa #define VFB_CRTCHORZ_ACTIVE_MASK 0xff
151 1.1 rkujawa #define VFB_CRTCHORZ_BACKPORCH_MASK 0x7e00
152 1.1 rkujawa #define VFB_CRTCHORZ_SYNC_MASK 0x1f0000
153 1.1 rkujawa #define VFB_CRTCHORZ_FRONTPORCH_MASK 0xe00000
154 1.1 rkujawa
155 1.1 rkujawa /* CRTC vertical timing */
156 1.1 rkujawa #define VFB_CRTCVERT 0x8c
157 1.1 rkujawa #define VFB_CRTCVERT_ACTIVE_MASK 0x7ff
158 1.1 rkujawa #define VFB_CRTCVERT_BACKPORCH_MASK 0x1f800
159 1.1 rkujawa #define VFB_CRTCVERT_SYNC_MASK 0xe0000
160 1.1 rkujawa #define VFB_CRTCVERT_FRONTPORCH_MASK 0x03f00000
161 1.1 rkujawa
162 1.1 rkujawa #define VFB_FRAMEBASEB 0x90 /* stereoscopic frame base B */
163 1.1 rkujawa #define VFB_FRAMEBASEA 0x94 /* frame base A */
164 1.1 rkujawa
165 1.1 rkujawa #define VFB_CRTCOFFSET 0x98
166 1.1 rkujawa #define VFB_CRTCOFFSET_MASK 0xffff
167 1.1 rkujawa #define VFB_VIDEOFIFO_BYTES 128 /* with CRTCCTL VIDEOFIFOSIZE128 */
168 1.1 rkujawa #define VFB_CRTCSTATUS 0x9c /* video scan position */
169 1.1 rkujawa #define VFB_CRTCSTATUS_VERT_MASK 0xc00000
170 1.1 rkujawa #define VFB_CRTCSTATUS_VERT_FPORCH 0x400000
171 1.1 rkujawa #define VFB_CRTCSTATUS_VERT_SYNC 0xc00000
172 1.1 rkujawa #define VFB_CRTCSTATUS_VERT_BPORCH 0x800000
173 1.1 rkujawa #define VFB_CRTCSTATUS_VERT_ACTIVE 0x000000
174 1.1 rkujawa
175 1.1 rkujawa /*
176 1.1 rkujawa * Memory controller
177 1.1 rkujawa */
178 1.1 rkujawa #define VFB_MEMCTL 0xa0
179 1.1 rkujawa #define VFB_MEMCTL_ADRSWIZZLE_MASK 0x1800
180 1.1 rkujawa #define VFB_MEMCTL_HOLDREFRESH 0x2000
181 1.1 rkujawa #define VFB_MEMCTL_WREFRESH_MASK 0xff0000
182 1.1 rkujawa #define VFB_MEMCTL_WREFRESH_DEFAULT 0x330000
183 1.1 rkujawa
184 1.1 rkujawa #define VFB_MEMDIAG 0xa4 /* V2x00 only */
185 1.1 rkujawa #define VFB_CURSORBASE 0xac /* V2x00 only: bits [23:10] */
186 1.1 rkujawa
187 1.1 rkujawa /*
188 1.1 rkujawa * Start of the register block that exists ONLY in PCI I/O space
189 1.1 rkujawa */
190 1.1 rkujawa #define VFB_IOONLY_BASE 0xb0
191 1.1 rkujawa
192 1.1 rkujawa /* RAMDAC, byte-wide registers */
193 1.1 rkujawa #define VFB_DACRAMWRITEADR 0xb0
194 1.1 rkujawa #define VFB_DACRAMDATA 0xb1
195 1.1 rkujawa #define VFB_DACPIXELMSK 0xb2
196 1.1 rkujawa #define VFB_DACRAMREADADR 0xb3
197 1.1 rkujawa #define VFB_DACOVSWRITEADR 0xb4
198 1.1 rkujawa #define VFB_DACOVSDATA 0xb5
199 1.1 rkujawa #define VFB_DACCOMMAND0 0xb6
200 1.1 rkujawa #define VFB_DACOVSREADADR 0xb7
201 1.1 rkujawa #define VFB_DACCOMMAND1 0xb8
202 1.1 rkujawa #define VFB_DACCOMMAND2 0xb9
203 1.1 rkujawa #define VFB_DACSTATUS 0xba
204 1.1 rkujawa #define VFB_DACCOMMAND3 0xba /* via unlocking/indexing */
205 1.1 rkujawa #define VFB_DACCURSORDATA 0xbb
206 1.1 rkujawa #define VFB_DACCURSORXLOW 0xbc
207 1.1 rkujawa #define VFB_DACCURSORXHIGH 0xbd
208 1.1 rkujawa #define VFB_DACCURSORYLOW 0xbe
209 1.1 rkujawa #define VFB_DACCURSORYHIGH 0xbf
210 1.1 rkujawa
211 1.1 rkujawa /*
212 1.1 rkujawa * Pixel clock PLL (V2x00)
213 1.1 rkujawa */
214 1.1 rkujawa #define VFB_PCLKPLL 0xc0
215 1.1 rkujawa #define VFB_PCLKPLL_M_MASK __BITS(8, 0)
216 1.1 rkujawa #define VFB_PCLKPLL_P_MASK __BITS(12, 9)
217 1.1 rkujawa #define VFB_PCLKPLL_N_MASK __BITS(18, 13)
218 1.1 rkujawa /* divider search bounds (the reference driver stays below field max) */
219 1.1 rkujawa #define VFB_PLL_M_MAX 0xff
220 1.1 rkujawa #define VFB_PLL_N_MAX 0x3f
221 1.1 rkujawa #define VFB_PLL_P_MAX 0x0f
222 1.1 rkujawa /* the constraints above, in units of 10 Hz */
223 1.1 rkujawa #define VFB_PLL_PCF_MIN 100000 /* 1 MHz */
224 1.1 rkujawa #define VFB_PLL_PCF_MAX 300000 /* 3 MHz */
225 1.1 rkujawa #define VFB_PLL_VCO_MIN 12500000 /* 125 MHz */
226 1.1 rkujawa #define VFB_PLL_VCO_MAX 25000000 /* 250 MHz */
227 1.1 rkujawa #define VFB_PLL_STABILIZE_US 500 /* spec: 200 us */
228 1.1 rkujawa
229 1.1 rkujawa /*
230 1.1 rkujawa * System/memory clock PLL (V2x00)
231 1.1 rkujawa */
232 1.1 rkujawa #define VFB_SCLKPLL_DEFAULT 0xa484d
233 1.1 rkujawa
234 1.1 rkujawa /* CRTCCTL ScrnFmt pixel format codes */
235 1.1 rkujawa #define VFB_PIXFMT_332 1
236 1.1 rkujawa #define VFB_PIXFMT_8I 2 /* 8bpp indexed */
237 1.1 rkujawa #define VFB_PIXFMT_565 4
238 1.1 rkujawa #define VFB_PIXFMT_4444 5
239 1.1 rkujawa #define VFB_PIXFMT_1555 6
240 1.1 rkujawa #define VFB_PIXFMT_8888 12
241 1.1 rkujawa
242 1.1 rkujawa /*
243 1.1 rkujawa * RAMDAC command register bits (Bt485-compatible core)
244 1.1 rkujawa */
245 1.1 rkujawa #define VFB_DACCMD0_EXTENDED 0x80 /* enable cmd3 access */
246 1.1 rkujawa #define VFB_DACCMD0_8BITDAC 0x02
247 1.1 rkujawa #define VFB_DACCMD1_24BPP 0x00
248 1.1 rkujawa #define VFB_DACCMD1_16BPP 0x20
249 1.1 rkujawa #define VFB_DACCMD1_8BPP 0x40
250 1.1 rkujawa #define VFB_DACCMD1_BYPASS_CLUT 0x10
251 1.1 rkujawa #define VFB_DACCMD1_565 0x08
252 1.1 rkujawa #define VFB_DACCMD1_PORT_AB 0x00
253 1.1 rkujawa #define VFB_DACCMD2_PIXEL_INPUT_GATE 0x20
254 1.1 rkujawa #define VFB_DACCMD2_DISABLE_CURSOR 0x00
255 1.1 rkujawa #define VFB_DACCMD2_CURSOR_MASK 0x03
256 1.1 rkujawa #define VFB_DACCMD3_INDEX 0x01 /* index via DACRAMWRITEADR */
257 1.1 rkujawa #define VFB_DACCMD3_CLK_DOUBLER 0x08
258 1.1 rkujawa
259 1.1 rkujawa #endif /* VERITEFBREG_H */
260