xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/ip32/crime.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Definitions for the SGI CRIME (CPU, Rendering, Interconnect and Memory
3*4882a593Smuzhiyun  * Engine)
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
6*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
7*4882a593Smuzhiyun  * for more details.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Copyright (C) 2000 Harald Koerfgen
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #ifndef __ASM_CRIME_H__
13*4882a593Smuzhiyun #define __ASM_CRIME_H__
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /*
16*4882a593Smuzhiyun  * Address map
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun #define CRIME_BASE	0x14000000	/* physical */
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun struct sgi_crime {
21*4882a593Smuzhiyun 	volatile unsigned long id;
22*4882a593Smuzhiyun #define CRIME_ID_MASK			0xff
23*4882a593Smuzhiyun #define CRIME_ID_IDBITS			0xf0
24*4882a593Smuzhiyun #define CRIME_ID_IDVALUE		0xa0
25*4882a593Smuzhiyun #define CRIME_ID_REV			0x0f
26*4882a593Smuzhiyun #define CRIME_REV_PETTY			0x00
27*4882a593Smuzhiyun #define CRIME_REV_11			0x11
28*4882a593Smuzhiyun #define CRIME_REV_13			0x13
29*4882a593Smuzhiyun #define CRIME_REV_14			0x14
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	volatile unsigned long control;
32*4882a593Smuzhiyun #define CRIME_CONTROL_MASK		0x3fff
33*4882a593Smuzhiyun #define CRIME_CONTROL_TRITON_SYSADC	0x2000
34*4882a593Smuzhiyun #define CRIME_CONTROL_CRIME_SYSADC	0x1000
35*4882a593Smuzhiyun #define CRIME_CONTROL_HARD_RESET	0x0800
36*4882a593Smuzhiyun #define CRIME_CONTROL_SOFT_RESET	0x0400
37*4882a593Smuzhiyun #define CRIME_CONTROL_DOG_ENA		0x0200
38*4882a593Smuzhiyun #define CRIME_CONTROL_ENDIANESS		0x0100
39*4882a593Smuzhiyun #define CRIME_CONTROL_ENDIAN_BIG	0x0100
40*4882a593Smuzhiyun #define CRIME_CONTROL_ENDIAN_LITTLE	0x0000
41*4882a593Smuzhiyun #define CRIME_CONTROL_CQUEUE_HWM	0x000f
42*4882a593Smuzhiyun #define CRIME_CONTROL_CQUEUE_SHFT	0
43*4882a593Smuzhiyun #define CRIME_CONTROL_WBUF_HWM		0x00f0
44*4882a593Smuzhiyun #define CRIME_CONTROL_WBUF_SHFT		8
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	volatile unsigned long istat;
47*4882a593Smuzhiyun 	volatile unsigned long imask;
48*4882a593Smuzhiyun 	volatile unsigned long soft_int;
49*4882a593Smuzhiyun 	volatile unsigned long hard_int;
50*4882a593Smuzhiyun #define MACE_VID_IN1_INT		BIT(0)
51*4882a593Smuzhiyun #define MACE_VID_IN2_INT		BIT(1)
52*4882a593Smuzhiyun #define MACE_VID_OUT_INT		BIT(2)
53*4882a593Smuzhiyun #define MACE_ETHERNET_INT		BIT(3)
54*4882a593Smuzhiyun #define MACE_SUPERIO_INT		BIT(4)
55*4882a593Smuzhiyun #define MACE_MISC_INT			BIT(5)
56*4882a593Smuzhiyun #define MACE_AUDIO_INT			BIT(6)
57*4882a593Smuzhiyun #define MACE_PCI_BRIDGE_INT		BIT(7)
58*4882a593Smuzhiyun #define MACEPCI_SCSI0_INT		BIT(8)
59*4882a593Smuzhiyun #define MACEPCI_SCSI1_INT		BIT(9)
60*4882a593Smuzhiyun #define MACEPCI_SLOT0_INT		BIT(10)
61*4882a593Smuzhiyun #define MACEPCI_SLOT1_INT		BIT(11)
62*4882a593Smuzhiyun #define MACEPCI_SLOT2_INT		BIT(12)
63*4882a593Smuzhiyun #define MACEPCI_SHARED0_INT		BIT(13)
64*4882a593Smuzhiyun #define MACEPCI_SHARED1_INT		BIT(14)
65*4882a593Smuzhiyun #define MACEPCI_SHARED2_INT		BIT(15)
66*4882a593Smuzhiyun #define CRIME_GBE0_INT			BIT(16)
67*4882a593Smuzhiyun #define CRIME_GBE1_INT			BIT(17)
68*4882a593Smuzhiyun #define CRIME_GBE2_INT			BIT(18)
69*4882a593Smuzhiyun #define CRIME_GBE3_INT			BIT(19)
70*4882a593Smuzhiyun #define CRIME_CPUERR_INT		BIT(20)
71*4882a593Smuzhiyun #define CRIME_MEMERR_INT		BIT(21)
72*4882a593Smuzhiyun #define CRIME_RE_EMPTY_E_INT		BIT(22)
73*4882a593Smuzhiyun #define CRIME_RE_FULL_E_INT		BIT(23)
74*4882a593Smuzhiyun #define CRIME_RE_IDLE_E_INT		BIT(24)
75*4882a593Smuzhiyun #define CRIME_RE_EMPTY_L_INT		BIT(25)
76*4882a593Smuzhiyun #define CRIME_RE_FULL_L_INT		BIT(26)
77*4882a593Smuzhiyun #define CRIME_RE_IDLE_L_INT		BIT(27)
78*4882a593Smuzhiyun #define CRIME_SOFT0_INT			BIT(28)
79*4882a593Smuzhiyun #define CRIME_SOFT1_INT			BIT(29)
80*4882a593Smuzhiyun #define CRIME_SOFT2_INT			BIT(30)
81*4882a593Smuzhiyun #define CRIME_SYSCORERR_INT		CRIME_SOFT2_INT
82*4882a593Smuzhiyun #define CRIME_VICE_INT			BIT(31)
83*4882a593Smuzhiyun /* Masks for deciding who handles the interrupt */
84*4882a593Smuzhiyun #define CRIME_MACE_INT_MASK		0x8f
85*4882a593Smuzhiyun #define CRIME_MACEISA_INT_MASK		0x70
86*4882a593Smuzhiyun #define CRIME_MACEPCI_INT_MASK		0xff00
87*4882a593Smuzhiyun #define CRIME_CRIME_INT_MASK		0xffff0000
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 	volatile unsigned long watchdog;
90*4882a593Smuzhiyun #define CRIME_DOG_POWER_ON_RESET	0x00010000
91*4882a593Smuzhiyun #define CRIME_DOG_WARM_RESET		0x00080000
92*4882a593Smuzhiyun #define CRIME_DOG_TIMEOUT		(CRIME_DOG_POWER_ON_RESET|CRIME_DOG_WARM_RESET)
93*4882a593Smuzhiyun #define CRIME_DOG_VALUE			0x00007fff
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun 	volatile unsigned long timer;
96*4882a593Smuzhiyun #define CRIME_MASTER_FREQ		66666500	/* Crime upcounter frequency */
97*4882a593Smuzhiyun #define CRIME_NS_PER_TICK		15		/* for delay_calibrate */
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun 	volatile unsigned long cpu_error_addr;
100*4882a593Smuzhiyun #define CRIME_CPU_ERROR_ADDR_MASK	0x3ffffffff
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun 	volatile unsigned long cpu_error_stat;
103*4882a593Smuzhiyun #define CRIME_CPU_ERROR_MASK		0x7		/* cpu error stat is 3 bits */
104*4882a593Smuzhiyun #define CRIME_CPU_ERROR_CPU_ILL_ADDR	0x4
105*4882a593Smuzhiyun #define CRIME_CPU_ERROR_VICE_WRT_PRTY	0x2
106*4882a593Smuzhiyun #define CRIME_CPU_ERROR_CPU_WRT_PRTY	0x1
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun 	unsigned long _pad0[54];
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	volatile unsigned long mc_ctrl;
111*4882a593Smuzhiyun 	volatile unsigned long bank_ctrl[8];
112*4882a593Smuzhiyun #define CRIME_MEM_BANK_CONTROL_MASK		0x11f	/* 9 bits 7:5 reserved */
113*4882a593Smuzhiyun #define CRIME_MEM_BANK_CONTROL_ADDR		0x01f
114*4882a593Smuzhiyun #define CRIME_MEM_BANK_CONTROL_SDRAM_SIZE	0x100
115*4882a593Smuzhiyun #define CRIME_MAXBANKS				8
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	volatile unsigned long mem_ref_counter;
118*4882a593Smuzhiyun #define CRIME_MEM_REF_COUNTER_MASK	0x3ff		/* 10bit */
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 	volatile unsigned long mem_error_stat;
121*4882a593Smuzhiyun #define CRIME_MEM_ERROR_STAT_MASK	0x0ff7ffff	/* 28-bit register */
122*4882a593Smuzhiyun #define CRIME_MEM_ERROR_MACE_ID		0x0000007f
123*4882a593Smuzhiyun #define CRIME_MEM_ERROR_MACE_ACCESS	0x00000080
124*4882a593Smuzhiyun #define CRIME_MEM_ERROR_RE_ID		0x00007f00
125*4882a593Smuzhiyun #define CRIME_MEM_ERROR_RE_ACCESS	0x00008000
126*4882a593Smuzhiyun #define CRIME_MEM_ERROR_GBE_ACCESS	0x00010000
127*4882a593Smuzhiyun #define CRIME_MEM_ERROR_VICE_ACCESS	0x00020000
128*4882a593Smuzhiyun #define CRIME_MEM_ERROR_CPU_ACCESS	0x00040000
129*4882a593Smuzhiyun #define CRIME_MEM_ERROR_RESERVED	0x00080000
130*4882a593Smuzhiyun #define CRIME_MEM_ERROR_SOFT_ERR	0x00100000
131*4882a593Smuzhiyun #define CRIME_MEM_ERROR_HARD_ERR	0x00200000
132*4882a593Smuzhiyun #define CRIME_MEM_ERROR_MULTIPLE	0x00400000
133*4882a593Smuzhiyun #define CRIME_MEM_ERROR_ECC		0x01800000
134*4882a593Smuzhiyun #define CRIME_MEM_ERROR_MEM_ECC_RD	0x00800000
135*4882a593Smuzhiyun #define CRIME_MEM_ERROR_MEM_ECC_RMW	0x01000000
136*4882a593Smuzhiyun #define CRIME_MEM_ERROR_INV		0x0e000000
137*4882a593Smuzhiyun #define CRIME_MEM_ERROR_INV_MEM_ADDR_RD 0x02000000
138*4882a593Smuzhiyun #define CRIME_MEM_ERROR_INV_MEM_ADDR_WR 0x04000000
139*4882a593Smuzhiyun #define CRIME_MEM_ERROR_INV_MEM_ADDR_RMW 0x08000000
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun 	volatile unsigned long mem_error_addr;
142*4882a593Smuzhiyun #define CRIME_MEM_ERROR_ADDR_MASK	0x3fffffff
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun 	volatile unsigned long mem_ecc_syn;
145*4882a593Smuzhiyun #define CRIME_MEM_ERROR_ECC_SYN_MASK	0xffffffff
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun 	volatile unsigned long mem_ecc_chk;
148*4882a593Smuzhiyun #define CRIME_MEM_ERROR_ECC_CHK_MASK	0xffffffff
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun 	volatile unsigned long mem_ecc_repl;
151*4882a593Smuzhiyun #define CRIME_MEM_ERROR_ECC_REPL_MASK	0xffffffff
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun extern struct sgi_crime __iomem *crime;
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define CRIME_HI_MEM_BASE	0x40000000	/* this is where whole 1G of RAM is mapped */
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun #endif /* __ASM_CRIME_H__ */
159