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
|
/*-
* Copyright (c) 2012 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Oleksandr Rybalko under sponsorship
* from the FreeBSD Foundation.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _UART_DEV_IMX5XX_H
#define _UART_DEV_IMX5XX_H
#define IMXUART_URXD_REG 0x0000 /* UART Receiver Register */
#define IMXUART_URXD_CHARRDY (1 << 15)
#define IMXUART_URXD_ERR (1 << 14)
#define IMXUART_URXD_OVRRUN (1 << 13)
#define IMXUART_URXD_FRMERR (1 << 12)
#define IMXUART_URXD_BRK (1 << 11)
#define IMXUART_URXD_PRERR (1 << 10)
#define IMXUART_URXD_RX_DATA_MASK 0xff
#define IMXUART_UTXD_REG 0x0040 /* UART Transmitter Register */
#define IMXUART_UTXD_TX_DATA_MASK 0xff
#define IMXUART_UCR1_REG 0x0080 /* UART Control Register 1 */
#define IMXUART_UCR1_ADEN (1 << 15)
#define IMXUART_UCR1_ADBR (1 << 14)
#define IMXUART_UCR1_TRDYEN (1 << 13)
#define IMXUART_UCR1_IDEN (1 << 12)
#define IMXUART_UCR1_ICD_MASK (3 << 10)
#define IMXUART_UCR1_ICD_IDLE4 (0 << 10)
#define IMXUART_UCR1_ICD_IDLE8 (1 << 10)
#define IMXUART_UCR1_ICD_IDLE16 (2 << 10)
#define IMXUART_UCR1_ICD_IDLE32 (3 << 10)
#define IMXUART_UCR1_RRDYEN (1 << 9)
#define IMXUART_UCR1_RXDMAEN (1 << 8)
#define IMXUART_UCR1_IREN (1 << 7)
#define IMXUART_UCR1_TXMPTYEN (1 << 6)
#define IMXUART_UCR1_RTSDEN (1 << 5)
#define IMXUART_UCR1_SNDBRK (1 << 4)
#define IMXUART_UCR1_TXDMAEN (1 << 3)
#define IMXUART_UCR1_ATDMAEN (1 << 2)
#define IMXUART_UCR1_DOZE (1 << 1)
#define IMXUART_UCR1_UARTEN (1 << 0)
#define IMXUART_UCR2_REG 0x0084 /* UART Control Register 2 */
#define IMXUART_UCR2_ESCI (1 << 15)
#define IMXUART_UCR2_IRTS (1 << 14)
#define IMXUART_UCR2_CTSC (1 << 13)
#define IMXUART_UCR2_CTS (1 << 12)
#define IMXUART_UCR2_ESCEN (1 << 11)
#define IMXUART_UCR2_RTEC_MASK (3 << 9)
#define IMXUART_UCR2_RTEC_REDGE (0 << 9)
#define IMXUART_UCR2_RTEC_FEDGE (1 << 9)
#define IMXUART_UCR2_RTEC_EDGE (2 << 9)
#define IMXUART_UCR2_PREN (1 << 8)
#define IMXUART_UCR2_PROE (1 << 7)
#define IMXUART_UCR2_STPB (1 << 6)
#define IMXUART_UCR2_WS (1 << 5)
#define IMXUART_UCR2_RTSEN (1 << 4)
#define IMXUART_UCR2_ATEN (1 << 3)
#define IMXUART_UCR2_TXEN (1 << 2)
#define IMXUART_UCR2_RXEN (1 << 1)
#define IMXUART_UCR2_N_SRST (1 << 0)
#define IMXUART_UCR3_REG 0x0088 /* UART Control Register 3 */
#define IMXUART_UCR3_DPEC_MASK (3 << 14)
#define IMXUART_UCR3_DPEC_REDGE (0 << 14)
#define IMXUART_UCR3_DPEC_FEDGE (1 << 14)
#define IMXUART_UCR3_DPEC_EDGE (2 << 14)
#define IMXUART_UCR3_DTREN (1 << 13)
#define IMXUART_UCR3_PARERREN (1 << 12)
#define IMXUART_UCR3_FRAERREN (1 << 11)
#define IMXUART_UCR3_DSR (1 << 10)
#define IMXUART_UCR3_DCD (1 << 9)
#define IMXUART_UCR3_RI (1 << 8)
#define IMXUART_UCR3_ADNIMP (1 << 7)
#define IMXUART_UCR3_RXDSEN (1 << 6)
#define IMXUART_UCR3_AIRINTEN (1 << 5)
#define IMXUART_UCR3_AWAKEN (1 << 4)
#define IMXUART_UCR3_DTRDEN (1 << 3)
#define IMXUART_UCR3_RXDMUXSEL (1 << 2)
#define IMXUART_UCR3_INVT (1 << 1)
#define IMXUART_UCR3_ACIEN (1 << 0)
#define IMXUART_UCR4_REG 0x008c /* UART Control Register 4 */
#define IMXUART_UCR4_CTSTL_MASK (0x3f << 10)
#define IMXUART_UCR4_CTSTL_SHIFT 10
#define IMXUART_UCR4_INVR (1 << 9)
#define IMXUART_UCR4_ENIRI (1 << 8)
#define IMXUART_UCR4_WKEN (1 << 7)
#define IMXUART_UCR4_IDDMAEN (1 << 6)
#define IMXUART_UCR4_IRSC (1 << 5)
#define IMXUART_UCR4_LPBYP (1 << 4)
#define IMXUART_UCR4_TCEN (1 << 3)
#define IMXUART_UCR4_BKEN (1 << 2)
#define IMXUART_UCR4_OREN (1 << 1)
#define IMXUART_UCR4_DREN (1 << 0)
#define IMXUART_UFCR_REG 0x0090 /* UART FIFO Control Register */
#define IMXUART_UFCR_TXTL_MASK (0x3f << 10)
#define IMXUART_UFCR_TXTL_SHIFT 10
#define IMXUART_UFCR_RFDIV_MASK (0x07 << 7)
#define IMXUART_UFCR_RFDIV_SHIFT 7
#define IMXUART_UFCR_RFDIV_SHIFT 7
#define IMXUART_UFCR_RFDIV_DIV6 (0 << 7)
#define IMXUART_UFCR_RFDIV_DIV5 (1 << 7)
#define IMXUART_UFCR_RFDIV_DIV4 (2 << 7)
#define IMXUART_UFCR_RFDIV_DIV3 (3 << 7)
#define IMXUART_UFCR_RFDIV_DIV2 (4 << 7)
#define IMXUART_UFCR_RFDIV_DIV1 (5 << 7)
#define IMXUART_UFCR_RFDIV_DIV7 (6 << 7)
#define IMXUART_UFCR_DCEDTE (1 << 6)
#define IMXUART_UFCR_RXTL_MASK 0x0000003f
#define IMXUART_UFCR_RXTL_SHIFT 0
#define IMXUART_USR1_REG 0x0094 /* UART Status Register 1 */
#define IMXUART_USR1_PARITYERR (1 << 15)
#define IMXUART_USR1_RTSS (1 << 14)
#define IMXUART_USR1_TRDY (1 << 13)
#define IMXUART_USR1_RTSD (1 << 12)
#define IMXUART_USR1_ESCF (1 << 11)
#define IMXUART_USR1_FRAMERR (1 << 10)
#define IMXUART_USR1_RRDY (1 << 9)
#define IMXUART_USR1_AGTIM (1 << 8)
#define IMXUART_USR1_DTRD (1 << 7)
#define IMXUART_USR1_RXDS (1 << 6)
#define IMXUART_USR1_AIRINT (1 << 5)
#define IMXUART_USR1_AWAKE (1 << 4)
/* 6040 5008 XXX */
#define IMXUART_USR2_REG 0x0098 /* UART Status Register 2 */
#define IMXUART_USR2_ADET (1 << 15)
#define IMXUART_USR2_TXFE (1 << 14)
#define IMXUART_USR2_DTRF (1 << 13)
#define IMXUART_USR2_IDLE (1 << 12)
#define IMXUART_USR2_ACST (1 << 11)
#define IMXUART_USR2_RIDELT (1 << 10)
#define IMXUART_USR2_RIIN (1 << 9)
#define IMXUART_USR2_IRINT (1 << 8)
#define IMXUART_USR2_WAKE (1 << 7)
#define IMXUART_USR2_DCDDELT (1 << 6)
#define IMXUART_USR2_DCDIN (1 << 5)
#define IMXUART_USR2_RTSF (1 << 4)
#define IMXUART_USR2_TXDC (1 << 3)
#define IMXUART_USR2_BRCD (1 << 2)
#define IMXUART_USR2_ORE (1 << 1)
#define IMXUART_USR2_RDR (1 << 0)
#define IMXUART_UESC_REG 0x009c /* UART Escape Character Register */
#define IMXUART_UESC_ESC_CHAR_MASK 0x000000ff
#define IMXUART_UTIM_REG 0x00a0 /* UART Escape Timer Register */
#define IMXUART_UTIM_TIM_MASK 0x00000fff
#define IMXUART_UBIR_REG 0x00a4 /* UART BRM Incremental Register */
#define IMXUART_UBIR_INC_MASK 0x0000ffff
#define IMXUART_UBMR_REG 0x00a8 /* UART BRM Modulator Register */
#define IMXUART_UBMR_MOD_MASK 0x0000ffff
#define IMXUART_UBRC_REG 0x00ac /* UART Baud Rate Count Register */
#define IMXUART_UBRC_BCNT_MASK 0x0000ffff
#define IMXUART_ONEMS_REG 0x00b0 /* UART One Millisecond Register */
#define IMXUART_ONEMS_ONEMS_MASK 0x00ffffff
#define IMXUART_UTS_REG 0x00b4 /* UART Test Register */
#define IMXUART_UTS_FRCPERR (1 << 13)
#define IMXUART_UTS_LOOP (1 << 12)
#define IMXUART_UTS_DBGEN (1 << 11)
#define IMXUART_UTS_LOOPIR (1 << 10)
#define IMXUART_UTS_RXDBG (1 << 9)
#define IMXUART_UTS_TXEMPTY (1 << 6)
#define IMXUART_UTS_RXEMPTY (1 << 5)
#define IMXUART_UTS_TXFULL (1 << 4)
#define IMXUART_UTS_RXFULL (1 << 3)
#define IMXUART_UTS_SOFTRST (1 << 0)
#define REG(_r) IMXUART_ ## _r ## _REG
#define FLD(_r, _v) IMXUART_ ## _r ## _ ## _v
#define GETREG(bas, reg) \
bus_space_read_4((bas)->bst, (bas)->bsh, (reg))
#define SETREG(bas, reg, value) \
bus_space_write_4((bas)->bst, (bas)->bsh, (reg), (value))
#define CLR(_bas, _r, _b) \
SETREG((_bas), (_r), GETREG((_bas), (_r)) & ~(_b))
#define SET(_bas, _r, _b) \
SETREG((_bas), (_r), GETREG((_bas), (_r)) | (_b))
#define IS_SET(_bas, _r, _b) \
((GETREG((_bas), (_r)) & (_b)) ? 1 : 0)
#define ENA(_bas, _r, _b) SET((_bas), REG(_r), FLD(_r, _b))
#define DIS(_bas, _r, _b) CLR((_bas), REG(_r), FLD(_r, _b))
#define IS(_bas, _r, _b) IS_SET((_bas), REG(_r), FLD(_r, _b))
#endif /* _UART_DEV_IMX5XX_H */
|