xref: /OK3568_Linux_fs/u-boot/drivers/serial/atmel_usart.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Register definitions for the Atmel USART3 module.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2005-2006 Atmel Corporation
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Modified to support C structure SoC access by
7*4882a593Smuzhiyun  * Andreas Bießmann <biessmann@corscience.de>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun #ifndef __DRIVERS_ATMEL_USART_H__
12*4882a593Smuzhiyun #define __DRIVERS_ATMEL_USART_H__
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* USART3 register footprint */
15*4882a593Smuzhiyun typedef struct atmel_usart3 {
16*4882a593Smuzhiyun 	u32	cr;
17*4882a593Smuzhiyun 	u32	mr;
18*4882a593Smuzhiyun 	u32	ier;
19*4882a593Smuzhiyun 	u32	idr;
20*4882a593Smuzhiyun 	u32	imr;
21*4882a593Smuzhiyun 	u32	csr;
22*4882a593Smuzhiyun 	u32	rhr;
23*4882a593Smuzhiyun 	u32	thr;
24*4882a593Smuzhiyun 	u32	brgr;
25*4882a593Smuzhiyun 	u32	rtor;
26*4882a593Smuzhiyun 	u32	ttgr;
27*4882a593Smuzhiyun 	u32	reserved0[5];
28*4882a593Smuzhiyun 	u32	fidi;
29*4882a593Smuzhiyun 	u32	ner;
30*4882a593Smuzhiyun 	u32	reserved1;
31*4882a593Smuzhiyun 	u32	ifr;
32*4882a593Smuzhiyun 	u32	man;
33*4882a593Smuzhiyun 	u32	reserved2[54]; /* version and PDC not needed */
34*4882a593Smuzhiyun } atmel_usart3_t;
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /* Bitfields in CR */
37*4882a593Smuzhiyun #define USART3_RSTRX_OFFSET			2
38*4882a593Smuzhiyun #define USART3_RSTRX_SIZE			1
39*4882a593Smuzhiyun #define USART3_RSTTX_OFFSET			3
40*4882a593Smuzhiyun #define USART3_RSTTX_SIZE			1
41*4882a593Smuzhiyun #define USART3_RXEN_OFFSET			4
42*4882a593Smuzhiyun #define USART3_RXEN_SIZE			1
43*4882a593Smuzhiyun #define USART3_RXDIS_OFFSET			5
44*4882a593Smuzhiyun #define USART3_RXDIS_SIZE			1
45*4882a593Smuzhiyun #define USART3_TXEN_OFFSET			6
46*4882a593Smuzhiyun #define USART3_TXEN_SIZE			1
47*4882a593Smuzhiyun #define USART3_TXDIS_OFFSET			7
48*4882a593Smuzhiyun #define USART3_TXDIS_SIZE			1
49*4882a593Smuzhiyun #define USART3_RSTSTA_OFFSET			8
50*4882a593Smuzhiyun #define USART3_RSTSTA_SIZE			1
51*4882a593Smuzhiyun #define USART3_STTBRK_OFFSET			9
52*4882a593Smuzhiyun #define USART3_STTBRK_SIZE			1
53*4882a593Smuzhiyun #define USART3_STPBRK_OFFSET			10
54*4882a593Smuzhiyun #define USART3_STPBRK_SIZE			1
55*4882a593Smuzhiyun #define USART3_STTTO_OFFSET			11
56*4882a593Smuzhiyun #define USART3_STTTO_SIZE			1
57*4882a593Smuzhiyun #define USART3_SENDA_OFFSET			12
58*4882a593Smuzhiyun #define USART3_SENDA_SIZE			1
59*4882a593Smuzhiyun #define USART3_RSTIT_OFFSET			13
60*4882a593Smuzhiyun #define USART3_RSTIT_SIZE			1
61*4882a593Smuzhiyun #define USART3_RSTNACK_OFFSET			14
62*4882a593Smuzhiyun #define USART3_RSTNACK_SIZE			1
63*4882a593Smuzhiyun #define USART3_RETTO_OFFSET			15
64*4882a593Smuzhiyun #define USART3_RETTO_SIZE			1
65*4882a593Smuzhiyun #define USART3_DTREN_OFFSET			16
66*4882a593Smuzhiyun #define USART3_DTREN_SIZE			1
67*4882a593Smuzhiyun #define USART3_DTRDIS_OFFSET			17
68*4882a593Smuzhiyun #define USART3_DTRDIS_SIZE			1
69*4882a593Smuzhiyun #define USART3_RTSEN_OFFSET			18
70*4882a593Smuzhiyun #define USART3_RTSEN_SIZE			1
71*4882a593Smuzhiyun #define USART3_RTSDIS_OFFSET			19
72*4882a593Smuzhiyun #define USART3_RTSDIS_SIZE			1
73*4882a593Smuzhiyun #define USART3_COMM_TX_OFFSET			30
74*4882a593Smuzhiyun #define USART3_COMM_TX_SIZE			1
75*4882a593Smuzhiyun #define USART3_COMM_RX_OFFSET			31
76*4882a593Smuzhiyun #define USART3_COMM_RX_SIZE			1
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* Bitfields in MR */
79*4882a593Smuzhiyun #define USART3_USART_MODE_OFFSET		0
80*4882a593Smuzhiyun #define USART3_USART_MODE_SIZE			4
81*4882a593Smuzhiyun #define USART3_USCLKS_OFFSET			4
82*4882a593Smuzhiyun #define USART3_USCLKS_SIZE			2
83*4882a593Smuzhiyun #define USART3_CHRL_OFFSET			6
84*4882a593Smuzhiyun #define USART3_CHRL_SIZE			2
85*4882a593Smuzhiyun #define USART3_SYNC_OFFSET			8
86*4882a593Smuzhiyun #define USART3_SYNC_SIZE			1
87*4882a593Smuzhiyun #define USART3_PAR_OFFSET			9
88*4882a593Smuzhiyun #define USART3_PAR_SIZE				3
89*4882a593Smuzhiyun #define USART3_NBSTOP_OFFSET			12
90*4882a593Smuzhiyun #define USART3_NBSTOP_SIZE			2
91*4882a593Smuzhiyun #define USART3_CHMODE_OFFSET			14
92*4882a593Smuzhiyun #define USART3_CHMODE_SIZE			2
93*4882a593Smuzhiyun #define USART3_MSBF_OFFSET			16
94*4882a593Smuzhiyun #define USART3_MSBF_SIZE			1
95*4882a593Smuzhiyun #define USART3_MODE9_OFFSET			17
96*4882a593Smuzhiyun #define USART3_MODE9_SIZE			1
97*4882a593Smuzhiyun #define USART3_CLKO_OFFSET			18
98*4882a593Smuzhiyun #define USART3_CLKO_SIZE			1
99*4882a593Smuzhiyun #define USART3_OVER_OFFSET			19
100*4882a593Smuzhiyun #define USART3_OVER_SIZE			1
101*4882a593Smuzhiyun #define USART3_INACK_OFFSET			20
102*4882a593Smuzhiyun #define USART3_INACK_SIZE			1
103*4882a593Smuzhiyun #define USART3_DSNACK_OFFSET			21
104*4882a593Smuzhiyun #define USART3_DSNACK_SIZE			1
105*4882a593Smuzhiyun #define USART3_MAX_ITERATION_OFFSET		24
106*4882a593Smuzhiyun #define USART3_MAX_ITERATION_SIZE		3
107*4882a593Smuzhiyun #define USART3_FILTER_OFFSET			28
108*4882a593Smuzhiyun #define USART3_FILTER_SIZE			1
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun /* Bitfields in CSR */
111*4882a593Smuzhiyun #define USART3_RXRDY_OFFSET			0
112*4882a593Smuzhiyun #define USART3_RXRDY_SIZE			1
113*4882a593Smuzhiyun #define USART3_TXRDY_OFFSET			1
114*4882a593Smuzhiyun #define USART3_TXRDY_SIZE			1
115*4882a593Smuzhiyun #define USART3_RXBRK_OFFSET			2
116*4882a593Smuzhiyun #define USART3_RXBRK_SIZE			1
117*4882a593Smuzhiyun #define USART3_ENDRX_OFFSET			3
118*4882a593Smuzhiyun #define USART3_ENDRX_SIZE			1
119*4882a593Smuzhiyun #define USART3_ENDTX_OFFSET			4
120*4882a593Smuzhiyun #define USART3_ENDTX_SIZE			1
121*4882a593Smuzhiyun #define USART3_OVRE_OFFSET			5
122*4882a593Smuzhiyun #define USART3_OVRE_SIZE			1
123*4882a593Smuzhiyun #define USART3_FRAME_OFFSET			6
124*4882a593Smuzhiyun #define USART3_FRAME_SIZE			1
125*4882a593Smuzhiyun #define USART3_PARE_OFFSET			7
126*4882a593Smuzhiyun #define USART3_PARE_SIZE			1
127*4882a593Smuzhiyun #define USART3_TIMEOUT_OFFSET			8
128*4882a593Smuzhiyun #define USART3_TIMEOUT_SIZE			1
129*4882a593Smuzhiyun #define USART3_TXEMPTY_OFFSET			9
130*4882a593Smuzhiyun #define USART3_TXEMPTY_SIZE			1
131*4882a593Smuzhiyun #define USART3_ITERATION_OFFSET			10
132*4882a593Smuzhiyun #define USART3_ITERATION_SIZE			1
133*4882a593Smuzhiyun #define USART3_TXBUFE_OFFSET			11
134*4882a593Smuzhiyun #define USART3_TXBUFE_SIZE			1
135*4882a593Smuzhiyun #define USART3_RXBUFF_OFFSET			12
136*4882a593Smuzhiyun #define USART3_RXBUFF_SIZE			1
137*4882a593Smuzhiyun #define USART3_NACK_OFFSET			13
138*4882a593Smuzhiyun #define USART3_NACK_SIZE			1
139*4882a593Smuzhiyun #define USART3_RIIC_OFFSET			16
140*4882a593Smuzhiyun #define USART3_RIIC_SIZE			1
141*4882a593Smuzhiyun #define USART3_DSRIC_OFFSET			17
142*4882a593Smuzhiyun #define USART3_DSRIC_SIZE			1
143*4882a593Smuzhiyun #define USART3_DCDIC_OFFSET			18
144*4882a593Smuzhiyun #define USART3_DCDIC_SIZE			1
145*4882a593Smuzhiyun #define USART3_CTSIC_OFFSET			19
146*4882a593Smuzhiyun #define USART3_CTSIC_SIZE			1
147*4882a593Smuzhiyun #define USART3_RI_OFFSET			20
148*4882a593Smuzhiyun #define USART3_RI_SIZE				1
149*4882a593Smuzhiyun #define USART3_DSR_OFFSET			21
150*4882a593Smuzhiyun #define USART3_DSR_SIZE				1
151*4882a593Smuzhiyun #define USART3_DCD_OFFSET			22
152*4882a593Smuzhiyun #define USART3_DCD_SIZE				1
153*4882a593Smuzhiyun #define USART3_CTS_OFFSET			23
154*4882a593Smuzhiyun #define USART3_CTS_SIZE				1
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /* Bitfields in RHR */
157*4882a593Smuzhiyun #define USART3_RXCHR_OFFSET			0
158*4882a593Smuzhiyun #define USART3_RXCHR_SIZE			9
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /* Bitfields in THR */
161*4882a593Smuzhiyun #define USART3_TXCHR_OFFSET			0
162*4882a593Smuzhiyun #define USART3_TXCHR_SIZE			9
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun /* Bitfields in BRGR */
165*4882a593Smuzhiyun #define USART3_CD_OFFSET			0
166*4882a593Smuzhiyun #define USART3_CD_SIZE				16
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /* Bitfields in RTOR */
169*4882a593Smuzhiyun #define USART3_TO_OFFSET			0
170*4882a593Smuzhiyun #define USART3_TO_SIZE				16
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /* Bitfields in TTGR */
173*4882a593Smuzhiyun #define USART3_TG_OFFSET			0
174*4882a593Smuzhiyun #define USART3_TG_SIZE				8
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun /* Bitfields in FIDI */
177*4882a593Smuzhiyun #define USART3_FI_DI_RATIO_OFFSET		0
178*4882a593Smuzhiyun #define USART3_FI_DI_RATIO_SIZE			11
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* Bitfields in NER */
181*4882a593Smuzhiyun #define USART3_NB_ERRORS_OFFSET			0
182*4882a593Smuzhiyun #define USART3_NB_ERRORS_SIZE			8
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /* Bitfields in XXR */
185*4882a593Smuzhiyun #define USART3_XOFF_OFFSET			0
186*4882a593Smuzhiyun #define USART3_XOFF_SIZE			8
187*4882a593Smuzhiyun #define USART3_XON_OFFSET			8
188*4882a593Smuzhiyun #define USART3_XON_SIZE				8
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /* Bitfields in IFR */
191*4882a593Smuzhiyun #define USART3_IRDA_FILTER_OFFSET		0
192*4882a593Smuzhiyun #define USART3_IRDA_FILTER_SIZE			8
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun /* Bitfields in RCR */
195*4882a593Smuzhiyun #define USART3_RXCTR_OFFSET			0
196*4882a593Smuzhiyun #define USART3_RXCTR_SIZE			16
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun /* Bitfields in TCR */
199*4882a593Smuzhiyun #define USART3_TXCTR_OFFSET			0
200*4882a593Smuzhiyun #define USART3_TXCTR_SIZE			16
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /* Bitfields in RNCR */
203*4882a593Smuzhiyun #define USART3_RXNCR_OFFSET			0
204*4882a593Smuzhiyun #define USART3_RXNCR_SIZE			16
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /* Bitfields in TNCR */
207*4882a593Smuzhiyun #define USART3_TXNCR_OFFSET			0
208*4882a593Smuzhiyun #define USART3_TXNCR_SIZE			16
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun /* Bitfields in PTCR */
211*4882a593Smuzhiyun #define USART3_RXTEN_OFFSET			0
212*4882a593Smuzhiyun #define USART3_RXTEN_SIZE			1
213*4882a593Smuzhiyun #define USART3_RXTDIS_OFFSET			1
214*4882a593Smuzhiyun #define USART3_RXTDIS_SIZE			1
215*4882a593Smuzhiyun #define USART3_TXTEN_OFFSET			8
216*4882a593Smuzhiyun #define USART3_TXTEN_SIZE			1
217*4882a593Smuzhiyun #define USART3_TXTDIS_OFFSET			9
218*4882a593Smuzhiyun #define USART3_TXTDIS_SIZE			1
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /* Constants for USART_MODE */
221*4882a593Smuzhiyun #define USART3_USART_MODE_NORMAL		0
222*4882a593Smuzhiyun #define USART3_USART_MODE_RS485			1
223*4882a593Smuzhiyun #define USART3_USART_MODE_HARDWARE		2
224*4882a593Smuzhiyun #define USART3_USART_MODE_MODEM			3
225*4882a593Smuzhiyun #define USART3_USART_MODE_ISO7816_T0		4
226*4882a593Smuzhiyun #define USART3_USART_MODE_ISO7816_T1		6
227*4882a593Smuzhiyun #define USART3_USART_MODE_IRDA			8
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun /* Constants for USCLKS */
230*4882a593Smuzhiyun #define USART3_USCLKS_MCK			0
231*4882a593Smuzhiyun #define USART3_USCLKS_MCK_DIV			1
232*4882a593Smuzhiyun #define USART3_USCLKS_SCK			3
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun /* Constants for CHRL */
235*4882a593Smuzhiyun #define USART3_CHRL_5				0
236*4882a593Smuzhiyun #define USART3_CHRL_6				1
237*4882a593Smuzhiyun #define USART3_CHRL_7				2
238*4882a593Smuzhiyun #define USART3_CHRL_8				3
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun /* Constants for PAR */
241*4882a593Smuzhiyun #define USART3_PAR_EVEN				0
242*4882a593Smuzhiyun #define USART3_PAR_ODD				1
243*4882a593Smuzhiyun #define USART3_PAR_SPACE			2
244*4882a593Smuzhiyun #define USART3_PAR_MARK				3
245*4882a593Smuzhiyun #define USART3_PAR_NONE				4
246*4882a593Smuzhiyun #define USART3_PAR_MULTI			6
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun /* Constants for NBSTOP */
249*4882a593Smuzhiyun #define USART3_NBSTOP_1				0
250*4882a593Smuzhiyun #define USART3_NBSTOP_1_5			1
251*4882a593Smuzhiyun #define USART3_NBSTOP_2				2
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun /* Constants for CHMODE */
254*4882a593Smuzhiyun #define USART3_CHMODE_NORMAL			0
255*4882a593Smuzhiyun #define USART3_CHMODE_ECHO			1
256*4882a593Smuzhiyun #define USART3_CHMODE_LOCAL_LOOP		2
257*4882a593Smuzhiyun #define USART3_CHMODE_REMOTE_LOOP		3
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /* Constants for MSBF */
260*4882a593Smuzhiyun #define USART3_MSBF_LSBF			0
261*4882a593Smuzhiyun #define USART3_MSBF_MSBF			1
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun /* Constants for OVER */
264*4882a593Smuzhiyun #define USART3_OVER_X16				0
265*4882a593Smuzhiyun #define USART3_OVER_X8				1
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun /* Constants for CD */
268*4882a593Smuzhiyun #define USART3_CD_DISABLE			0
269*4882a593Smuzhiyun #define USART3_CD_BYPASS			1
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun /* Constants for TO */
272*4882a593Smuzhiyun #define USART3_TO_DISABLE			0
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun /* Constants for TG */
275*4882a593Smuzhiyun #define USART3_TG_DISABLE			0
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun /* Constants for FI_DI_RATIO */
278*4882a593Smuzhiyun #define USART3_FI_DI_RATIO_DISABLE		0
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun /* Bit manipulation macros */
281*4882a593Smuzhiyun #define USART3_BIT(name)				\
282*4882a593Smuzhiyun 	(1 << USART3_##name##_OFFSET)
283*4882a593Smuzhiyun #define USART3_BF(name,value)				\
284*4882a593Smuzhiyun 	(((value) & ((1 << USART3_##name##_SIZE) - 1))	\
285*4882a593Smuzhiyun 	 << USART3_##name##_OFFSET)
286*4882a593Smuzhiyun #define USART3_BFEXT(name,value)			\
287*4882a593Smuzhiyun 	(((value) >> USART3_##name##_OFFSET)		\
288*4882a593Smuzhiyun 	 & ((1 << USART3_##name##_SIZE) - 1))
289*4882a593Smuzhiyun #define USART3_BFINS(name,value,old)			\
290*4882a593Smuzhiyun 	(((old) & ~(((1 << USART3_##name##_SIZE) - 1)	\
291*4882a593Smuzhiyun 		    << USART3_##name##_OFFSET))		\
292*4882a593Smuzhiyun 	 | USART3_BF(name,value))
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun #endif /* __DRIVERS_ATMEL_USART_H__ */
295