blob: 625232abf02ba1797f3b6a07aab303ea6f96a291 (
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
|
/*
* Memory and machine-specific definitions. Used in C and assembler.
*/
/*
* Sizes
*/
#define BI2BY 8 /* bits per byte */
#define BI2WD 32 /* bits per word */
#define BY2WD 4 /* bytes per word */
#define BY2V 8 /* bytes per double word */
#define BY2PG 4096 /* bytes per page */
#define WD2PG (BY2PG/BY2WD) /* words per page */
#define PGSHIFT 12 /* log(BY2PG) */
#define ROUND(s, sz) (((s)+(sz-1))&~(sz-1))
#define PGROUND(s) ROUND(s, BY2PG)
#define BIT(n) (1<<n)
#define BITS(a,b) ((1<<(b+1))-(1<<a))
#define MAXMACH 1 /* max # cpus system can run */
/*
* Time
*/
#define HZ (100) /* clock frequency */
#define MS2HZ (1000/HZ) /* millisec per clock tick */
#define TK2SEC(t) ((t)/HZ) /* ticks to seconds */
#define MS2TK(t) ((t)/MS2HZ) /* milliseconds to ticks */
/*
* More accurate time
*/
#define CLOCKFREQ 3686400
#define MS2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000))
#define US2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000000))
/*
* Address spaces
* nearly everything maps 1-1 with physical addresses
* 0 to 1Mb is not mapped
* cache strategy varies as needed (see mmu.c)
*/
#define KZERO 0xA0000000
#define MACHADDR (KZERO+0x00001000)
#define KTTB (KZERO+0x00004000)
/*#define KTZERO (KZERO+0x00008010)*/
#define KTZERO (KZERO+0x200020) /* temporary */
#define KSTACK 8192 /* Size of kernel stack */
#define FLASHMEM 0x50000000 /* map flash at phys 0 to otherwise unused virtual space */
#define FLUSHMEM 0xE0000000 /* virtual address reserved for cache flushing */
#define DCFADDR FLUSHMEM /* cached and buffered for cache writeback */
#define MCFADDR (FLUSHMEM+(1<<20)) /* cached and unbuffered for minicache writeback */
#define UCDRAMZERO 0xA8000000 /* base of memory doubly-mapped as uncached */
#define AIVECADDR 0xFFFF0000 /* alternative interrupt vector address (other is 0) */
/*
* Physical addresses
*/
#define PHYSFLASH0 0x00000000 /* flash (chip select 0) */
#define PHYSCS1 0x04000000 /* static chip select 1 */
#define PHYSCS2 0x08000000 /* static chip select 2 */
#define PHYSCS3 0x0C000000 /* static chip select 3 */
#define PHYSCS4 0x10000000 /* static chip select 4 */
#define PHYSCS5 0x18000000 /* static chip select 5 */
#define PHYSPCMCIA0 0x20000000 /* PCMCIA socket 0 space */
#define PHYSPCMCIA1 0x30000000 /* PCMCIA socket 1 space */
#define PCMCIASIZE 0x10000000 /* they're both huge */
#define PHYSREGS 0x40000000 /* memory mapped registers */
#define PHYSDMA 0x40000000 /* DMA controller */
#define PHYSUART0 0x40100000 /* full function UART*/
#define PHYSUARTBT 0x40200000 /* bluetooth UART */
#define PHYSI2C 0x40301680
#define PHYSI2S 0x40400000 /* serial audio */
#define PHYSAC97 0x40500000 /* AC97/PCM/modem */
#define PHYSUDC 0x40600000 /* USB client */
#define PHYSUART1 0x40700000 /* standard UART */
#define PHYSICP 0x40800000
#define PHYSRTC 0x40900000 /* real-time clock */
#define PHYSOSTMR 0x40A00000 /* timers */
#define PHYSPWM0 0x40B00000 /* pulse width modulator */
#define PHYSPWM1 0x40C00000
#define PHYSINTR 0x40D00000 /* interrupt controller */
#define PHYSGPIO 0x40E00000 /* pins */
#define PHYSPOWER 0x40F00000 /* power management registers */
#define PHYSSSP 0x41000000
#define PHYSMMC 0x41100000
#define PHYSCORE 0x41300000 /* clocks manager */
#define PHYSNETSSP 0x41400000 /* network SSP */
#define PHYSUART2 0x41600000 /* hardware UART */
#define PHYSLCD 0x44000000 /* LCD controller */
#define PHYSMEMCFG 0x48000000 /* memory configuration */
#define PHYSMEM0 0xA0000000
/*
* Memory Interface Control Registers
*/
#define MDCNFG (PHYSMEMCFG) /* memory controller configuration */
#define MDREFR (PHYSMEMCFG+4)
#define MSC0 (MDREFR+4)
#define MSC1 (MSC0+4)
#define MSC2 (MSC1+4)
#define MSCx(RRR, RDN, RDF, RBW, RT) ((((RRR)&0x7)<<13)|(((RDN)&0x1F)<<8)|(((RDF)&0x1F)<<3)|(((RBW)&1)<<2)|((RT)&3))
#define CACHELINELOG 5
#define CACHELINESZ (1<<CACHELINELOG)
#define CACHESIZE (32*1024) /* I & D caches are the same size */
#define MINICACHESIZE (2*1024)
/*
* PSR
*/
#define PsrMusr 0x10 /* mode */
#define PsrMfiq 0x11
#define PsrMirq 0x12
#define PsrMsvc 0x13
#define PsrMabt 0x17
#define PsrMund 0x1B
#define PsrMsys 0x1F
#define PsrMask 0x1F
#define PsrDfiq 0x00000040 /* disable FIQ interrupts */
#define PsrDirq 0x00000080 /* disable IRQ interrupts */
#define PsrV 0x10000000 /* overflow */
#define PsrC 0x20000000 /* carry/borrow/extend */
#define PsrZ 0x40000000 /* zero */
#define PsrN 0x80000000 /* negative/less than */
/*
* Internal MMU coprocessor registers
*/
#define CpCPUID 0 /* R: opcode_2 is 0*/
#define CpCacheID 0 /* R: opcode_2 is 1 */
#define CpControl 1 /* R/W: control (opcode_2 is 0) */
#define CpAuxctl 1 /* R/W: auxiliary control (opcode_2 is 1) */
#define CpTTB 2 /* R/W: translation table base */
#define CpDAC 3 /* R/W: domain access control */
#define CpFSR 5 /* R/W: fault status */
#define CpFAR 6 /* R/W: fault address */
#define CpCacheCtl 7 /* W: */
#define CpTLBops 8 /* W: TLB operations */
#define CpCacheLk 9 /* W: cache lock down */
#define CpPID 13 /* R/W: Process ID Virtual Mapping */
#define CpDebug 14 /* R/W: debug registers */
#define CpAccess 15 /* R/W: Coprocessor Access */
/*
* Coprocessors
*/
#define CpMMU 15
#define CpPWR 14
/*
* CpControl bits
*/
#define CpCmmu (1<<0) /* M: MMU enable */
#define CpCalign (1<<1) /* A: alignment fault enable */
#define CpCDcache (1<<2) /* C: data cache on */
#define CpCwpd (15<<3) /* W, P, D, must be one */
#define CpCbe (1<<7) /* B: big-endian operation */
#define CpCsystem (1<<8) /* S: system permission */
#define CpCrom (1<<9) /* R: ROM permission */
#define CpCbranch (1<<11) /* Z: branch target buffer enable */
#define CpCIcache (1<<12) /* I: Instruction Cache on */
#define CpCaltivec (1<<13) /* V: exception vector relocation */
/*
* CpAux bits
*/
#define CpWBdisable (1<<1) /* globally disable write buffer coalescing */
#define CpMDrwa (1<<4) /* mini data cache r/w allocate */
#define CpMDwt (1<<5) /* mini data cache write through */
|