xref: /rk3399_ARM-atf/include/drivers/nuvoton/npcm845x/npcm845x_lpuart.h (revision b74a193852979fcc3dffabbe3153d0f069514400)
1*edcece15Srutigl@gmail.com /*
2*edcece15Srutigl@gmail.com  * Copyright (c) 2015-2023, ARM Limited and Contributors. All rights reserved.
3*edcece15Srutigl@gmail.com  *
4*edcece15Srutigl@gmail.com  * Copyright (C) 2022-2023 Nuvoton Ltd.
5*edcece15Srutigl@gmail.com  *
6*edcece15Srutigl@gmail.com  * SPDX-License-Identifier: BSD-3-Clause
7*edcece15Srutigl@gmail.com  */
8*edcece15Srutigl@gmail.com 
9*edcece15Srutigl@gmail.com #ifndef __ASM_ARCH_UART_H_
10*edcece15Srutigl@gmail.com #define __ASM_ARCH_UART_H_
11*edcece15Srutigl@gmail.com 
12*edcece15Srutigl@gmail.com #ifndef __ASSEMBLY__
13*edcece15Srutigl@gmail.com 
14*edcece15Srutigl@gmail.com struct npcmX50_uart {
15*edcece15Srutigl@gmail.com 	union {
16*edcece15Srutigl@gmail.com 		unsigned int rbr;
17*edcece15Srutigl@gmail.com 		unsigned int thr;
18*edcece15Srutigl@gmail.com 		unsigned int dll;
19*edcece15Srutigl@gmail.com 	};
20*edcece15Srutigl@gmail.com 	union {
21*edcece15Srutigl@gmail.com 		unsigned int ier;
22*edcece15Srutigl@gmail.com 		unsigned int dlm;
23*edcece15Srutigl@gmail.com 	};
24*edcece15Srutigl@gmail.com 	union {
25*edcece15Srutigl@gmail.com 		unsigned int iir;
26*edcece15Srutigl@gmail.com 		unsigned int fcr;
27*edcece15Srutigl@gmail.com 	};
28*edcece15Srutigl@gmail.com 	unsigned int lcr;
29*edcece15Srutigl@gmail.com 	unsigned int mcr;
30*edcece15Srutigl@gmail.com 	unsigned int lsr;
31*edcece15Srutigl@gmail.com 	unsigned int msr;
32*edcece15Srutigl@gmail.com 	unsigned int tor;
33*edcece15Srutigl@gmail.com };
34*edcece15Srutigl@gmail.com 
35*edcece15Srutigl@gmail.com typedef enum {
36*edcece15Srutigl@gmail.com 	/*
37*edcece15Srutigl@gmail.com 	 * UART0 is a general UART block without modem-I/O-control
38*edcece15Srutigl@gmail.com 	 * connection to external signals.
39*edcece15Srutigl@gmail.com 	 */
40*edcece15Srutigl@gmail.com 	UART0_DEV = 0,
41*edcece15Srutigl@gmail.com 	/*
42*edcece15Srutigl@gmail.com 	 * UART1-3 are each a general UART with modem-I/O-control
43*edcece15Srutigl@gmail.com 	 * connection to external signals.
44*edcece15Srutigl@gmail.com 	 */
45*edcece15Srutigl@gmail.com 	UART1_DEV,
46*edcece15Srutigl@gmail.com 	UART2_DEV,
47*edcece15Srutigl@gmail.com 	UART3_DEV,
48*edcece15Srutigl@gmail.com } UART_DEV_T;
49*edcece15Srutigl@gmail.com 
50*edcece15Srutigl@gmail.com typedef enum {
51*edcece15Srutigl@gmail.com 	/*
52*edcece15Srutigl@gmail.com 	 * 0 0 0: Mode 1:
53*edcece15Srutigl@gmail.com 	 * HSP1 connected to SI2,
54*edcece15Srutigl@gmail.com 	 * HSP2 connected to UART2,
55*edcece15Srutigl@gmail.com 	 * UART1 snoops HSP1,
56*edcece15Srutigl@gmail.com 	 * UART3 snoops SI2
57*edcece15Srutigl@gmail.com 	 */
58*edcece15Srutigl@gmail.com 	UART_MUX_MODE1 = 0,
59*edcece15Srutigl@gmail.com 	/*
60*edcece15Srutigl@gmail.com 	 * 0 0 1: Mode 2:
61*edcece15Srutigl@gmail.com 	 * HSP1 connected to UART1,
62*edcece15Srutigl@gmail.com 	 * HSP2 connected to SI2,
63*edcece15Srutigl@gmail.com 	 * UART2 snoops HSP2,
64*edcece15Srutigl@gmail.com 	 * UART3 snoops SI2
65*edcece15Srutigl@gmail.com 	 */
66*edcece15Srutigl@gmail.com 	UART_MUX_MODE2,
67*edcece15Srutigl@gmail.com 	/*
68*edcece15Srutigl@gmail.com 	 * 0 1 0: Mode 3:
69*edcece15Srutigl@gmail.com 	 * HSP1 connected to UART1,
70*edcece15Srutigl@gmail.com 	 * HSP2 connected to UART2,
71*edcece15Srutigl@gmail.com 	 * UART3 connected to SI2
72*edcece15Srutigl@gmail.com 	 */
73*edcece15Srutigl@gmail.com 	UART_MUX_MODE3,
74*edcece15Srutigl@gmail.com 	/*
75*edcece15Srutigl@gmail.com 	 * 0 1 1: Mode 4:
76*edcece15Srutigl@gmail.com 	 * HSP1 connected to SI1,
77*edcece15Srutigl@gmail.com 	 * HSP2 connected to SI2,
78*edcece15Srutigl@gmail.com 	 * UART1 snoops SI1,
79*edcece15Srutigl@gmail.com 	 * UART3 snoops SI2,
80*edcece15Srutigl@gmail.com 	 * UART2 snoops HSP1 (default)
81*edcece15Srutigl@gmail.com 	 */
82*edcece15Srutigl@gmail.com 	UART_MUX_MODE4,
83*edcece15Srutigl@gmail.com 	/*
84*edcece15Srutigl@gmail.com 	 * 1 0 0: Mode 5:
85*edcece15Srutigl@gmail.com 	 * HSP1 connected to SI1,
86*edcece15Srutigl@gmail.com 	 * HSP2 connected to UART2,
87*edcece15Srutigl@gmail.com 	 * UART1 snoops HSP1,
88*edcece15Srutigl@gmail.com 	 * UART3 snoops SI1
89*edcece15Srutigl@gmail.com 	 */
90*edcece15Srutigl@gmail.com 	UART_MUX_MODE5,
91*edcece15Srutigl@gmail.com 	/*
92*edcece15Srutigl@gmail.com 	 * 1 0 1: Mode 6:
93*edcece15Srutigl@gmail.com 	 * HSP1 connected to SI1,
94*edcece15Srutigl@gmail.com 	 * HSP2 connected to SI2,
95*edcece15Srutigl@gmail.com 	 * UART1 snoops SI1,
96*edcece15Srutigl@gmail.com 	 * UART3 snoops SI2,
97*edcece15Srutigl@gmail.com 	 * UART2 snoops HSP2
98*edcece15Srutigl@gmail.com 	 */
99*edcece15Srutigl@gmail.com 	UART_MUX_MODE6,
100*edcece15Srutigl@gmail.com 	/*
101*edcece15Srutigl@gmail.com 	 * 1 1 0: Mode 7:
102*edcece15Srutigl@gmail.com 	 * HSP1 connected to SI1,
103*edcece15Srutigl@gmail.com 	 * HSP2 connected to UART2,
104*edcece15Srutigl@gmail.com 	 * UART1 snoops HSP1,
105*edcece15Srutigl@gmail.com 	 * UART3 connected to SI2
106*edcece15Srutigl@gmail.com 	 */
107*edcece15Srutigl@gmail.com 	UART_MUX_MODE7,
108*edcece15Srutigl@gmail.com 	/* Skip UART mode configuration. */
109*edcece15Srutigl@gmail.com 	UART_MUX_RESERVED,
110*edcece15Srutigl@gmail.com 	/*
111*edcece15Srutigl@gmail.com 	 * A SW option to allow config of UART
112*edcece15Srutigl@gmail.com 	 * without touching the UART mux.
113*edcece15Srutigl@gmail.com 	 */
114*edcece15Srutigl@gmail.com 	UART_MUX_SKIP_CONFIG
115*edcece15Srutigl@gmail.com } UART_MUX_T;
116*edcece15Srutigl@gmail.com 
117*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
118*edcece15Srutigl@gmail.com /* Common baudrate definitions                                               */
119*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
120*edcece15Srutigl@gmail.com typedef enum {
121*edcece15Srutigl@gmail.com 	UART_BAUDRATE_110 = 110,
122*edcece15Srutigl@gmail.com 	UART_BAUDRATE_300 = 300,
123*edcece15Srutigl@gmail.com 	UART_BAUDRATE_600 = 600,
124*edcece15Srutigl@gmail.com 	UART_BAUDRATE_1200 = 1200,
125*edcece15Srutigl@gmail.com 	UART_BAUDRATE_2400 = 2400,
126*edcece15Srutigl@gmail.com 	UART_BAUDRATE_4800 = 4800,
127*edcece15Srutigl@gmail.com 	UART_BAUDRATE_9600 = 9600,
128*edcece15Srutigl@gmail.com 	UART_BAUDRATE_14400 = 14400,
129*edcece15Srutigl@gmail.com 	UART_BAUDRATE_19200 = 19200,
130*edcece15Srutigl@gmail.com 	UART_BAUDRATE_38400 = 38400,
131*edcece15Srutigl@gmail.com 	UART_BAUDRATE_57600 = 57600,
132*edcece15Srutigl@gmail.com 	UART_BAUDRATE_115200 = 115200,
133*edcece15Srutigl@gmail.com 	UART_BAUDRATE_230400 = 230400,
134*edcece15Srutigl@gmail.com 	UART_BAUDRATE_380400 = 380400,
135*edcece15Srutigl@gmail.com 	UART_BAUDRATE_460800 = 460800,
136*edcece15Srutigl@gmail.com } UART_BAUDRATE_T;
137*edcece15Srutigl@gmail.com 
138*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
139*edcece15Srutigl@gmail.com /* UART parity types                                                         */
140*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
141*edcece15Srutigl@gmail.com typedef enum {
142*edcece15Srutigl@gmail.com 	UART_PARITY_NONE = 0,
143*edcece15Srutigl@gmail.com 	UART_PARITY_EVEN,
144*edcece15Srutigl@gmail.com 	UART_PARITY_ODD,
145*edcece15Srutigl@gmail.com } UART_PARITY_T;
146*edcece15Srutigl@gmail.com 
147*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
148*edcece15Srutigl@gmail.com /* Uart stop bits                                                            */
149*edcece15Srutigl@gmail.com /*---------------------------------------------------------------------------*/
150*edcece15Srutigl@gmail.com typedef enum {
151*edcece15Srutigl@gmail.com 	UART_STOPBIT_1 = 0x00,
152*edcece15Srutigl@gmail.com 	UART_STOPBIT_DYNAMIC,
153*edcece15Srutigl@gmail.com } UART_STOPBIT_T;
154*edcece15Srutigl@gmail.com 
155*edcece15Srutigl@gmail.com enum FCR_RFITL_TYPE {
156*edcece15Srutigl@gmail.com 	FCR_RFITL_1B = 0x0,
157*edcece15Srutigl@gmail.com 	FCR_RFITL_4B = 0x4,
158*edcece15Srutigl@gmail.com 	FCR_RFITL_8B = 0x8,
159*edcece15Srutigl@gmail.com 	FCR_RFITL_14B = 0xC,
160*edcece15Srutigl@gmail.com };
161*edcece15Srutigl@gmail.com 
162*edcece15Srutigl@gmail.com enum LCR_WLS_TYPE {
163*edcece15Srutigl@gmail.com 	LCR_WLS_5bit = 0x0,
164*edcece15Srutigl@gmail.com 	LCR_WLS_6bit = 0x1,
165*edcece15Srutigl@gmail.com 	LCR_WLS_7bit = 0x2,
166*edcece15Srutigl@gmail.com 	LCR_WLS_8bit = 0x3,
167*edcece15Srutigl@gmail.com };
168*edcece15Srutigl@gmail.com 
169*edcece15Srutigl@gmail.com #define IER_DBGACK (1 << 4)
170*edcece15Srutigl@gmail.com #define IER_MSIE (1 << 3)
171*edcece15Srutigl@gmail.com #define IER_RLSE (1 << 2)
172*edcece15Srutigl@gmail.com #define IER_THREIE (1 << 1)
173*edcece15Srutigl@gmail.com #define IER_RDAIE (1 << 0)
174*edcece15Srutigl@gmail.com 
175*edcece15Srutigl@gmail.com #define IIR_FMES (1 << 7)
176*edcece15Srutigl@gmail.com #define IIR_RFTLS (1 << 5)
177*edcece15Srutigl@gmail.com #define IIR_DMS (1 << 4)
178*edcece15Srutigl@gmail.com #define IIR_IID (1 << 1)
179*edcece15Srutigl@gmail.com #define IIR_NIP (1 << 0)
180*edcece15Srutigl@gmail.com 
181*edcece15Srutigl@gmail.com #define FCR_RFITL_1B (0 << 4)
182*edcece15Srutigl@gmail.com #define FCR_RFITL_4B (4 << 4)
183*edcece15Srutigl@gmail.com #define FCR_RFITL_8B (8 << 4)
184*edcece15Srutigl@gmail.com #define FCR_RFITL_14B (12 << 4)
185*edcece15Srutigl@gmail.com #define FCR_DMS (1 << 3)
186*edcece15Srutigl@gmail.com #define FCR_TFR (1 << 2)
187*edcece15Srutigl@gmail.com #define FCR_RFR (1 << 1)
188*edcece15Srutigl@gmail.com #define FCR_FME (1 << 0)
189*edcece15Srutigl@gmail.com 
190*edcece15Srutigl@gmail.com #define LCR_DLAB (1 << 7)
191*edcece15Srutigl@gmail.com #define LCR_BCB (1 << 6)
192*edcece15Srutigl@gmail.com #define LCR_SPE (1 << 5)
193*edcece15Srutigl@gmail.com #define LCR_EPS (1 << 4)
194*edcece15Srutigl@gmail.com #define LCR_PBE (1 << 3)
195*edcece15Srutigl@gmail.com #define LCR_NSB (1 << 2)
196*edcece15Srutigl@gmail.com #define LCR_WLS_8b (3 << 0)
197*edcece15Srutigl@gmail.com #define LCR_WLS_7b (2 << 0)
198*edcece15Srutigl@gmail.com #define LCR_WLS_6b (1 << 0)
199*edcece15Srutigl@gmail.com #define LCR_WLS_5b (0 << 0)
200*edcece15Srutigl@gmail.com 
201*edcece15Srutigl@gmail.com #define MCR_LBME (1 << 4)
202*edcece15Srutigl@gmail.com #define MCR_OUT2 (1 << 3)
203*edcece15Srutigl@gmail.com #define MCR_RTS (1 << 1)
204*edcece15Srutigl@gmail.com #define MCR_DTR (1 << 0)
205*edcece15Srutigl@gmail.com 
206*edcece15Srutigl@gmail.com #define LSR_ERR_RX (1 << 7)
207*edcece15Srutigl@gmail.com #define LSR_TE (1 << 6)
208*edcece15Srutigl@gmail.com #define LSR_THRE (1 << 5)
209*edcece15Srutigl@gmail.com #define LSR_BII (1 << 4)
210*edcece15Srutigl@gmail.com #define LSR_FEI (1 << 3)
211*edcece15Srutigl@gmail.com #define LSR_PEI (1 << 2)
212*edcece15Srutigl@gmail.com #define LSR_OEI (1 << 1)
213*edcece15Srutigl@gmail.com #define LSR_RFDR (1 << 0)
214*edcece15Srutigl@gmail.com 
215*edcece15Srutigl@gmail.com #define MSR_DCD (1 << 7)
216*edcece15Srutigl@gmail.com #define MSR_RI (1 << 6)
217*edcece15Srutigl@gmail.com #define MSR_DSR (1 << 5)
218*edcece15Srutigl@gmail.com #define MSR_CTS (1 << 4)
219*edcece15Srutigl@gmail.com #define MSR_DDCD (1 << 3)
220*edcece15Srutigl@gmail.com #define MSR_DRI (1 << 2)
221*edcece15Srutigl@gmail.com #define MSR_DDSR (1 << 1)
222*edcece15Srutigl@gmail.com #define MSR_DCTS (1 << 0)
223*edcece15Srutigl@gmail.com 
224*edcece15Srutigl@gmail.com #endif /* __ASSEMBLY__ */
225*edcece15Srutigl@gmail.com 
226*edcece15Srutigl@gmail.com uintptr_t npcm845x_get_base_uart(UART_DEV_T dev);
227*edcece15Srutigl@gmail.com void CLK_ResetUART(void);
228*edcece15Srutigl@gmail.com int UART_Init(UART_DEV_T devNum, UART_BAUDRATE_T baudRate);
229*edcece15Srutigl@gmail.com 
230*edcece15Srutigl@gmail.com #endif /* __ASM_ARCH_UART_H_ */
231