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