summaryrefslogtreecommitdiffstats
path: root/include/asm-i386/ic/sc520.h
blob: 9708504e317e6546a65142462bbc57de220c6562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
/*
 * (C) Copyright 2002
 * Daniel Engström, Omicron Ceti AB <daniel@omicron.se>.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef _ASM_IC_SC520_H_
#define _ASM_IC_SC520_H_ 1

/* Memory mapped configuration registers, MMCR */
#define SC520_REVID		0x0000		/* ElanSC520 Microcontroller Revision ID Register */
#define SC520_CPUCTL		0x0002		/* Am5x86 CPU Control Register */
#define SC520_DRCCTL            0x0010          /* SDRAM Control Register */
#define SC520_DRCTMCTL		0x0012		/* SDRAM Timing Control Register */
#define SC520_DRCCFG		0x0014		/* SDRAM Bank Configuration Register*/
#define SC520_DRCBENDADR	0x0018		/* SDRAM Bank 0-3 Ending Address Register*/
#define SC520_ECCCTL		0x0020		/* ECC Control Register */
#define SC520_ECCSTA		0x0021		/* ECC Status Register */
#define SC520_ECCCKBPOS		0x0022		/* ECC Check Bit Position Register */
#define SC520_ECCSBADD		0x0024		/* ECC Single-Bit Error Address Register */
#define SC520_DBCTL		0x0040		/* SDRAM Buffer Control Register */
#define SC520_BOOTCSCTL		0x0050		/* /BOOTCS Control Register */
#define SC520_ROMCS1CTL		0x0054		/* /ROMCS1 Control Register */
#define SC520_ROMCS2CTL		0x0056		/* /ROMCS2 Control Register */
#define SC520_HBCTL		0x0060 		/* Host Bridge Control Register */
#define SC520_HBTGTIRQCTL	0x0062		/* Host Bridge Target Interrupt Control Register */
#define SC520_HBTGTIRQSTA	0x0064		/* Host Bridge Target Interrupt Status Register */
#define SC520_HBMSTIRQCTL	0x0066		/* Host Bridge Target Interrupt Control Register */
#define SC520_HBMSTIRQSTA	0x0068		/* Host Bridge Master Interrupt Status Register */
#define SC520_MSTINTADD		0x006c		/* Host Bridge Master Interrupt Address Register */
#define SC520_SYSARBCTL		0x0070		/* System Arbiter Control Register */
#define SC520_PCIARBSTA		0x0071		/* PCI Bus Arbiter Status Register */
#define SC520_SYSARBMENB	0x0072		/* System Arbiter Master Enable Register */
#define SC520_ARBPRICTL		0x0074		/* Arbiter Priority Control Register */
#define SC520_ADDDECCTL     	0x0080 		/* Address Decode Control Register */
#define SC520_WPVSTA        	0x0082		/* Write-Protect Violation Status Register */
#define SC520_PAR0          	0x0088		/* Programmable Address Region 0 Register */
#define SC520_PAR1          	0x008c       	/* Programmable Address Region 1 Register */
#define SC520_PAR2          	0x0090       	/* Programmable Address Region 2 Register */
#define SC520_PAR3          	0x0094      	/* Programmable Address Region 3 Register */
#define SC520_PAR4          	0x0098       	/* Programmable Address Region 4 Register */
#define SC520_PAR5          	0x009c       	/* Programmable Address Region 5 Register */
#define SC520_PAR6         	0x00a0      	/* Programmable Address Region 6 Register */
#define SC520_PAR7          	0x00a4       	/* Programmable Address Region 7 Register */
#define SC520_PAR8          	0x00a8       	/* Programmable Address Region 8 Register */
#define SC520_PAR9          	0x00ac       	/* Programmable Address Region 9 Register */
#define SC520_PAR10         	0x00b0       	/* Programmable Address Region 10 Register */
#define SC520_PAR11         	0x00b4       	/* Programmable Address Region 11 Register */
#define SC520_PAR12         	0x00b8       	/* Programmable Address Region 12 Register */
#define SC520_PAR13         	0x00bc       	/* Programmable Address Region 13 Register */
#define SC520_PAR14         	0x00c0       	/* Programmable Address Region 14 Register */
#define SC520_PAR15		0x00c4		/* Programmable Address Region 15 Register */
#define SC520_GPECHO		0x0c00		/* GP Echo Mode Register */
#define SC520_GPCSDW		0x0c01		/* GP Chip Select Data Width Register */
#define SC520_GPCSQUAL		0x0c02		/* GP Chip Select Qualification Register */
#define SC520_GPCSRT		0x0c08		/* GP Chip Select Recovery Time Register */
#define SC520_GPCSPW		0x0c09		/* GP Chip Select Pulse Width Register */
#define SC520_GPCSOFF		0x0c0a		/* GP Chip Select Offset Register */
#define SC520_GPRDW		0x0c0b		/* GP Read Pulse Width Register */
#define SC520_GPRDOFF		0x0c0c		/* GP Read Offset Register */
#define SC520_GPWRW		0x0c0d		/* GP Write Pulse Width Register */
#define SC520_GPWROFF		0x0c0e		/* GP Write Offset Register */
#define SC520_GPALEW		0x0c0f		/* GP ALE Pulse Width Register */
#define SC520_GPALEOFF		0x0c10		/* GP ALE Offset Register */
#define SC520_PIOPFS15_0	0x0c20		/* PIO15-PIO0 Pin Function Select */
#define SC520_PIOPFS31_16	0x0c22		/* PIO31-PIO16 Pin Function Select */
#define SC520_CSPFS		0x0c24		/* Chip Select Pin Function Select */
#define SC520_CLKSEL		0x0c26		/* Clock Select */
#define SC520_DSCTL		0x0c28		/* Drive Strength Control */
#define SC520_PIODIR15_0	0x0c2a		/* PIO15-PIO0 Direction */
#define SC520_PIODIR31_16	0x0c2c		/* PIO31-PIO16 Direction */
#define SC520_PIODATA15_0	0x0c30		/* PIO15-PIO0 Data */
#define SC520_PIODATA31_16	0x0c32		/* PIO31-PIO16 Data */
#define SC520_PIOSET15_0	0x0c34		/* PIO15-PIO0 Set */
#define SC520_PIOSET31_16	0x0c36		/* PIO31-PIO16 Set */
#define SC520_PIOCLR15_0	0x0c38		/* PIO15-PIO0 Clear */
#define SC520_PIOCLR31_16	0x0c3a		/* PIO31-PIO16 Clear */
#define SC520_SWTMRMILLI 	0x0c60		/* Software Timer Millisecond Count */
#define SC520_SWTMRMICRO 	0x0c62		/* Software Timer Microsecond Count */
#define SC520_SWTMRCFG   	0x0c64		/* Software Timer Configuration */
#define SC520_GPTMRSTA		0x0c70		/* GP Timers Status Register */
#define SC520_GPTMR0CTL		0x0c72		/* GP Timer 0 Mode/Control Register */
#define SC520_GPTMR0CNT		0x0c74		/* GP Timer 0 Count Register */
#define SC520_GPTMR0MAXCMPA	0x0c76		/* GP Timer 0 Maxcount Compare A Register */
#define SC520_GPTMR0MAXCMPB	0x0c78		/* GP Timer 0 Maxcount Compare B Register */
#define SC520_GPTMR1CTL		0x0c7a		/* GP Timer 1 Mode/Control Register */
#define SC520_GPTMR1CNT		0x0c7c		/* GP Timer 1 Count Register */
#define SC520_GPTMR1MAXCMPA	0x0c7e		/* GP Timer 1 Maxcount Compare Register A */
#define SC520_GPTMR1MAXCMPB	0x0c80		/* GP Timer 1 Maxcount Compare B Register */
#define SC520_GPTMR2CTL		0x0c82		/* GP Timer 2 Mode/Control Register */
#define SC520_GPTMR2CNT		0x0c84		/* GP Timer 2 Count Register */
#define SC520_GPTMR2MAXCMPA	0x0c8e		/* GP Timer 2 Maxcount Compare A Register */
#define SC520_WDTMRCTL		0x0cb0		/* Watchdog Timer Control Register */
#define SC520_WDTMRCNTL		0x0cb2		/* Watchdog Timer Count Low Register */
#define SC520_WDTMRCNTH		0x0cb4		/* Watchdog Timer Count High Register */
#define SC520_UART1CTL		0x0cc0	        /* UART 1 General Control Register */
#define SC520_UART1STA		0x0cc1	        /* UART 1 General Status Register */
#define SC520_UART1FCRSHAD	0x0cc2	        /* UART 1 FIFO Control Shadow Register */
#define SC520_UART2CTL		0x0cc4	        /* UART 2 General Control Register */
#define SC520_UART2STA		0x0cc5	        /* UART 2 General Status Register */
#define SC520_UART2FCRSHAD	0x0cc6	        /* UART 2 FIFO Control Shadow Register */
#define SC520_PICICR		0x0d00		/* Interrupt Control Register */
#define SC520_MPICMODE		0x0d02		/* Master PIC Interrupt Mode Register */
#define SC520_SL1PICMODE	0x0d03		/* Slave 1 PIC Interrupt Mode Register */
#define SC520_SL2PICMODE	0x0d04		/* Slave 2 PIC Interrupt Mode Register */
#define SC520_SWINT16_1		0x0d08		/* Software Interrupt 16-1 Control Register */
#define SC520_SWINT22_17	0x0d0a		/* Software Interrupt 22-17/NMI Control Register */
#define SC520_INTPINPOL		0x0d10		/* Interrupt Pin Polarity Register */
#define SC520_PCIHOSTMAP	0x0d14		/* PCI Host Bridge Interrupt Mappin Register */
#define SC520_ECCMAP		0x0d18		/* ECC Interrupt Mapping Register */
#define SC520_GPTMR0MAP		0x0d1a		/* GP Timer 0 Interrupt Mapping Register */
#define SC520_GPTMR1MAP		0x0d1b		/* GP Timer 1 Interrupt Mapping Register */
#define SC520_GPTMR2MAP		0x0d1c		/* GP Timer 2 Interrupt Mapping Register */
#define SC520_PIT0MAP		0x0d20		/* PIT0 Interrupt Mapping Register */
#define SC520_PIT1MAP		0x0d21		/* PIT1 Interrupt Mapping Register */
#define SC520_PIT2MAP		0x0d22		/* PIT2 Interrupt Mapping Register */
#define SC520_UART1MAP		0x0d28		/* UART 1 Interrupt Mapping Register */
#define SC520_UART2MAP		0x0d29		/* UART 2 Interrupt Mapping Register */
#define SC520_PCIINTAMAP	0x0d30		/* PCI Interrupt A Mapping Register */
#define SC520_PCIINTBMAP	0x0d31		/* PCI Interrupt B Mapping Register */
#define SC520_PCIINTCMAP	0x0d32		/* PCI Interrupt C Mapping Register */
#define SC520_PCIINTDMAP	0x0d33		/* PCI Interrupt D Mapping Register */
#define SC520_DMABCINTMAP	0x0d40		/* DMA Buffer Chaining Interrupt Mapping Register */
#define SC520_SSIMAP		0x0d41		/* SSI Interrupt Mapping Register */
#define SC520_WDTMAP		0x0d42		/* Watchdog Timer Interrupt Mapping Register */
#define SC520_RTCMAP		0x0d43		/* RTC Interrupt Mapping Register */
#define SC520_WPVMAP		0x0d44		/* Write-Protect Interrupt Mapping Register */
#define SC520_ICEMAP		0x0d45		/* AMDebug JTAG RX/TX Interrupt Mapping Register */
#define SC520_FERRMAP		0x0d46		/* Floating Point Error Interrupt Mapping Register */
#define SC520_GP0IMAP		0x0d50		/* GPIRQ0 Interrupt Mapping Register */
#define SC520_GP1IMAP		0x0d51		/* GPIRQ1 Interrupt Mapping Register */
#define SC520_GP2IMAP		0x0d52		/* GPIRQ2 Interrupt Mapping Register */
#define SC520_GP3IMAP		0x0d53		/* GPIRQ3 Interrupt Mapping Register */
#define SC520_GP4IMAP		0x0d54		/* GPIRQ4 Interrupt Mapping Register */
#define SC520_GP5IMAP		0x0d55		/* GPIRQ5 Interrupt Mapping Register */
#define SC520_GP6IMAP		0x0d56		/* GPIRQ6 Interrupt Mapping Register */
#define SC520_GP7IMAP		0x0d57		/* GPIRQ7 Interrupt Mapping Register */
#define SC520_GP8IMAP		0x0d58		/* GPIRQ8 Interrupt Mapping Register */
#define SC520_GP9IMAP		0x0d59		/* GPIRQ9 Interrupt Mapping Register */
#define SC520_GP10IMAP		0x0d5a		/* GPIRQ10 Interrupt Mapping Register */
#define SC520_SYSINFO		0x0d70		/* System Board Information Register */
#define SC520_RESCFG		0x0d72		/* Reset Configuration Register */
#define SC520_RESSTA		0x0d74		/* Reset Status Register */
#define SC520_GPDMAMMIO		0x0d81		/* GP-DMA Memory-Mapped I/O Register */
#define SC520_GPDMAEXTCHMAPA	0x0d82		/* GP-DMA Resource Channel Map A */
#define SC520_GPDMAEXTCHMAPB	0x0d84		/* GP-DMA Resource Channel Map B */
#define SC520_GPDMAEXTPG0	0x0d86		/* GP-DMA Channel 0 Extended Page */
#define SC520_GPDMAEXTPG1	0x0d87		/* GP-DMA Channel 1 Extended Page */
#define SC520_GPDMAEXTPG2	0x0d88		/* GP-DMA Channel 2 Extended Page */
#define SC520_GPDMAEXTPG3	0x0d89		/* GP-DMA Channel 3 Extended Page */
#define SC520_GPDMAEXTPG5	0x0d8a		/* GP-DMA Channel 5 Extended Page */
#define SC520_GPDMAEXTPG6	0x0d8b		/* GP-DMA Channel 6 Extended Page */
#define SC520_GPDMAEXTPG7	0x0d8c		/* GP-DMA Channel 7 Extended Page */
#define SC520_GPDMAEXTTC3	0x0d90		/* GP-DMA Channel 3 Extender Transfer count */
#define SC520_GPDMAEXTTC5	0x0d91		/* GP-DMA Channel 5 Extender Transfer count */
#define SC520_GPDMAEXTTC6	0x0d92		/* GP-DMA Channel 6 Extender Transfer count */
#define SC520_GPDMAEXTTC7	0x0d93		/* GP-DMA Channel 7 Extender Transfer count */
#define SC520_GPDMABCCTL	0x0d98		/* Buffer Chaining Control */
#define SC520_GPDMABCSTA	0x0d99		/* Buffer Chaining Status */
#define SC520_GPDMABSINTENB	0x0d9a		/* Buffer Chaining Interrupt Enable */
#define SC520_GPDMABCVAL	0x0d9b		/* Buffer Chaining Valid */
#define SC520_GPDMANXTADDL3	0x0da0		/* GP-DMA Channel 3 Next Address Low */
#define SC520_GPDMANXTADDH3	0x0da2		/* GP-DMA Channel 3 Next Address High */
#define SC520_GPDMANXTADDL5	0x0da4		/* GP-DMA Channel 5 Next Address Low */
#define SC520_GPDMANXTADDH5	0x0da6		/* GP-DMA Channel 5 Next Address High */
#define SC520_GPDMANXTADDL6	0x0da8		/* GP-DMA Channel 6 Next Address Low */
#define SC520_GPDMANXTADDH6	0x0daa		/* GP-DMA Channel 6 Next Address High */
#define SC520_GPDMANXTADDL7	0x0dac		/* GP-DMA Channel 7 Next Address Low */
#define SC520_GPDMANXTADDH7	0x0dae		/* GP-DMA Channel 7 Next Address High */
#define SC520_GPDMANXTTCL3	0x0db0		/* GP-DMA Channel 3 Next Transfer Count Low */
#define SC520_GPDMANXTTCH3	0x0db2		/* GP-DMA Channel 3 Next Transfer Count High */
#define SC520_GPDMANXTTCL5	0x0db4		/* GP-DMA Channel 5 Next Transfer Count Low */
#define SC520_GPDMANXTTCH5	0x0db6		/* GP-DMA Channel 5 Next Transfer Count High */
#define SC520_GPDMANXTTCL6	0x0db8		/* GP-DMA Channel 6 Next Transfer Count Low */
#define SC520_GPDMANXTTCH6	0x0dba		/* GP-DMA Channel 6 Next Transfer Count High */
#define SC520_GPDMANXTTCL7	0x0dbc		/* GP-DMA Channel 7 Next Transfer Count Low */
#define SC520_GPDMANXTTCH7	0x0dbe		/* GP-DMA Channel 7 Next Transfer Count High */

/* MMCR Register bits (not all of them :) ) */

/* BITS for SC520_ADDDECCTL: */
#define WPV_INT_ENB		0x80		/* Write-Protect Violation Interrupt Enable */
#define IO_HOLE_DEST		0x10		/* I/O Hole Access Destination */
#define RTC_DIS			0x04		/* RTC Disable */
#define UART2_DIS		0x02		/* UART2 Disable */
#define UART1_DIS		0x01		/* UART1 Disable */

/* bus mapping constants (used for PCI core initialization) */																																																 /* bus mapping constants */
#define SC520_REG_ADDR		0x00000cf8     
#define SC520_REG_DATA		0x00000cfc


#define SC520_ISA_MEM_PHYS	0x00000000
#define SC520_ISA_MEM_BUS	0x00000000
#define SC520_ISA_MEM_SIZE	0x01000000

#define SC520_ISA_IO_PHYS	0x00000000
#define SC520_ISA_IO_BUS	0x00000000
#define SC520_ISA_IO_SIZE	0x00001000

/* PCI I/O space from 0x1000 to 0xfdff */
#define SC520_PCI_IO_PHYS	0x00001000
#define SC520_PCI_IO_BUS	0x00001000
#define SC520_PCI_IO_SIZE	0x0000ee00

/* system memory from 0x00000000 to 0x0fffffff */
#define	SC520_PCI_MEMORY_PHYS	0x00000000
#define	SC520_PCI_MEMORY_BUS	0x00000000
#define SC520_PCI_MEMORY_SIZE	0x10000000

/* PCI bus memory from 0x10000000 to 0x27ffffff */
#define SC520_PCI_MEM_PHYS	0x10000000
#define SC520_PCI_MEM_BUS       0x10000000
#define SC520_PCI_MEM_SIZE	0x18000000

/* 0x28000000 - 0x3fffffff is used by the flash banks */

/* 0x40000000 - 0xffffffff is not adressable by the SC520 */

/* utility functions */
void write_mmcr_byte(u16 mmcr, u8 data);
void write_mmcr_word(u16 mmcr, u16 data);
void write_mmcr_long(u16 mmcr, u32 data);
u8 read_mmcr_byte(u16 mmcr);
u16 read_mmcr_word(u16 mmcr);
u32 read_mmcr_long(u16 mmcr);

void init_sc520(void);
unsigned long init_sc520_dram(void);
void pci_sc520_init(struct pci_controller *hose);

#endif