1 /*
2  * Telechips TCC8000 register definitions
3  *
4  * (C) 2009 Hans J. Koch <hjk@linutronix.de>
5  *
6  * Licensed under the terms of the GPLv2.
7  */
8 
9 #ifndef TCC8K_REGS_H
10 #define TCC8K_REGS_H
11 
12 #include <linux/types.h>
13 
14 #define EXT_SDRAM_BASE		0x20000000
15 #define INT_SRAM_BASE		0x30000000
16 #define INT_SRAM_SIZE		SZ_32K
17 #define CS0_BASE		0x40000000
18 #define CS1_BASE		0x50000000
19 #define CS1_SIZE		SZ_64K
20 #define CS2_BASE		0x60000000
21 #define CS3_BASE		0x70000000
22 #define AHB_PERI_BASE		0x80000000
23 #define AHB_PERI_SIZE		SZ_64K
24 #define APB0_PERI_BASE		0x90000000
25 #define APB0_PERI_SIZE		SZ_128K
26 #define APB1_PERI_BASE		0x98000000
27 #define APB1_PERI_SIZE		SZ_128K
28 #define DATA_TCM_BASE		0xa0000000
29 #define DATA_TCM_SIZE		SZ_8K
30 #define EXT_MEM_CTRL_BASE	0xf0000000
31 #define EXT_MEM_CTRL_SIZE	SZ_4K
32 
33 #define CS1_BASE_VIRT		(void __iomem *)0xf7000000
34 #define AHB_PERI_BASE_VIRT	(void __iomem *)0xf4000000
35 #define APB0_PERI_BASE_VIRT	(void __iomem *)0xf1000000
36 #define APB1_PERI_BASE_VIRT	(void __iomem *)0xf2000000
37 #define EXT_MEM_CTRL_BASE_VIRT	(void __iomem *)0xf3000000
38 #define INT_SRAM_BASE_VIRT	(void __iomem *)0xf5000000
39 #define DATA_TCM_BASE_VIRT	(void __iomem *)0xf6000000
40 
41 #define __REG(x)     (*((volatile u32 *)(x)))
42 
43 /* USB Device Controller Registers */
44 #define UDC_BASE	(AHB_PERI_BASE_VIRT + 0x8000)
45 #define UDC_BASE_PHYS	(AHB_PERI_BASE + 0x8000)
46 
47 #define UDC_IR_OFFS		0x00
48 #define UDC_EIR_OFFS		0x04
49 #define UDC_EIER_OFFS		0x08
50 #define UDC_FAR_OFFS		0x0c
51 #define UDC_FNR_OFFS		0x10
52 #define UDC_EDR_OFFS		0x14
53 #define UDC_RT_OFFS		0x18
54 #define UDC_SSR_OFFS		0x1c
55 #define UDC_SCR_OFFS		0x20
56 #define UDC_EP0SR_OFFS		0x24
57 #define UDC_EP0CR_OFFS		0x28
58 
59 #define UDC_ESR_OFFS		0x2c
60 #define UDC_ECR_OFFS		0x30
61 #define UDC_BRCR_OFFS		0x34
62 #define UDC_BWCR_OFFS		0x38
63 #define UDC_MPR_OFFS		0x3c
64 #define UDC_DCR_OFFS		0x40
65 #define UDC_DTCR_OFFS		0x44
66 #define UDC_DFCR_OFFS		0x48
67 #define UDC_DTTCR1_OFFS		0x4c
68 #define UDC_DTTCR2_OFFS		0x50
69 #define UDC_ESR2_OFFS		0x54
70 
71 #define UDC_SCR2_OFFS		0x58
72 #define UDC_EP0BUF_OFFS		0x60
73 #define UDC_EP1BUF_OFFS		0x64
74 #define UDC_EP2BUF_OFFS		0x68
75 #define UDC_EP3BUF_OFFS		0x6c
76 #define UDC_PLICR_OFFS		0xa0
77 #define UDC_PCR_OFFS		0xa4
78 
79 #define UDC_UPCR0_OFFS		0xc8
80 #define UDC_UPCR1_OFFS		0xcc
81 #define UDC_UPCR2_OFFS		0xd0
82 #define UDC_UPCR3_OFFS		0xd4
83 
84 /* Bits in UDC_EIR */
85 #define UDC_EIR_EP0I		(1 << 0)
86 #define UDC_EIR_EP1I		(1 << 1)
87 #define UDC_EIR_EP2I		(1 << 2)
88 #define UDC_EIR_EP3I		(1 << 3)
89 #define UDC_EIR_EPI_MASK	0x0f
90 
91 /* Bits in UDC_EIER */
92 #define UDC_EIER_EP0IE		(1 << 0)
93 #define UDC_EIER_EP1IE		(1 << 1)
94 #define UDC_EIER_EP2IE		(1 << 2)
95 #define UDC_EIER_EP3IE		(1 << 3)
96 
97 /* Bits in UDC_FNR */
98 #define UDC_FNR_FN_MASK		0x7ff
99 #define UDC_FNR_SM		(1 << 13)
100 #define UDC_FNR_FTL		(1 << 14)
101 
102 /* Bits in UDC_SSR */
103 #define UDC_SSR_HFRES		(1 << 0)
104 #define UDC_SSR_HFSUSP		(1 << 1)
105 #define UDC_SSR_HFRM		(1 << 2)
106 #define UDC_SSR_SDE		(1 << 3)
107 #define UDC_SSR_HSP		(1 << 4)
108 #define UDC_SSR_DM		(1 << 5)
109 #define UDC_SSR_DP		(1 << 6)
110 #define UDC_SSR_TBM		(1 << 7)
111 #define UDC_SSR_VBON		(1 << 8)
112 #define UDC_SSR_VBOFF		(1 << 9)
113 #define UDC_SSR_EOERR		(1 << 10)
114 #define UDC_SSR_DCERR		(1 << 11)
115 #define UDC_SSR_TCERR		(1 << 12)
116 #define UDC_SSR_BSERR		(1 << 13)
117 #define UDC_SSR_TMERR		(1 << 14)
118 #define UDC_SSR_BAERR		(1 << 15)
119 
120 /* Bits in UDC_SCR */
121 #define UDC_SCR_HRESE		(1 << 0)
122 #define UDC_SCR_HSSPE		(1 << 1)
123 #define UDC_SCR_RRDE		(1 << 5)
124 #define UDC_SCR_SPDEN		(1 << 6)
125 #define UDC_SCR_DIEN		(1 << 12)
126 
127 /* Bits in UDC_EP0SR */
128 #define UDC_EP0SR_RSR		(1 << 0)
129 #define UDC_EP0SR_TST		(1 << 1)
130 #define UDC_EP0SR_SHT		(1 << 4)
131 #define UDC_EP0SR_LWO		(1 << 6)
132 
133 /* Bits in UDC_EP0CR */
134 #define UDC_EP0CR_ESS		(1 << 1)
135 
136 /* Bits in UDC_ESR */
137 #define UDC_ESR_RPS		(1 << 0)
138 #define UDC_ESR_TPS		(1 << 1)
139 #define UDC_ESR_LWO		(1 << 4)
140 #define UDC_ESR_FFS		(1 << 6)
141 
142 /* Bits in UDC_ECR */
143 #define UDC_ECR_ESS		(1 << 1)
144 #define UDC_ECR_CDP		(1 << 2)
145 
146 #define UDC_ECR_FLUSH		(1 << 6)
147 #define UDC_ECR_DUEN		(1 << 7)
148 
149 /* Bits in UDC_UPCR0 */
150 #define UDC_UPCR0_VBD		(1 << 1)
151 #define UDC_UPCR0_VBDS		(1 << 6)
152 #define UDC_UPCR0_RCD_12	(0x0 << 9)
153 #define UDC_UPCR0_RCD_24	(0x1 << 9)
154 #define UDC_UPCR0_RCD_48	(0x2 << 9)
155 #define UDC_UPCR0_RCS_EXT	(0x1 << 11)
156 #define UDC_UPCR0_RCS_XTAL	(0x0 << 11)
157 
158 /* Bits in UDC_UPCR1 */
159 #define UDC_UPCR1_CDT(x)	((x) << 0)
160 #define UDC_UPCR1_OTGT(x)	((x) << 3)
161 #define UDC_UPCR1_SQRXT(x)	((x) << 8)
162 #define UDC_UPCR1_TXFSLST(x)	((x) << 12)
163 
164 /* Bits in UDC_UPCR2 */
165 #define UDC_UPCR2_TP		(1 << 0)
166 #define UDC_UPCR2_TXRT(x)	((x) << 2)
167 #define UDC_UPCR2_TXVRT(x)	((x) << 5)
168 #define UDC_UPCR2_OPMODE(x)	((x) << 9)
169 #define UDC_UPCR2_XCVRSEL(x)	((x) << 12)
170 #define UDC_UPCR2_TM		(1 << 14)
171 
172 /* USB Host Controller registers */
173 #define USBH0_BASE	(AHB_PERI_BASE_VIRT + 0xb000)
174 #define USBH1_BASE	(AHB_PERI_BASE_VIRT + 0xb800)
175 
176 #define OHCI_INT_ENABLE_OFFS	0x10
177 
178 #define RH_DESCRIPTOR_A_OFFS	0x48
179 #define RH_DESCRIPTOR_B_OFFS	0x4c
180 
181 #define USBHTCFG0_OFFS		0x100
182 #define USBHHCFG0_OFFS		0x104
183 #define USBHHCFG1_OFFS		0x104
184 
185 /* DMA controller registers */
186 #define DMAC0_BASE	(AHB_PERI_BASE + 0x4000)
187 #define DMAC1_BASE	(AHB_PERI_BASE + 0xa000)
188 #define DMAC2_BASE	(AHB_PERI_BASE + 0x4800)
189 #define DMAC3_BASE	(AHB_PERI_BASE + 0xa800)
190 
191 #define DMAC_CH_OFFSET(ch)	(ch * 0x30)
192 
193 #define ST_SADR_OFFS		0x00
194 #define SPARAM_OFFS		0x04
195 #define C_SADR_OFFS		0x0c
196 #define ST_DADR_OFFS		0x10
197 #define DPARAM_OFFS		0x14
198 #define C_DADR_OFFS		0x1c
199 #define HCOUNT_OFFS		0x20
200 #define CHCTRL_OFFS		0x24
201 #define RPTCTRL_OFFS		0x28
202 #define EXTREQ_A_OFFS		0x2c
203 
204 /* Bits in CHCTRL register */
205 #define CHCTRL_EN		(1 << 0)
206 
207 #define CHCTRL_IEN		(1 << 2)
208 #define CHCTRL_FLAG		(1 << 3)
209 #define CHCTRL_WSIZE8		(0 << 4)
210 #define CHCTRL_WSIZE16		(1 << 4)
211 #define CHCTRL_WSIZE32		(2 << 4)
212 
213 #define CHCTRL_BSIZE1		(0 << 6)
214 #define CHCTRL_BSIZE2		(1 << 6)
215 #define CHCTRL_BSIZE4		(2 << 6)
216 #define CHCTRL_BSIZE8		(3 << 6)
217 
218 #define CHCTRL_TYPE_SINGLE_E	(0 << 8)
219 #define CHCTRL_TYPE_HW		(1 << 8)
220 #define CHCTRL_TYPE_SW		(2 << 8)
221 #define CHCTRL_TYPE_SINGLE_L	(3 << 8)
222 
223 #define CHCTRL_BST		(1 << 10)
224 
225 /* Use DMA controller 0, channel 2 for USB */
226 #define USB_DMA_BASE		(DMAC0_BASE + DMAC_CH_OFFSET(2))
227 
228 /* NAND flash controller registers */
229 #define NFC_BASE	(AHB_PERI_BASE_VIRT + 0xd000)
230 #define NFC_BASE_PHYS	(AHB_PERI_BASE + 0xd000)
231 
232 #define NFC_CMD_OFFS		0x00
233 #define NFC_LADDR_OFFS		0x04
234 #define NFC_BADDR_OFFS		0x08
235 #define NFC_SADDR_OFFS		0x0c
236 #define NFC_WDATA_OFFS		0x10
237 #define NFC_LDATA_OFFS		0x20
238 #define NFC_SDATA_OFFS		0x40
239 #define NFC_CTRL_OFFS		0x50
240 #define NFC_PSTART_OFFS		0x54
241 #define NFC_RSTART_OFFS		0x58
242 #define NFC_DSIZE_OFFS		0x5c
243 #define NFC_IREQ_OFFS		0x60
244 #define NFC_RST_OFFS		0x64
245 #define NFC_CTRL1_OFFS		0x68
246 #define NFC_MDATA_OFFS		0x70
247 
248 #define NFC_WDATA_PHYS_ADDR	(NFC_BASE_PHYS + NFC_WDATA_OFFS)
249 
250 /* Bits in NFC_CTRL */
251 #define NFC_CTRL_BHLD_MASK	(0xf << 0)
252 #define NFC_CTRL_BPW_MASK	(0xf << 4)
253 #define NFC_CTRL_BSTP_MASK	(0xf << 8)
254 #define NFC_CTRL_CADDR_MASK	(0x7 << 12)
255 #define NFC_CTRL_CADDR_1	(0x0 << 12)
256 #define NFC_CTRL_CADDR_2	(0x1 << 12)
257 #define NFC_CTRL_CADDR_3	(0x2 << 12)
258 #define NFC_CTRL_CADDR_4	(0x3 << 12)
259 #define NFC_CTRL_CADDR_5	(0x4 << 12)
260 #define NFC_CTRL_MSK		(1 << 15)
261 #define NFC_CTRL_PSIZE256	(0 << 16)
262 #define NFC_CTRL_PSIZE512	(1 << 16)
263 #define NFC_CTRL_PSIZE1024	(2 << 16)
264 #define NFC_CTRL_PSIZE2048	(3 << 16)
265 #define NFC_CTRL_PSIZE4096	(4 << 16)
266 #define NFC_CTRL_PSIZE_MASK	(7 << 16)
267 #define NFC_CTRL_BSIZE1		(0 << 19)
268 #define NFC_CTRL_BSIZE2		(1 << 19)
269 #define NFC_CTRL_BSIZE4		(2 << 19)
270 #define NFC_CTRL_BSIZE8		(3 << 19)
271 #define NFC_CTRL_BSIZE_MASK	(3 << 19)
272 #define NFC_CTRL_RDY		(1 << 21)
273 #define NFC_CTRL_CS0SEL		(1 << 22)
274 #define NFC_CTRL_CS1SEL		(1 << 23)
275 #define NFC_CTRL_CS2SEL		(1 << 24)
276 #define NFC_CTRL_CS3SEL		(1 << 25)
277 #define NFC_CTRL_CSMASK		(0xf << 22)
278 #define NFC_CTRL_BW		(1 << 26)
279 #define NFC_CTRL_FS		(1 << 27)
280 #define NFC_CTRL_DEN		(1 << 28)
281 #define NFC_CTRL_READ_IEN	(1 << 29)
282 #define NFC_CTRL_PROG_IEN	(1 << 30)
283 #define NFC_CTRL_RDY_IEN	(1 << 31)
284 
285 /* Bits in NFC_IREQ */
286 #define NFC_IREQ_IRQ0		(1 << 0)
287 #define NFC_IREQ_IRQ1		(1 << 1)
288 #define NFC_IREQ_IRQ2		(1 << 2)
289 
290 #define NFC_IREQ_FLAG0		(1 << 4)
291 #define NFC_IREQ_FLAG1		(1 << 5)
292 #define NFC_IREQ_FLAG2		(1 << 6)
293 
294 /* MMC controller registers */
295 #define MMC0_BASE	(AHB_PERI_BASE_VIRT + 0xe000)
296 #define MMC1_BASE	(AHB_PERI_BASE_VIRT + 0xe800)
297 
298 /* UART base addresses */
299 
300 #define UART0_BASE	(APB0_PERI_BASE_VIRT + 0x07000)
301 #define UART0_BASE_PHYS	(APB0_PERI_BASE + 0x07000)
302 #define UART1_BASE	(APB0_PERI_BASE_VIRT + 0x08000)
303 #define UART1_BASE_PHYS	(APB0_PERI_BASE + 0x08000)
304 #define UART2_BASE	(APB0_PERI_BASE_VIRT + 0x09000)
305 #define UART2_BASE_PHYS	(APB0_PERI_BASE + 0x09000)
306 #define UART3_BASE	(APB0_PERI_BASE_VIRT + 0x0a000)
307 #define UART3_BASE_PHYS	(APB0_PERI_BASE + 0x0a000)
308 #define UART4_BASE	(APB0_PERI_BASE_VIRT + 0x15000)
309 #define UART4_BASE_PHYS	(APB0_PERI_BASE + 0x15000)
310 
311 #define UART_BASE	UART0_BASE
312 #define UART_BASE_PHYS	UART0_BASE_PHYS
313 
314 /* ECC controller */
315 #define ECC_CTR_BASE	(APB0_PERI_BASE_VIRT + 0xd000)
316 
317 #define ECC_CTRL_OFFS		0x00
318 #define ECC_BASE_OFFS		0x04
319 #define ECC_MASK_OFFS		0x08
320 #define ECC_CLEAR_OFFS		0x0c
321 #define ECC4_0_OFFS		0x10
322 #define ECC4_1_OFFS		0x14
323 
324 #define ECC_EADDR0_OFFS		0x50
325 
326 #define ECC_ERRNUM_OFFS		0x90
327 #define ECC_IREQ_OFFS		0x94
328 
329 /* Bits in ECC_CTRL */
330 #define ECC_CTRL_ECC4_DIEN	(1 << 28)
331 #define ECC_CTRL_ECC8_DIEN	(1 << 29)
332 #define ECC_CTRL_ECC12_DIEN	(1 << 30)
333 #define ECC_CTRL_ECC_DISABLE	0x0
334 #define ECC_CTRL_ECC_SLC_ENC	0x8
335 #define ECC_CTRL_ECC_SLC_DEC	0x9
336 #define ECC_CTRL_ECC4_ENC	0xa
337 #define ECC_CTRL_ECC4_DEC	0xb
338 #define ECC_CTRL_ECC8_ENC	0xc
339 #define ECC_CTRL_ECC8_DEC	0xd
340 #define ECC_CTRL_ECC12_ENC	0xe
341 #define ECC_CTRL_ECC12_DEC	0xf
342 
343 /* Bits in ECC_IREQ */
344 #define ECC_IREQ_E4DI		(1 << 4)
345 
346 #define ECC_IREQ_E4DF		(1 << 20)
347 #define ECC_IREQ_E4EF		(1 << 21)
348 
349 /* Interrupt controller */
350 
351 #define PIC0_BASE	(APB1_PERI_BASE_VIRT + 0x3000)
352 #define PIC0_BASE_PHYS	(APB1_PERI_BASE + 0x3000)
353 
354 #define PIC0_IEN_OFFS		0x00
355 #define PIC0_CREQ_OFFS		0x04
356 #define PIC0_IREQ_OFFS		0x08
357 #define PIC0_IRQSEL_OFFS	0x0c
358 #define PIC0_SRC_OFFS		0x10
359 #define PIC0_MREQ_OFFS		0x14
360 #define PIC0_TSTREQ_OFFS	0x18
361 #define PIC0_POL_OFFS		0x1c
362 #define PIC0_IRQ_OFFS		0x20
363 #define PIC0_FIQ_OFFS		0x24
364 #define PIC0_MIRQ_OFFS		0x28
365 #define PIC0_MFIQ_OFFS		0x2c
366 #define PIC0_TMODE_OFFS		0x30
367 #define PIC0_SYNC_OFFS		0x34
368 #define PIC0_WKUP_OFFS		0x38
369 #define PIC0_TMODEA_OFFS	0x3c
370 #define PIC0_INTOEN_OFFS	0x40
371 #define PIC0_MEN0_OFFS		0x44
372 #define PIC0_MEN_OFFS		0x48
373 
374 #define PIC0_IEN		__REG(PIC0_BASE + PIC0_IEN_OFFS)
375 #define PIC0_IEN_PHYS		__REG(PIC0_BASE_PHYS + PIC0_IEN_OFFS)
376 #define PIC0_CREQ		__REG(PIC0_BASE + PIC0_CREQ_OFFS)
377 #define PIC0_CREQ_PHYS		__REG(PIC0_BASE_PHYS + PIC0_CREQ_OFFS)
378 #define PIC0_IREQ		__REG(PIC0_BASE + PIC0_IREQ_OFFS)
379 #define PIC0_IRQSEL		__REG(PIC0_BASE + PIC0_IRQSEL_OFFS)
380 #define PIC0_IRQSEL_PHYS	__REG(PIC0_BASE_PHYS + PIC0_IRQSEL_OFFS)
381 #define PIC0_SRC		__REG(PIC0_BASE + PIC0_SRC_OFFS)
382 #define PIC0_MREQ		__REG(PIC0_BASE + PIC0_MREQ_OFFS)
383 #define PIC0_TSTREQ		__REG(PIC0_BASE + PIC0_TSTREQ_OFFS)
384 #define PIC0_POL		__REG(PIC0_BASE + PIC0_POL_OFFS)
385 #define PIC0_IRQ		__REG(PIC0_BASE + PIC0_IRQ_OFFS)
386 #define PIC0_FIQ		__REG(PIC0_BASE + PIC0_FIQ_OFFS)
387 #define PIC0_MIRQ		__REG(PIC0_BASE + PIC0_MIRQ_OFFS)
388 #define PIC0_MFIQ		__REG(PIC0_BASE + PIC0_MFIQ_OFFS)
389 #define PIC0_TMODE		__REG(PIC0_BASE + PIC0_TMODE_OFFS)
390 #define PIC0_TMODE_PHYS		__REG(PIC0_BASE_PHYS + PIC0_TMODE_OFFS)
391 #define PIC0_SYNC		__REG(PIC0_BASE + PIC0_SYNC_OFFS)
392 #define PIC0_WKUP		__REG(PIC0_BASE + PIC0_WKUP_OFFS)
393 #define PIC0_TMODEA		__REG(PIC0_BASE + PIC0_TMODEA_OFFS)
394 #define PIC0_INTOEN		__REG(PIC0_BASE + PIC0_INTOEN_OFFS)
395 #define PIC0_MEN0		__REG(PIC0_BASE + PIC0_MEN0_OFFS)
396 #define PIC0_MEN		__REG(PIC0_BASE + PIC0_MEN_OFFS)
397 
398 #define PIC1_BASE	(APB1_PERI_BASE_VIRT + 0x3080)
399 
400 #define PIC1_IEN_OFFS		0x00
401 #define PIC1_CREQ_OFFS		0x04
402 #define PIC1_IREQ_OFFS		0x08
403 #define PIC1_IRQSEL_OFFS	0x0c
404 #define PIC1_SRC_OFFS		0x10
405 #define PIC1_MREQ_OFFS		0x14
406 #define PIC1_TSTREQ_OFFS	0x18
407 #define PIC1_POL_OFFS		0x1c
408 #define PIC1_IRQ_OFFS		0x20
409 #define PIC1_FIQ_OFFS		0x24
410 #define PIC1_MIRQ_OFFS		0x28
411 #define PIC1_MFIQ_OFFS		0x2c
412 #define PIC1_TMODE_OFFS		0x30
413 #define PIC1_SYNC_OFFS		0x34
414 #define PIC1_WKUP_OFFS		0x38
415 #define PIC1_TMODEA_OFFS	0x3c
416 #define PIC1_INTOEN_OFFS	0x40
417 #define PIC1_MEN1_OFFS		0x44
418 #define PIC1_MEN_OFFS		0x48
419 
420 #define PIC1_IEN	__REG(PIC1_BASE + PIC1_IEN_OFFS)
421 #define PIC1_CREQ	__REG(PIC1_BASE + PIC1_CREQ_OFFS)
422 #define PIC1_IREQ	__REG(PIC1_BASE + PIC1_IREQ_OFFS)
423 #define PIC1_IRQSEL	__REG(PIC1_BASE + PIC1_IRQSEL_OFFS)
424 #define PIC1_SRC	__REG(PIC1_BASE + PIC1_SRC_OFFS)
425 #define PIC1_MREQ	__REG(PIC1_BASE + PIC1_MREQ_OFFS)
426 #define PIC1_TSTREQ	__REG(PIC1_BASE + PIC1_TSTREQ_OFFS)
427 #define PIC1_POL	__REG(PIC1_BASE + PIC1_POL_OFFS)
428 #define PIC1_IRQ	__REG(PIC1_BASE + PIC1_IRQ_OFFS)
429 #define PIC1_FIQ	__REG(PIC1_BASE + PIC1_FIQ_OFFS)
430 #define PIC1_MIRQ	__REG(PIC1_BASE + PIC1_MIRQ_OFFS)
431 #define PIC1_MFIQ	__REG(PIC1_BASE + PIC1_MFIQ_OFFS)
432 #define PIC1_TMODE	__REG(PIC1_BASE + PIC1_TMODE_OFFS)
433 #define PIC1_SYNC	__REG(PIC1_BASE + PIC1_SYNC_OFFS)
434 #define PIC1_WKUP	__REG(PIC1_BASE + PIC1_WKUP_OFFS)
435 #define PIC1_TMODEA	__REG(PIC1_BASE + PIC1_TMODEA_OFFS)
436 #define PIC1_INTOEN	__REG(PIC1_BASE + PIC1_INTOEN_OFFS)
437 #define PIC1_MEN1	__REG(PIC1_BASE + PIC1_MEN1_OFFS)
438 #define PIC1_MEN	__REG(PIC1_BASE + PIC1_MEN_OFFS)
439 
440 /* Timer registers */
441 #define TIMER_BASE		(APB1_PERI_BASE_VIRT + 0x4000)
442 #define TIMER_BASE_PHYS		(APB1_PERI_BASE + 0x4000)
443 
444 #define TWDCFG_OFFS		0x70
445 
446 #define TC32EN_OFFS		0x80
447 #define TC32LDV_OFFS		0x84
448 #define TC32CMP0_OFFS		0x88
449 #define TC32CMP1_OFFS		0x8c
450 #define TC32PCNT_OFFS		0x90
451 #define TC32MCNT_OFFS		0x94
452 #define TC32IRQ_OFFS		0x98
453 
454 /* Bits in TC32EN */
455 #define TC32EN_PRESCALE_MASK	0x00ffffff
456 #define TC32EN_ENABLE		(1 << 24)
457 #define TC32EN_LOADZERO		(1 << 25)
458 #define TC32EN_STOPMODE		(1 << 26)
459 #define TC32EN_LDM0		(1 << 28)
460 #define TC32EN_LDM1		(1 << 29)
461 
462 /* Bits in TC32IRQ */
463 #define TC32IRQ_MSTAT_MASK	0x0000001f
464 #define TC32IRQ_RSTAT_MASK	(0x1f << 8)
465 #define TC32IRQ_IRQEN0		(1 << 16)
466 #define TC32IRQ_IRQEN1		(1 << 17)
467 #define TC32IRQ_IRQEN2		(1 << 18)
468 #define TC32IRQ_IRQEN3		(1 << 19)
469 #define TC32IRQ_IRQEN4		(1 << 20)
470 #define TC32IRQ_RSYNC		(1 << 30)
471 #define TC32IRQ_IRQCLR		(1 << 31)
472 
473 /* GPIO registers */
474 #define GPIOPD_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
475 
476 #define GPIOPD_DAT_OFFS		0x00
477 #define GPIOPD_DOE_OFFS		0x04
478 #define GPIOPD_FS0_OFFS		0x08
479 #define GPIOPD_FS1_OFFS		0x0c
480 #define GPIOPD_FS2_OFFS		0x10
481 #define GPIOPD_RPU_OFFS		0x30
482 #define GPIOPD_RPD_OFFS		0x34
483 #define GPIOPD_DV0_OFFS		0x38
484 #define GPIOPD_DV1_OFFS		0x3c
485 
486 #define GPIOPS_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
487 
488 #define GPIOPS_DAT_OFFS		0x40
489 #define GPIOPS_DOE_OFFS		0x44
490 #define GPIOPS_FS0_OFFS		0x48
491 #define GPIOPS_FS1_OFFS		0x4c
492 #define GPIOPS_FS2_OFFS		0x50
493 #define GPIOPS_FS3_OFFS		0x54
494 #define GPIOPS_RPU_OFFS		0x70
495 #define GPIOPS_RPD_OFFS		0x74
496 #define GPIOPS_DV0_OFFS		0x78
497 #define GPIOPS_DV1_OFFS		0x7c
498 
499 #define GPIOPS_FS1_SDH0_BITS	0x000000ff
500 #define GPIOPS_FS1_SDH1_BITS	0x0000ff00
501 
502 #define GPIOPU_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
503 
504 #define GPIOPU_DAT_OFFS		0x80
505 #define GPIOPU_DOE_OFFS		0x84
506 #define GPIOPU_FS0_OFFS		0x88
507 #define GPIOPU_FS1_OFFS		0x8c
508 #define GPIOPU_FS2_OFFS		0x90
509 #define GPIOPU_RPU_OFFS		0xb0
510 #define GPIOPU_RPD_OFFS		0xb4
511 #define GPIOPU_DV0_OFFS		0xb8
512 #define GPIOPU_DV1_OFFS		0xbc
513 
514 #define GPIOPU_FS0_TXD0		(1 << 0)
515 #define GPIOPU_FS0_RXD0		(1 << 1)
516 #define GPIOPU_FS0_CTS0		(1 << 2)
517 #define GPIOPU_FS0_RTS0		(1 << 3)
518 #define GPIOPU_FS0_TXD1		(1 << 4)
519 #define GPIOPU_FS0_RXD1		(1 << 5)
520 #define GPIOPU_FS0_CTS1		(1 << 6)
521 #define GPIOPU_FS0_RTS1		(1 << 7)
522 #define GPIOPU_FS0_TXD2		(1 << 8)
523 #define GPIOPU_FS0_RXD2		(1 << 9)
524 #define GPIOPU_FS0_CTS2		(1 << 10)
525 #define GPIOPU_FS0_RTS2		(1 << 11)
526 #define GPIOPU_FS0_TXD3		(1 << 12)
527 #define GPIOPU_FS0_RXD3		(1 << 13)
528 #define GPIOPU_FS0_CTS3		(1 << 14)
529 #define GPIOPU_FS0_RTS3		(1 << 15)
530 #define GPIOPU_FS0_TXD4		(1 << 16)
531 #define GPIOPU_FS0_RXD4		(1 << 17)
532 #define GPIOPU_FS0_CTS4		(1 << 18)
533 #define GPIOPU_FS0_RTS4		(1 << 19)
534 
535 #define GPIOFC_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
536 
537 #define GPIOFC_DAT_OFFS		0xc0
538 #define GPIOFC_DOE_OFFS		0xc4
539 #define GPIOFC_FS0_OFFS		0xc8
540 #define GPIOFC_FS1_OFFS		0xcc
541 #define GPIOFC_FS2_OFFS		0xd0
542 #define GPIOFC_FS3_OFFS		0xd4
543 #define GPIOFC_RPU_OFFS		0xf0
544 #define GPIOFC_RPD_OFFS		0xf4
545 #define GPIOFC_DV0_OFFS		0xf8
546 #define GPIOFC_DV1_OFFS		0xfc
547 
548 #define GPIOFD_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
549 
550 #define GPIOFD_DAT_OFFS		0x100
551 #define GPIOFD_DOE_OFFS		0x104
552 #define GPIOFD_FS0_OFFS		0x108
553 #define GPIOFD_FS1_OFFS		0x10c
554 #define GPIOFD_FS2_OFFS		0x110
555 #define GPIOFD_RPU_OFFS		0x130
556 #define GPIOFD_RPD_OFFS		0x134
557 #define GPIOFD_DV0_OFFS		0x138
558 #define GPIOFD_DV1_OFFS		0x13c
559 
560 #define GPIOLC_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
561 
562 #define GPIOLC_DAT_OFFS		0x140
563 #define GPIOLC_DOE_OFFS		0x144
564 #define GPIOLC_FS0_OFFS		0x148
565 #define GPIOLC_FS1_OFFS		0x14c
566 #define GPIOLC_RPU_OFFS		0x170
567 #define GPIOLC_RPD_OFFS		0x174
568 #define GPIOLC_DV0_OFFS		0x178
569 #define GPIOLC_DV1_OFFS		0x17c
570 
571 #define GPIOLD_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
572 
573 #define GPIOLD_DAT_OFFS		0x180
574 #define GPIOLD_DOE_OFFS		0x184
575 #define GPIOLD_FS0_OFFS		0x188
576 #define GPIOLD_FS1_OFFS		0x18c
577 #define GPIOLD_FS2_OFFS		0x190
578 #define GPIOLD_RPU_OFFS		0x1b0
579 #define GPIOLD_RPD_OFFS		0x1b4
580 #define GPIOLD_DV0_OFFS		0x1b8
581 #define GPIOLD_DV1_OFFS		0x1bc
582 
583 #define GPIOAD_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
584 
585 #define GPIOAD_DAT_OFFS		0x1c0
586 #define GPIOAD_DOE_OFFS		0x1c4
587 #define GPIOAD_FS0_OFFS		0x1c8
588 #define GPIOAD_RPU_OFFS		0x1f0
589 #define GPIOAD_RPD_OFFS		0x1f4
590 #define GPIOAD_DV0_OFFS		0x1f8
591 #define GPIOAD_DV1_OFFS		0x1fc
592 
593 #define GPIOXC_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
594 
595 #define GPIOXC_DAT_OFFS		0x200
596 #define GPIOXC_DOE_OFFS		0x204
597 #define GPIOXC_FS0_OFFS		0x208
598 #define GPIOXC_RPU_OFFS		0x230
599 #define GPIOXC_RPD_OFFS		0x234
600 #define GPIOXC_DV0_OFFS		0x238
601 #define GPIOXC_DV1_OFFS		0x23c
602 
603 #define GPIOXC_FS0		__REG(GPIOXC_BASE + GPIOXC_FS0_OFFS)
604 
605 #define GPIOXC_FS0_CS0		(1 << 26)
606 #define GPIOXC_FS0_CS1		(1 << 27)
607 
608 #define GPIOXD_BASE		(APB1_PERI_BASE_VIRT + 0x5000)
609 
610 #define GPIOXD_DAT_OFFS		0x240
611 #define GPIOXD_FS0_OFFS		0x248
612 #define GPIOXD_RPU_OFFS		0x270
613 #define GPIOXD_RPD_OFFS		0x274
614 #define GPIOXD_DV0_OFFS		0x278
615 #define GPIOXD_DV1_OFFS		0x27c
616 
617 #define GPIOPK_BASE		(APB1_PERI_BASE_VIRT + 0x1c000)
618 
619 #define GPIOPK_RST_OFFS		0x008
620 #define GPIOPK_DAT_OFFS		0x100
621 #define GPIOPK_DOE_OFFS		0x104
622 #define GPIOPK_FS0_OFFS		0x108
623 #define GPIOPK_FS1_OFFS		0x10c
624 #define GPIOPK_FS2_OFFS		0x110
625 #define GPIOPK_IRQST_OFFS	0x210
626 #define GPIOPK_IRQEN_OFFS	0x214
627 #define GPIOPK_IRQPOL_OFFS	0x218
628 #define GPIOPK_IRQTM0_OFFS	0x21c
629 #define GPIOPK_IRQTM1_OFFS	0x220
630 #define GPIOPK_CTL_OFFS		0x22c
631 
632 #define PMGPIO_BASE		(APB1_PERI_BASE_VIRT + 0x10000)
633 #define BACKUP_RAM_BASE		PMGPIO_BASE
634 
635 #define PMGPIO_DAT_OFFS		0x800
636 #define PMGPIO_DOE_OFFS		0x804
637 #define PMGPIO_FS0_OFFS		0x808
638 #define PMGPIO_RPU_OFFS		0x810
639 #define PMGPIO_RPD_OFFS		0x814
640 #define PMGPIO_DV0_OFFS		0x818
641 #define PMGPIO_DV1_OFFS		0x81c
642 #define PMGPIO_EE0_OFFS		0x820
643 #define PMGPIO_EE1_OFFS		0x824
644 #define PMGPIO_CTL_OFFS		0x828
645 #define PMGPIO_DI_OFFS		0x82c
646 #define PMGPIO_STR_OFFS		0x830
647 #define PMGPIO_STF_OFFS		0x834
648 #define PMGPIO_POL_OFFS		0x838
649 #define PMGPIO_APB_OFFS		0x800
650 
651 /* Clock controller registers */
652 #define CKC_BASE	((void __iomem *)(APB1_PERI_BASE_VIRT + 0x6000))
653 
654 #define CLKCTRL_OFFS		0x00
655 #define PLL0CFG_OFFS		0x04
656 #define PLL1CFG_OFFS		0x08
657 #define CLKDIVC0_OFFS		0x0c
658 
659 #define BCLKCTR0_OFFS		0x14
660 #define SWRESET0_OFFS		0x18
661 
662 #define BCLKCTR1_OFFS		0x60
663 #define SWRESET1_OFFS		0x64
664 #define PWDCTL_OFFS		0x68
665 #define PLL2CFG_OFFS		0x6c
666 #define CLKDIVC1_OFFS		0x70
667 
668 #define ACLKREF_OFFS		0x80
669 #define ACLKI2C_OFFS		0x84
670 #define ACLKSPI0_OFFS		0x88
671 #define ACLKSPI1_OFFS		0x8c
672 #define ACLKUART0_OFFS		0x90
673 #define ACLKUART1_OFFS		0x94
674 #define ACLKUART2_OFFS		0x98
675 #define ACLKUART3_OFFS		0x9c
676 #define ACLKUART4_OFFS		0xa0
677 #define ACLKTCT_OFFS		0xa4
678 #define ACLKTCX_OFFS		0xa8
679 #define ACLKTCZ_OFFS		0xac
680 #define ACLKADC_OFFS		0xb0
681 #define ACLKDAI0_OFFS		0xb4
682 #define ACLKDAI1_OFFS		0xb8
683 #define ACLKLCD_OFFS		0xbc
684 #define ACLKSPDIF_OFFS		0xc0
685 #define ACLKUSBH_OFFS		0xc4
686 #define ACLKSDH0_OFFS		0xc8
687 #define ACLKSDH1_OFFS		0xcc
688 #define ACLKC3DEC_OFFS		0xd0
689 #define ACLKEXT_OFFS		0xd4
690 #define ACLKCAN0_OFFS		0xd8
691 #define ACLKCAN1_OFFS		0xdc
692 #define ACLKGSB0_OFFS		0xe0
693 #define ACLKGSB1_OFFS		0xe4
694 #define ACLKGSB2_OFFS		0xe8
695 #define ACLKGSB3_OFFS		0xec
696 
697 #define PLLxCFG_PD		(1 << 31)
698 
699 /* CLKCTRL bits */
700 #define CLKCTRL_XE		(1 << 31)
701 
702 /* CLKDIVCx bits */
703 #define CLKDIVC0_XTE		(1 << 7)
704 #define CLKDIVC0_XE		(1 << 15)
705 #define CLKDIVC0_P1E		(1 << 23)
706 #define CLKDIVC0_P0E		(1 << 31)
707 
708 #define CLKDIVC1_P2E		(1 << 7)
709 
710 /* BCLKCTR0 clock bits */
711 #define BCLKCTR0_USBD		(1 << 4)
712 #define BCLKCTR0_ECC		(1 << 9)
713 #define BCLKCTR0_USBH0		(1 << 11)
714 #define BCLKCTR0_NFC		(1 << 16)
715 
716 /* BCLKCTR1 clock bits */
717 #define BCLKCTR1_USBH1		(1 << 20)
718 
719 /* SWRESET0 bits */
720 #define SWRESET0_USBD		(1 << 4)
721 #define SWRESET0_USBH0		(1 << 11)
722 
723 /* SWRESET1 bits */
724 #define SWRESET1_USBH1		(1 << 20)
725 
726 /* System clock sources.
727  * Note: These are the clock sources that serve as parents for
728  * all other clocks. They have no parents themselves.
729  *
730  * These values are used for struct clk->root_id. All clocks
731  * that are not system clock sources have this value set to
732  * CLK_SRC_NOROOT.
733  * The values for system clocks start with CLK_SRC_PLL0 == 0
734  * because this gives us exactly the values needed for the lower
735  * 4 bits of ACLK_* registers. Therefore, CLK_SRC_NOROOT is
736  * defined as -1 to not disturb the order.
737  */
738 enum root_clks {
739 	CLK_SRC_NOROOT = -1,
740 	CLK_SRC_PLL0 = 0,
741 	CLK_SRC_PLL1,
742 	CLK_SRC_PLL0DIV,
743 	CLK_SRC_PLL1DIV,
744 	CLK_SRC_XI,
745 	CLK_SRC_XIDIV,
746 	CLK_SRC_XTI,
747 	CLK_SRC_XTIDIV,
748 	CLK_SRC_PLL2,
749 	CLK_SRC_PLL2DIV,
750 	CLK_SRC_PK0,
751 	CLK_SRC_PK1,
752 	CLK_SRC_PK2,
753 	CLK_SRC_PK3,
754 	CLK_SRC_PK4,
755 	CLK_SRC_48MHZ
756 };
757 
758 #define CLK_SRC_MASK		0xf
759 
760 /* Bits in ACLK* registers */
761 #define ACLK_EN		(1 << 28)
762 #define ACLK_SEL_SHIFT		24
763 #define ACLK_SEL_MASK		0x0f000000
764 #define ACLK_DIV_MASK		0x00000fff
765 
766 /* System configuration registers */
767 
768 #define SCFG_BASE		(APB1_PERI_BASE_VIRT + 0x13000)
769 
770 #define	BMI_OFFS		0x00
771 #define AHBCON0_OFFS		0x04
772 #define APBPWE_OFFS		0x08
773 #define DTCMWAIT_OFFS		0x0c
774 #define ECCSEL_OFFS		0x10
775 #define AHBCON1_OFFS		0x14
776 #define SDHCFG_OFFS		0x18
777 #define REMAP_OFFS		0x20
778 #define LCDSIAE_OFFS		0x24
779 #define XMCCFG_OFFS		0xe0
780 #define IMCCFG_OFFS		0xe4
781 
782 /* Values for ECCSEL */
783 #define ECCSEL_EXTMEM		0x0
784 #define ECCSEL_DTCM		0x1
785 #define ECCSEL_INT_SRAM		0x2
786 #define ECCSEL_AHB		0x3
787 
788 /* Bits in XMCCFG */
789 #define XMCCFG_NFCE		(1 << 1)
790 #define XMCCFG_FDXD		(1 << 2)
791 
792 /* External memory controller registers */
793 
794 #define EMC_BASE		EXT_MEM_CTRL_BASE
795 
796 #define SDCFG_OFFS		0x00
797 #define SDFSM_OFFS		0x04
798 #define MCFG_OFFS		0x08
799 
800 #define CSCFG0_OFFS		0x10
801 #define CSCFG1_OFFS		0x14
802 #define CSCFG2_OFFS		0x18
803 #define CSCFG3_OFFS		0x1c
804 
805 #define MCFG_SDEN		(1 << 4)
806 
807 #endif /* TCC8K_REGS_H */
808