ARM Add blue colour LED to status_led.
[oweals/u-boot.git] / include / asm-i386 / ic / sc520.h
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_SSICTL            0x0cd0  /* SSI Control */
120 #define SC520_SSIXMIT           0x0cd1  /* SSI Transmit */
121 #define SC520_SSICMD            0x0cd2  /* SSI Command */
122 #define SC520_SSISTA            0x0cd3  /* SSI Status */
123 #define SC520_SSIRCV            0x0cd4  /* SSI Receive */
124 #define SC520_PICICR            0x0d00  /* Interrupt Control Register */
125 #define SC520_MPICMODE          0x0d02  /* Master PIC Interrupt Mode Register */
126 #define SC520_SL1PICMODE        0x0d03  /* Slave 1 PIC Interrupt Mode Register */
127 #define SC520_SL2PICMODE        0x0d04  /* Slave 2 PIC Interrupt Mode Register */
128 #define SC520_SWINT16_1         0x0d08  /* Software Interrupt 16-1 Control Register */
129 #define SC520_SWINT22_17        0x0d0a  /* Software Interrupt 22-17/NMI Control Register */
130 #define SC520_INTPINPOL         0x0d10  /* Interrupt Pin Polarity Register */
131 #define SC520_PCIHOSTMAP        0x0d14  /* PCI Host Bridge Interrupt Mappin Register */
132 #define SC520_ECCMAP            0x0d18  /* ECC Interrupt Mapping Register */
133 #define SC520_GPTMR0MAP         0x0d1a  /* GP Timer 0 Interrupt Mapping Register */
134 #define SC520_GPTMR1MAP         0x0d1b  /* GP Timer 1 Interrupt Mapping Register */
135 #define SC520_GPTMR2MAP         0x0d1c  /* GP Timer 2 Interrupt Mapping Register */
136 #define SC520_PIT0MAP           0x0d20  /* PIT0 Interrupt Mapping Register */
137 #define SC520_PIT1MAP           0x0d21  /* PIT1 Interrupt Mapping Register */
138 #define SC520_PIT2MAP           0x0d22  /* PIT2 Interrupt Mapping Register */
139 #define SC520_UART1MAP          0x0d28  /* UART 1 Interrupt Mapping Register */
140 #define SC520_UART2MAP          0x0d29  /* UART 2 Interrupt Mapping Register */
141 #define SC520_PCIINTAMAP        0x0d30  /* PCI Interrupt A Mapping Register */
142 #define SC520_PCIINTBMAP        0x0d31  /* PCI Interrupt B Mapping Register */
143 #define SC520_PCIINTCMAP        0x0d32  /* PCI Interrupt C Mapping Register */
144 #define SC520_PCIINTDMAP        0x0d33  /* PCI Interrupt D Mapping Register */
145 #define SC520_DMABCINTMAP       0x0d40  /* DMA Buffer Chaining Interrupt Mapping Register */
146 #define SC520_SSIMAP            0x0d41  /* SSI Interrupt Mapping Register */
147 #define SC520_WDTMAP            0x0d42  /* Watchdog Timer Interrupt Mapping Register */
148 #define SC520_RTCMAP            0x0d43  /* RTC Interrupt Mapping Register */
149 #define SC520_WPVMAP            0x0d44  /* Write-Protect Interrupt Mapping Register */
150 #define SC520_ICEMAP            0x0d45  /* AMDebug JTAG RX/TX Interrupt Mapping Register */
151 #define SC520_FERRMAP           0x0d46  /* Floating Point Error Interrupt Mapping Register */
152 #define SC520_GP0IMAP           0x0d50  /* GPIRQ0 Interrupt Mapping Register */
153 #define SC520_GP1IMAP           0x0d51  /* GPIRQ1 Interrupt Mapping Register */
154 #define SC520_GP2IMAP           0x0d52  /* GPIRQ2 Interrupt Mapping Register */
155 #define SC520_GP3IMAP           0x0d53  /* GPIRQ3 Interrupt Mapping Register */
156 #define SC520_GP4IMAP           0x0d54  /* GPIRQ4 Interrupt Mapping Register */
157 #define SC520_GP5IMAP           0x0d55  /* GPIRQ5 Interrupt Mapping Register */
158 #define SC520_GP6IMAP           0x0d56  /* GPIRQ6 Interrupt Mapping Register */
159 #define SC520_GP7IMAP           0x0d57  /* GPIRQ7 Interrupt Mapping Register */
160 #define SC520_GP8IMAP           0x0d58  /* GPIRQ8 Interrupt Mapping Register */
161 #define SC520_GP9IMAP           0x0d59  /* GPIRQ9 Interrupt Mapping Register */
162 #define SC520_GP10IMAP          0x0d5a  /* GPIRQ10 Interrupt Mapping Register */
163 #define SC520_SYSINFO           0x0d70  /* System Board Information Register */
164 #define SC520_RESCFG            0x0d72  /* Reset Configuration Register */
165 #define SC520_RESSTA            0x0d74  /* Reset Status Register */
166 #define SC520_GPDMAMMIO         0x0d81  /* GP-DMA Memory-Mapped I/O Register */
167 #define SC520_GPDMAEXTCHMAPA    0x0d82  /* GP-DMA Resource Channel Map A */
168 #define SC520_GPDMAEXTCHMAPB    0x0d84  /* GP-DMA Resource Channel Map B */
169 #define SC520_GPDMAEXTPG0       0x0d86  /* GP-DMA Channel 0 Extended Page */
170 #define SC520_GPDMAEXTPG1       0x0d87  /* GP-DMA Channel 1 Extended Page */
171 #define SC520_GPDMAEXTPG2       0x0d88  /* GP-DMA Channel 2 Extended Page */
172 #define SC520_GPDMAEXTPG3       0x0d89  /* GP-DMA Channel 3 Extended Page */
173 #define SC520_GPDMAEXTPG5       0x0d8a  /* GP-DMA Channel 5 Extended Page */
174 #define SC520_GPDMAEXTPG6       0x0d8b  /* GP-DMA Channel 6 Extended Page */
175 #define SC520_GPDMAEXTPG7       0x0d8c  /* GP-DMA Channel 7 Extended Page */
176 #define SC520_GPDMAEXTTC3       0x0d90  /* GP-DMA Channel 3 Extender Transfer count */
177 #define SC520_GPDMAEXTTC5       0x0d91  /* GP-DMA Channel 5 Extender Transfer count */
178 #define SC520_GPDMAEXTTC6       0x0d92  /* GP-DMA Channel 6 Extender Transfer count */
179 #define SC520_GPDMAEXTTC7       0x0d93  /* GP-DMA Channel 7 Extender Transfer count */
180 #define SC520_GPDMABCCTL        0x0d98  /* Buffer Chaining Control */
181 #define SC520_GPDMABCSTA        0x0d99  /* Buffer Chaining Status */
182 #define SC520_GPDMABSINTENB     0x0d9a  /* Buffer Chaining Interrupt Enable */
183 #define SC520_GPDMABCVAL        0x0d9b  /* Buffer Chaining Valid */
184 #define SC520_GPDMANXTADDL3     0x0da0  /* GP-DMA Channel 3 Next Address Low */
185 #define SC520_GPDMANXTADDH3     0x0da2  /* GP-DMA Channel 3 Next Address High */
186 #define SC520_GPDMANXTADDL5     0x0da4  /* GP-DMA Channel 5 Next Address Low */
187 #define SC520_GPDMANXTADDH5     0x0da6  /* GP-DMA Channel 5 Next Address High */
188 #define SC520_GPDMANXTADDL6     0x0da8  /* GP-DMA Channel 6 Next Address Low */
189 #define SC520_GPDMANXTADDH6     0x0daa  /* GP-DMA Channel 6 Next Address High */
190 #define SC520_GPDMANXTADDL7     0x0dac  /* GP-DMA Channel 7 Next Address Low */
191 #define SC520_GPDMANXTADDH7     0x0dae  /* GP-DMA Channel 7 Next Address High */
192 #define SC520_GPDMANXTTCL3      0x0db0  /* GP-DMA Channel 3 Next Transfer Count Low */
193 #define SC520_GPDMANXTTCH3      0x0db2  /* GP-DMA Channel 3 Next Transfer Count High */
194 #define SC520_GPDMANXTTCL5      0x0db4  /* GP-DMA Channel 5 Next Transfer Count Low */
195 #define SC520_GPDMANXTTCH5      0x0db6  /* GP-DMA Channel 5 Next Transfer Count High */
196 #define SC520_GPDMANXTTCL6      0x0db8  /* GP-DMA Channel 6 Next Transfer Count Low */
197 #define SC520_GPDMANXTTCH6      0x0dba  /* GP-DMA Channel 6 Next Transfer Count High */
198 #define SC520_GPDMANXTTCL7      0x0dbc  /* GP-DMA Channel 7 Next Transfer Count Low */
199 #define SC520_GPDMANXTTCH7      0x0dbe  /* GP-DMA Channel 7 Next Transfer Count High */
200
201 /* MMCR Register bits (not all of them :) ) */
202
203 /* SSI Stuff */
204 #define CTL_CLK_SEL_4           0x00    /* Nominal Bit Rate = 8 MHz    */
205 #define CTL_CLK_SEL_8           0x10    /* Nominal Bit Rate = 4 MHz    */
206 #define CTL_CLK_SEL_16          0x20    /* Nominal Bit Rate = 2 MHz    */
207 #define CTL_CLK_SEL_32          0x30    /* Nominal Bit Rate = 1 MHz    */
208 #define CTL_CLK_SEL_64          0x40    /* Nominal Bit Rate = 512 KHz  */
209 #define CTL_CLK_SEL_128         0x50    /* Nominal Bit Rate = 256 KHz  */
210 #define CTL_CLK_SEL_256         0x60    /* Nominal Bit Rate = 128 KHz  */
211 #define CTL_CLK_SEL_512         0x70    /* Nominal Bit Rate = 64 KHz   */
212
213 #define TC_INT_ENB              0x08    /* Transaction Complete Interrupt Enable */
214 #define PHS_INV_ENB             0x04    /* SSI Inverted Phase Mode Enable */
215 #define CLK_INV_ENB             0x02    /* SSI Inverted Clock Mode Enable */
216 #define MSBF_ENB                0x01    /* SSI Most Significant Bit First Mode Enable */
217
218 #define SSICMD_CMD_SEL_XMITRCV  0x03    /* Simultaneous Transmit / Receive Transaction */
219 #define SSICMD_CMD_SEL_RCV      0x02    /* Receive Transaction */
220 #define SSICMD_CMD_SEL_XMIT     0x01    /* Transmit Transaction */
221 #define SSISTA_BSY              0x02    /* SSI Busy */
222 #define SSISTA_TC_INT           0x01    /* SSI Transaction Complete Interrupt */
223
224
225 /* BITS for SC520_ADDDECCTL: */
226 #define WPV_INT_ENB             0x80    /* Write-Protect Violation Interrupt Enable */
227 #define IO_HOLE_DEST_PCI        0x10    /* I/O Hole Access Destination */
228 #define RTC_DIS                 0x04    /* RTC Disable */
229 #define UART2_DIS               0x02    /* UART2 Disable */
230 #define UART1_DIS               0x01    /* UART1 Disable */
231
232 /* bus mapping constants (used for PCI core initialization) */                                                                                                                                                                                                                                                                                                                                                                                           /* bus mapping constants */
233 #define SC520_REG_ADDR          0x00000cf8
234 #define SC520_REG_DATA          0x00000cfc
235
236
237 #define SC520_ISA_MEM_PHYS      0x00000000
238 #define SC520_ISA_MEM_BUS       0x00000000
239 #define SC520_ISA_MEM_SIZE      0x01000000
240
241 #define SC520_ISA_IO_PHYS       0x00000000
242 #define SC520_ISA_IO_BUS        0x00000000
243 #define SC520_ISA_IO_SIZE       0x00001000
244
245 /* PCI I/O space from 0x1000 to 0xdfff
246  * (make 0xe000-0xfdff available for stuff like PCCard boot) */
247 #define SC520_PCI_IO_PHYS       0x00001000
248 #define SC520_PCI_IO_BUS        0x00001000
249 #define SC520_PCI_IO_SIZE       0x0000d000
250
251 /* system memory from 0x00000000 to 0x0fffffff */
252 #define SC520_PCI_MEMORY_PHYS   0x00000000
253 #define SC520_PCI_MEMORY_BUS    0x00000000
254 #define SC520_PCI_MEMORY_SIZE   0x10000000
255
256 /* PCI bus memory from 0x10000000 to 0x26ffffff
257  * (make 0x27000000 - 0x27ffffff available for stuff like PCCard boot) */
258 #define SC520_PCI_MEM_PHYS      0x10000000
259 #define SC520_PCI_MEM_BUS       0x10000000
260 #define SC520_PCI_MEM_SIZE      0x17000000
261
262 /* 0x28000000 - 0x3fffffff is used by the flash banks */
263
264 /* 0x40000000 - 0xffffffff is not adressable by the SC520 */
265
266 /* priority numbers used for interrupt channel mappings */
267 #define SC520_IRQ_DISABLED 0
268 #define SC520_IRQ0  1
269 #define SC520_IRQ1  2
270 #define SC520_IRQ2  4  /* same as IRQ9 */
271 #define SC520_IRQ3  11
272 #define SC520_IRQ4  12
273 #define SC520_IRQ5  13
274 #define SC520_IRQ6  21
275 #define SC520_IRQ7  22
276 #define SC520_IRQ8  3
277 #define SC520_IRQ9  4
278 #define SC520_IRQ10 5
279 #define SC520_IRQ11 6
280 #define SC520_IRQ12 7
281 #define SC520_IRQ13 8
282 #define SC520_IRQ14 9
283 #define SC520_IRQ15 10
284
285 /* utility functions */
286 void write_mmcr_byte(u16 mmcr, u8 data);
287 void write_mmcr_word(u16 mmcr, u16 data);
288 void write_mmcr_long(u16 mmcr, u32 data);
289 u8 read_mmcr_byte(u16 mmcr);
290 u16 read_mmcr_word(u16 mmcr);
291 u32 read_mmcr_long(u16 mmcr);
292
293 void init_sc520(void);
294 unsigned long init_sc520_dram(void);
295
296 #endif