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