xref: /freebsd-13.1/sys/dev/uart/uart_dev_msm.h (revision e6dd0a0e)
1dc7717a8SGanbold Tsagaankhuu /*-
2dc7717a8SGanbold Tsagaankhuu  * Copyright (c) 2014 Ganbold Tsagaankhuu <[email protected]>
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 
84dc7717a8SGanbold Tsagaankhuu /* UART DM TX FIFO Registers - 4, write only */
85dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TF(x)				(0x70 + (4 * (x)))
86dc7717a8SGanbold Tsagaankhuu 
87dc7717a8SGanbold Tsagaankhuu /* UART Command Register, write only */
88dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR				0x10
89dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_ENABLE			(1 << 0)
90dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_RX_DISABLE			(1 << 1)
91dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_ENABLE			(1 << 2)
92dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_CR_TX_DISABLE			(1 << 3)
93dc7717a8SGanbold Tsagaankhuu 
94dc7717a8SGanbold Tsagaankhuu /* UART_DM_CR channel command bit value (register field is bits 8:4) */
95dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_RX			0x10
96dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX			0x20
97dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_ERROR_STATUS		0x30
98dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_BREAK_INT			0x40
99dc7717a8SGanbold Tsagaankhuu #define	UART_DM_START_BREAK			0x50
100dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STOP_BREAK			0x60
101dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_CTS			0x70
102dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_STALE_INT			0x80
103dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_LOW				0xD0
104dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFR_HIGH			0xE0
105dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CR_PROTECTION_EN		0x100
106dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_ENABLE		0x500
107dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_EVENT_DISABLE		0x600
108dc7717a8SGanbold Tsagaankhuu #define	UART_DM_FORCE_STALE_EVENT		0x400
109dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CLEAR_TX_READY			0x300
110dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_ERROR			0x800
111dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RESET_TX_DONE			0x810
112dc7717a8SGanbold Tsagaankhuu 
113dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Mask Register */
114dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR				0x14
115dc7717a8SGanbold Tsagaankhuu /* these can be used for both ISR and IMR registers */
116dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXLEV				(1 << 0)
117dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXHUNT				(1 << 1)
118dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBRK_CHNG			(1 << 2)
119dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXSTALE				(1 << 3)
120dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXLEV				(1 << 4)
121dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DELTA_CTS			(1 << 5)
122dc7717a8SGanbold Tsagaankhuu #define	UART_DM_CURRENT_CTS			(1 << 6)
123dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_READY			(1 << 7)
124dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_ERROR			(1 << 8)
125dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TX_DONE				(1 << 9)
126dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_START			(1 << 10)
127dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXBREAK_END			(1 << 11)
128dc7717a8SGanbold Tsagaankhuu #define	UART_DM_PAR_FRAME_ERR_IRQ		(1 << 12)
129dc7717a8SGanbold Tsagaankhuu 
130dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IMR_ENABLED			(UART_DM_TX_READY | \
131dc7717a8SGanbold Tsagaankhuu 						UART_DM_TXLEV | \
132dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXLEV | \
133dc7717a8SGanbold Tsagaankhuu 						UART_DM_RXSTALE)
134dc7717a8SGanbold Tsagaankhuu 
135dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Programming Register */
136dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR				0x18
137dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_LSB		0x0f
138dc7717a8SGanbold Tsagaankhuu #define	UART_DM_STALE_TIMEOUT_MSB		0x00
139dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_TIMEOUT_MSB_BMSK	0xffffff80
140dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IPR_STALE_LSB_BMSK		0x1f
141dc7717a8SGanbold Tsagaankhuu 
142dc7717a8SGanbold Tsagaankhuu /* UART Transmit/Receive FIFO Watermark Register */
143dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFWR				0x1c
144dc7717a8SGanbold Tsagaankhuu /* Interrupt is generated when FIFO level is less than or equal to this value */
145dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TFW_VALUE			0
146dc7717a8SGanbold Tsagaankhuu 
147dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFWR				0x20
148dc7717a8SGanbold Tsagaankhuu /* Interrupt generated when no of words in RX FIFO is greater than this value */
149dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RFW_VALUE			0
150dc7717a8SGanbold Tsagaankhuu 
151dc7717a8SGanbold Tsagaankhuu /* UART Hunt Character Register */
152dc7717a8SGanbold Tsagaankhuu #define	UART_DM_HCR				0x24
153dc7717a8SGanbold Tsagaankhuu 
154dc7717a8SGanbold Tsagaankhuu /* Used for RX transfer initialization */
155dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX				0x34
156dc7717a8SGanbold Tsagaankhuu /* Default DMRX value - any value bigger than FIFO size would be fine */
157dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMRX_DEF_VALUE			0x220
158dc7717a8SGanbold Tsagaankhuu 
159dc7717a8SGanbold Tsagaankhuu /* Register to enable IRDA function */
160dc7717a8SGanbold Tsagaankhuu #define	UART_DM_IRDA				0x38
161dc7717a8SGanbold Tsagaankhuu 
162dc7717a8SGanbold Tsagaankhuu /* UART Data Mover Enable Register */
163dc7717a8SGanbold Tsagaankhuu #define	UART_DM_DMEN				0x3c
164*9f7743f2SRuslan Bukin /*
165*9f7743f2SRuslan Bukin  * Single-Character mode for RX channel (every character received
166*9f7743f2SRuslan Bukin  * is zero-padded into a word).
167*9f7743f2SRuslan Bukin  */
168*9f7743f2SRuslan Bukin #define	 UART_DM_DMEN_RX_SC_ENABLE		(1 << 5)
169dc7717a8SGanbold Tsagaankhuu 
170dc7717a8SGanbold Tsagaankhuu /* Number of characters for Transmission */
171dc7717a8SGanbold Tsagaankhuu #define	UART_DM_NO_CHARS_FOR_TX			0x40
172dc7717a8SGanbold Tsagaankhuu 
173dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Base Address */
174dc7717a8SGanbold Tsagaankhuu #define	UART_DM_BADR				0x44
175dc7717a8SGanbold Tsagaankhuu 
176dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SIM_CFG_ADDR			0x80
177dc7717a8SGanbold Tsagaankhuu 
178dc7717a8SGanbold Tsagaankhuu /* Read only registers */
179dc7717a8SGanbold Tsagaankhuu /* UART Status Register */
180dc7717a8SGanbold Tsagaankhuu #define	UART_DM_SR				0x08
181dc7717a8SGanbold Tsagaankhuu /* register field mask mapping */
182dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXRDY			(1 << 0)
183dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_RXFULL			(1 << 1)
184dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXRDY			(1 << 2)
185dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_TXEMT			(1 << 3)
186dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_UART_OVERRUN		(1 << 4)
187dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_SR_PAR_FRAME_ERR		(1 << 5)
188dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BREAK			(1 << 6)
189dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_HUNT_CHAR			(1 << 7)
190dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RX_BRK_START_LAST		(1 << 8)
191dc7717a8SGanbold Tsagaankhuu 
192dc7717a8SGanbold Tsagaankhuu /* UART Receive FIFO Registers - 4 in numbers */
193dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RF(x)				(0x70 + (4 * (x)))
194dc7717a8SGanbold Tsagaankhuu 
195dc7717a8SGanbold Tsagaankhuu /* UART Masked Interrupt Status Register */
196dc7717a8SGanbold Tsagaankhuu #define	UART_DM_MISR				0x10
197dc7717a8SGanbold Tsagaankhuu 
198dc7717a8SGanbold Tsagaankhuu /* UART Interrupt Status Register */
199dc7717a8SGanbold Tsagaankhuu #define	UART_DM_ISR				0x14
200dc7717a8SGanbold Tsagaankhuu 
201dc7717a8SGanbold Tsagaankhuu /* Number of characters received since the end of last RX transfer */
202dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RX_TOTAL_SNAP			0x38
203dc7717a8SGanbold Tsagaankhuu 
204dc7717a8SGanbold Tsagaankhuu /* UART TX FIFO Status Register */
205dc7717a8SGanbold Tsagaankhuu #define	UART_DM_TXFS				0x4c
206dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
207dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
208dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
209dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_TXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
210dc7717a8SGanbold Tsagaankhuu 
211dc7717a8SGanbold Tsagaankhuu /* UART RX FIFO Status Register */
212dc7717a8SGanbold Tsagaankhuu #define	UART_DM_RXFS				0x50
213dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_LSB(x)		UART_DM_EXTR_BITS(x,0,6)
214dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_STATE_MSB(x)		UART_DM_EXTR_BITS(x,14,31)
215dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_BUF_STATE(x)		UART_DM_EXTR_BITS(x,7,9)
216dc7717a8SGanbold Tsagaankhuu #define	 UART_DM_RXFS_ASYNC_STATE(x)		UART_DM_EXTR_BITS(x,10,13)
217dc7717a8SGanbold Tsagaankhuu 
218dc7717a8SGanbold Tsagaankhuu #endif	/* _UART_DM_H_ */
219