summaryrefslogtreecommitdiffstats
path: root/arch/m68k/include/asm/coldfire/mcf548x/mcf548x_uart.h
blob: 8f46f1c3ec15ca3a22c06f5d24c252835d2fe458 (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
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
/*
 * Copyright (c) 2008 Carsten Schlote <c.schlote@konzeptpark.de>
 * See file CREDITS for list of people who contributed to this project.
 *
 * This file is part of U-Boot V2.
 *
 * U-Boot V2 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 3 of the License, or
 * (at your option) any later version.
 *
 * U-Boot V2 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with U-Boot V2.  If not, see <http://www.gnu.org/licenses/>.
 */

/** @file
 *  Register and bit definitions for the MCF548X and MCF547x
 *  Programmable Serial Controller (UART Compatible Definitions) (UART)
 */
#ifndef __MCF548X_UART_H__
#define __MCF548X_UART_H__

/*
 *  Programmable Serial Controller (UART Compatible Definitions) (UART)
 */

/* Register read/write macros */
#define MCF_UART_UMR0        (*(vuint8_t *)(&__MBAR[0x008600]))
#define MCF_UART_USR0        (*(vuint8_t *)(&__MBAR[0x008604]))
#define MCF_UART_UCSR0       (*(vuint8_t *)(&__MBAR[0x008604]))
#define MCF_UART_UCR0        (*(vuint8_t *)(&__MBAR[0x008608]))
#define MCF_UART_URB0        (*(vuint8_t *)(&__MBAR[0x00860C]))
#define MCF_UART_UTB0        (*(vuint8_t *)(&__MBAR[0x00860C]))
#define MCF_UART_UIPCR0      (*(vuint8_t *)(&__MBAR[0x008610]))
#define MCF_UART_UACR0       (*(vuint8_t *)(&__MBAR[0x008610]))
#define MCF_UART_UISR0       (*(vuint8_t *)(&__MBAR[0x008614]))
#define MCF_UART_UIMR0       (*(vuint8_t *)(&__MBAR[0x008614]))
#define MCF_UART_UBG10       (*(vuint8_t *)(&__MBAR[0x008618]))
#define MCF_UART_UBG20       (*(vuint8_t *)(&__MBAR[0x00861C]))
#define MCF_UART_UIP0        (*(vuint8_t *)(&__MBAR[0x008634]))
#define MCF_UART_UOP10       (*(vuint8_t *)(&__MBAR[0x008638]))
#define MCF_UART_UOP00       (*(vuint8_t *)(&__MBAR[0x00863C]))

#define MCF_UART_UMR1        (*(vuint8_t *)(&__MBAR[0x008700]))
#define MCF_UART_USR1        (*(vuint8_t *)(&__MBAR[0x008704]))
#define MCF_UART_UCSR1       (*(vuint8_t *)(&__MBAR[0x008704]))
#define MCF_UART_UCR1        (*(vuint8_t *)(&__MBAR[0x008708]))
#define MCF_UART_URB1        (*(vuint8_t *)(&__MBAR[0x00870C]))
#define MCF_UART_UTB1        (*(vuint8_t *)(&__MBAR[0x00870C]))
#define MCF_UART_UIPCR1      (*(vuint8_t *)(&__MBAR[0x008710]))
#define MCF_UART_UACR1       (*(vuint8_t *)(&__MBAR[0x008710]))
#define MCF_UART_UISR1       (*(vuint8_t *)(&__MBAR[0x008714]))
#define MCF_UART_UIMR1       (*(vuint8_t *)(&__MBAR[0x008714]))
#define MCF_UART_UBG11       (*(vuint8_t *)(&__MBAR[0x008718]))
#define MCF_UART_UBG21       (*(vuint8_t *)(&__MBAR[0x00871C]))
#define MCF_UART_UIP1        (*(vuint8_t *)(&__MBAR[0x008734]))
#define MCF_UART_UOP11       (*(vuint8_t *)(&__MBAR[0x008738]))
#define MCF_UART_UOP01       (*(vuint8_t *)(&__MBAR[0x00873C]))

#define MCF_UART_UMR2        (*(vuint8_t *)(&__MBAR[0x008800]))
#define MCF_UART_USR2        (*(vuint8_t *)(&__MBAR[0x008804]))
#define MCF_UART_UCSR2       (*(vuint8_t *)(&__MBAR[0x008804]))
#define MCF_UART_UCR2        (*(vuint8_t *)(&__MBAR[0x008808]))
#define MCF_UART_URB2        (*(vuint8_t *)(&__MBAR[0x00880C]))
#define MCF_UART_UTB2        (*(vuint8_t *)(&__MBAR[0x00880C]))
#define MCF_UART_UIPCR2      (*(vuint8_t *)(&__MBAR[0x008810]))
#define MCF_UART_UACR2       (*(vuint8_t *)(&__MBAR[0x008810]))
#define MCF_UART_UISR2       (*(vuint8_t *)(&__MBAR[0x008814]))
#define MCF_UART_UIMR2       (*(vuint8_t *)(&__MBAR[0x008814]))
#define MCF_UART_UBG12       (*(vuint8_t *)(&__MBAR[0x008818]))
#define MCF_UART_UBG22       (*(vuint8_t *)(&__MBAR[0x00881C]))
#define MCF_UART_UIP2        (*(vuint8_t *)(&__MBAR[0x008834]))
#define MCF_UART_UOP12       (*(vuint8_t *)(&__MBAR[0x008838]))
#define MCF_UART_UOP02       (*(vuint8_t *)(&__MBAR[0x00883C]))

#define MCF_UART_UMR3        (*(vuint8_t *)(&__MBAR[0x008900]))
#define MCF_UART_USR3        (*(vuint8_t *)(&__MBAR[0x008904]))
#define MCF_UART_UCSR3       (*(vuint8_t *)(&__MBAR[0x008904]))
#define MCF_UART_UCR3        (*(vuint8_t *)(&__MBAR[0x008908]))
#define MCF_UART_URB3        (*(vuint8_t *)(&__MBAR[0x00890C]))
#define MCF_UART_UTB3        (*(vuint8_t *)(&__MBAR[0x00890C]))
#define MCF_UART_UIPCR3      (*(vuint8_t *)(&__MBAR[0x008910]))
#define MCF_UART_UACR3       (*(vuint8_t *)(&__MBAR[0x008910]))
#define MCF_UART_UISR3       (*(vuint8_t *)(&__MBAR[0x008914]))
#define MCF_UART_UIMR3       (*(vuint8_t *)(&__MBAR[0x008914]))
#define MCF_UART_UBG13       (*(vuint8_t *)(&__MBAR[0x008918]))
#define MCF_UART_UBG23       (*(vuint8_t *)(&__MBAR[0x00891C]))
#define MCF_UART_UIP3        (*(vuint8_t *)(&__MBAR[0x008934]))
#define MCF_UART_UOP13       (*(vuint8_t *)(&__MBAR[0x008938]))
#define MCF_UART_UOP03       (*(vuint8_t *)(&__MBAR[0x00893C]))


#define MCF_UART_UMR(x)      (*(vuint8_t *)(&__MBAR[0x008600+((x)*0x100)]))
#define MCF_UART_USR(x)      (*(vuint8_t *)(&__MBAR[0x008604+((x)*0x100)]))
#define MCF_UART_UCSR(x)     (*(vuint8_t *)(&__MBAR[0x008604+((x)*0x100)]))
#define MCF_UART_UCR(x)      (*(vuint8_t *)(&__MBAR[0x008608+((x)*0x100)]))
#define MCF_UART_URB(x)      (*(vuint8_t *)(&__MBAR[0x00860C+((x)*0x100)]))
#define MCF_UART_UTB(x)      (*(vuint8_t *)(&__MBAR[0x00860C+((x)*0x100)]))
#define MCF_UART_UIPCR(x)    (*(vuint8_t *)(&__MBAR[0x008610+((x)*0x100)]))
#define MCF_UART_UACR(x)     (*(vuint8_t *)(&__MBAR[0x008610+((x)*0x100)]))
#define MCF_UART_UISR(x)     (*(vuint8_t *)(&__MBAR[0x008614+((x)*0x100)]))
#define MCF_UART_UIMR(x)     (*(vuint8_t *)(&__MBAR[0x008614+((x)*0x100)]))
#define MCF_UART_UBG1(x)     (*(vuint8_t *)(&__MBAR[0x008618+((x)*0x100)]))
#define MCF_UART_UBG2(x)     (*(vuint8_t *)(&__MBAR[0x00861C+((x)*0x100)]))
#define MCF_UART_UIP(x)      (*(vuint8_t *)(&__MBAR[0x008634+((x)*0x100)]))
#define MCF_UART_UOP1(x)     (*(vuint8_t *)(&__MBAR[0x008638+((x)*0x100)]))
#define MCF_UART_UOP0(x)     (*(vuint8_t *)(&__MBAR[0x00863C+((x)*0x100)]))

/* Bit definitions and macros for MCF_UART_UMR */
#define MCF_UART_UMR_BC(x)              (((x)&0x03)<<0)
#define MCF_UART_UMR_PT                 (0x04)
#define MCF_UART_UMR_PM(x)              (((x)&0x03)<<3)
#define MCF_UART_UMR_ERR                (0x20)
#define MCF_UART_UMR_RXIRQ              (0x40)
#define MCF_UART_UMR_RXRTS              (0x80)
#define MCF_UART_UMR_SB(x)              (((x)&0x0F)<<0)
#define MCF_UART_UMR_TXCTS              (0x10)
#define MCF_UART_UMR_TXRTS              (0x20)
#define MCF_UART_UMR_CM(x)              (((x)&0x03)<<6)
#define MCF_UART_UMR_PM_MULTI_ADDR      (0x1C)
#define MCF_UART_UMR_PM_MULTI_DATA      (0x18)
#define MCF_UART_UMR_PM_NONE            (0x10)
#define MCF_UART_UMR_PM_FORCE_HI        (0x0C)
#define MCF_UART_UMR_PM_FORCE_LO        (0x08)
#define MCF_UART_UMR_PM_ODD             (0x04)
#define MCF_UART_UMR_PM_EVEN            (0x00)
#define MCF_UART_UMR_BC_5               (0x00)
#define MCF_UART_UMR_BC_6               (0x01)
#define MCF_UART_UMR_BC_7               (0x02)
#define MCF_UART_UMR_BC_8               (0x03)
#define MCF_UART_UMR_CM_NORMAL          (0x00)
#define MCF_UART_UMR_CM_ECHO            (0x40)
#define MCF_UART_UMR_CM_LOCAL_LOOP      (0x80)
#define MCF_UART_UMR_CM_REMOTE_LOOP     (0xC0)
#define MCF_UART_UMR_SB_STOP_BITS_1     (0x07)
#define MCF_UART_UMR_SB_STOP_BITS_15    (0x08)
#define MCF_UART_UMR_SB_STOP_BITS_2     (0x0F)

/* Bit definitions and macros for MCF_UART_USR */
#define MCF_UART_USR_RXRDY              (0x01)
#define MCF_UART_USR_FFULL              (0x02)
#define MCF_UART_USR_TXRDY              (0x04)
#define MCF_UART_USR_TXEMP              (0x08)
#define MCF_UART_USR_OE                 (0x10)
#define MCF_UART_USR_PE                 (0x20)
#define MCF_UART_USR_FE                 (0x40)
#define MCF_UART_USR_RB                 (0x80)

/* Bit definitions and macros for MCF_UART_UCSR */
#define MCF_UART_UCSR_TCS(x)            (((x)&0x0F)<<0)
#define MCF_UART_UCSR_RCS(x)            (((x)&0x0F)<<4)
#define MCF_UART_UCSR_RCS_SYS_CLK       (0xD0)
#define MCF_UART_UCSR_RCS_CTM16         (0xE0)
#define MCF_UART_UCSR_RCS_CTM           (0xF0)
#define MCF_UART_UCSR_TCS_SYS_CLK       (0x0D)
#define MCF_UART_UCSR_TCS_CTM16         (0x0E)
#define MCF_UART_UCSR_TCS_CTM           (0x0F)

/* Bit definitions and macros for MCF_UART_UCR */
#define MCF_UART_UCR_RXC(x)             (((x)&0x03)<<0)
#define MCF_UART_UCR_TXC(x)             (((x)&0x03)<<2)
#define MCF_UART_UCR_MISC(x)            (((x)&0x07)<<4)
#define MCF_UART_UCR_NONE               (0x00)
#define MCF_UART_UCR_STOP_BREAK         (0x70)
#define MCF_UART_UCR_START_BREAK        (0x60)
#define MCF_UART_UCR_BKCHGINT           (0x50)
#define MCF_UART_UCR_RESET_ERROR        (0x40)
#define MCF_UART_UCR_RESET_TX           (0x30)
#define MCF_UART_UCR_RESET_RX           (0x20)
#define MCF_UART_UCR_RESET_MR           (0x10)
#define MCF_UART_UCR_TX_DISABLED        (0x08)
#define MCF_UART_UCR_TX_ENABLED         (0x04)
#define MCF_UART_UCR_RX_DISABLED        (0x02)
#define MCF_UART_UCR_RX_ENABLED         (0x01)

/* Bit definitions and macros for MCF_UART_UIPCR */
#define MCF_UART_UIPCR_CTS              (0x01)
#define MCF_UART_UIPCR_COS              (0x10)

/* Bit definitions and macros for MCF_UART_UACR */
#define MCF_UART_UACR_IEC               (0x01)

/* Bit definitions and macros for MCF_UART_UISR */
#define MCF_UART_UISR_TXRDY             (0x01)
#define MCF_UART_UISR_RXRDY_FU          (0x02)
#define MCF_UART_UISR_DB                (0x04)
#define MCF_UART_UISR_RXFTO             (0x08)
#define MCF_UART_UISR_TXFIFO            (0x10)
#define MCF_UART_UISR_RXFIFO            (0x20)
#define MCF_UART_UISR_COS               (0x80)

/* Bit definitions and macros for MCF_UART_UIMR */
#define MCF_UART_UIMR_TXRDY             (0x01)
#define MCF_UART_UIMR_RXRDY_FU          (0x02)
#define MCF_UART_UIMR_DB                (0x04)
#define MCF_UART_UIMR_COS               (0x80)

/* Bit definitions and macros for MCF_UART_UIP */
#define MCF_UART_UIP_CTS                (0x01)

/* Bit definitions and macros for MCF_UART_UOP1 */
#define MCF_UART_UOP1_RTS               (0x01)

/* Bit definitions and macros for MCF_UART_UOP0 */
#define MCF_UART_UOP0_RTS               (0x01)

/* The UART registers for mem mapped access */
struct m5407uart
{
	vuint8_t	umr;	vuint24_t	reserved0;
	vuint8_t 	usr;    vuint24_t	reserved1;   /* ucsr */
	vuint8_t	ucr;    vuint24_t	reserved2;
	vuint8_t	urb;    vuint24_t	reserved3;   /* utb */
	vuint8_t	uipcr;  vuint24_t	reserved4;   /* uacr */
	vuint8_t	uisr;   vuint24_t	reserved5;   /* uimr */
	vuint8_t	udu;    vuint24_t	reserved6;
	vuint8_t	ubg1;   vuint24_t	reserved7;
	vuint8_t	ubg2;   vuint24_t	reserved8;
	const uint8_t	uip;    vuint24_t	reserved9;
	vuint8_t	uop1;   vuint24_t	reserved10;
	vuint8_t	uop0;   vuint24_t	reserved11;
} __attribute((packed));

#define MCF_UART(x)      (*(struct m5407uart *)(&__MBAR[0x008600+((x)*0x100)]))


#endif /* __MCF548X_UART_H__ */