1 1.16 macallan /* $NetBSD: summitreg.h,v 1.16 2025/01/29 15:35:22 macallan Exp $ */ 2 1.1 macallan 3 1.1 macallan /* 4 1.1 macallan * Copyright (c) 2024 Michael Lorenz 5 1.1 macallan * All rights reserved. 6 1.1 macallan * 7 1.1 macallan * Redistribution and use in source and binary forms, with or without 8 1.1 macallan * modification, are permitted provided that the following conditions 9 1.1 macallan * are met: 10 1.1 macallan * 1. Redistributions of source code must retain the above copyright 11 1.1 macallan * notice, this list of conditions and the following disclaimer. 12 1.1 macallan * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 macallan * notice, this list of conditions and the following disclaimer in the 14 1.1 macallan * documentation and/or other materials provided with the distribution. 15 1.1 macallan * 16 1.1 macallan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 macallan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 macallan * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 macallan * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, 20 1.1 macallan * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 1.1 macallan * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 1.1 macallan * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 macallan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 1.1 macallan * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 25 1.1 macallan * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26 1.1 macallan * THE POSSIBILITY OF SUCH DAMAGE. 27 1.1 macallan */ 28 1.1 macallan 29 1.1 macallan /* HP Visualize FX 4 and related hardware, aka Summit */ 30 1.1 macallan 31 1.1 macallan /* 32 1.1 macallan * register values, found by disassembling the ROM 33 1.1 macallan * some found by Sven Schnelle 34 1.1 macallan * ( see https://patchwork.kernel.org/project/linux-parisc/patch/20211031204952.25678-2-svens@stackframe.org/ ) 35 1.1 macallan * some by me 36 1.1 macallan */ 37 1.1 macallan 38 1.1 macallan #ifndef SUMMITREG_H 39 1.1 macallan #define SUMMITREG_H 40 1.1 macallan 41 1.10 macallan #define VISFX_CONTROL 0x641000 42 1.12 macallan #define CONTROL_WFC 0x00000200 // FIFO when 0, direct when 1 43 1.12 macallan #define VISFX_FC 0x641040 // Fault Control 44 1.1 macallan #define VISFX_STATUS 0x641400 // zero when idle 45 1.14 macallan /* 46 1.14 macallan * about the FIFO register: 47 1.14 macallan * - on FX4, there are 0x800 FIFO slots, quite a lot 48 1.14 macallan * - based on observation, every register write seems to occupy *two* slots 49 1.14 macallan * - we need to write 0 to VISFX_CONTROL to enable FIFO pacing 50 1.14 macallan * - the FIFO is quite difficult to overrun but things like x11perf copywinwin 51 1.14 macallan * will do it if we're not careful 52 1.14 macallan */ 53 1.5 riastrad #define VISFX_FIFO 0x641440 54 1.12 macallan #define VISFX_FOE 0x920404 // Fragment Operation Enable 55 1.12 macallan #define FOE_TEXTURE 0x00000001 56 1.12 macallan #define FOE_SPECULAR 0x00000002 57 1.12 macallan #define FOE_DEPTHCUE 0x00000004 58 1.12 macallan #define FOE_ALPHATEST 0x00000008 59 1.12 macallan #define FOE_STENCIL 0x00000010 60 1.12 macallan #define FOE_Z_TEST 0x00000020 61 1.12 macallan #define FOE_BLEND_ROP 0x00000040 // IBO is used 62 1.12 macallan #define FOE_DITHER 0x00000080 63 1.12 macallan #define VISFX_IBO 0x921110 // ROP in lowest nibble 64 1.15 macallan #define VISFX_CBR 0x92111c // constant colour for blending 65 1.10 macallan #define VISFX_IAA0 0x921200 // XLUT, 16 entries 66 1.10 macallan #define VISFX_IAA(n) (0x921200 + ((n) << 2)) 67 1.10 macallan #define VISFX_OTR 0x921148 // overlay transparency 68 1.10 macallan 69 1.1 macallan #define VISFX_VRAM_WRITE_MODE 0xa00808 70 1.10 macallan #define VISFX_VRAM_READ_MODE 0xa0080c 71 1.1 macallan #define VISFX_PIXEL_MASK 0xa0082c 72 1.1 macallan #define VISFX_FG_COLOUR 0xa0083c 73 1.1 macallan #define VISFX_BG_COLOUR 0xa00844 74 1.1 macallan #define VISFX_PLANE_MASK 0xa0084c 75 1.6 macallan /* this controls what we see in the FB aperture */ 76 1.6 macallan #define VISFX_APERTURE_ACCESS 0xa00858 77 1.12 macallan #define VISFX_DEPTH_8 0x30 78 1.12 macallan #define VISFX_DEPTH_32 0x50 79 1.13 macallan #define VISFX_RPH 0xa0085c // read prefetch hint 80 1.13 macallan #define VISFX_RPH_RTL 0x80000000 // right-to-left 81 1.13 macallan #define VISFX_RPH_LTR 0x00000000 // left-to-right 82 1.13 macallan 83 1.13 macallan #define VISFX_READ_DATA 0xa41480 84 1.6 macallan 85 1.2 macallan #define VISFX_VRAM_WRITE_DATA_INCRX 0xa60000 86 1.2 macallan #define VISFX_VRAM_WRITE_DATA_INCRY 0xa68000 87 1.2 macallan #define VISFX_VRAM_WRITE_DEST 0xac1000 88 1.12 macallan #define VISFX_TCR 0xac1024 /* throttle control */ 89 1.4 macallan #define VISFX_CLIP_TL 0xac1050 /* clipping rect, top/left */ 90 1.4 macallan #define VISFX_CLIP_WH 0xac1054 /* clipping rect, w/h */ 91 1.1 macallan 92 1.1 macallan #define VISFX_WRITE_MODE_PLAIN 0x02000000 93 1.1 macallan #define VISFX_WRITE_MODE_EXPAND 0x050004c0 94 1.1 macallan #define VISFX_WRITE_MODE_FILL 0x050008c0 95 1.3 macallan #define VISFX_WRITE_MODE_TRANSPARENT 0x00000800 /* bg is tansparent */ 96 1.3 macallan #define VISFX_WRITE_MODE_MASK 0x00000400 /* apply pixel mask */ 97 1.7 macallan /* 0x00000200 - some pattern */ 98 1.7 macallan /* looks like 0x000000c0 enables fb/bg colours to be applied */ 99 1.1 macallan 100 1.2 macallan #define VISFX_READ_MODE_COPY 0x02000400 101 1.2 macallan 102 1.10 macallan #define OTC01 0x00000000 /* one pixel per 32bit write */ 103 1.10 macallan #define OTC04 0x02000000 /* 4 pixels per 32bit write */ 104 1.10 macallan #define OTC32 0x05000000 /* 32 pixels per 32bit write */ 105 1.10 macallan #define BIN8I 0x00000000 /* 8bit indexed */ 106 1.10 macallan #define BIN12I 0x00010000 /* 12bit indexed */ 107 1.10 macallan #define BIN332F 0x00040000 /* R3G3B2 */ 108 1.10 macallan #define BIN8F 0x00070000 /* ARGB8 */ 109 1.10 macallan #define BINapln 0x00110000 /* attribute plane */ 110 1.10 macallan #define BINhost 0x00300000 /* DMA to host */ 111 1.10 macallan #define BUFovl 0x00000000 /* 8bit overlay */ 112 1.10 macallan #define BUFBL 0x00008000 /* back/left */ 113 1.10 macallan #define BUFFL 0x00004000 /* front/left */ 114 1.10 macallan #define BUFBR 0x00002000 /* back/right */ 115 1.10 macallan #define BUFFR 0x00001000 /* front/right */ 116 1.10 macallan 117 1.13 macallan /* attribute table, this only selects depth and CFS */ 118 1.10 macallan #define IAA_8I 0x00000000 /* 8bit CI */ 119 1.10 macallan #define IAA_8F 0x00000070 /* RGB8 */ 120 1.10 macallan #define IAA_CFS0 0x00000000 /* CFS select */ 121 1.10 macallan #define IAA_CFS1 0x00000100 /* CFS 1 etc. */ 122 1.10 macallan 123 1.10 macallan #define OTR_T 0x00010000 /* when set 0 is transparent, otherwise 0xff */ 124 1.10 macallan #define OTR_A 0x00000100 /* always transparent */ 125 1.10 macallan #define OTR_L1 0x00000002 /* transparency controlled by CFS17 */ 126 1.10 macallan #define OTR_L0 0x00000001 /* transparency controlled by CFS16 */ 127 1.10 macallan 128 1.7 macallan /* 129 1.7 macallan * for STI colour change mode: 130 1.7 macallan * set VISFX_FG_COLOUR, VISFX_BG_COLOUR 131 1.7 macallan * set VISFX_VRAM_READ_MODE 0x05000400 132 1.7 macallan * set VISFX_VRAM_WRITE_MODE 0x050000c0 133 1.7 macallan */ 134 1.7 macallan 135 1.2 macallan /* fill */ 136 1.1 macallan #define VISFX_START 0xb3c000 137 1.2 macallan #define VISFX_SIZE 0xb3c808 /* start, FX4 uses 0xb3c908 */ 138 1.2 macallan 139 1.2 macallan /* copy */ 140 1.2 macallan #define VISFX_COPY_SRC 0xb3c010 141 1.2 macallan #define VISFX_COPY_WH 0xb3c008 142 1.2 macallan #define VISFX_COPY_DST 0xb3cc00 143 1.2 macallan /* 144 1.2 macallan * looks like ORing 0x800 to the register address starts a command 145 1.7 macallan * - 0x800 - fill 146 1.7 macallan * - 0xc00 - copy 147 1.7 macallan * 0x100 and 0x200 seem to have functions as well, not sure what though 148 1.7 macallan * for example, the FX4 ROM uses 0xb3c908 to start a rectangle fill, but 149 1.7 macallan * it also works with 0xb3c808 and 0xb3ca08 150 1.7 macallan * same with copy, 0xc00 seems to be what matters, setting 0x100 or 0x200 151 1.7 macallan * doesn't seem to make a difference 152 1.7 macallan * 0x400 or 0x100 by themselves don't start a command either 153 1.2 macallan */ 154 1.1 macallan 155 1.8 macallan /* 156 1.15 macallan * alpha blending operations 157 1.15 macallan * source and destination blend functions are in 0xf0 and 0x0f 158 1.15 macallan * how they're combined is in 0x700 159 1.15 macallan */ 160 1.15 macallan #define IBO_ROP 0 /* ROP in lower 4 bit */ 161 1.15 macallan #define IBO_ADD 0x200 162 1.15 macallan #define IBO_S_MINUS_D 0x400 /* source - dest */ 163 1.15 macallan #define IBO_D_MINUS_S 0x500 /* dest - source */ 164 1.15 macallan #define IBO_MIN 0x600 165 1.15 macallan #define IBO_MAX 0x700 166 1.15 macallan 167 1.16 macallan /* 168 1.16 macallan * here are the blend functions I identified 169 1.16 macallan * apparently the upper byte in 32bit mode is not implemented on FX2/4/6, and 170 1.16 macallan * neither is any blend mode that takes the colour value from CBR 171 1.16 macallan * so no blending with screen-to-screen blits, alpha will always read zero 172 1.16 macallan * the only ways to actually use alpha blending is with fills ( the alpha part 173 1.16 macallan * of the FG register is used ) and BINC writes, or when using constant alpha 174 1.16 macallan */ 175 1.15 macallan #define IBO_ZERO 0 176 1.15 macallan #define IBO_ONE 1 177 1.15 macallan #define IBO_SRC 4 /* src alpha */ 178 1.15 macallan #define IBO_ONE_MINUS_SRC 5 /* 1 - src alpha */ 179 1.15 macallan #define IBO_CBR 14 /* alpha from CBR */ 180 1.15 macallan #define IBO_ONE_MINUS_CBR 15 /* 1 - alpha from CBR */ 181 1.15 macallan 182 1.15 macallan #define SRC(n) ((n) << 4) 183 1.15 macallan #define DST(n) (n) 184 1.15 macallan /* 185 1.14 macallan * use unbuffered space for cursor registers 186 1.8 macallan * The _POS, _INDEX and _DATA registers work exactly like on HCRX 187 1.8 macallan */ 188 1.1 macallan 189 1.13 macallan #define VISFX_CURSOR_POS 0x400000 190 1.8 macallan #define VISFX_CURSOR_ENABLE 0x80000000 191 1.13 macallan #define VISFX_CURSOR_INDEX 0x400004 192 1.13 macallan #define VISFX_CURSOR_DATA 0x400008 193 1.13 macallan #define VISFX_CURSOR_FG 0x40000c 194 1.13 macallan #define VISFX_CURSOR_BG 0x400010 195 1.9 macallan #define VISFX_COLOR_MASK 0x800018 196 1.9 macallan #define VISFX_COLOR_INDEX 0x800020 197 1.9 macallan #define VISFX_COLOR_VALUE 0x800024 198 1.10 macallan #define VISFX_FATTR 0x80003c /* force attribute */ 199 1.10 macallan #define VISFX_MPC 0x80004c 200 1.10 macallan #define MPC_VIDEO_ON 0x0c 201 1.10 macallan #define MPC_VSYNC_OFF 0x02 202 1.10 macallan #define MPC_HSYNC_OFF 0x01 203 1.10 macallan #define VISFX_CFS0 0x800100 /* colour function select */ 204 1.10 macallan #define VISFX_CFS(n) (VISFX_CFS0 + ((n) << 2)) 205 1.10 macallan /* 0 ... 6 for image planes, 7 or bypass, 16 and 17 for overlay */ 206 1.10 macallan #define CFS_CR 0x80 // enable color recovery 207 1.11 macallan #define CFS_332 0x00 // R3G3B2 208 1.11 macallan #define CFS_8I 0x40 // 8bit indexed 209 1.10 macallan #define CFS_8F 0x70 // ARGB8 210 1.10 macallan #define CFS_LUT0 0x00 // use LUT 0 211 1.10 macallan #define CFS_LUT1 0x01 // LUT 1 etc. 212 1.10 macallan #define CFS_BYPASS 0x07 // bypass LUT 213 1.1 macallan 214 1.5 riastrad #endif /* SUMMITREG_H */ 215