1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2004 John Birrell 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 /* AMD Elan SC520 Memory Mapped Configuration Region (MMCR). 30 * 31 * The layout of this structure is documented by AMD in the Elan SC520 32 * Microcontroller Register Set Manual. The field names match those 33 * described in that document. The overall structure size must be 4096 34 * bytes. Ignore fields with the 'pad' prefix - they are only present for 35 * alignment purposes. 36 * 37 * $FreeBSD$ 38 */ 39 40 #ifndef _MACHINE_ELAN_MMCR_H_ 41 #define _MACHINE_ELAN_MMCR_H_ 1 42 43 struct elan_mmcr { 44 /* CPU */ 45 u_int16_t REVID; 46 u_int8_t CPUCTL; 47 u_int8_t pad_0x003[0xd]; 48 49 /* SDRAM Controller */ 50 u_int16_t DRCCTL; 51 u_int16_t DRCTMCTL; 52 u_int16_t DRCCFG; 53 u_int16_t DRCBENDADR; 54 u_int8_t pad_0x01a[0x6]; 55 u_int8_t ECCCTL; 56 u_int8_t ECCSTA; 57 u_int8_t ECCCKBPOS; 58 u_int8_t ECCCKTEST; 59 u_int32_t ECCSBADD; 60 u_int32_t ECCMBADD; 61 u_int8_t pad_0x02c[0x14]; 62 63 /* SDRAM Buffer */ 64 u_int8_t DBCTL; 65 u_int8_t pad_0x041[0xf]; 66 67 /* ROM/Flash Controller */ 68 u_int16_t BOOTCSCTL; 69 u_int8_t pad_0x052[0x2]; 70 u_int16_t ROMCS1CTL; 71 u_int16_t ROMCS2CTL; 72 u_int8_t pad_0x058[0x8]; 73 74 /* PCI Bus Host Bridge */ 75 u_int16_t HBCTL; 76 u_int16_t HBTGTIRQCTL; 77 u_int16_t HBTGTIRQSTA; 78 u_int16_t HBMSTIRQCTL; 79 u_int16_t HBMSTIRQSTA; 80 u_int8_t pad_0x06a[0x2]; 81 u_int32_t MSTINTADD; 82 83 /* System Arbitration */ 84 u_int8_t SYSARBCTL; 85 u_int8_t PCIARBSTA; 86 u_int16_t SYSARBMENB; 87 u_int32_t ARBPRICTL; 88 u_int8_t pad_0x078[0x8]; 89 90 /* System Address Mapping */ 91 u_int32_t ADDDECCTL; 92 u_int32_t WPVSTA; 93 u_int32_t PAR0; 94 u_int32_t PAR1; 95 u_int32_t PAR2; 96 u_int32_t PAR3; 97 u_int32_t PAR4; 98 u_int32_t PAR5; 99 u_int32_t PAR6; 100 u_int32_t PAR7; 101 u_int32_t PAR8; 102 u_int32_t PAR9; 103 u_int32_t PAR10; 104 u_int32_t PAR11; 105 u_int32_t PAR12; 106 u_int32_t PAR13; 107 u_int32_t PAR14; 108 u_int32_t PAR15; 109 u_int8_t pad_0x0c8[0xb38]; 110 111 /* GP Bus Controller */ 112 u_int8_t GPECHO; 113 u_int8_t GPCSDW; 114 u_int16_t GPCSQUAL; 115 u_int8_t pad_0xc04[0x4]; 116 u_int8_t GPCSRT; 117 u_int8_t GPCSPW; 118 u_int8_t GPCSOFF; 119 u_int8_t GPRDW; 120 u_int8_t GPRDOFF; 121 u_int8_t GPWRW; 122 u_int8_t GPWROFF; 123 u_int8_t GPALEW; 124 u_int8_t GPALEOFF; 125 u_int8_t pad_0xc11[0xf]; 126 127 /* Programmable Input/Output */ 128 u_int16_t PIOPFS15_0; 129 u_int16_t PIOPFS31_16; 130 u_int8_t CSPFS; 131 u_int8_t pad_0xc25; 132 u_int8_t CLKSEL; 133 u_int8_t pad_0xc27; 134 u_int16_t DSCTL; 135 u_int16_t PIODIR15_0; 136 u_int16_t PIODIR31_16; 137 u_int8_t pad_0xc2e[0x2]; 138 u_int16_t PIODATA15_0; 139 u_int16_t PIODATA31_16; 140 u_int16_t PIOSET15_0; 141 u_int16_t PIOSET31_16; 142 u_int16_t PIOCLR15_0; 143 u_int16_t PIOCLR31_16; 144 u_int8_t pad_0xc3c[0x24]; 145 146 /* Software Timer */ 147 u_int16_t SWTMRMILLI; 148 u_int16_t SWTMRMICRO; 149 u_int8_t SWTMRCFG; 150 u_int8_t pad_0xc65[0xb]; 151 152 /* General-Purpose Timers */ 153 u_int8_t GPTMRSTA; 154 u_int8_t pad_0xc71; 155 u_int16_t GPTMR0CTL; 156 u_int16_t GPTMR0CNT; 157 u_int16_t GPTMR0MAXCMPA; 158 u_int16_t GPTMR0MAXCMPB; 159 u_int16_t GPTMR1CTL; 160 u_int16_t GPTMR1CNT; 161 u_int16_t GPTMR1MAXCMPA; 162 u_int16_t GPTMR1MAXCMPB; 163 u_int16_t GPTMR2CTL; 164 u_int16_t GPTMR2CNT; 165 u_int8_t pad_0xc86[0x8]; 166 u_int16_t GPTMR2MAXCMPA; 167 u_int8_t pad_0xc90[0x20]; 168 169 /* Watchdog Timer */ 170 u_int16_t WDTMRCTL; 171 u_int16_t WDTMRCNTL; 172 u_int16_t WDTMRCNTH; 173 u_int8_t pad_0xcb6[0xa]; 174 175 /* UART Serial Ports */ 176 u_int8_t UART1CTL; 177 u_int8_t UART1STA; 178 u_int8_t UART1FCRSHAD; 179 u_int8_t pad_0xcc3; 180 u_int8_t UART2CTL; 181 u_int8_t UART2STA; 182 u_int8_t UART2FCRSHAD; 183 u_int8_t pad_0xcc7[0x9]; 184 185 /* Synchronous Serial Interface */ 186 u_int8_t SSICTL; 187 u_int8_t SSIXMIT; 188 u_int8_t SSICMD; 189 u_int8_t SSISTA; 190 u_int8_t SSIRCV; 191 u_int8_t pad_0xcd5[0x2b]; 192 193 /* Programmable Interrupt Controller */ 194 u_int8_t PICICR; 195 u_int8_t pad_0xd01; 196 u_int8_t MPICMODE; 197 u_int8_t SL1PICMODE; 198 u_int8_t SL2PICMODE; 199 u_int8_t pad_0xd05[0x3]; 200 u_int16_t SWINT16_1; 201 u_int8_t SWINT22_17; 202 u_int8_t pad_0xd0b[0x5]; 203 u_int16_t INTPINPOL; 204 u_int8_t pad_0xd12[0x2]; 205 u_int16_t PCIHOSTMAP; 206 u_int8_t pad_0xd16[0x2]; 207 u_int16_t ECCMAP; 208 u_int8_t GPTMR0MAP; 209 u_int8_t GPTMR1MAP; 210 u_int8_t GPTMR2MAP; 211 u_int8_t pad_0xd1d[0x3]; 212 u_int8_t PIT0MAP; 213 u_int8_t PIT1MAP; 214 u_int8_t PIT2MAP; 215 u_int8_t pad_0xd23[0x5]; 216 u_int8_t UART1MAP; 217 u_int8_t UART2MAP; 218 u_int8_t pad_0xd2a[0x6]; 219 u_int8_t PCIINTAMAP; 220 u_int8_t PCIINTBMAP; 221 u_int8_t PCIINTCMAP; 222 u_int8_t PCIINTDMAP; 223 u_int8_t pad_0xd34[0xc]; 224 u_int8_t DMABCINTMAP; 225 u_int8_t SSIMAP; 226 u_int8_t WDTMAP; 227 u_int8_t RTCMAP; 228 u_int8_t WPVMAP; 229 u_int8_t ICEMAP; 230 u_int8_t FERRMAP; 231 u_int8_t pad_0xd47[0x9]; 232 u_int8_t GP0IMAP; 233 u_int8_t GP1IMAP; 234 u_int8_t GP2IMAP; 235 u_int8_t GP3IMAP; 236 u_int8_t GP4IMAP; 237 u_int8_t GP5IMAP; 238 u_int8_t GP6IMAP; 239 u_int8_t GP7IMAP; 240 u_int8_t GP8IMAP; 241 u_int8_t GP9IMAP; 242 u_int8_t GP10IMAP; 243 u_int8_t pad_0xd5b[0x15]; 244 245 /* Reset Generation */ 246 u_int8_t SYSINFO; 247 u_int8_t pad_0xd71; 248 u_int8_t RESCFG; 249 u_int8_t pad_0xd73; 250 u_int8_t RESSTA; 251 u_int8_t pad_0xd75[0xb]; 252 253 /* GP DMA Controller */ 254 u_int8_t GPDMACTL; 255 u_int8_t GPDMAMMIO; 256 u_int16_t GPDMAEXTCHMAPA; 257 u_int16_t GPDMAEXTCHMAPB; 258 u_int8_t GPDMAEXTPG0; 259 u_int8_t GPDMAEXTPG1; 260 u_int8_t GPDMAEXTPG2; 261 u_int8_t GPDMAEXTPG3; 262 u_int8_t GPDMAEXTPG5; 263 u_int8_t GPDMAEXTPG6; 264 u_int8_t GPDMAEXTPG7; 265 u_int8_t pad_0xd8d[0x3]; 266 u_int8_t GPDMAEXTTC3; 267 u_int8_t GPDMAEXTTC5; 268 u_int8_t GPDMAEXTTC6; 269 u_int8_t GPDMAEXTTC7; 270 u_int8_t pad_0xd94[0x4]; 271 u_int8_t GPDMABCCTL; 272 u_int8_t GPDMABCSTA; 273 u_int8_t GPDMABSINTENB; 274 u_int8_t GPDMABCVAL; 275 u_int8_t pad_0xd9c[0x4]; 276 u_int16_t GPDMANXTADDL3; 277 u_int16_t GPDMANXTADDH3; 278 u_int16_t GPDMANXTADDL5; 279 u_int16_t GPDMANXTADDH5; 280 u_int16_t GPDMANXTADDL6; 281 u_int16_t GPDMANXTADDH6; 282 u_int16_t GPDMANXTADDL7; 283 u_int16_t GPDMANXTADDH7; 284 u_int16_t GPDMANXTTCL3; 285 u_int8_t GPDMANXTTCH3; 286 u_int8_t pad_0xdb3; 287 u_int16_t GPDMANXTTCL5; 288 u_int8_t GPDMANXTTCH5; 289 u_int8_t pad_0xdb7; 290 u_int16_t GPDMANXTTCL6; 291 u_int8_t GPDMANXTTCH6; 292 u_int8_t pad_0xdbb; 293 u_int16_t GPDMANXTTCL7; 294 u_int8_t GPDMANXTTCH7; 295 u_int8_t pad_0xdc0[0x240]; 296 }; 297 298 CTASSERT(sizeof(struct elan_mmcr) == 4096); 299 300 extern volatile struct elan_mmcr * elan_mmcr; 301 302 #endif /* _MACHINE_ELAN_MMCR_H_ */ 303