Home | History | Annotate | Line # | Download | only in pci
      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