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