xref: /aosp_15_r20/external/coreboot/src/soc/nvidia/tegra210/include/soc/console_uart.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__
4 #define __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__
5 
6 #include <soc/clock.h>
7 
8 enum console_uart_id {
9 	UART_ID_NONE	= -1,
10 	UART_ID_A	= 0,
11 	UART_ID_B	= 1,
12 	UART_ID_C	= 2,
13 	UART_ID_D	= 3,
14 	UART_ID_E	= 4,
15 };
16 
console_uart_get_id(void)17 static inline enum console_uart_id console_uart_get_id(void)
18 {
19 	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTA))
20 		return UART_ID_A;
21 
22 	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTB))
23 		return UART_ID_B;
24 
25 	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTC))
26 		return UART_ID_C;
27 
28 	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTD))
29 		return UART_ID_D;
30 
31 	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTE))
32 		return UART_ID_E;
33 
34 	return UART_ID_NONE;
35 }
36 
console_uart_clk_rst_reg(void)37 static inline void *console_uart_clk_rst_reg(void)
38 {
39 	switch (console_uart_get_id()) {
40 	case UART_ID_NONE:
41 		return NULL;
42 	case UART_ID_A:
43 		return CLK_RST_REG(clk_src_uarta);
44 	case UART_ID_B:
45 		return CLK_RST_REG(clk_src_uartb);
46 	case UART_ID_C:
47 		return CLK_RST_REG(clk_src_uartc);
48 	case UART_ID_D:
49 		return CLK_RST_REG(clk_src_uartd);
50 	case UART_ID_E:
51 		return CLK_RST_REG(clk_src_uarte);
52 	}
53 
54 	return NULL;
55 }
56 
console_uart_clk_src_dev_id(void)57 static inline uint32_t console_uart_clk_src_dev_id(void)
58 {
59 	switch (console_uart_get_id()) {
60 	case UART_ID_NONE:
61 		return 0;
62 	case UART_ID_A:
63 		return CLK_SRC_DEV_ID(UARTA, PLLP);
64 	case UART_ID_B:
65 		return CLK_SRC_DEV_ID(UARTB, PLLP);
66 	case UART_ID_C:
67 		return CLK_SRC_DEV_ID(UARTC, PLLP);
68 	case UART_ID_D:
69 		return CLK_SRC_DEV_ID(UARTD, PLLP);
70 	case UART_ID_E:
71 		return CLK_SRC_DEV_ID(UARTE, PLLP);
72 	}
73 
74 	return 0;
75 }
76 
console_uart_clock_enable_clear_reset(void)77 static inline void console_uart_clock_enable_clear_reset(void)
78 {
79 	switch (console_uart_get_id()) {
80 	case UART_ID_NONE:
81 		return;
82 	case UART_ID_A:
83 		clock_enable_clear_reset_l(CLK_L_UARTA);
84 		break;
85 	case UART_ID_B:
86 		clock_enable_clear_reset_l(CLK_L_UARTB);
87 		break;
88 	case UART_ID_C:
89 		clock_enable_clear_reset_h(CLK_H_UARTC);
90 		break;
91 	case UART_ID_D:
92 		clock_enable_clear_reset_u(CLK_U_UARTD);
93 		break;
94 	case UART_ID_E:
95 		clock_enable_clear_reset_u(CLK_U_UARTE);
96 		break;
97 	}
98 }
99 
100 #endif /* __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__ */
101