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