xref: /rk3399_rockchip-uboot/include/ns16550.h (revision 2e5983d2ea5ff21406408c18c5b8fa12d4250908)
1717b5aadSwdenk /*
2717b5aadSwdenk  * NS16550 Serial Port
3717b5aadSwdenk  * originally from linux source (arch/ppc/boot/ns16550.h)
4717b5aadSwdenk  * modified slightly to
5717b5aadSwdenk  * have addresses as offsets from CFG_ISA_BASE
6717b5aadSwdenk  * added a few more definitions
7717b5aadSwdenk  * added prototypes for ns16550.c
8717b5aadSwdenk  * reduced no of com ports to 2
9717b5aadSwdenk  * modifications (c) Rob Taylor, Flying Pig Systems. 2000.
10717b5aadSwdenk  */
11717b5aadSwdenk 
12717b5aadSwdenk #if (CFG_NS16550_REG_SIZE == 1)
13717b5aadSwdenk struct NS16550 {
14717b5aadSwdenk 	unsigned char rbr;		/* 0 */
15717b5aadSwdenk 	unsigned char ier;		/* 1 */
16717b5aadSwdenk 	unsigned char fcr;		/* 2 */
17717b5aadSwdenk 	unsigned char lcr;		/* 3 */
18717b5aadSwdenk 	unsigned char mcr;		/* 4 */
19717b5aadSwdenk 	unsigned char lsr;		/* 5 */
20717b5aadSwdenk 	unsigned char msr;		/* 6 */
21717b5aadSwdenk 	unsigned char scr;		/* 7 */
22717b5aadSwdenk } __attribute__ ((packed));
23717b5aadSwdenk #elif (CFG_NS16550_REG_SIZE == 2)
24717b5aadSwdenk struct NS16550 {
25717b5aadSwdenk 	unsigned short rbr;		/* 0 */
26717b5aadSwdenk 	unsigned short ier;		/* 1 */
27717b5aadSwdenk 	unsigned short fcr;		/* 2 */
28717b5aadSwdenk 	unsigned short lcr;		/* 3 */
29717b5aadSwdenk 	unsigned short mcr;		/* 4 */
30717b5aadSwdenk 	unsigned short lsr;		/* 5 */
31717b5aadSwdenk 	unsigned short msr;		/* 6 */
32717b5aadSwdenk 	unsigned short scr;		/* 7 */
33717b5aadSwdenk } __attribute__ ((packed));
34717b5aadSwdenk #elif (CFG_NS16550_REG_SIZE == 4)
35717b5aadSwdenk struct NS16550 {
36717b5aadSwdenk 	unsigned long rbr;		/* 0 */
37717b5aadSwdenk 	unsigned long ier;		/* 1 */
38717b5aadSwdenk 	unsigned long fcr;		/* 2 */
39717b5aadSwdenk 	unsigned long lcr;		/* 3 */
40717b5aadSwdenk 	unsigned long mcr;		/* 4 */
41717b5aadSwdenk 	unsigned long lsr;		/* 5 */
42717b5aadSwdenk 	unsigned long msr;		/* 6 */
43717b5aadSwdenk 	unsigned long scr;		/* 7 */
44717b5aadSwdenk } __attribute__ ((packed));
45717b5aadSwdenk #elif (CFG_NS16550_REG_SIZE == -4)
46717b5aadSwdenk struct NS16550 {
47717b5aadSwdenk 	unsigned char rbr;		/* 0 */
48717b5aadSwdenk 	int pad1:24;
49717b5aadSwdenk 	unsigned char ier;		/* 1 */
50717b5aadSwdenk 	int pad2:24;
51717b5aadSwdenk 	unsigned char fcr;		/* 2 */
52717b5aadSwdenk 	int pad3:24;
53717b5aadSwdenk 	unsigned char lcr;		/* 3 */
54717b5aadSwdenk 	int pad4:24;
55717b5aadSwdenk 	unsigned char mcr;		/* 4 */
56717b5aadSwdenk 	int pad5:24;
57717b5aadSwdenk 	unsigned char lsr;		/* 5 */
58717b5aadSwdenk 	int pad6:24;
59717b5aadSwdenk 	unsigned char msr;		/* 6 */
60717b5aadSwdenk 	int pad7:24;
61717b5aadSwdenk 	unsigned char scr;		/* 7 */
62717b5aadSwdenk 	int pad8:24;
63*2e5983d2Swdenk #ifdef CONFIG_OMAP1510
64*2e5983d2Swdenk 	unsigned char mdr1;		/* mode select reset TL16C750*/
65*2e5983d2Swdenk 	int pad9:24;
66*2e5983d2Swdenk 	unsigned long pad[10];
67*2e5983d2Swdenk 	unsigned char osc_12m_sel;
68*2e5983d2Swdenk 	int pad10:24;
69*2e5983d2Swdenk #endif
70717b5aadSwdenk } __attribute__ ((packed));
71717b5aadSwdenk #else
72717b5aadSwdenk #error "Please define NS16550 registers size."
73717b5aadSwdenk #endif
74717b5aadSwdenk 
75717b5aadSwdenk #define thr rbr
76717b5aadSwdenk #define iir fcr
77717b5aadSwdenk #define dll rbr
78717b5aadSwdenk #define dlm ier
79717b5aadSwdenk 
80717b5aadSwdenk typedef volatile struct NS16550 *NS16550_t;
81717b5aadSwdenk 
82717b5aadSwdenk #define FCR_FIFO_EN     0x01		/* Fifo enable */
83717b5aadSwdenk #define FCR_RXSR        0x02		/* Receiver soft reset */
84717b5aadSwdenk #define FCR_TXSR        0x04		/* Transmitter soft reset */
85717b5aadSwdenk 
86717b5aadSwdenk #define MCR_DTR         0x01
87717b5aadSwdenk #define MCR_RTS         0x02
88717b5aadSwdenk #define MCR_DMA_EN      0x04
89717b5aadSwdenk #define MCR_TX_DFR      0x08
90717b5aadSwdenk 
91717b5aadSwdenk #define LCR_WLS_MSK	0x03		/* character length slect mask */
92717b5aadSwdenk #define LCR_WLS_5	0x00		/* 5 bit character length */
93717b5aadSwdenk #define LCR_WLS_6	0x01		/* 6 bit character length */
94717b5aadSwdenk #define LCR_WLS_7	0x02		/* 7 bit character length */
95717b5aadSwdenk #define LCR_WLS_8	0x03		/* 8 bit character length */
96717b5aadSwdenk #define LCR_STB		0x04		/* Number of stop Bits, off = 1, on = 1.5 or 2) */
97717b5aadSwdenk #define LCR_PEN		0x08		/* Parity eneble */
98717b5aadSwdenk #define LCR_EPS		0x10		/* Even Parity Select */
99717b5aadSwdenk #define LCR_STKP	0x20		/* Stick Parity */
100717b5aadSwdenk #define LCR_SBRK	0x40		/* Set Break */
101717b5aadSwdenk #define LCR_BKSE	0x80		/* Bank select enable */
102717b5aadSwdenk 
103717b5aadSwdenk #define LSR_DR		0x01		/* Data ready */
104717b5aadSwdenk #define LSR_OE		0x02		/* Overrun */
105717b5aadSwdenk #define LSR_PE		0x04		/* Parity error */
106717b5aadSwdenk #define LSR_FE		0x08		/* Framing error */
107717b5aadSwdenk #define LSR_BI		0x10		/* Break */
108717b5aadSwdenk #define LSR_THRE	0x20		/* Xmit holding register empty */
109717b5aadSwdenk #define LSR_TEMT	0x40		/* Xmitter empty */
110717b5aadSwdenk #define LSR_ERR		0x80		/* Error */
111717b5aadSwdenk 
112*2e5983d2Swdenk #ifdef CONFIG_OMAP1510
113*2e5983d2Swdenk #define OSC_12M_SEL	0x01		/* selects 6.5 * current clk div */
114*2e5983d2Swdenk #endif
115*2e5983d2Swdenk 
116717b5aadSwdenk /* useful defaults for LCR */
117717b5aadSwdenk #define LCR_8N1		0x03
118717b5aadSwdenk 
119717b5aadSwdenk void	NS16550_init   (NS16550_t com_port, int baud_divisor);
120717b5aadSwdenk void	NS16550_putc   (NS16550_t com_port, char c);
121717b5aadSwdenk char	NS16550_getc   (NS16550_t com_port);
122717b5aadSwdenk int	NS16550_tstc   (NS16550_t com_port);
123717b5aadSwdenk void	NS16550_reinit (NS16550_t com_port, int baud_divisor);
124