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*4882a593Smuzhiyunstatic 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