hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
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
/*
 * Definitions for the SGI CRIME (CPU, Rendering, Interconnect and Memory
 * Engine)
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 2000 Harald Koerfgen
 */
 
#ifndef __ASM_CRIME_H__
#define __ASM_CRIME_H__
 
/*
 * Address map
 */
#define CRIME_BASE    0x14000000    /* physical */
 
struct sgi_crime {
   volatile unsigned long id;
#define CRIME_ID_MASK            0xff
#define CRIME_ID_IDBITS            0xf0
#define CRIME_ID_IDVALUE        0xa0
#define CRIME_ID_REV            0x0f
#define CRIME_REV_PETTY            0x00
#define CRIME_REV_11            0x11
#define CRIME_REV_13            0x13
#define CRIME_REV_14            0x14
 
   volatile unsigned long control;
#define CRIME_CONTROL_MASK        0x3fff
#define CRIME_CONTROL_TRITON_SYSADC    0x2000
#define CRIME_CONTROL_CRIME_SYSADC    0x1000
#define CRIME_CONTROL_HARD_RESET    0x0800
#define CRIME_CONTROL_SOFT_RESET    0x0400
#define CRIME_CONTROL_DOG_ENA        0x0200
#define CRIME_CONTROL_ENDIANESS        0x0100
#define CRIME_CONTROL_ENDIAN_BIG    0x0100
#define CRIME_CONTROL_ENDIAN_LITTLE    0x0000
#define CRIME_CONTROL_CQUEUE_HWM    0x000f
#define CRIME_CONTROL_CQUEUE_SHFT    0
#define CRIME_CONTROL_WBUF_HWM        0x00f0
#define CRIME_CONTROL_WBUF_SHFT        8
 
   volatile unsigned long istat;
   volatile unsigned long imask;
   volatile unsigned long soft_int;
   volatile unsigned long hard_int;
#define MACE_VID_IN1_INT        BIT(0)
#define MACE_VID_IN2_INT        BIT(1)
#define MACE_VID_OUT_INT        BIT(2)
#define MACE_ETHERNET_INT        BIT(3)
#define MACE_SUPERIO_INT        BIT(4)
#define MACE_MISC_INT            BIT(5)
#define MACE_AUDIO_INT            BIT(6)
#define MACE_PCI_BRIDGE_INT        BIT(7)
#define MACEPCI_SCSI0_INT        BIT(8)
#define MACEPCI_SCSI1_INT        BIT(9)
#define MACEPCI_SLOT0_INT        BIT(10)
#define MACEPCI_SLOT1_INT        BIT(11)
#define MACEPCI_SLOT2_INT        BIT(12)
#define MACEPCI_SHARED0_INT        BIT(13)
#define MACEPCI_SHARED1_INT        BIT(14)
#define MACEPCI_SHARED2_INT        BIT(15)
#define CRIME_GBE0_INT            BIT(16)
#define CRIME_GBE1_INT            BIT(17)
#define CRIME_GBE2_INT            BIT(18)
#define CRIME_GBE3_INT            BIT(19)
#define CRIME_CPUERR_INT        BIT(20)
#define CRIME_MEMERR_INT        BIT(21)
#define CRIME_RE_EMPTY_E_INT        BIT(22)
#define CRIME_RE_FULL_E_INT        BIT(23)
#define CRIME_RE_IDLE_E_INT        BIT(24)
#define CRIME_RE_EMPTY_L_INT        BIT(25)
#define CRIME_RE_FULL_L_INT        BIT(26)
#define CRIME_RE_IDLE_L_INT        BIT(27)
#define CRIME_SOFT0_INT            BIT(28)
#define CRIME_SOFT1_INT            BIT(29)
#define CRIME_SOFT2_INT            BIT(30)
#define CRIME_SYSCORERR_INT        CRIME_SOFT2_INT
#define CRIME_VICE_INT            BIT(31)
/* Masks for deciding who handles the interrupt */
#define CRIME_MACE_INT_MASK        0x8f
#define CRIME_MACEISA_INT_MASK        0x70
#define CRIME_MACEPCI_INT_MASK        0xff00
#define CRIME_CRIME_INT_MASK        0xffff0000
 
   volatile unsigned long watchdog;
#define CRIME_DOG_POWER_ON_RESET    0x00010000
#define CRIME_DOG_WARM_RESET        0x00080000
#define CRIME_DOG_TIMEOUT        (CRIME_DOG_POWER_ON_RESET|CRIME_DOG_WARM_RESET)
#define CRIME_DOG_VALUE            0x00007fff
 
   volatile unsigned long timer;
#define CRIME_MASTER_FREQ        66666500    /* Crime upcounter frequency */
#define CRIME_NS_PER_TICK        15        /* for delay_calibrate */
 
   volatile unsigned long cpu_error_addr;
#define CRIME_CPU_ERROR_ADDR_MASK    0x3ffffffff
 
   volatile unsigned long cpu_error_stat;
#define CRIME_CPU_ERROR_MASK        0x7        /* cpu error stat is 3 bits */
#define CRIME_CPU_ERROR_CPU_ILL_ADDR    0x4
#define CRIME_CPU_ERROR_VICE_WRT_PRTY    0x2
#define CRIME_CPU_ERROR_CPU_WRT_PRTY    0x1
 
   unsigned long _pad0[54];
 
   volatile unsigned long mc_ctrl;
   volatile unsigned long bank_ctrl[8];
#define CRIME_MEM_BANK_CONTROL_MASK        0x11f    /* 9 bits 7:5 reserved */
#define CRIME_MEM_BANK_CONTROL_ADDR        0x01f
#define CRIME_MEM_BANK_CONTROL_SDRAM_SIZE    0x100
#define CRIME_MAXBANKS                8
 
   volatile unsigned long mem_ref_counter;
#define CRIME_MEM_REF_COUNTER_MASK    0x3ff        /* 10bit */
 
   volatile unsigned long mem_error_stat;
#define CRIME_MEM_ERROR_STAT_MASK    0x0ff7ffff    /* 28-bit register */
#define CRIME_MEM_ERROR_MACE_ID        0x0000007f
#define CRIME_MEM_ERROR_MACE_ACCESS    0x00000080
#define CRIME_MEM_ERROR_RE_ID        0x00007f00
#define CRIME_MEM_ERROR_RE_ACCESS    0x00008000
#define CRIME_MEM_ERROR_GBE_ACCESS    0x00010000
#define CRIME_MEM_ERROR_VICE_ACCESS    0x00020000
#define CRIME_MEM_ERROR_CPU_ACCESS    0x00040000
#define CRIME_MEM_ERROR_RESERVED    0x00080000
#define CRIME_MEM_ERROR_SOFT_ERR    0x00100000
#define CRIME_MEM_ERROR_HARD_ERR    0x00200000
#define CRIME_MEM_ERROR_MULTIPLE    0x00400000
#define CRIME_MEM_ERROR_ECC        0x01800000
#define CRIME_MEM_ERROR_MEM_ECC_RD    0x00800000
#define CRIME_MEM_ERROR_MEM_ECC_RMW    0x01000000
#define CRIME_MEM_ERROR_INV        0x0e000000
#define CRIME_MEM_ERROR_INV_MEM_ADDR_RD 0x02000000
#define CRIME_MEM_ERROR_INV_MEM_ADDR_WR 0x04000000
#define CRIME_MEM_ERROR_INV_MEM_ADDR_RMW 0x08000000
 
   volatile unsigned long mem_error_addr;
#define CRIME_MEM_ERROR_ADDR_MASK    0x3fffffff
 
   volatile unsigned long mem_ecc_syn;
#define CRIME_MEM_ERROR_ECC_SYN_MASK    0xffffffff
 
   volatile unsigned long mem_ecc_chk;
#define CRIME_MEM_ERROR_ECC_CHK_MASK    0xffffffff
 
   volatile unsigned long mem_ecc_repl;
#define CRIME_MEM_ERROR_ECC_REPL_MASK    0xffffffff
};
 
extern struct sgi_crime __iomem *crime;
 
#define CRIME_HI_MEM_BASE    0x40000000    /* this is where whole 1G of RAM is mapped */
 
#endif /* __ASM_CRIME_H__ */