wdenk | 2262cfe | 2002-11-18 00:14:45 +0000 | [diff] [blame^] | 1 | /* |
| 2 | * (C) Copyright 2002 |
| 3 | * Daniel Engström, Omicron Ceti AB <daniel@omicron.se>. |
| 4 | * |
| 5 | * See file CREDITS for list of people who contributed to this |
| 6 | * project. |
| 7 | * |
| 8 | * This program is free software; you can redistribute it and/or |
| 9 | * modify it under the terms of the GNU General Public License as |
| 10 | * published by the Free Software Foundation; either version 2 of |
| 11 | * the License, or (at your option) any later version. |
| 12 | * |
| 13 | * This program is distributed in the hope that it will be useful, |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 16 | * GNU General Public License for more details. |
| 17 | * |
| 18 | * You should have received a copy of the GNU General Public License |
| 19 | * along with this program; if not, write to the Free Software |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| 21 | * MA 02111-1307 USA |
| 22 | */ |
| 23 | |
| 24 | #ifndef _ASM_IC_SC520_H_ |
| 25 | #define _ASM_IC_SC520_H_ 1 |
| 26 | |
| 27 | /* Memory mapped configuration registers, MMCR */ |
| 28 | #define SC520_REVID 0x0000 /* ElanSC520 Microcontroller Revision ID Register */ |
| 29 | #define SC520_CPUCTL 0x0002 /* Am5x86 CPU Control Register */ |
| 30 | #define SC520_DRCCTL 0x0010 /* SDRAM Control Register */ |
| 31 | #define SC520_DRCTMCTL 0x0012 /* SDRAM Timing Control Register */ |
| 32 | #define SC520_DRCCFG 0x0014 /* SDRAM Bank Configuration Register*/ |
| 33 | #define SC520_DRCBENDADR 0x0018 /* SDRAM Bank 0-3 Ending Address Register*/ |
| 34 | #define SC520_ECCCTL 0x0020 /* ECC Control Register */ |
| 35 | #define SC520_ECCSTA 0x0021 /* ECC Status Register */ |
| 36 | #define SC520_ECCCKBPOS 0x0022 /* ECC Check Bit Position Register */ |
| 37 | #define SC520_ECCSBADD 0x0024 /* ECC Single-Bit Error Address Register */ |
| 38 | #define SC520_DBCTL 0x0040 /* SDRAM Buffer Control Register */ |
| 39 | #define SC520_BOOTCSCTL 0x0050 /* /BOOTCS Control Register */ |
| 40 | #define SC520_ROMCS1CTL 0x0054 /* /ROMCS1 Control Register */ |
| 41 | #define SC520_ROMCS2CTL 0x0056 /* /ROMCS2 Control Register */ |
| 42 | #define SC520_HBCTL 0x0060 /* Host Bridge Control Register */ |
| 43 | #define SC520_HBTGTIRQCTL 0x0062 /* Host Bridge Target Interrupt Control Register */ |
| 44 | #define SC520_HBTGTIRQSTA 0x0064 /* Host Bridge Target Interrupt Status Register */ |
| 45 | #define SC520_HBMSTIRQCTL 0x0066 /* Host Bridge Target Interrupt Control Register */ |
| 46 | #define SC520_HBMSTIRQSTA 0x0068 /* Host Bridge Master Interrupt Status Register */ |
| 47 | #define SC520_MSTINTADD 0x006c /* Host Bridge Master Interrupt Address Register */ |
| 48 | #define SC520_SYSARBCTL 0x0070 /* System Arbiter Control Register */ |
| 49 | #define SC520_PCIARBSTA 0x0071 /* PCI Bus Arbiter Status Register */ |
| 50 | #define SC520_SYSARBMENB 0x0072 /* System Arbiter Master Enable Register */ |
| 51 | #define SC520_ARBPRICTL 0x0074 /* Arbiter Priority Control Register */ |
| 52 | #define SC520_ADDDECCTL 0x0080 /* Address Decode Control Register */ |
| 53 | #define SC520_WPVSTA 0x0082 /* Write-Protect Violation Status Register */ |
| 54 | #define SC520_PAR0 0x0088 /* Programmable Address Region 0 Register */ |
| 55 | #define SC520_PAR1 0x008c /* Programmable Address Region 1 Register */ |
| 56 | #define SC520_PAR2 0x0090 /* Programmable Address Region 2 Register */ |
| 57 | #define SC520_PAR3 0x0094 /* Programmable Address Region 3 Register */ |
| 58 | #define SC520_PAR4 0x0098 /* Programmable Address Region 4 Register */ |
| 59 | #define SC520_PAR5 0x009c /* Programmable Address Region 5 Register */ |
| 60 | #define SC520_PAR6 0x00a0 /* Programmable Address Region 6 Register */ |
| 61 | #define SC520_PAR7 0x00a4 /* Programmable Address Region 7 Register */ |
| 62 | #define SC520_PAR8 0x00a8 /* Programmable Address Region 8 Register */ |
| 63 | #define SC520_PAR9 0x00ac /* Programmable Address Region 9 Register */ |
| 64 | #define SC520_PAR10 0x00b0 /* Programmable Address Region 10 Register */ |
| 65 | #define SC520_PAR11 0x00b4 /* Programmable Address Region 11 Register */ |
| 66 | #define SC520_PAR12 0x00b8 /* Programmable Address Region 12 Register */ |
| 67 | #define SC520_PAR13 0x00bc /* Programmable Address Region 13 Register */ |
| 68 | #define SC520_PAR14 0x00c0 /* Programmable Address Region 14 Register */ |
| 69 | #define SC520_PAR15 0x00c4 /* Programmable Address Region 15 Register */ |
| 70 | #define SC520_GPECHO 0x0c00 /* GP Echo Mode Register */ |
| 71 | #define SC520_GPCSDW 0x0c01 /* GP Chip Select Data Width Register */ |
| 72 | #define SC520_GPCSQUAL 0x0c02 /* GP Chip Select Qualification Register */ |
| 73 | #define SC520_GPCSRT 0x0c08 /* GP Chip Select Recovery Time Register */ |
| 74 | #define SC520_GPCSPW 0x0c09 /* GP Chip Select Pulse Width Register */ |
| 75 | #define SC520_GPCSOFF 0x0c0a /* GP Chip Select Offset Register */ |
| 76 | #define SC520_GPRDW 0x0c0b /* GP Read Pulse Width Register */ |
| 77 | #define SC520_GPRDOFF 0x0c0c /* GP Read Offset Register */ |
| 78 | #define SC520_GPWRW 0x0c0d /* GP Write Pulse Width Register */ |
| 79 | #define SC520_GPWROFF 0x0c0e /* GP Write Offset Register */ |
| 80 | #define SC520_GPALEW 0x0c0f /* GP ALE Pulse Width Register */ |
| 81 | #define SC520_GPALEOFF 0x0c10 /* GP ALE Offset Register */ |
| 82 | #define SC520_PIOPFS15_0 0x0c20 /* PIO15-PIO0 Pin Function Select */ |
| 83 | #define SC520_PIOPFS31_16 0x0c22 /* PIO31-PIO16 Pin Function Select */ |
| 84 | #define SC520_CSPFS 0x0c24 /* Chip Select Pin Function Select */ |
| 85 | #define SC520_CLKSEL 0x0c26 /* Clock Select */ |
| 86 | #define SC520_DSCTL 0x0c28 /* Drive Strength Control */ |
| 87 | #define SC520_PIODIR15_0 0x0c2a /* PIO15-PIO0 Direction */ |
| 88 | #define SC520_PIODIR31_16 0x0c2c /* PIO31-PIO16 Direction */ |
| 89 | #define SC520_PIODATA15_0 0x0c30 /* PIO15-PIO0 Data */ |
| 90 | #define SC520_PIODATA31_16 0x0c32 /* PIO31-PIO16 Data */ |
| 91 | #define SC520_PIOSET15_0 0x0c34 /* PIO15-PIO0 Set */ |
| 92 | #define SC520_PIOSET31_16 0x0c36 /* PIO31-PIO16 Set */ |
| 93 | #define SC520_PIOCLR15_0 0x0c38 /* PIO15-PIO0 Clear */ |
| 94 | #define SC520_PIOCLR31_16 0x0c3a /* PIO31-PIO16 Clear */ |
| 95 | #define SC520_SWTMRMILLI 0x0c60 /* Software Timer Millisecond Count */ |
| 96 | #define SC520_SWTMRMICRO 0x0c62 /* Software Timer Microsecond Count */ |
| 97 | #define SC520_SWTMRCFG 0x0c64 /* Software Timer Configuration */ |
| 98 | #define SC520_GPTMRSTA 0x0c70 /* GP Timers Status Register */ |
| 99 | #define SC520_GPTMR0CTL 0x0c72 /* GP Timer 0 Mode/Control Register */ |
| 100 | #define SC520_GPTMR0CNT 0x0c74 /* GP Timer 0 Count Register */ |
| 101 | #define SC520_GPTMR0MAXCMPA 0x0c76 /* GP Timer 0 Maxcount Compare A Register */ |
| 102 | #define SC520_GPTMR0MAXCMPB 0x0c78 /* GP Timer 0 Maxcount Compare B Register */ |
| 103 | #define SC520_GPTMR1CTL 0x0c7a /* GP Timer 1 Mode/Control Register */ |
| 104 | #define SC520_GPTMR1CNT 0x0c7c /* GP Timer 1 Count Register */ |
| 105 | #define SC520_GPTMR1MAXCMPA 0x0c7e /* GP Timer 1 Maxcount Compare Register A */ |
| 106 | #define SC520_GPTMR1MAXCMPB 0x0c80 /* GP Timer 1 Maxcount Compare B Register */ |
| 107 | #define SC520_GPTMR2CTL 0x0c82 /* GP Timer 2 Mode/Control Register */ |
| 108 | #define SC520_GPTMR2CNT 0x0c84 /* GP Timer 2 Count Register */ |
| 109 | #define SC520_GPTMR2MAXCMPA 0x0c8e /* GP Timer 2 Maxcount Compare A Register */ |
| 110 | #define SC520_WDTMRCTL 0x0cb0 /* Watchdog Timer Control Register */ |
| 111 | #define SC520_WDTMRCNTL 0x0cb2 /* Watchdog Timer Count Low Register */ |
| 112 | #define SC520_WDTMRCNTH 0x0cb4 /* Watchdog Timer Count High Register */ |
| 113 | #define SC520_UART1CTL 0x0cc0 /* UART 1 General Control Register */ |
| 114 | #define SC520_UART1STA 0x0cc1 /* UART 1 General Status Register */ |
| 115 | #define SC520_UART1FCRSHAD 0x0cc2 /* UART 1 FIFO Control Shadow Register */ |
| 116 | #define SC520_UART2CTL 0x0cc4 /* UART 2 General Control Register */ |
| 117 | #define SC520_UART2STA 0x0cc5 /* UART 2 General Status Register */ |
| 118 | #define SC520_UART2FCRSHAD 0x0cc6 /* UART 2 FIFO Control Shadow Register */ |
| 119 | #define SC520_PICICR 0x0d00 /* Interrupt Control Register */ |
| 120 | #define SC520_MPICMODE 0x0d02 /* Master PIC Interrupt Mode Register */ |
| 121 | #define SC520_SL1PICMODE 0x0d03 /* Slave 1 PIC Interrupt Mode Register */ |
| 122 | #define SC520_SL2PICMODE 0x0d04 /* Slave 2 PIC Interrupt Mode Register */ |
| 123 | #define SC520_SWINT16_1 0x0d08 /* Software Interrupt 16-1 Control Register */ |
| 124 | #define SC520_SWINT22_17 0x0d0a /* Software Interrupt 22-17/NMI Control Register */ |
| 125 | #define SC520_INTPINPOL 0x0d10 /* Interrupt Pin Polarity Register */ |
| 126 | #define SC520_PCIHOSTMAP 0x0d14 /* PCI Host Bridge Interrupt Mappin Register */ |
| 127 | #define SC520_ECCMAP 0x0d18 /* ECC Interrupt Mapping Register */ |
| 128 | #define SC520_GPTMR0MAP 0x0d1a /* GP Timer 0 Interrupt Mapping Register */ |
| 129 | #define SC520_GPTMR1MAP 0x0d1b /* GP Timer 1 Interrupt Mapping Register */ |
| 130 | #define SC520_GPTMR2MAP 0x0d1c /* GP Timer 2 Interrupt Mapping Register */ |
| 131 | #define SC520_PIT0MAP 0x0d20 /* PIT0 Interrupt Mapping Register */ |
| 132 | #define SC520_PIT1MAP 0x0d21 /* PIT1 Interrupt Mapping Register */ |
| 133 | #define SC520_PIT2MAP 0x0d22 /* PIT2 Interrupt Mapping Register */ |
| 134 | #define SC520_UART1MAP 0x0d28 /* UART 1 Interrupt Mapping Register */ |
| 135 | #define SC520_UART2MAP 0x0d29 /* UART 2 Interrupt Mapping Register */ |
| 136 | #define SC520_PCIINTAMAP 0x0d30 /* PCI Interrupt A Mapping Register */ |
| 137 | #define SC520_PCIINTBMAP 0x0d31 /* PCI Interrupt B Mapping Register */ |
| 138 | #define SC520_PCIINTCMAP 0x0d32 /* PCI Interrupt C Mapping Register */ |
| 139 | #define SC520_PCIINTDMAP 0x0d33 /* PCI Interrupt D Mapping Register */ |
| 140 | #define SC520_DMABCINTMAP 0x0d40 /* DMA Buffer Chaining Interrupt Mapping Register */ |
| 141 | #define SC520_SSIMAP 0x0d41 /* SSI Interrupt Mapping Register */ |
| 142 | #define SC520_WDTMAP 0x0d42 /* Watchdog Timer Interrupt Mapping Register */ |
| 143 | #define SC520_RTCMAP 0x0d43 /* RTC Interrupt Mapping Register */ |
| 144 | #define SC520_WPVMAP 0x0d44 /* Write-Protect Interrupt Mapping Register */ |
| 145 | #define SC520_ICEMAP 0x0d45 /* AMDebug JTAG RX/TX Interrupt Mapping Register */ |
| 146 | #define SC520_FERRMAP 0x0d46 /* Floating Point Error Interrupt Mapping Register */ |
| 147 | #define SC520_GP0IMAP 0x0d50 /* GPIRQ0 Interrupt Mapping Register */ |
| 148 | #define SC520_GP1IMAP 0x0d51 /* GPIRQ1 Interrupt Mapping Register */ |
| 149 | #define SC520_GP2IMAP 0x0d52 /* GPIRQ2 Interrupt Mapping Register */ |
| 150 | #define SC520_GP3IMAP 0x0d53 /* GPIRQ3 Interrupt Mapping Register */ |
| 151 | #define SC520_GP4IMAP 0x0d54 /* GPIRQ4 Interrupt Mapping Register */ |
| 152 | #define SC520_GP5IMAP 0x0d55 /* GPIRQ5 Interrupt Mapping Register */ |
| 153 | #define SC520_GP6IMAP 0x0d56 /* GPIRQ6 Interrupt Mapping Register */ |
| 154 | #define SC520_GP7IMAP 0x0d57 /* GPIRQ7 Interrupt Mapping Register */ |
| 155 | #define SC520_GP8IMAP 0x0d58 /* GPIRQ8 Interrupt Mapping Register */ |
| 156 | #define SC520_GP9IMAP 0x0d59 /* GPIRQ9 Interrupt Mapping Register */ |
| 157 | #define SC520_GP10IMAP 0x0d5a /* GPIRQ10 Interrupt Mapping Register */ |
| 158 | #define SC520_SYSINFO 0x0d70 /* System Board Information Register */ |
| 159 | #define SC520_RESCFG 0x0d72 /* Reset Configuration Register */ |
| 160 | #define SC520_RESSTA 0x0d74 /* Reset Status Register */ |
| 161 | #define SC520_GPDMAMMIO 0x0d81 /* GP-DMA Memory-Mapped I/O Register */ |
| 162 | #define SC520_GPDMAEXTCHMAPA 0x0d82 /* GP-DMA Resource Channel Map A */ |
| 163 | #define SC520_GPDMAEXTCHMAPB 0x0d84 /* GP-DMA Resource Channel Map B */ |
| 164 | #define SC520_GPDMAEXTPG0 0x0d86 /* GP-DMA Channel 0 Extended Page */ |
| 165 | #define SC520_GPDMAEXTPG1 0x0d87 /* GP-DMA Channel 1 Extended Page */ |
| 166 | #define SC520_GPDMAEXTPG2 0x0d88 /* GP-DMA Channel 2 Extended Page */ |
| 167 | #define SC520_GPDMAEXTPG3 0x0d89 /* GP-DMA Channel 3 Extended Page */ |
| 168 | #define SC520_GPDMAEXTPG5 0x0d8a /* GP-DMA Channel 5 Extended Page */ |
| 169 | #define SC520_GPDMAEXTPG6 0x0d8b /* GP-DMA Channel 6 Extended Page */ |
| 170 | #define SC520_GPDMAEXTPG7 0x0d8c /* GP-DMA Channel 7 Extended Page */ |
| 171 | #define SC520_GPDMAEXTTC3 0x0d90 /* GP-DMA Channel 3 Extender Transfer count */ |
| 172 | #define SC520_GPDMAEXTTC5 0x0d91 /* GP-DMA Channel 5 Extender Transfer count */ |
| 173 | #define SC520_GPDMAEXTTC6 0x0d92 /* GP-DMA Channel 6 Extender Transfer count */ |
| 174 | #define SC520_GPDMAEXTTC7 0x0d93 /* GP-DMA Channel 7 Extender Transfer count */ |
| 175 | #define SC520_GPDMABCCTL 0x0d98 /* Buffer Chaining Control */ |
| 176 | #define SC520_GPDMABCSTA 0x0d99 /* Buffer Chaining Status */ |
| 177 | #define SC520_GPDMABSINTENB 0x0d9a /* Buffer Chaining Interrupt Enable */ |
| 178 | #define SC520_GPDMABCVAL 0x0d9b /* Buffer Chaining Valid */ |
| 179 | #define SC520_GPDMANXTADDL3 0x0da0 /* GP-DMA Channel 3 Next Address Low */ |
| 180 | #define SC520_GPDMANXTADDH3 0x0da2 /* GP-DMA Channel 3 Next Address High */ |
| 181 | #define SC520_GPDMANXTADDL5 0x0da4 /* GP-DMA Channel 5 Next Address Low */ |
| 182 | #define SC520_GPDMANXTADDH5 0x0da6 /* GP-DMA Channel 5 Next Address High */ |
| 183 | #define SC520_GPDMANXTADDL6 0x0da8 /* GP-DMA Channel 6 Next Address Low */ |
| 184 | #define SC520_GPDMANXTADDH6 0x0daa /* GP-DMA Channel 6 Next Address High */ |
| 185 | #define SC520_GPDMANXTADDL7 0x0dac /* GP-DMA Channel 7 Next Address Low */ |
| 186 | #define SC520_GPDMANXTADDH7 0x0dae /* GP-DMA Channel 7 Next Address High */ |
| 187 | #define SC520_GPDMANXTTCL3 0x0db0 /* GP-DMA Channel 3 Next Transfer Count Low */ |
| 188 | #define SC520_GPDMANXTTCH3 0x0db2 /* GP-DMA Channel 3 Next Transfer Count High */ |
| 189 | #define SC520_GPDMANXTTCL5 0x0db4 /* GP-DMA Channel 5 Next Transfer Count Low */ |
| 190 | #define SC520_GPDMANXTTCH5 0x0db6 /* GP-DMA Channel 5 Next Transfer Count High */ |
| 191 | #define SC520_GPDMANXTTCL6 0x0db8 /* GP-DMA Channel 6 Next Transfer Count Low */ |
| 192 | #define SC520_GPDMANXTTCH6 0x0dba /* GP-DMA Channel 6 Next Transfer Count High */ |
| 193 | #define SC520_GPDMANXTTCL7 0x0dbc /* GP-DMA Channel 7 Next Transfer Count Low */ |
| 194 | #define SC520_GPDMANXTTCH7 0x0dbe /* GP-DMA Channel 7 Next Transfer Count High */ |
| 195 | |
| 196 | /* MMCR Register bits (not all of them :) ) */ |
| 197 | |
| 198 | /* BITS for SC520_ADDDECCTL: */ |
| 199 | #define WPV_INT_ENB 0x80 /* Write-Protect Violation Interrupt Enable */ |
| 200 | #define IO_HOLE_DEST 0x10 /* I/O Hole Access Destination */ |
| 201 | #define RTC_DIS 0x04 /* RTC Disable */ |
| 202 | #define UART2_DIS 0x02 /* UART2 Disable */ |
| 203 | #define UART1_DIS 0x01 /* UART1 Disable */ |
| 204 | |
| 205 | /* bus mapping constants (used for PCI core initialization) */ /* bus mapping constants */ |
| 206 | #define SC520_REG_ADDR 0x00000cf8 |
| 207 | #define SC520_REG_DATA 0x00000cfc |
| 208 | |
| 209 | |
| 210 | #define SC520_ISA_MEM_PHYS 0x00000000 |
| 211 | #define SC520_ISA_MEM_BUS 0x00000000 |
| 212 | #define SC520_ISA_MEM_SIZE 0x01000000 |
| 213 | |
| 214 | #define SC520_ISA_IO_PHYS 0x00000000 |
| 215 | #define SC520_ISA_IO_BUS 0x00000000 |
| 216 | #define SC520_ISA_IO_SIZE 0x00001000 |
| 217 | |
| 218 | /* PCI I/O space from 0x1000 to 0xfdff */ |
| 219 | #define SC520_PCI_IO_PHYS 0x00001000 |
| 220 | #define SC520_PCI_IO_BUS 0x00001000 |
| 221 | #define SC520_PCI_IO_SIZE 0x0000ee00 |
| 222 | |
| 223 | /* system memory from 0x00000000 to 0x0fffffff */ |
| 224 | #define SC520_PCI_MEMORY_PHYS 0x00000000 |
| 225 | #define SC520_PCI_MEMORY_BUS 0x00000000 |
| 226 | #define SC520_PCI_MEMORY_SIZE 0x10000000 |
| 227 | |
| 228 | /* PCI bus memory from 0x10000000 to 0x27ffffff */ |
| 229 | #define SC520_PCI_MEM_PHYS 0x10000000 |
| 230 | #define SC520_PCI_MEM_BUS 0x10000000 |
| 231 | #define SC520_PCI_MEM_SIZE 0x18000000 |
| 232 | |
| 233 | /* 0x28000000 - 0x3fffffff is used by the flash banks */ |
| 234 | |
| 235 | /* 0x40000000 - 0xffffffff is not adressable by the SC520 */ |
| 236 | |
| 237 | /* utility functions */ |
| 238 | void write_mmcr_byte(u16 mmcr, u8 data); |
| 239 | void write_mmcr_word(u16 mmcr, u16 data); |
| 240 | void write_mmcr_long(u16 mmcr, u32 data); |
| 241 | u8 read_mmcr_byte(u16 mmcr); |
| 242 | u16 read_mmcr_word(u16 mmcr); |
| 243 | u32 read_mmcr_long(u16 mmcr); |
| 244 | |
| 245 | void init_sc520(void); |
| 246 | unsigned long init_sc520_dram(void); |
| 247 | void pci_sc520_init(struct pci_controller *hose); |
| 248 | |
| 249 | #endif |