1 1.9 andvar /* $NetBSD: mcpciareg.h,v 1.9 2024/06/02 13:28:45 andvar Exp $ */ 2 1.1 mjacob 3 1.1 mjacob /* 4 1.1 mjacob * Copyright (c) 1998 by Matthew Jacob 5 1.1 mjacob * NASA AMES Research Center. 6 1.1 mjacob * All rights reserved. 7 1.1 mjacob * 8 1.1 mjacob * Redistribution and use in source and binary forms, with or without 9 1.1 mjacob * modification, are permitted provided that the following conditions 10 1.1 mjacob * are met: 11 1.1 mjacob * 1. Redistributions of source code must retain the above copyright 12 1.1 mjacob * notice immediately at the beginning of the file, without modification, 13 1.1 mjacob * this list of conditions, and the following disclaimer. 14 1.1 mjacob * 2. Redistributions in binary form must reproduce the above copyright 15 1.1 mjacob * notice, this list of conditions and the following disclaimer in the 16 1.1 mjacob * documentation and/or other materials provided with the distribution. 17 1.1 mjacob * 3. The name of the author may not be used to endorse or promote products 18 1.1 mjacob * derived from this software without specific prior written permission. 19 1.1 mjacob * 20 1.1 mjacob * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21 1.1 mjacob * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 1.1 mjacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 1.1 mjacob * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 24 1.1 mjacob * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 1.1 mjacob * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 1.1 mjacob * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 1.1 mjacob * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 1.1 mjacob * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 1.1 mjacob * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 1.1 mjacob * SUCH DAMAGE. 31 1.1 mjacob */ 32 1.1 mjacob 33 1.1 mjacob /* 34 1.1 mjacob * Taken from: 35 1.1 mjacob * 36 1.1 mjacob * ``RAWHIDE Systems Programmer's Manual, Revision 1.4'' 37 1.1 mjacob */ 38 1.1 mjacob 39 1.1 mjacob #define REGVAL(r) (*(volatile int32_t *)ALPHA_PHYS_TO_K0SEG(r)) 40 1.1 mjacob 41 1.1 mjacob /* 42 1.1 mjacob * There are 4 possible PCI busses per MCBUS. 43 1.1 mjacob * 44 1.1 mjacob * (from mcpcia.h, Digital Unix 4.0E): 45 1.1 mjacob * 46 1.1 mjacob * I/O Space Per PCI Node (8GBytes per) 47 1.1 mjacob * ------------------------------------ 48 1.1 mjacob * (8+x)8 0000 0000 - (8+x)9 FFFF FFFF - I/O Space for PCI0 49 1.1 mjacob * (8+x)A 0000 0000 - (8+x)B FFFF FFFF - I/O Space for PCI1 50 1.1 mjacob * (8+x)C 0000 0000 - (8+x)D FFFF FFFF - I/O Space for PCI2 51 1.1 mjacob * (8+x)E 0000 0000 - (8+x)F FFFF FFFF - I/O Space for PCI3 52 1.1 mjacob * 53 1.1 mjacob * CPU to PCI Address Mapping: 54 1.1 mjacob * --------------------------- 55 1.1 mjacob * 56 1.1 mjacob * +---+-------+-------+--+--+--+--+--+--+---------------+----------+-----+ 57 1.1 mjacob * | 1 | GID | MID | | | | | | | Byte Aligned | Byte Len | Zero| 58 1.1 mjacob * | | | | | | | | | | I/O Address | Field | | 59 1.1 mjacob * +---+-------+-------+--+--+--+--+--+--+---------------+----------+-----+ 60 1.1 mjacob * 39 38 36 35 33 32 31 30 29 28 27 26 5 4 3 2 0 61 1.1 mjacob * 62 1.1 mjacob * <39> - I/O Select (Always 1 for direct I/O access) 63 1.1 mjacob * 64 1.1 mjacob * <38-36> - Global Bus slot # (MCBUS #) 65 1.1 mjacob * GID slot #0->7 (MCBUS #0->7) 66 1.1 mjacob * 67 1.1 mjacob * <35-33> - MCBUS Slot # 68 1.1 mjacob * MCBUS slot 0->7 69 1.1 mjacob * 70 1.1 mjacob * <32-27> - PCI Address Space 71 1.1 mjacob * 0.xxxxx = Sparse Memory Space ( 4GB on MCBUS; 128MB on PCI) 72 1.1 mjacob * 1.0xxxx = Dense Memory Space ( 2GB on MCBUS; 2GB on PCI) 73 1.1 mjacob * 1.10xxx = Sparse IO Space ( 1GB on MCBUS; 32MB on PCI) 74 1.1 mjacob * 1.110xx = Sparse Config Space (512MB on MCBUS; 16MB on PCI) 75 1.1 mjacob * 1.1110x = PCI Bridge CSR Space (256MB on MCBUS) -- Sparse-mapped! 76 1.1 mjacob * 1.11110 = Interrupt Acknowledge (128MB on MCBUS) 77 1.1 mjacob * 1.11111 = Unused (128MB on MCBUS) 78 1.1 mjacob * 79 1.1 mjacob * ------------------------------------------------------------ 80 1.5 wiz * CPU to PCI Address Mapping for MCBUS-PCIy Bridge on MCBUS x: 81 1.8 matt * ------------------------------------------------------------ 82 1.8 matt * 83 1.1 mjacob * CPU Address Range PCI Address Range PCI Address Space 84 1.1 mjacob * ------------------------ --------------------- ------------------------ 85 1.1 mjacob * (8+x)(8+y*2).0000.0000 0000.0000 - 00FF.FFFF PCIy Sparse Memory Space 86 1.1 mjacob * - (8+x)(8+y*2).1FFF.FFFF (fixed, lower 16MB) 87 1.8 matt * 88 1.1 mjacob * (8+x)(8+y*2).2000.0000 0100.0000 - 07FF.FFFF PCIy Sparse Memory Space 89 1.1 mjacob * - (8+x)(8+y*2).FFFF.FFFF (variable, offset = 0) 90 1.8 matt * 91 1.1 mjacob * (8+x)(9+y*2).0000.0000 0000.0000 - 7FFF.FFFF PCIy Dense Memory Space 92 1.1 mjacob * - (8+x)(9+y*2).7FFF.FFFF or 8000.0000 - FFFF.FFFF if HAE_DENSE_MEM = 1 93 1.8 matt * 94 1.1 mjacob * (8+x)(9+y*2).8000.0000 0000.0000 - 0000.FFFF PCIy Sparse IO Space 95 1.1 mjacob * - (8+x)(9+y*2).801F.FFFF (fixed, lower 64K) 96 1.8 matt * 97 1.1 mjacob * (8+x)(9+y*2).8020.0000 0001.0000 - 01FF.FFFF PCIy Sparse IO Space 98 1.1 mjacob * - (8+x)(9+y*2).BFFF.FFFF (variable, offset = 0) 99 1.8 matt * 100 1.1 mjacob * (8+x)(9+y*2).C000.0000 0000.0000 - 0FFF.FFFF PCIy Config Space (16MB) 101 1.1 mjacob * - (8+x)(9+y*2).DFFF.FFFF 102 1.8 matt * 103 1.1 mjacob * (8+x)(9+y*2).E000.0000 N/A PCIy-Bridge CSR Space 104 1.1 mjacob * (8MB) 105 1.8 matt * - (8+x)(9+y*2).EFFF.FFFF 106 1.1 mjacob * 107 1.1 mjacob * (8+x)(9+y*2).F000.0000 N/A Unused 108 1.1 mjacob * - (8+x)(9+y*2).F000.3EFF 109 1.1 mjacob * 110 1.1 mjacob * (8+x)(9+y*2).F000.3F00, N/A PCIy Interrupt ACK0 111 1.9 andvar * (8+x)(9+y*2).F000.3F40 PCIy Interrupt ACK1 112 1.1 mjacob * 113 1.1 mjacob * (8+x)(9+y*2).F000.3F80 N/A Unused 114 1.1 mjacob * - (8+x)(9+y*2).FFFF.FFFF 115 1.1 mjacob * 116 1.1 mjacob */ 117 1.1 mjacob 118 1.8 matt /* 119 1.1 mjacob * MC-PCI Bus Bridge CSRs 120 1.8 matt * 121 1.1 mjacob * Address Map Overview: 122 1.1 mjacob * 123 1.1 mjacob * Offset Selected Space 124 1.1 mjacob * ---------------- ------------------------------------------------- 125 1.1 mjacob * 0x00000000 General config, control, diag, error logging regs. 126 1.1 mjacob * 0x00001000 PCI Error Status 127 1.1 mjacob * 0x00001300 PCI Scatter/Gather Regs. 128 1.8 matt * 0x00001800 Scatter/Gather TLB Regs. 129 1.1 mjacob * 0x00004000 MDPA Error Status & Diagnostic Control 130 1.1 mjacob * 0x00008000 MDPB Error Status & Diagnostic Control 131 1.1 mjacob * 0x000E0000 - Flash Rom Space -- 132 1.1 mjacob * 0x000FFFFF offset address into PCI Dense Mem Space 133 1.1 mjacob * 0x10003F00 Interrupt Acknowledge 134 1.8 matt * 135 1.1 mjacob */ 136 1.1 mjacob 137 1.1 mjacob 138 1.1 mjacob /* 139 1.1 mjacob * Address Space Cookies 140 1.1 mjacob */ 141 1.1 mjacob 142 1.7 drochner #define MCPCIA_PCI_SPARSE 0x000000000UL 143 1.7 drochner #define MCPCIA_PCI_DENSE 0x100000000UL 144 1.7 drochner #define MCPCIA_PCI_IOSPACE 0x180000000UL 145 1.7 drochner #define MCPCIA_PCI_CONF 0x1C0000000UL 146 1.7 drochner #define MCPCIA_PCI_BRIDGE 0x1E0000000UL 147 1.7 drochner #define MCPCIA_PCI_IACK 0x1F0000000UL 148 1.1 mjacob 149 1.1 mjacob /* 150 1.1 mjacob * MCPCIA Bus Bridge Registers 151 1.1 mjacob * 152 1.1 mjacob * These are offsets that don't include GBUS, MID, or address space offsets. 153 1.1 mjacob */ 154 1.1 mjacob 155 1.1 mjacob #define _MCPCIA_PCI_REV 0x000000000 /* PCI Revision Register (R) */ 156 1.1 mjacob #define _MCPCIA_WHOAMI 0x000000040 /* PCI Who Am I (R) */ 157 1.1 mjacob #define _MCPCIA_PCI_LAT 0x000000080 /* PCI Latency Timer (RW) */ 158 1.1 mjacob #define _MCPCIA_CAP_CTRL 0x000000100 /* PCI Bridge Control (RW) */ 159 1.1 mjacob #define _MCPCIA_HAE_MEM 0x000000400 /* PCI HAE Sparse Memory (RW) */ 160 1.1 mjacob #define _MCPCIA_HAE_IO 0x000000440 /* PCI HAE Sparse I/O (RW) */ 161 1.1 mjacob #define _MCPCIA_IACK_SC 0x000000480 /* PCI Special Cycle Ack */ 162 1.1 mjacob #define _MCPCIA_HAE_DENSE 0x0000004C0 /* PCI HAE Dense Memory (RW) */ 163 1.1 mjacob 164 1.1 mjacob #define _MCPCIA_INT_CTL 0x000000500 /* PCI Interrupt Control */ 165 1.1 mjacob #define _MCPCIA_INT_REQ 0x000000540 /* PCI Interrupt Request */ 166 1.1 mjacob #define _MCPCIA_INT_TARG 0x000000580 /* PCI Int Tgt Devices */ 167 1.1 mjacob #define _MCPCIA_INT_ADR 0x0000005C0 /* PCI Int Tgt Address */ 168 1.1 mjacob #define _MCPCIA_INT_ADR_EXT 0x000000600 /* PCI Int Tgt Addr Ext */ 169 1.1 mjacob #define _MCPCIA_INT_MASK0 0x000000640 /* PCI Int Mask 0 */ 170 1.1 mjacob #define _MCPCIA_INT_MASK1 0x000000680 /* PCI Int Mask 1 */ 171 1.1 mjacob 172 1.1 mjacob #define _MCPCIA_INT_ACK0 0x100003F00 /* PCI Int Ack 0 */ 173 1.1 mjacob #define _MCPCIA_INT_ACK1 0x100003F40 /* PCI Int Ack 1 */ 174 1.1 mjacob 175 1.1 mjacob #define _MCPCIA_PERF_MON 0x000000300 /* PCI Perf Monitor */ 176 1.1 mjacob #define _MCPCIA_PERF_CONT 0x000000340 /* PCI Perf Monitor Control */ 177 1.1 mjacob 178 1.1 mjacob #define _MCPCIA_CAP_DIAG 0x000000700 /* MC-PCI Diagnostic Control */ 179 1.1 mjacob #define _MCPCIA_SCRATCH0 0x000000740 /* Diag General */ 180 1.1 mjacob #define _MCPCIA_SCRATCH1 0x000000780 /* Diag General */ 181 1.1 mjacob #define _MCPCIA_TOM 0x0000007C0 /* Top Of Memory */ 182 1.1 mjacob #define _MCPCIA_MC_ERR0 0x000000800 /* MC Err Info 0 */ 183 1.1 mjacob #define _MCPCIA_MC_ERR1 0x000000840 /* MC Err Info 1 */ 184 1.1 mjacob #define _MCPCIA_CAP_ERR 0x000000880 /* CAP Error Register */ 185 1.1 mjacob 186 1.1 mjacob #define _MCPCIA_PCI_ERR1 0x000001040 /* PCI Error Status */ 187 1.1 mjacob 188 1.1 mjacob #define _MCPCIA_MDPA_STAT 0x000004000 /* MDPA Status */ 189 1.1 mjacob #define _MCPCIA_MDPA_SYN 0x000004040 /* MDPA Syndrome */ 190 1.1 mjacob #define _MCPCIA_MDPA_DIAG 0x000004080 /* Diag Check MDPA */ 191 1.1 mjacob 192 1.1 mjacob #define _MCPCIA_MDPB_STAT 0x000008000 /* MDPB Status */ 193 1.1 mjacob #define _MCPCIA_MDPB_SYN 0x000008040 /* MDPB Syndrome */ 194 1.1 mjacob #define _MCPCIA_MDPB_DIAG 0x000008080 /* Diag Check MDPB */ 195 1.1 mjacob 196 1.1 mjacob #define _MCPCIA_SG_TBIA 0x000001300 /* Scatter/Gather TBIA */ 197 1.1 mjacob #define _MCPCIA_HBASE 0x000001340 /* PC "Hole" Compatibility */ 198 1.1 mjacob #define _MCPCIA_W0_BASE 0x000001400 /* Window Base 0 */ 199 1.1 mjacob #define _MCPCIA_W0_MASK 0x000001440 /* Window Mask 0 */ 200 1.1 mjacob #define _MCPCIA_T0_BASE 0x000001480 /* Translated Base 0 */ 201 1.1 mjacob #define _MCPCIA_W1_BASE 0x000001500 /* Window Base 1 */ 202 1.1 mjacob #define _MCPCIA_W1_MASK 0x000001540 /* Window Mask 1 */ 203 1.1 mjacob #define _MCPCIA_T1_BASE 0x000001580 /* Translated Base 1 */ 204 1.1 mjacob #define _MCPCIA_W2_BASE 0x000001600 /* Window Base 2 */ 205 1.1 mjacob #define _MCPCIA_W2_MASK 0x000001640 /* Window Mask 2 */ 206 1.1 mjacob #define _MCPCIA_T2_BASE 0x000001680 /* Translated Base 2 */ 207 1.1 mjacob #define _MCPCIA_W3_BASE 0x000001700 /* Window Base 3 */ 208 1.1 mjacob #define _MCPCIA_W3_MASK 0x000001740 /* Window Mask 3 */ 209 1.1 mjacob #define _MCPCIA_T3_BASE 0x000001780 /* Translated Base 3 */ 210 1.1 mjacob #define _MCPCIA_W_DAC 0x0000017C0 /* Window DAC Base */ 211 1.1 mjacob 212 1.1 mjacob 213 1.1 mjacob /* 214 1.1 mjacob * Handier defines- uses precalculated offset in softc. 215 1.1 mjacob */ 216 1.3 thorpej #define _SYBRIDGE(ccp) ((ccp)->cc_sysbase | MCPCIA_PCI_BRIDGE) 217 1.1 mjacob 218 1.3 thorpej #define MCPCIA_PCI_REV(ccp) (_SYBRIDGE(ccp) | _MCPCIA_PCI_REV) 219 1.3 thorpej #define MCPCIA_WHOAMI(ccp) (_SYBRIDGE(ccp) | _MCPCIA_WHOAMI) 220 1.3 thorpej #define MCPCIA_PCI_LAT(ccp) (_SYBRIDGE(ccp) | _MCPCIA_PCI_LAT) 221 1.3 thorpej #define MCPCIA_CAP_CTRL(ccp) (_SYBRIDGE(ccp) | _MCPCIA_CAP_CTRL) 222 1.3 thorpej #define MCPCIA_HAE_MEM(ccp) (_SYBRIDGE(ccp) | _MCPCIA_HAE_MEM) 223 1.3 thorpej #define MCPCIA_HAE_IO(ccp) (_SYBRIDGE(ccp) | _MCPCIA_HAE_IO) 224 1.3 thorpej #define MCPCIA_IACK_SC(ccp) (_SYBRIDGE(ccp) | _MCPCIA_IACK_SC) 225 1.3 thorpej #define MCPCIA_HAE_DENSE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_HAE_DENSE) 226 1.3 thorpej #define MCPCIA_INT_CTL(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_CTL) 227 1.3 thorpej #define MCPCIA_INT_REQ(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_REQ) 228 1.3 thorpej #define MCPCIA_INT_TARG(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_TARG) 229 1.3 thorpej #define MCPCIA_INT_ADR(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_ADR) 230 1.3 thorpej #define MCPCIA_INT_ADR_EXT(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_ADR_EXT) 231 1.3 thorpej #define MCPCIA_INT_MASK0(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_MASK0) 232 1.3 thorpej #define MCPCIA_INT_MASK1(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_MASK1) 233 1.3 thorpej #define MCPCIA_INT_ACK0(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_ACK0) 234 1.3 thorpej #define MCPCIA_INT_ACK1(ccp) (_SYBRIDGE(ccp) | _MCPCIA_INT_ACK1) 235 1.3 thorpej #define MCPCIA_PERF_MON(ccp) (_SYBRIDGE(ccp) | _MCPCIA_PERF_MON) 236 1.3 thorpej #define MCPCIA_PERF_CONT(ccp) (_SYBRIDGE(ccp) | _MCPCIA_PERF_CONT) 237 1.3 thorpej #define MCPCIA_CAP_DIAG(ccp) (_SYBRIDGE(ccp) | _MCPCIA_CAP_DIAG) 238 1.3 thorpej #define MCPCIA_SCRATCH0(ccp) (_SYBRIDGE(ccp) | _MCPCIA_SCRATCH0) 239 1.3 thorpej #define MCPCIA_SCRATCH1(ccp) (_SYBRIDGE(ccp) | _MCPCIA_SCRATCH1) 240 1.3 thorpej #define MCPCIA_TOM(ccp) (_SYBRIDGE(ccp) | _MCPCIA_TOM) 241 1.3 thorpej #define MCPCIA_MC_ERR0(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MC_ERR0) 242 1.3 thorpej #define MCPCIA_MC_ERR1(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MC_ERR1) 243 1.3 thorpej #define MCPCIA_CAP_ERR(ccp) (_SYBRIDGE(ccp) | _MCPCIA_CAP_ERR) 244 1.3 thorpej #define MCPCIA_PCI_ERR1(ccp) (_SYBRIDGE(ccp) | _MCPCIA_PCI_ERR1) 245 1.3 thorpej #define MCPCIA_MDPA_STAT(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPA_STAT) 246 1.3 thorpej #define MCPCIA_MDPA_SYN(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPA_SYN) 247 1.3 thorpej #define MCPCIA_MDPA_DIAG(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPA_DIAG) 248 1.3 thorpej #define MCPCIA_MDPB_STAT(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPB_STAT) 249 1.3 thorpej #define MCPCIA_MDPB_SYN(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPB_SYN) 250 1.3 thorpej #define MCPCIA_MDPB_DIAG(ccp) (_SYBRIDGE(ccp) | _MCPCIA_MDPB_DIAG) 251 1.3 thorpej #define MCPCIA_SG_TBIA(ccp) (_SYBRIDGE(ccp) | _MCPCIA_SG_TBIA) 252 1.3 thorpej #define MCPCIA_HBASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_HBASE) 253 1.3 thorpej #define MCPCIA_W0_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W0_BASE) 254 1.3 thorpej #define MCPCIA_W0_MASK(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W0_MASK) 255 1.3 thorpej #define MCPCIA_T0_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_T0_BASE) 256 1.3 thorpej #define MCPCIA_W1_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W1_BASE) 257 1.3 thorpej #define MCPCIA_W1_MASK(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W1_MASK) 258 1.3 thorpej #define MCPCIA_T1_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_T1_BASE) 259 1.3 thorpej #define MCPCIA_W2_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W2_BASE) 260 1.3 thorpej #define MCPCIA_W2_MASK(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W2_MASK) 261 1.3 thorpej #define MCPCIA_T2_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_T2_BASE) 262 1.3 thorpej #define MCPCIA_W3_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W3_BASE) 263 1.3 thorpej #define MCPCIA_W3_MASK(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W3_MASK) 264 1.3 thorpej #define MCPCIA_T3_BASE(ccp) (_SYBRIDGE(ccp) | _MCPCIA_T3_BASE) 265 1.3 thorpej #define MCPCIA_W_DAC(ccp) (_SYBRIDGE(ccp) | _MCPCIA_W_DAC) 266 1.1 mjacob 267 1.1 mjacob /* 268 1.2 mjacob * This is here for what error handling will get as a collected subpacket. 269 1.2 mjacob */ 270 1.2 mjacob 271 1.2 mjacob struct mcpcia_iodsnap { 272 1.8 matt uint64_t base_addr; 273 1.8 matt uint32_t whami; 274 1.8 matt uint32_t rsvd0; 275 1.8 matt uint32_t pci_rev; 276 1.8 matt uint32_t cap_ctrl; 277 1.8 matt uint32_t hae_mem; 278 1.8 matt uint32_t hae_io; 279 1.8 matt uint32_t int_ctl; 280 1.8 matt uint32_t int_reg; 281 1.8 matt uint32_t int_mask0; 282 1.8 matt uint32_t int_mask1; 283 1.8 matt uint32_t mc_err0; 284 1.8 matt uint32_t mc_err1; 285 1.8 matt uint32_t cap_err; 286 1.8 matt uint32_t sys_env; 287 1.8 matt uint32_t pci_err1; 288 1.8 matt uint32_t mdpa_stat; 289 1.8 matt uint32_t mdpa_syn; 290 1.8 matt uint32_t mdpb_stat; 291 1.8 matt uint32_t mdpb_syn; 292 1.8 matt uint32_t rsvd2; 293 1.8 matt uint32_t rsvd3; 294 1.8 matt uint32_t rsvd4; 295 1.2 mjacob }; 296 1.2 mjacob 297 1.2 mjacob /* 298 1.1 mjacob * PCI_REV Register definitions 299 1.1 mjacob */ 300 1.1 mjacob #define CAP_REV(reg) ((reg) & 0xf) 301 1.1 mjacob #define HORSE_REV(reg) (((reg) >> 4) & 0xf) 302 1.1 mjacob #define SADDLE_REV(reg) (((reg) >> 8) & 0xf) 303 1.1 mjacob #define SADDLE_TYPE(reg) (((reg) >> 12) & 0x3) 304 1.1 mjacob #define EISA_PRESENT(reg) ((reg) & (1 << 15)) 305 1.2 mjacob #define IS_MCPCIA_MAGIC(reg) (((reg) & 0xffff0000) == 0x6000000) 306 1.1 mjacob 307 1.1 mjacob 308 1.1 mjacob /* 309 1.1 mjacob * WHOAMI Register definitions 310 1.1 mjacob * 311 1.1 mjacob * The Device ID is an echo of the MID of the CPU reading this register- 312 1.1 mjacob * cheezy way to figure out who you are (ask someone else!). 313 1.1 mjacob */ 314 1.1 mjacob #define MCBUS_CPU_MID(x) ((x) & 0x7) 315 1.1 mjacob #define MCBUS_CPU_INFO(x) (((x) >> 6) & 0xff) 316 1.1 mjacob #define CPU_Fill_Err 0x80 317 1.1 mjacob #define CPU_DTAG_Perr 0x40 318 1.1 mjacob #define CPU_RevMask 0x38 319 1.1 mjacob #define CPU_RevShift 3 320 1.1 mjacob #define CPU_BCacheMask 0x3 321 1.1 mjacob #define CPU_BCache_0MB 0 322 1.1 mjacob #define CPU_BCache_1MB 1 323 1.1 mjacob #define CPU_BCache_2MB 2 324 1.1 mjacob #define CPU_BCache_4MB 3 325 1.1 mjacob 326 1.1 mjacob /* 327 1.1 mjacob * PCI Latency Register Definitions 328 1.1 mjacob */ 329 1.1 mjacob #define PCI_LAT_SHIFT 8 /* it's in the 2nd byte. */ 330 1.1 mjacob 331 1.1 mjacob /* 332 1.4 wiz * CAP Control Register Definitions 333 1.1 mjacob */ 334 1.1 mjacob #define CAP_LED_ON 0x00000001 /* Selftest LED passed */ 335 1.1 mjacob #define CAP_EV56_BW_EN 0x00000002 /* BW Enables (EV56, EV6 only) */ 336 1.1 mjacob #define CAP_DLY_RD_EN 0x00000010 /* PCI Delayed Reads Enabled */ 337 1.1 mjacob #define CAP_MEM_EN 0x00000020 /* Respond to PCI transactions */ 338 1.1 mjacob #define CAP_REQ64_EN 0x00000040 /* Request 64 bit data transactions */ 339 1.1 mjacob #define CAP_ACK64_EN 0x00000080 /* Respond to 64 bit data "" */ 340 1.1 mjacob #define CAP_ADR_PAR_EN 0x00000100 /* Check PCI address Parity */ 341 1.1 mjacob #define CAP_MC_CA_PAR 0x00000200 /* Check MC bus CMD/Address Parity */ 342 1.1 mjacob #define CAP_MC_NXM_EN 0x00000400 /* Check for MC NXM */ 343 1.1 mjacob #define CAP_BUS_MON 0x00000800 /* Check for PCI errs (as bystander) */ 344 1.1 mjacob /* bits 19:16 control number of pending write transactions */ 345 1.1 mjacob #define SHORT 0 346 1.1 mjacob #define MED 1 347 1.1 mjacob #define LONG 2 348 1.1 mjacob #define CAP_MEMRD_PREFETCH_SHIFT 20 349 1.1 mjacob #define CAP_MEMRDLN_PREFETCH_SHIFT 22 350 1.1 mjacob #define CAP_MEMRDMULT_PREFETCH_SHIFT 24 351 1.1 mjacob #define CAP_PARTIAL_WRITE (1 << 26) 352 1.1 mjacob 353 1.1 mjacob #define CAP_ARB_BPRI 0x00000000 /* Bridge Priority Arb */ 354 1.1 mjacob #define CAP_ARB_RROBIN 0x40000000 /* "" Round Robin */ 355 1.1 mjacob #define CAP_ARB_RROBIN1 0x80000000 /* "" Round Robin #1 */ 356 1.2 mjacob 357 1.2 mjacob /* 358 1.2 mjacob * Diagnostic Register Bits 359 1.2 mjacob */ 360 1.2 mjacob /* CAP_DIAG register */ 361 1.2 mjacob #define CAP_DIAG_PCIRESET 0x1 /* 362 1.2 mjacob * WriteOnly. Assert 1 for 100usec min., 363 1.2 mjacob * then write zero. NOTE: deadlocks 364 1.2 mjacob * exist in h/w if anything but this 365 1.2 mjacob * register is accessed while reset 366 1.2 mjacob * is asserted. 367 1.2 mjacob */ 368 1.2 mjacob #define CAP_DIAG_MC_ADRPE (1<<30) /* Invert MC Bus Address/Parity */ 369 1.2 mjacob #define CAP_DIAG_PCI_ADRPE (1<<31) /* Force bad PCI parity (low 32) */ 370 1.2 mjacob 371 1.2 mjacob /* MDPA_DIAG or MDPB_DIAG registers */ 372 1.2 mjacob #define MDPX_ECC_ENA (1<<28) /* Enable ECC on MC Bus (default 1) */ 373 1.2 mjacob #define MDPX_PAR_ENA (1<<29) /* Enable Parity on PCI (default 0) */ 374 1.2 mjacob #define MDPX_DIAG_FPE_PCI (1<<30) /* Force PCI parity error */ 375 1.2 mjacob #define MDPX_DIAG_USE_CHK (1<<31) /* 376 1.2 mjacob * When set, DMA write cycles use the 377 1.2 mjacob * value in the low 8 bits of this 378 1.2 mjacob * register (MDPA or MDPB) as ECC 379 1.2 mjacob * sent onto main memory. 380 1.2 mjacob */ 381 1.1 mjacob 382 1.1 mjacob /* 383 1.1 mjacob * Interrupt Specific bits... 384 1.1 mjacob * 385 1.1 mjacob * Mostly we don't have to mess with any of the interrupt specific registers 386 1.1 mjacob * as the SRM has set most of this pretty complex stuff up for us. 387 1.1 mjacob * 388 1.1 mjacob * However, to enable specific interrupts, we need to set some bits 389 1.1 mjacob * in imask0 if we want to have them vectored to PALcode for appropriate 390 1.1 mjacob * dispatch. 391 1.1 mjacob */ 392 1.1 mjacob 393 1.1 mjacob /* 394 1.1 mjacob * bits 0-15 correspond to 4 slots (time 4 buspins) for each PCI bus. 395 1.1 mjacob * bit 16 is the NCR810 onboard SCSI interrupt. 396 1.1 mjacob * bits 19-20 are reserved. 397 1.1 mjacob */ 398 1.1 mjacob 399 1.1 mjacob #define MCPCIA_I2C_CTRL_INTR (1<<17) 400 1.1 mjacob #define MCPCIA_I2C_CTRL_BUS_ERR (1<<18) 401 1.1 mjacob 402 1.1 mjacob #define MCPCIA_8259_NMI_INTR (1<<21) 403 1.1 mjacob #define MCPCIA_SOFT_ERR_INTR (1<<22) 404 1.1 mjacob #define MCPCIA_HARD_ERR_INTR (1<<23) 405 1.1 mjacob 406 1.1 mjacob #ifdef YET 407 1.1 mjacob #define MCPCIA_GEN_IENABL \ 408 1.1 mjacob (MCPCIA_I2C_CTRL_BUS_ERR|MCPCIA_SOFT_ERR_INTR|MCPCIA_HARD_ERR_INTR) 409 1.1 mjacob #else 410 1.1 mjacob #define MCPCIA_GEN_IENABL \ 411 1.1 mjacob (MCPCIA_SOFT_ERR_INTR|MCPCIA_HARD_ERR_INTR) 412 1.1 mjacob #endif 413 1.1 mjacob 414 1.1 mjacob /* 415 1.1 mjacob * DMA Address Specific bits... 416 1.1 mjacob */ 417 1.1 mjacob 418 1.1 mjacob #define MCPCIA_WBASE_EN 0x1 419 1.1 mjacob #define MCPCIA_WBASE_SG 0x2 420 1.1 mjacob #define MCPCIA_WBASE_DAC 0x8 421 1.1 mjacob #define MCPCIA_WBASE_BSHIFT 20 422 1.1 mjacob 423 1.1 mjacob #define MCPCIA_WMASK_1M 0x00000000 424 1.1 mjacob #define MCPCIA_WMASK_2M 0x00100000 425 1.1 mjacob #define MCPCIA_WMASK_4M 0x00300000 426 1.1 mjacob #define MCPCIA_WMASK_8M 0x00700000 427 1.1 mjacob #define MCPCIA_WMASK_16M 0x00f00000 428 1.1 mjacob #define MCPCIA_WMASK_32M 0x01f00000 429 1.1 mjacob #define MCPCIA_WMASK_64M 0x03f00000 430 1.1 mjacob #define MCPCIA_WMASK_128M 0x07f00000 431 1.1 mjacob #define MCPCIA_WMASK_256M 0x0ff00000 432 1.1 mjacob #define MCPCIA_WMASK_512M 0x1ff00000 433 1.1 mjacob #define MCPCIA_WMASK_1G 0x3ff00000 434 1.1 mjacob #define MCPCIA_WMASK_2G 0x7ff00000 435 1.1 mjacob #define MCPCIA_WMASK_4G 0xfff00000 436 1.1 mjacob 437 1.1 mjacob /* 438 1.1 mjacob * The WBASEX register contains bits 39:10 of a physical address 439 1.1 mjacob * shifted to bits 31:2 of this 32 bit register. Namely, shifted 440 1.1 mjacob * right by 8 bits. 441 1.1 mjacob */ 442 1.1 mjacob #define MCPCIA_TBASEX_SHIFT 8 443