xref: /rk3399_ARM-atf/include/drivers/marvell/uart/a3700_console.h (revision 3968bc08abb3f43a03175ec7d30b797f253c0caa)
1d7c4420cSKonstantin Porotchkin /*
2d7c4420cSKonstantin Porotchkin  * Copyright (C) 2016 Marvell International Ltd.
3d7c4420cSKonstantin Porotchkin  *
4d7c4420cSKonstantin Porotchkin  * SPDX-License-Identifier:	BSD-3-Clause
5d7c4420cSKonstantin Porotchkin  * https://spdx.org/licenses
6d7c4420cSKonstantin Porotchkin  */
7d7c4420cSKonstantin Porotchkin 
8d7c4420cSKonstantin Porotchkin #ifndef A3700_CONSOLE_H
9d7c4420cSKonstantin Porotchkin #define A3700_CONSOLE_H
10d7c4420cSKonstantin Porotchkin 
1109d40e0eSAntonio Nino Diaz #include <drivers/console.h>
12d7c4420cSKonstantin Porotchkin 
13d7c4420cSKonstantin Porotchkin /* MVEBU UART Registers */
14d7c4420cSKonstantin Porotchkin #define UART_RX_REG		0x00
15d7c4420cSKonstantin Porotchkin #define UART_TX_REG		0x04
16d7c4420cSKonstantin Porotchkin #define UART_CTRL_REG		0x08
17d7c4420cSKonstantin Porotchkin #define UART_STATUS_REG		0x0c
18d7c4420cSKonstantin Porotchkin #define UART_BAUD_REG		0x10
19d7c4420cSKonstantin Porotchkin #define UART_POSSR_REG		0x14
20d7c4420cSKonstantin Porotchkin 
21d7c4420cSKonstantin Porotchkin /* FIFO Control Register bits */
22d7c4420cSKonstantin Porotchkin #define UARTFCR_FIFOMD_16450	(0 << 6)
23d7c4420cSKonstantin Porotchkin #define UARTFCR_FIFOMD_16550	(1 << 6)
24d7c4420cSKonstantin Porotchkin #define UARTFCR_RXTRIG_1	(0 << 6)
25d7c4420cSKonstantin Porotchkin #define UARTFCR_RXTRIG_4	(1 << 6)
26d7c4420cSKonstantin Porotchkin #define UARTFCR_RXTRIG_8	(2 << 6)
27d7c4420cSKonstantin Porotchkin #define UARTFCR_RXTRIG_16	(3 << 6)
28d7c4420cSKonstantin Porotchkin #define UARTFCR_TXTRIG_1	(0 << 4)
29d7c4420cSKonstantin Porotchkin #define UARTFCR_TXTRIG_4	(1 << 4)
30d7c4420cSKonstantin Porotchkin #define UARTFCR_TXTRIG_8	(2 << 4)
31d7c4420cSKonstantin Porotchkin #define UARTFCR_TXTRIG_16	(3 << 4)
32d7c4420cSKonstantin Porotchkin #define UARTFCR_DMAEN		(1 << 3)	/* Enable DMA mode */
33d7c4420cSKonstantin Porotchkin #define UARTFCR_TXCLR		(1 << 2)	/* Clear contents of Tx FIFO */
34d7c4420cSKonstantin Porotchkin #define UARTFCR_RXCLR		(1 << 1)	/* Clear contents of Rx FIFO */
35d7c4420cSKonstantin Porotchkin #define UARTFCR_FIFOEN		(1 << 0)	/* Enable the Tx/Rx FIFO */
36d7c4420cSKonstantin Porotchkin 
37d7c4420cSKonstantin Porotchkin /* Line Control Register bits */
38d7c4420cSKonstantin Porotchkin #define UARTLCR_DLAB		(1 << 7)	/* Divisor Latch Access */
39d7c4420cSKonstantin Porotchkin #define UARTLCR_SETB		(1 << 6)	/* Set BREAK Condition */
40d7c4420cSKonstantin Porotchkin #define UARTLCR_SETP		(1 << 5)	/* Set Parity to LCR[4] */
41d7c4420cSKonstantin Porotchkin #define UARTLCR_EVEN		(1 << 4)	/* Even Parity Format */
42d7c4420cSKonstantin Porotchkin #define UARTLCR_PAR		(1 << 3)	/* Parity */
43d7c4420cSKonstantin Porotchkin #define UARTLCR_STOP		(1 << 2)	/* Stop Bit */
44d7c4420cSKonstantin Porotchkin #define UARTLCR_WORDSZ_5	0		/* Word Length of 5 */
45d7c4420cSKonstantin Porotchkin #define UARTLCR_WORDSZ_6	1		/* Word Length of 6 */
46d7c4420cSKonstantin Porotchkin #define UARTLCR_WORDSZ_7	2		/* Word Length of 7 */
47d7c4420cSKonstantin Porotchkin #define UARTLCR_WORDSZ_8	3		/* Word Length of 8 */
48d7c4420cSKonstantin Porotchkin 
49d7c4420cSKonstantin Porotchkin /* Line Status Register bits */
50d7c4420cSKonstantin Porotchkin #define UARTLSR_TXFIFOFULL	(1 << 11)	/* Tx Fifo Full */
51d7c4420cSKonstantin Porotchkin 
52d7c4420cSKonstantin Porotchkin /* UART Control Register bits */
53d7c4420cSKonstantin Porotchkin #define UART_CTRL_RXFIFO_RESET	(1 << 14)
54d7c4420cSKonstantin Porotchkin #define UART_CTRL_TXFIFO_RESET	(1 << 15)
55d7c4420cSKonstantin Porotchkin #define UARTLSR_TXFIFOEMPTY	(1 << 6)
56d7c4420cSKonstantin Porotchkin 
57d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__
58d7c4420cSKonstantin Porotchkin 
59d7c4420cSKonstantin Porotchkin #include <stdint.h>
60d7c4420cSKonstantin Porotchkin 
61d7c4420cSKonstantin Porotchkin /*
62d7c4420cSKonstantin Porotchkin  * Initialize a new a3700 console instance and register it with the console
63d7c4420cSKonstantin Porotchkin  * framework. The |console| pointer must point to storage that will be valid
64d7c4420cSKonstantin Porotchkin  * for the lifetime of the console, such as a global or static local variable.
65d7c4420cSKonstantin Porotchkin  * Its contents will be reinitialized from scratch.
66d7c4420cSKonstantin Porotchkin  */
67d7c4420cSKonstantin Porotchkin int console_a3700_register(uintptr_t baseaddr, uint32_t clock, uint32_t baud,
68*3968bc08SAndre Przywara 			   console_t *console);
69d7c4420cSKonstantin Porotchkin 
70d5dfdeb6SJulius Werner #endif /*__ASSEMBLER__*/
71d7c4420cSKonstantin Porotchkin 
72d7c4420cSKonstantin Porotchkin #endif	/* A3700_CONSOLE_H */
73