xref: /freebsd/sys/dev/uart/uart_dev_msm.h (revision 9f7743f2c8b83a860017917adb5faf0a608b7d88)
1dc7717a8SGanbold Tsagaankhuu /*-
2dc7717a8SGanbold Tsagaankhuu  * Copyright (c) 2014 Ganbold Tsagaankhuu <ganbold@freebsd.org>
3dc7717a8SGanbold Tsagaankhuu  * All rights reserved.
4dc7717a8SGanbold Tsagaankhuu  *
5dc7717a8SGanbold Tsagaankhuu  * Redistribution and use in source and binary forms, with or without
6dc7717a8SGanbold Tsagaankhuu  * modification, are permitted provided that the following conditions
7dc7717a8SGanbold Tsagaankhuu  * are met:
8dc7717a8SGanbold Tsagaankhuu  * 1. Redistributions of source code must retain the above copyright
9dc7717a8SGanbold Tsagaankhuu  *    notice, this list of conditions and the following disclaimer.
10dc7717a8SGanbold Tsagaankhuu  * 2. Redistributions in binary form must reproduce the above copyright
11dc7717a8SGanbold Tsagaankhuu  *    notice, this list of conditions and the following disclaimer in the
12dc7717a8SGanbold Tsagaankhuu  *    documentation and/or other materials provided with the distribution.
13dc7717a8SGanbold Tsagaankhuu  *
14dc7717a8SGanbold Tsagaankhuu  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15dc7717a8SGanbold Tsagaankhuu  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16dc7717a8SGanbold Tsagaankhuu  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17dc7717a8SGanbold Tsagaankhuu  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18dc7717a8SGanbold Tsagaankhuu  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19dc7717a8SGanbold Tsagaankhuu  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20dc7717a8SGanbold Tsagaankhuu  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21dc7717a8SGanbold Tsagaankhuu  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22dc7717a8SGanbold Tsagaankhuu  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23dc7717a8SGanbold Tsagaankhuu  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24dc7717a8SGanbold Tsagaankhuu  * SUCH DAMAGE.
25dc7717a8SGanbold Tsagaankhuu  *
26dc7717a8SGanbold Tsagaankhuu  * $FreeBSD$
27dc7717a8SGanbold Tsagaankhuu  */
28dc7717a8SGanbold Tsagaankhuu 
29dc7717a8SGanbold Tsagaankhuu #ifndef	_UART_DM_H_
30dc7717a8SGanbold Tsagaankhuu #define	_UART_DM_H_
31dc7717a8SGanbold Tsagaankhuu 
32dc7717a8SGanbold Tsagaankhuu #define	UART_DM_EXTR_BITS(value, start_pos, end_pos) \
33dc7717a8SGanbold Tsagaankhuu 	    ((value << (32 - end_pos)) >> (32 - (end_pos - start_pos)))
34dc7717a8SGanbold Tsagaankhuu 
35dc7717a8SGanbold Tsagaankhuu /* UART Parity Mode */
36dc7717a8SGanbold Tsagaankhuu enum UART_DM_PARITY_MODE {
37dc7717a8SGanbold Tsagaankhuu 	UART_DM_NO_PARITY,
38dc7717a8SGanbold Tsagaankhuu 	UART_DM_ODD_PARITY,
39dc7717a8SGanbold Tsagaankhuu 	UART_DM_EVEN_PARITY,
40dc7717a8SGanbold Tsagaankhuu 	UART_DM_SPACE_PARITY
41dc7717a8SGanbold Tsagaankhuu };
42dc7717a8SGanbold Tsagaankhuu 
43dc7717a8SGanbold Tsagaankhuu /* UART Stop Bit Length */
44dc7717a8SGanbold Tsagaankhuu enum UART_DM_STOP_BIT_LEN {
45dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_9_16,
46dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_1,
47dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_1_9_16,
48dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_2
49dc7717a8SGanbold Tsagaankhuu };
50dc7717a8SGanbold Tsagaankhuu 
51dc7717a8SGanbold Tsagaankhuu /* UART Bits per Char */
52dc7717a8SGanbold Tsagaankhuu enum UART_DM_BITS_PER_CHAR {
53dc7717a8SGanbold Tsagaankhuu 	UART_DM_5_BPS,
54dc7717a8SGanbold Tsagaankhuu 	UART_DM_6_BPS,
55dc7717a8SGanbold Tsagaankhuu 	UART_DM_7_BPS,
56dc7717a8SGanbold Tsagaankhuu 	UART_DM_8_BPS
57dc7717a8SGanbold Tsagaankhuu };
58dc7717a8SGanbold Tsagaankhuu 
59dc7717a8SGanbold Tsagaankhuu /* 8-N-1 Configuration */
60dc7717a8SGanbold Tsagaankhuu #define	UART_DM_8_N_1_MODE			(UART_DM_NO_PARITY | \
61dc7717a8SGanbold Tsagaankhuu 						(UART_DM_SBL_1 << 2) | \
62dc7717a8SGanbold Tsagaankhuu 						(UART_DM_8_BPS << 4))
63dc7717a8SGanbold Tsagaankhuu 
64dc7717a8SGanbold Tsagaankhuu /* UART_DM Registers */
65dc7717a8SGanbold Tsagaankhuu 
66dc7717a8SGanbold Tsagaankhuu /* UART Operational Mode Registers (HSUART) */
67dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MR1				0x00
68dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_AUTO_RFR_LEVEL1_BMSK	0xffffff00
69dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_AUTO_RFR_LEVEL0_BMSK	0x3f
70dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_CTS_CTL_BMSK		0x40
71dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_RX_RDY_CTL_BMSK		0x80
72dc7717a8SGanbold Tsagaankhuu 
73dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MR2				0x04
74dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_ERROR_MODE_BMSK		0x40
75dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_BITS_PER_CHAR_BMSK		0x30
76dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_STOP_BIT_LEN_BMSK		0x0c
77dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_PARITY_MODE_BMSK		0x03
78dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXBRK_ZERO_CHAR_OFF		(1 << 8)
79dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_LOOPBACK			(1 << 7)
80dc7717a8SGanbold Tsagaankhuu 
81dc7717a8SGanbold Tsagaankhuu /* UART Clock Selection Register, write only */
82dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CSR				0x08
83dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_115200			0xff
84dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_57600			0xee
85dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_38400			0xdd
86dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_28800			0xcc
87dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_19200			0xbb
88dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_14400			0xaa
89dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_9600			0x99
90dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_7200			0x88
91dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_4800			0x77
92dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_3600			0x66
93dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_2400			0x55
94dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_1200			0x44
95dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_600			0x33
96dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_300			0x22
97dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_150			0x11
98dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CSR_75				0x00
99dc7717a8SGanbold Tsagaankhuu 
100dc7717a8SGanbold Tsagaankhuu /* UART DM TX FIFO Registers - 4, write only */
101dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TF(x)				(0x70 + (4 * (x)))
102dc7717a8SGanbold Tsagaankhuu 
103dc7717a8SGanbold Tsagaankhuu /* UART Command Register, write only */
104dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR				0x10
105dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_ENABLE			(1 << 0)
106dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_DISABLE			(1 << 1)
107dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_ENABLE			(1 << 2)
108dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_DISABLE			(1 << 3)
109dc7717a8SGanbold Tsagaankhuu 
110dc7717a8SGanbold Tsagaankhuu /* UART_DM_CR channel command bit value (register field is bits 8:4) */
111dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_RX			0x10
112dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX			0x20
113dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_ERROR_STATUS		0x30
114dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_BREAK_INT			0x40
115dc7717a8SGanbold Tsagaankhuu #define	UART_DM_START_BREAK			0x50
116dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STOP_BREAK			0x60
117dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_CTS			0x70
118dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_STALE_INT			0x80
119dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_LOW				0xD0
120dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_HIGH			0xE0
121dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR_PROTECTION_EN		0x100
122dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_ENABLE		0x500
123dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_DISABLE		0x600
124dc7717a8SGanbold Tsagaankhuu #define	UART_DM_FORCE_STALE_EVENT		0x400
125dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CLEAR_TX_READY			0x300
126dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_ERROR			0x800
127dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_DONE			0x810
128dc7717a8SGanbold Tsagaankhuu 
129dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Mask Register */
130dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR				0x14
131dc7717a8SGanbold Tsagaankhuu /* these can be used for both ISR and IMR registers */
132dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXLEV				(1 << 0)
133dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXHUNT				(1 << 1)
134dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBRK_CHNG			(1 << 2)
135dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXSTALE				(1 << 3)
136dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXLEV				(1 << 4)
137dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DELTA_CTS			(1 << 5)
138dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CURRENT_CTS			(1 << 6)
139dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_READY			(1 << 7)
140dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_ERROR			(1 << 8)
141dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_DONE				(1 << 9)
142dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_START			(1 << 10)
143dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_END			(1 << 11)
144dc7717a8SGanbold Tsagaankhuu #define	UART_DM_PAR_FRAME_ERR_IRQ		(1 << 12)
145dc7717a8SGanbold Tsagaankhuu 
146dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR_ENABLED			(UART_DM_TX_READY | \
147dc7717a8SGanbold Tsagaankhuu 						UART_DM_TXLEV | \
148dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXLEV | \
149dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXSTALE)
150dc7717a8SGanbold Tsagaankhuu 
151dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Programming Register */
152dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR				0x18
153dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_LSB		0x0f
154dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_MSB		0x00
155dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_TIMEOUT_MSB_BMSK	0xffffff80
156dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_LSB_BMSK		0x1f
157dc7717a8SGanbold Tsagaankhuu 
158dc7717a8SGanbold Tsagaankhuu /* UART Transmit/Receive FIFO Watermark Register */
159dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFWR				0x1c
160dc7717a8SGanbold Tsagaankhuu /* Interrupt is generated when FIFO level is less than or equal to this value */
161dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFW_VALUE			0
162dc7717a8SGanbold Tsagaankhuu 
163dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFWR				0x20
164dc7717a8SGanbold Tsagaankhuu /* Interrupt generated when no of words in RX FIFO is greater than this value */
165dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFW_VALUE			0
166dc7717a8SGanbold Tsagaankhuu 
167dc7717a8SGanbold Tsagaankhuu /* UART Hunt Character Register */
168dc7717a8SGanbold Tsagaankhuu #define	UART_DM_HCR				0x24
169dc7717a8SGanbold Tsagaankhuu 
170dc7717a8SGanbold Tsagaankhuu /* Used for RX transfer initialization */
171dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX				0x34
172dc7717a8SGanbold Tsagaankhuu /* Default DMRX value - any value bigger than FIFO size would be fine */
173dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX_DEF_VALUE			0x220
174dc7717a8SGanbold Tsagaankhuu 
175dc7717a8SGanbold Tsagaankhuu /* Register to enable IRDA function */
176dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IRDA				0x38
177dc7717a8SGanbold Tsagaankhuu 
178dc7717a8SGanbold Tsagaankhuu /* UART Data Mover Enable Register */
179dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMEN				0x3c
180*9f7743f2SRuslan Bukin /*
181*9f7743f2SRuslan Bukin  * Single-Character mode for RX channel (every character received
182*9f7743f2SRuslan Bukin  * is zero-padded into a word).
183*9f7743f2SRuslan Bukin  */
184*9f7743f2SRuslan Bukin #define	 UART_DM_DMEN_RX_SC_ENABLE		(1 << 5)
185dc7717a8SGanbold Tsagaankhuu 
186dc7717a8SGanbold Tsagaankhuu /* Number of characters for Transmission */
187dc7717a8SGanbold Tsagaankhuu #define	UART_DM_NO_CHARS_FOR_TX			0x40
188dc7717a8SGanbold Tsagaankhuu 
189dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Base Address */
190dc7717a8SGanbold Tsagaankhuu #define	UART_DM_BADR				0x44
191dc7717a8SGanbold Tsagaankhuu 
192dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SIM_CFG_ADDR			0x80
193dc7717a8SGanbold Tsagaankhuu 
194dc7717a8SGanbold Tsagaankhuu /* Read only registers */
195dc7717a8SGanbold Tsagaankhuu /* UART Status Register */
196dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SR				0x08
197dc7717a8SGanbold Tsagaankhuu /* register field mask mapping */
198dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXRDY			(1 << 0)
199dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXFULL			(1 << 1)
200dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXRDY			(1 << 2)
201dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXEMT			(1 << 3)
202dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_UART_OVERRUN		(1 << 4)
203dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_PAR_FRAME_ERR		(1 << 5)
204dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BREAK			(1 << 6)
205dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_HUNT_CHAR			(1 << 7)
206dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BRK_START_LAST		(1 << 8)
207dc7717a8SGanbold Tsagaankhuu 
208dc7717a8SGanbold Tsagaankhuu /* UART Receive FIFO Registers - 4 in numbers */
209dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RF(x)				(0x70 + (4 * (x)))
210dc7717a8SGanbold Tsagaankhuu 
211dc7717a8SGanbold Tsagaankhuu /* UART Masked Interrupt Status Register */
212dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MISR				0x10
213dc7717a8SGanbold Tsagaankhuu 
214dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Status Register */
215dc7717a8SGanbold Tsagaankhuu #define	UART_DM_ISR				0x14
216dc7717a8SGanbold Tsagaankhuu 
217dc7717a8SGanbold Tsagaankhuu /* Number of characters received since the end of last RX transfer */
218dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RX_TOTAL_SNAP			0x38
219dc7717a8SGanbold Tsagaankhuu 
220dc7717a8SGanbold Tsagaankhuu /* UART TX FIFO Status Register */
221dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXFS				0x4c
222dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
223dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
224dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
225dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
226dc7717a8SGanbold Tsagaankhuu 
227dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Status Register */
228dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXFS				0x50
229dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
230dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
231dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
232dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
233dc7717a8SGanbold Tsagaankhuu 
234dc7717a8SGanbold Tsagaankhuu #endif	/* _UART_DM_H_ */
235