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