aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-gemini/include/mach/global_reg.h
blob: de7ff7e849fc48ced4b5fb83cfcb20bc0d678166 (plain) (blame)
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
/*
 *  This file contains the hardware definitions for Gemini.
 *
 *  Copyright (C) 2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */
#ifndef __MACH_GLOBAL_REG_H
#define __MACH_GLOBAL_REG_H

/* Global Word ID Register*/
#define GLOBAL_ID			0x00

#define CHIP_ID(reg)			((reg) >> 8)
#define CHIP_REVISION(reg)		((reg) & 0xFF)

/* Global Status Register */
#define GLOBAL_STATUS			0x04

#define CPU_BIG_ENDIAN			(1 << 31)
#define PLL_OSC_30M			(1 << 30)	/* else 60MHz */

#define OPERATION_MODE_MASK		(0xF << 26)
#define OPM_IDDQ			(0xF << 26)
#define OPM_NAND			(0xE << 26)
#define OPM_RING			(0xD << 26)
#define OPM_DIRECT_BOOT			(0xC << 26)
#define OPM_USB1_PHY_TEST		(0xB << 26)
#define OPM_USB0_PHY_TEST		(0xA << 26)
#define OPM_SATA1_PHY_TEST		(0x9 << 26)
#define OPM_SATA0_PHY_TEST		(0x8 << 26)
#define OPM_ICE_ARM			(0x7 << 26)
#define OPM_ICE_FARADAY			(0x6 << 26)
#define OPM_PLL_BYPASS			(0x5 << 26)
#define OPM_DEBUG			(0x4 << 26)
#define OPM_BURN_IN			(0x3 << 26)
#define OPM_MBIST			(0x2 << 26)
#define OPM_SCAN			(0x1 << 26)
#define OPM_REAL			(0x0 << 26)

#define FLASH_TYPE_MASK			(0x3 << 24)
#define FLASH_TYPE_NAND_2K		(0x3 << 24)
#define FLASH_TYPE_NAND_512		(0x2 << 24)
#define FLASH_TYPE_PARALLEL		(0x1 << 24)
#define FLASH_TYPE_SERIAL		(0x0 << 24)
/* if parallel */
#define FLASH_WIDTH_16BIT		(1 << 23)	/* else 8 bit */
/* if serial */
#define FLASH_ATMEL			(1 << 23)	/* else STM */

#define FLASH_SIZE_MASK			(0x3 << 21)
#define NAND_256M			(0x3 << 21)	/* and more */
#define NAND_128M			(0x2 << 21)
#define NAND_64M			(0x1 << 21)
#define NAND_32M			(0x0 << 21)
#define ATMEL_16M			(0x3 << 21)	/* and more */
#define ATMEL_8M			(0x2 << 21)
#define ATMEL_4M_2M			(0x1 << 21)
#define ATMEL_1M			(0x0 << 21)	/* and less */
#define STM_32M				(1 << 22)	/* and more */
#define STM_16M				(0 << 22)	/* and less */

#define FLASH_PARALLEL_HIGH_PIN_CNT	(1 << 20)	/* else low pin cnt */

#define CPU_AHB_RATIO_MASK		(0x3 << 18)
#define CPU_AHB_1_1			(0x0 << 18)
#define CPU_AHB_3_2			(0x1 << 18)
#define CPU_AHB_24_13			(0x2 << 18)
#define CPU_AHB_2_1			(0x3 << 18)

#define REG_TO_AHB_SPEED(reg)		((((reg) >> 15) & 0x7) * 10 + 130)
#define AHB_SPEED_TO_REG(x)		((((x - 130)) / 10) << 15)

/* it is posible to override some settings, use >> OVERRIDE_xxxx_SHIFT */
#define OVERRIDE_FLASH_TYPE_SHIFT	16
#define OVERRIDE_FLASH_WIDTH_SHIFT	16
#define OVERRIDE_FLASH_SIZE_SHIFT	16
#define OVERRIDE_CPU_AHB_RATIO_SHIFT	15
#define OVERRIDE_AHB_SPEED_SHIFT	15

/* Global PLL Control Register */
#define GLOBAL_PLL_CTRL			0x08

#define PLL_BYPASS			(1 << 31)
#define PLL_POWER_DOWN			(1 << 8)
#define PLL_CONTROL_Q			(0x1F << 0)

/* Global Soft Reset Control Register */
#define GLOBAL_RESET			0x0C

#define RESET_GLOBAL			(1 << 31)
#define RESET_CPU1			(1 << 30)
#define RESET_TVE			(1 << 28)
#define RESET_SATA1			(1 << 27)
#define RESET_SATA0			(1 << 26)
#define RESET_CIR			(1 << 25)
#define RESET_EXT_DEV			(1 << 24)
#define RESET_WD			(1 << 23)
#define RESET_GPIO2			(1 << 22)
#define RESET_GPIO1			(1 << 21)
#define RESET_GPIO0			(1 << 20)
#define RESET_SSP			(1 << 19)
#define RESET_UART			(1 << 18)
#define RESET_TIMER			(1 << 17)
#define RESET_RTC			(1 << 16)
#define RESET_INT1			(1 << 15)
#define RESET_INT0			(1 << 14)
#define RESET_LCD			(1 << 13)
#define RESET_LPC			(1 << 12)
#define RESET_APB			(1 << 11)
#define RESET_DMA			(1 << 10)
#define RESET_USB1			(1 << 9)
#define RESET_USB0			(1 << 8)
#define RESET_PCI			(1 << 7)
#define RESET_GMAC1			(1 << 6)
#define RESET_GMAC0			(1 << 5)
#define RESET_SECURITY			(1 << 4)
#define RESET_RAID			(1 << 3)
#define RESET_IDE			(1 << 2)
#define RESET_FLASH			(1 << 1)
#define RESET_DRAM			(1 << 0)

/* Global IO Pad Driving Capability Control Register */
#define GLOBAL_IO_DRIVING_CTRL		0x10

#define DRIVING_CURRENT_MASK		0x3

/* here 00-4mA, 01-8mA, 10-12mA, 11-16mA */
#define GPIO1_PADS_31_28_SHIFT		28
#define GPIO0_PADS_31_16_SHIFT		26
#define GPIO0_PADS_15_0_SHIFT		24
#define PCI_AND_EXT_RESET_PADS_SHIFT	22
#define IDE_PADS_SHIFT			20
#define GMAC1_PADS_SHIFT		18
#define GMAC0_PADS_SHIFT		16
/* DRAM is not in mA and poorly documented */
#define DRAM_CLOCK_PADS_SHIFT		8
#define DRAM_DATA_PADS_SHIFT		4
#define DRAM_CONTROL_PADS_SHIFT		0

/* Global IO Pad Slew Rate Control Register */
#define GLOBAL_IO_SLEW_RATE_CTRL	0x14

#define GPIO1_PADS_31_28_SLOW		(1 << 10)
#define GPIO0_PADS_31_16_SLOW		(1 << 9)
#define GPIO0_PADS_15_0_SLOW		(1 << 8)
#define PCI_PADS_SLOW			(1 << 7)
#define IDE_PADS_SLOW			(1 << 6)
#define GMAC1_PADS_SLOW			(1 << 5)
#define GMAC0_PADS_SLOW			(1 << 4)
#define DRAM_CLOCK_PADS_SLOW		(1 << 1)
#define DRAM_IO_PADS_SLOW		(1 << 0)

/*
 * General skew control defines
 * 16 steps, each step is around 0.2ns
 */
#define SKEW_MASK			0xF

/* Global IDE PAD Skew Control Register */
#define GLOBAL_IDE_SKEW_CTRL		0x18

#define IDE1_HOST_STROBE_DELAY_SHIFT	28
#define IDE1_DEVICE_STROBE_DELAY_SHIFT	24
#define IDE1_OUTPUT_IO_SKEW_SHIFT	20
#define IDE1_INPUT_IO_SKEW_SHIFT	16
#define IDE0_HOST_STROBE_DELAY_SHIFT	12
#define IDE0_DEVICE_STROBE_DELAY_SHIFT	8
#define IDE0_OUTPUT_IO_SKEW_SHIFT	4
#define IDE0_INPUT_IO_SKEW_SHIFT	0

/* Global GMAC Control Pad Skew Control Register */
#define GLOBAL_GMAC_CTRL_SKEW_CTRL	0x1C

#define GMAC1_TXC_SKEW_SHIFT		28
#define GMAC1_TXEN_SKEW_SHIFT		24
#define GMAC1_RXC_SKEW_SHIFT		20
#define GMAC1_RXDV_SKEW_SHIFT		16
#define GMAC0_TXC_SKEW_SHIFT		12
#define GMAC0_TXEN_SKEW_SHIFT		8
#define GMAC0_RXC_SKEW_SHIFT		4
#define GMAC0_RXDV_SKEW_SHIFT		0

/* Global GMAC0 Data PAD Skew Control Register */
#define GLOBAL_GMAC0_DATA_SKEW_CTRL	0x20
/* Global GMAC1 Data PAD Skew Control Register */
#define GLOBAL_GMAC1_DATA_SKEW_CTRL	0x24

#define GMAC_TXD_SKEW_SHIFT(x)		(((x) * 4) + 16)
#define GMAC_RXD_SKEW_SHIFT(x)		((x) * 4)

/* CPU has two AHB busses. */

/* Global Arbitration0 Control Register */
#define GLOBAL_ARBITRATION0_CTRL	0x28

#define BOOT_CONTROLLER_HIGH_PRIO	(1 << 3)
#define DMA_BUS1_HIGH_PRIO		(1 << 2)
#define CPU0_HIGH_PRIO			(1 << 0)

/* Global Arbitration1 Control Register */
#define GLOBAL_ARBITRATION1_CTRL	0x2C

#define TVE_HIGH_PRIO			(1 << 9)
#define PCI_HIGH_PRIO			(1 << 8)
#define USB1_HIGH_PRIO			(1 << 7)
#define USB0_HIGH_PRIO			(1 << 6)
#define GMAC1_HIGH_PRIO			(1 << 5)
#define GMAC0_HIGH_PRIO			(1 << 4)
#define SECURITY_HIGH_PRIO		(1 << 3)
#define RAID_HIGH_PRIO			(1 << 2)
#define IDE_HIGH_PRIO			(1 << 1)
#define DMA_BUS2_HIGH_PRIO		(1 << 0)

/* Common bits for both arbitration registers */
#define BURST_LENGTH_SHIFT		16
#define BURST_LENGTH_MASK		(0x3F << 16)

/* Miscellaneous Control Register */
#define GLOBAL_MISC_CTRL		0x30

#define MEMORY_SPACE_SWAP		(1 << 31)
#define USB1_PLUG_MINIB			(1 << 30) /* else plug is mini-A */
#define USB0_PLUG_MINIB			(1 << 29)
#define GMAC_GMII			(1 << 28)
#define GMAC_1_ENABLE			(1 << 27)
/* TODO: define ATA/SATA bits */
#define USB1_VBUS_ON			(1 << 23)
#define USB0_VBUS_ON			(1 << 22)
#define APB_CLKOUT_ENABLE		(1 << 21)
#define TVC_CLKOUT_ENABLE		(1 << 20)
#define EXT_CLKIN_ENABLE		(1 << 19)
#define PCI_66MHZ			(1 << 18) /* else 33 MHz */
#define PCI_CLKOUT_ENABLE		(1 << 17)
#define LPC_CLKOUT_ENABLE		(1 << 16)
#define USB1_WAKEUP_ON			(1 << 15)
#define USB0_WAKEUP_ON			(1 << 14)
/* TODO: define PCI idle detect bits */
#define TVC_PADS_ENABLE			(1 << 9)
#define SSP_PADS_ENABLE			(1 << 8)
#define LCD_PADS_ENABLE			(1 << 7)
#define LPC_PADS_ENABLE			(1 << 6)
#define PCI_PADS_ENABLE			(1 << 5)
#define IDE_PADS_ENABLE			(1 << 4)
#define DRAM_PADS_POWER_DOWN		(1 << 3)
#define NAND_PADS_DISABLE		(1 << 2)
#define PFLASH_PADS_DISABLE		(1 << 1)
#define SFLASH_PADS_DISABLE		(1 << 0)

/* Global Clock Control Register */
#define GLOBAL_CLOCK_CTRL		0x34

#define POWER_STATE_G0			(1 << 31)
#define POWER_STATE_S1			(1 << 30) /* else it is S3/S4 state */
#define SECURITY_APB_AHB		(1 << 29)
/* else Security APB clk will be 0.75xAHB */
/* TODO: TVC clock divider */
#define PCI_CLKRUN_ENABLE		(1 << 16)
#define BOOT_CLK_DISABLE		(1 << 13)
#define TVC_CLK_DISABLE			(1 << 12)
#define FLASH_CLK_DISABLE		(1 << 11)
#define DDR_CLK_DISABLE			(1 << 10)
#define PCI_CLK_DISABLE			(1 << 9)
#define IDE_CLK_DISABLE			(1 << 8)
#define USB1_CLK_DISABLE		(1 << 7)
#define USB0_CLK_DISABLE		(1 << 6)
#define SATA1_CLK_DISABLE		(1 << 5)
#define SATA0_CLK_DISABLE		(1 << 4)
#define GMAC1_CLK_DISABLE		(1 << 3)
#define GMAC0_CLK_DISABLE		(1 << 2)
#define SECURITY_CLK_DISABLE		(1 << 1)

/* TODO: other registers definitions if needed */

#endif /* __MACH_GLOBAL_REG_H */