xref: /freebsd/sys/dev/uart/uart_dev_msm.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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 
27dc7717a8SGanbold Tsagaankhuu #ifndef	_UART_DM_H_
28dc7717a8SGanbold Tsagaankhuu #define	_UART_DM_H_
29dc7717a8SGanbold Tsagaankhuu 
30dc7717a8SGanbold Tsagaankhuu #define	UART_DM_EXTR_BITS(value, start_pos, end_pos) \
31dc7717a8SGanbold Tsagaankhuu 	    ((value << (32 - end_pos)) >> (32 - (end_pos - start_pos)))
32dc7717a8SGanbold Tsagaankhuu 
33dc7717a8SGanbold Tsagaankhuu /* UART Parity Mode */
34dc7717a8SGanbold Tsagaankhuu enum UART_DM_PARITY_MODE {
35dc7717a8SGanbold Tsagaankhuu 	UART_DM_NO_PARITY,
36dc7717a8SGanbold Tsagaankhuu 	UART_DM_ODD_PARITY,
37dc7717a8SGanbold Tsagaankhuu 	UART_DM_EVEN_PARITY,
38dc7717a8SGanbold Tsagaankhuu 	UART_DM_SPACE_PARITY
39dc7717a8SGanbold Tsagaankhuu };
40dc7717a8SGanbold Tsagaankhuu 
41dc7717a8SGanbold Tsagaankhuu /* UART Stop Bit Length */
42dc7717a8SGanbold Tsagaankhuu enum UART_DM_STOP_BIT_LEN {
43dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_9_16,
44dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_1,
45dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_1_9_16,
46dc7717a8SGanbold Tsagaankhuu 	UART_DM_SBL_2
47dc7717a8SGanbold Tsagaankhuu };
48dc7717a8SGanbold Tsagaankhuu 
49dc7717a8SGanbold Tsagaankhuu /* UART Bits per Char */
50dc7717a8SGanbold Tsagaankhuu enum UART_DM_BITS_PER_CHAR {
51dc7717a8SGanbold Tsagaankhuu 	UART_DM_5_BPS,
52dc7717a8SGanbold Tsagaankhuu 	UART_DM_6_BPS,
53dc7717a8SGanbold Tsagaankhuu 	UART_DM_7_BPS,
54dc7717a8SGanbold Tsagaankhuu 	UART_DM_8_BPS
55dc7717a8SGanbold Tsagaankhuu };
56dc7717a8SGanbold Tsagaankhuu 
57dc7717a8SGanbold Tsagaankhuu /* 8-N-1 Configuration */
58dc7717a8SGanbold Tsagaankhuu #define	UART_DM_8_N_1_MODE			(UART_DM_NO_PARITY | \
59dc7717a8SGanbold Tsagaankhuu 						(UART_DM_SBL_1 << 2) | \
60dc7717a8SGanbold Tsagaankhuu 						(UART_DM_8_BPS << 4))
61dc7717a8SGanbold Tsagaankhuu 
62dc7717a8SGanbold Tsagaankhuu /* UART_DM Registers */
63dc7717a8SGanbold Tsagaankhuu 
64dc7717a8SGanbold Tsagaankhuu /* UART Operational Mode Registers (HSUART) */
65dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MR1				0x00
66dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_AUTO_RFR_LEVEL1_BMSK	0xffffff00
67dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_AUTO_RFR_LEVEL0_BMSK	0x3f
68dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_CTS_CTL_BMSK		0x40
69dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR1_RX_RDY_CTL_BMSK		0x80
70dc7717a8SGanbold Tsagaankhuu 
71dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MR2				0x04
72dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_ERROR_MODE_BMSK		0x40
73dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_BITS_PER_CHAR_BMSK		0x30
74dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_STOP_BIT_LEN_BMSK		0x0c
75dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_MR2_PARITY_MODE_BMSK		0x03
76dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXBRK_ZERO_CHAR_OFF		(1 << 8)
77dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_LOOPBACK			(1 << 7)
78dc7717a8SGanbold Tsagaankhuu 
79dc7717a8SGanbold Tsagaankhuu /* UART Clock Selection Register, write only */
80dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CSR				0x08
81dc7717a8SGanbold Tsagaankhuu 
82dc7717a8SGanbold Tsagaankhuu /* UART DM TX FIFO Registers - 4, write only */
83dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TF(x)				(0x70 + (4 * (x)))
84dc7717a8SGanbold Tsagaankhuu 
85dc7717a8SGanbold Tsagaankhuu /* UART Command Register, write only */
86dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR				0x10
87dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_ENABLE			(1 << 0)
88dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_DISABLE			(1 << 1)
89dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_ENABLE			(1 << 2)
90dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_DISABLE			(1 << 3)
91dc7717a8SGanbold Tsagaankhuu 
92dc7717a8SGanbold Tsagaankhuu /* UART_DM_CR channel command bit value (register field is bits 8:4) */
93dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_RX			0x10
94dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX			0x20
95dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_ERROR_STATUS		0x30
96dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_BREAK_INT			0x40
97dc7717a8SGanbold Tsagaankhuu #define	UART_DM_START_BREAK			0x50
98dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STOP_BREAK			0x60
99dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_CTS			0x70
100dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_STALE_INT			0x80
101dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_LOW				0xD0
102dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_HIGH			0xE0
103dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR_PROTECTION_EN		0x100
104dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_ENABLE		0x500
105dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_DISABLE		0x600
106dc7717a8SGanbold Tsagaankhuu #define	UART_DM_FORCE_STALE_EVENT		0x400
107dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CLEAR_TX_READY			0x300
108dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_ERROR			0x800
109dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_DONE			0x810
110dc7717a8SGanbold Tsagaankhuu 
111dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Mask Register */
112dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR				0x14
113dc7717a8SGanbold Tsagaankhuu /* these can be used for both ISR and IMR registers */
114dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXLEV				(1 << 0)
115dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXHUNT				(1 << 1)
116dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBRK_CHNG			(1 << 2)
117dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXSTALE				(1 << 3)
118dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXLEV				(1 << 4)
119dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DELTA_CTS			(1 << 5)
120dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CURRENT_CTS			(1 << 6)
121dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_READY			(1 << 7)
122dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_ERROR			(1 << 8)
123dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_DONE				(1 << 9)
124dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_START			(1 << 10)
125dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_END			(1 << 11)
126dc7717a8SGanbold Tsagaankhuu #define	UART_DM_PAR_FRAME_ERR_IRQ		(1 << 12)
127dc7717a8SGanbold Tsagaankhuu 
128dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR_ENABLED			(UART_DM_TX_READY | \
129dc7717a8SGanbold Tsagaankhuu 						UART_DM_TXLEV | \
130dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXLEV | \
131dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXSTALE)
132dc7717a8SGanbold Tsagaankhuu 
133dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Programming Register */
134dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR				0x18
135dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_LSB		0x0f
136dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_MSB		0x00
137dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_TIMEOUT_MSB_BMSK	0xffffff80
138dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_LSB_BMSK		0x1f
139dc7717a8SGanbold Tsagaankhuu 
140dc7717a8SGanbold Tsagaankhuu /* UART Transmit/Receive FIFO Watermark Register */
141dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFWR				0x1c
142dc7717a8SGanbold Tsagaankhuu /* Interrupt is generated when FIFO level is less than or equal to this value */
143dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFW_VALUE			0
144dc7717a8SGanbold Tsagaankhuu 
145dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFWR				0x20
146dc7717a8SGanbold Tsagaankhuu /* Interrupt generated when no of words in RX FIFO is greater than this value */
147dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFW_VALUE			0
148dc7717a8SGanbold Tsagaankhuu 
149dc7717a8SGanbold Tsagaankhuu /* UART Hunt Character Register */
150dc7717a8SGanbold Tsagaankhuu #define	UART_DM_HCR				0x24
151dc7717a8SGanbold Tsagaankhuu 
152dc7717a8SGanbold Tsagaankhuu /* Used for RX transfer initialization */
153dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX				0x34
154dc7717a8SGanbold Tsagaankhuu /* Default DMRX value - any value bigger than FIFO size would be fine */
155dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX_DEF_VALUE			0x220
156dc7717a8SGanbold Tsagaankhuu 
157dc7717a8SGanbold Tsagaankhuu /* Register to enable IRDA function */
158dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IRDA				0x38
159dc7717a8SGanbold Tsagaankhuu 
160dc7717a8SGanbold Tsagaankhuu /* UART Data Mover Enable Register */
161dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMEN				0x3c
162*9f7743f2SRuslan Bukin /*
163*9f7743f2SRuslan Bukin  * Single-Character mode for RX channel (every character received
164*9f7743f2SRuslan Bukin  * is zero-padded into a word).
165*9f7743f2SRuslan Bukin  */
166*9f7743f2SRuslan Bukin #define	 UART_DM_DMEN_RX_SC_ENABLE		(1 << 5)
167dc7717a8SGanbold Tsagaankhuu 
168dc7717a8SGanbold Tsagaankhuu /* Number of characters for Transmission */
169dc7717a8SGanbold Tsagaankhuu #define	UART_DM_NO_CHARS_FOR_TX			0x40
170dc7717a8SGanbold Tsagaankhuu 
171dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Base Address */
172dc7717a8SGanbold Tsagaankhuu #define	UART_DM_BADR				0x44
173dc7717a8SGanbold Tsagaankhuu 
174dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SIM_CFG_ADDR			0x80
175dc7717a8SGanbold Tsagaankhuu 
176dc7717a8SGanbold Tsagaankhuu /* Read only registers */
177dc7717a8SGanbold Tsagaankhuu /* UART Status Register */
178dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SR				0x08
179dc7717a8SGanbold Tsagaankhuu /* register field mask mapping */
180dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXRDY			(1 << 0)
181dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXFULL			(1 << 1)
182dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXRDY			(1 << 2)
183dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXEMT			(1 << 3)
184dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_UART_OVERRUN		(1 << 4)
185dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_PAR_FRAME_ERR		(1 << 5)
186dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BREAK			(1 << 6)
187dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_HUNT_CHAR			(1 << 7)
188dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BRK_START_LAST		(1 << 8)
189dc7717a8SGanbold Tsagaankhuu 
190dc7717a8SGanbold Tsagaankhuu /* UART Receive FIFO Registers - 4 in numbers */
191dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RF(x)				(0x70 + (4 * (x)))
192dc7717a8SGanbold Tsagaankhuu 
193dc7717a8SGanbold Tsagaankhuu /* UART Masked Interrupt Status Register */
194dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MISR				0x10
195dc7717a8SGanbold Tsagaankhuu 
196dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Status Register */
197dc7717a8SGanbold Tsagaankhuu #define	UART_DM_ISR				0x14
198dc7717a8SGanbold Tsagaankhuu 
199dc7717a8SGanbold Tsagaankhuu /* Number of characters received since the end of last RX transfer */
200dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RX_TOTAL_SNAP			0x38
201dc7717a8SGanbold Tsagaankhuu 
202dc7717a8SGanbold Tsagaankhuu /* UART TX FIFO Status Register */
203dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXFS				0x4c
204dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
205dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
206dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
207dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
208dc7717a8SGanbold Tsagaankhuu 
209dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Status Register */
210dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXFS				0x50
211dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
212dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
213dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
214dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
215dc7717a8SGanbold Tsagaankhuu 
216dc7717a8SGanbold Tsagaankhuu #endif	/* _UART_DM_H_ */
217