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