xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/sni.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * SNI specific definitions
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
5*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
6*4882a593Smuzhiyun  * for more details.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * Copyright (C) 1997, 1998 by Ralf Baechle
9*4882a593Smuzhiyun  * Copyright (C) 2006 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun #ifndef __ASM_SNI_H
12*4882a593Smuzhiyun #define __ASM_SNI_H
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/irqreturn.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun extern unsigned int sni_brd_type;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define SNI_BRD_10		   2
19*4882a593Smuzhiyun #define SNI_BRD_10NEW		   3
20*4882a593Smuzhiyun #define SNI_BRD_TOWER_OASIC	   4
21*4882a593Smuzhiyun #define SNI_BRD_MINITOWER	   5
22*4882a593Smuzhiyun #define SNI_BRD_PCI_TOWER	   6
23*4882a593Smuzhiyun #define SNI_BRD_RM200		   7
24*4882a593Smuzhiyun #define SNI_BRD_PCI_MTOWER	   8
25*4882a593Smuzhiyun #define SNI_BRD_PCI_DESKTOP	   9
26*4882a593Smuzhiyun #define SNI_BRD_PCI_TOWER_CPLUS	  10
27*4882a593Smuzhiyun #define SNI_BRD_PCI_MTOWER_CPLUS  11
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* RM400 cpu types */
30*4882a593Smuzhiyun #define SNI_CPU_M8021		0x01
31*4882a593Smuzhiyun #define SNI_CPU_M8030		0x04
32*4882a593Smuzhiyun #define SNI_CPU_M8031		0x06
33*4882a593Smuzhiyun #define SNI_CPU_M8034		0x0f
34*4882a593Smuzhiyun #define SNI_CPU_M8037		0x07
35*4882a593Smuzhiyun #define SNI_CPU_M8040		0x05
36*4882a593Smuzhiyun #define SNI_CPU_M8043		0x09
37*4882a593Smuzhiyun #define SNI_CPU_M8050		0x0b
38*4882a593Smuzhiyun #define SNI_CPU_M8053		0x0d
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define SNI_PORT_BASE		CKSEG1ADDR(0xb4000000)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #ifndef __MIPSEL__
43*4882a593Smuzhiyun /*
44*4882a593Smuzhiyun  * ASIC PCI registers for big endian configuration.
45*4882a593Smuzhiyun  */
46*4882a593Smuzhiyun #define PCIMT_UCONF		CKSEG1ADDR(0xbfff0004)
47*4882a593Smuzhiyun #define PCIMT_IOADTIMEOUT2	CKSEG1ADDR(0xbfff000c)
48*4882a593Smuzhiyun #define PCIMT_IOMEMCONF		CKSEG1ADDR(0xbfff0014)
49*4882a593Smuzhiyun #define PCIMT_IOMMU		CKSEG1ADDR(0xbfff001c)
50*4882a593Smuzhiyun #define PCIMT_IOADTIMEOUT1	CKSEG1ADDR(0xbfff0024)
51*4882a593Smuzhiyun #define PCIMT_DMAACCESS		CKSEG1ADDR(0xbfff002c)
52*4882a593Smuzhiyun #define PCIMT_DMAHIT		CKSEG1ADDR(0xbfff0034)
53*4882a593Smuzhiyun #define PCIMT_ERRSTATUS		CKSEG1ADDR(0xbfff003c)
54*4882a593Smuzhiyun #define PCIMT_ERRADDR		CKSEG1ADDR(0xbfff0044)
55*4882a593Smuzhiyun #define PCIMT_SYNDROME		CKSEG1ADDR(0xbfff004c)
56*4882a593Smuzhiyun #define PCIMT_ITPEND		CKSEG1ADDR(0xbfff0054)
57*4882a593Smuzhiyun #define	 IT_INT2		0x01
58*4882a593Smuzhiyun #define	 IT_INTD		0x02
59*4882a593Smuzhiyun #define	 IT_INTC		0x04
60*4882a593Smuzhiyun #define	 IT_INTB		0x08
61*4882a593Smuzhiyun #define	 IT_INTA		0x10
62*4882a593Smuzhiyun #define	 IT_EISA		0x20
63*4882a593Smuzhiyun #define	 IT_SCSI		0x40
64*4882a593Smuzhiyun #define	 IT_ETH			0x80
65*4882a593Smuzhiyun #define PCIMT_IRQSEL		CKSEG1ADDR(0xbfff005c)
66*4882a593Smuzhiyun #define PCIMT_TESTMEM		CKSEG1ADDR(0xbfff0064)
67*4882a593Smuzhiyun #define PCIMT_ECCREG		CKSEG1ADDR(0xbfff006c)
68*4882a593Smuzhiyun #define PCIMT_CONFIG_ADDRESS	CKSEG1ADDR(0xbfff0074)
69*4882a593Smuzhiyun #define PCIMT_ASIC_ID		CKSEG1ADDR(0xbfff007c)	/* read */
70*4882a593Smuzhiyun #define PCIMT_SOFT_RESET	CKSEG1ADDR(0xbfff007c)	/* write */
71*4882a593Smuzhiyun #define PCIMT_PIA_OE		CKSEG1ADDR(0xbfff0084)
72*4882a593Smuzhiyun #define PCIMT_PIA_DATAOUT	CKSEG1ADDR(0xbfff008c)
73*4882a593Smuzhiyun #define PCIMT_PIA_DATAIN	CKSEG1ADDR(0xbfff0094)
74*4882a593Smuzhiyun #define PCIMT_CACHECONF		CKSEG1ADDR(0xbfff009c)
75*4882a593Smuzhiyun #define PCIMT_INVSPACE		CKSEG1ADDR(0xbfff00a4)
76*4882a593Smuzhiyun #else
77*4882a593Smuzhiyun /*
78*4882a593Smuzhiyun  * ASIC PCI registers for little endian configuration.
79*4882a593Smuzhiyun  */
80*4882a593Smuzhiyun #define PCIMT_UCONF		CKSEG1ADDR(0xbfff0000)
81*4882a593Smuzhiyun #define PCIMT_IOADTIMEOUT2	CKSEG1ADDR(0xbfff0008)
82*4882a593Smuzhiyun #define PCIMT_IOMEMCONF		CKSEG1ADDR(0xbfff0010)
83*4882a593Smuzhiyun #define PCIMT_IOMMU		CKSEG1ADDR(0xbfff0018)
84*4882a593Smuzhiyun #define PCIMT_IOADTIMEOUT1	CKSEG1ADDR(0xbfff0020)
85*4882a593Smuzhiyun #define PCIMT_DMAACCESS		CKSEG1ADDR(0xbfff0028)
86*4882a593Smuzhiyun #define PCIMT_DMAHIT		CKSEG1ADDR(0xbfff0030)
87*4882a593Smuzhiyun #define PCIMT_ERRSTATUS		CKSEG1ADDR(0xbfff0038)
88*4882a593Smuzhiyun #define PCIMT_ERRADDR		CKSEG1ADDR(0xbfff0040)
89*4882a593Smuzhiyun #define PCIMT_SYNDROME		CKSEG1ADDR(0xbfff0048)
90*4882a593Smuzhiyun #define PCIMT_ITPEND		CKSEG1ADDR(0xbfff0050)
91*4882a593Smuzhiyun #define	 IT_INT2		0x01
92*4882a593Smuzhiyun #define	 IT_INTD		0x02
93*4882a593Smuzhiyun #define	 IT_INTC		0x04
94*4882a593Smuzhiyun #define	 IT_INTB		0x08
95*4882a593Smuzhiyun #define	 IT_INTA		0x10
96*4882a593Smuzhiyun #define	 IT_EISA		0x20
97*4882a593Smuzhiyun #define	 IT_SCSI		0x40
98*4882a593Smuzhiyun #define	 IT_ETH			0x80
99*4882a593Smuzhiyun #define PCIMT_IRQSEL		CKSEG1ADDR(0xbfff0058)
100*4882a593Smuzhiyun #define PCIMT_TESTMEM		CKSEG1ADDR(0xbfff0060)
101*4882a593Smuzhiyun #define PCIMT_ECCREG		CKSEG1ADDR(0xbfff0068)
102*4882a593Smuzhiyun #define PCIMT_CONFIG_ADDRESS	CKSEG1ADDR(0xbfff0070)
103*4882a593Smuzhiyun #define PCIMT_ASIC_ID		CKSEG1ADDR(0xbfff0078)	/* read */
104*4882a593Smuzhiyun #define PCIMT_SOFT_RESET	CKSEG1ADDR(0xbfff0078)	/* write */
105*4882a593Smuzhiyun #define PCIMT_PIA_OE		CKSEG1ADDR(0xbfff0080)
106*4882a593Smuzhiyun #define PCIMT_PIA_DATAOUT	CKSEG1ADDR(0xbfff0088)
107*4882a593Smuzhiyun #define PCIMT_PIA_DATAIN	CKSEG1ADDR(0xbfff0090)
108*4882a593Smuzhiyun #define PCIMT_CACHECONF		CKSEG1ADDR(0xbfff0098)
109*4882a593Smuzhiyun #define PCIMT_INVSPACE		CKSEG1ADDR(0xbfff00a0)
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define PCIMT_PCI_CONF		CKSEG1ADDR(0xbfff0100)
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /*
115*4882a593Smuzhiyun  * Data port for the PCI bus in IO space
116*4882a593Smuzhiyun  */
117*4882a593Smuzhiyun #define PCIMT_CONFIG_DATA	0x0cfc
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /*
120*4882a593Smuzhiyun  * Board specific registers
121*4882a593Smuzhiyun  */
122*4882a593Smuzhiyun #define PCIMT_CSMSR		CKSEG1ADDR(0xbfd00000)
123*4882a593Smuzhiyun #define PCIMT_CSSWITCH		CKSEG1ADDR(0xbfd10000)
124*4882a593Smuzhiyun #define PCIMT_CSITPEND		CKSEG1ADDR(0xbfd20000)
125*4882a593Smuzhiyun #define PCIMT_AUTO_PO_EN	CKSEG1ADDR(0xbfd30000)
126*4882a593Smuzhiyun #define PCIMT_CLR_TEMP		CKSEG1ADDR(0xbfd40000)
127*4882a593Smuzhiyun #define PCIMT_AUTO_PO_DIS	CKSEG1ADDR(0xbfd50000)
128*4882a593Smuzhiyun #define PCIMT_EXMSR		CKSEG1ADDR(0xbfd60000)
129*4882a593Smuzhiyun #define PCIMT_UNUSED1		CKSEG1ADDR(0xbfd70000)
130*4882a593Smuzhiyun #define PCIMT_CSWCSM		CKSEG1ADDR(0xbfd80000)
131*4882a593Smuzhiyun #define PCIMT_UNUSED2		CKSEG1ADDR(0xbfd90000)
132*4882a593Smuzhiyun #define PCIMT_CSLED		CKSEG1ADDR(0xbfda0000)
133*4882a593Smuzhiyun #define PCIMT_CSMAPISA		CKSEG1ADDR(0xbfdb0000)
134*4882a593Smuzhiyun #define PCIMT_CSRSTBP		CKSEG1ADDR(0xbfdc0000)
135*4882a593Smuzhiyun #define PCIMT_CLRPOFF		CKSEG1ADDR(0xbfdd0000)
136*4882a593Smuzhiyun #define PCIMT_CSTIMER		CKSEG1ADDR(0xbfde0000)
137*4882a593Smuzhiyun #define PCIMT_PWDN		CKSEG1ADDR(0xbfdf0000)
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun /*
140*4882a593Smuzhiyun  * A20R based boards
141*4882a593Smuzhiyun  */
142*4882a593Smuzhiyun #define A20R_PT_CLOCK_BASE	CKSEG1ADDR(0xbc040000)
143*4882a593Smuzhiyun #define A20R_PT_TIM0_ACK	CKSEG1ADDR(0xbc050000)
144*4882a593Smuzhiyun #define A20R_PT_TIM1_ACK	CKSEG1ADDR(0xbc060000)
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #define SNI_A20R_IRQ_BASE	MIPS_CPU_IRQ_BASE
147*4882a593Smuzhiyun #define SNI_A20R_IRQ_TIMER	(SNI_A20R_IRQ_BASE+5)
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #define SNI_PCIT_INT_REG	CKSEG1ADDR(0xbfff000c)
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun #define SNI_PCIT_INT_START	24
152*4882a593Smuzhiyun #define SNI_PCIT_INT_END	30
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun #define PCIT_IRQ_ETHERNET	(MIPS_CPU_IRQ_BASE + 5)
155*4882a593Smuzhiyun #define PCIT_IRQ_INTA		(SNI_PCIT_INT_START + 0)
156*4882a593Smuzhiyun #define PCIT_IRQ_INTB		(SNI_PCIT_INT_START + 1)
157*4882a593Smuzhiyun #define PCIT_IRQ_INTC		(SNI_PCIT_INT_START + 2)
158*4882a593Smuzhiyun #define PCIT_IRQ_INTD		(SNI_PCIT_INT_START + 3)
159*4882a593Smuzhiyun #define PCIT_IRQ_SCSI0		(SNI_PCIT_INT_START + 4)
160*4882a593Smuzhiyun #define PCIT_IRQ_SCSI1		(SNI_PCIT_INT_START + 5)
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun /*
164*4882a593Smuzhiyun  * Interrupt 0-16 are EISA interrupts.	Interrupts from 16 on are assigned
165*4882a593Smuzhiyun  * to the other interrupts generated by ASIC PCI.
166*4882a593Smuzhiyun  *
167*4882a593Smuzhiyun  * INT2 is a wired-or of the push button interrupt, high temperature interrupt
168*4882a593Smuzhiyun  * ASIC PCI interrupt.
169*4882a593Smuzhiyun  */
170*4882a593Smuzhiyun #define PCIMT_KEYBOARD_IRQ	 1
171*4882a593Smuzhiyun #define PCIMT_IRQ_INT2		24
172*4882a593Smuzhiyun #define PCIMT_IRQ_INTD		25
173*4882a593Smuzhiyun #define PCIMT_IRQ_INTC		26
174*4882a593Smuzhiyun #define PCIMT_IRQ_INTB		27
175*4882a593Smuzhiyun #define PCIMT_IRQ_INTA		28
176*4882a593Smuzhiyun #define PCIMT_IRQ_EISA		29
177*4882a593Smuzhiyun #define PCIMT_IRQ_SCSI		30
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun #define PCIMT_IRQ_ETHERNET	(MIPS_CPU_IRQ_BASE+6)
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun #if 0
182*4882a593Smuzhiyun #define PCIMT_IRQ_TEMPERATURE	24
183*4882a593Smuzhiyun #define PCIMT_IRQ_EISA_NMI	25
184*4882a593Smuzhiyun #define PCIMT_IRQ_POWER_OFF	26
185*4882a593Smuzhiyun #define PCIMT_IRQ_BUTTON	27
186*4882a593Smuzhiyun #endif
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /*
189*4882a593Smuzhiyun  * Base address for the mapped 16mb EISA bus segment.
190*4882a593Smuzhiyun  */
191*4882a593Smuzhiyun #define PCIMT_EISA_BASE		CKSEG1ADDR(0xb0000000)
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* PCI EISA Interrupt acknowledge  */
194*4882a593Smuzhiyun #define PCIMT_INT_ACKNOWLEDGE	CKSEG1ADDR(0xba000000)
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun /*
197*4882a593Smuzhiyun  *  SNI ID PROM
198*4882a593Smuzhiyun  *
199*4882a593Smuzhiyun  * SNI_IDPROM_MEMSIZE  Memsize in 16MB quantities
200*4882a593Smuzhiyun  * SNI_IDPROM_BRDTYPE  Board Type
201*4882a593Smuzhiyun  * SNI_IDPROM_CPUTYPE  CPU Type on RM400
202*4882a593Smuzhiyun  */
203*4882a593Smuzhiyun #ifdef CONFIG_CPU_BIG_ENDIAN
204*4882a593Smuzhiyun #define __SNI_END 0
205*4882a593Smuzhiyun #endif
206*4882a593Smuzhiyun #ifdef CONFIG_CPU_LITTLE_ENDIAN
207*4882a593Smuzhiyun #define __SNI_END 3
208*4882a593Smuzhiyun #endif
209*4882a593Smuzhiyun #define SNI_IDPROM_BASE	       CKSEG1ADDR(0x1ff00000)
210*4882a593Smuzhiyun #define SNI_IDPROM_MEMSIZE     (SNI_IDPROM_BASE + (0x28 ^ __SNI_END))
211*4882a593Smuzhiyun #define SNI_IDPROM_BRDTYPE     (SNI_IDPROM_BASE + (0x29 ^ __SNI_END))
212*4882a593Smuzhiyun #define SNI_IDPROM_CPUTYPE     (SNI_IDPROM_BASE + (0x30 ^ __SNI_END))
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun #define SNI_IDPROM_SIZE 0x1000
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun /* board specific init functions */
217*4882a593Smuzhiyun extern void sni_a20r_init(void);
218*4882a593Smuzhiyun extern void sni_pcit_init(void);
219*4882a593Smuzhiyun extern void sni_rm200_init(void);
220*4882a593Smuzhiyun extern void sni_pcimt_init(void);
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* board specific irq init functions */
223*4882a593Smuzhiyun extern void sni_a20r_irq_init(void);
224*4882a593Smuzhiyun extern void sni_pcit_irq_init(void);
225*4882a593Smuzhiyun extern void sni_pcit_cplus_irq_init(void);
226*4882a593Smuzhiyun extern void sni_rm200_irq_init(void);
227*4882a593Smuzhiyun extern void sni_pcimt_irq_init(void);
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun /* timer inits */
230*4882a593Smuzhiyun extern void sni_cpu_time_init(void);
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun /* eisa init for RM200/400 */
233*4882a593Smuzhiyun #ifdef CONFIG_EISA
234*4882a593Smuzhiyun extern int sni_eisa_root_init(void);
235*4882a593Smuzhiyun #else
sni_eisa_root_init(void)236*4882a593Smuzhiyun static inline int sni_eisa_root_init(void)
237*4882a593Smuzhiyun {
238*4882a593Smuzhiyun 	return 0;
239*4882a593Smuzhiyun }
240*4882a593Smuzhiyun #endif
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /* common irq stuff */
243*4882a593Smuzhiyun extern void (*sni_hwint)(void);
244*4882a593Smuzhiyun extern irqreturn_t sni_isa_irq_handler(int dummy, void *p);
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun #endif /* __ASM_SNI_H */
247