summaryrefslogtreecommitdiffstats
path: root/src/soc/nvidia/tegra210/include/soc/console_uart.h
blob: a94cee5f315f5069aea9294b179b120b7a666d34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__
#define __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__

#include <soc/clock.h>

enum console_uart_id {
	UART_ID_NONE	= -1,
	UART_ID_A	= 0,
	UART_ID_B	= 1,
	UART_ID_C	= 2,
	UART_ID_D	= 3,
	UART_ID_E	= 4,
};

static inline enum console_uart_id console_uart_get_id(void)
{
	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTA))
		return UART_ID_A;

	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTB))
		return UART_ID_B;

	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTC))
		return UART_ID_C;

	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTD))
		return UART_ID_D;

	if (CONFIG(CONSOLE_SERIAL_TEGRA210_UARTE))
		return UART_ID_E;

	return UART_ID_NONE;
}

static inline void *console_uart_clk_rst_reg(void)
{
	switch (console_uart_get_id()) {
	case UART_ID_NONE:
		return NULL;
	case UART_ID_A:
		return CLK_RST_REG(clk_src_uarta);
	case UART_ID_B:
		return CLK_RST_REG(clk_src_uartb);
	case UART_ID_C:
		return CLK_RST_REG(clk_src_uartc);
	case UART_ID_D:
		return CLK_RST_REG(clk_src_uartd);
	case UART_ID_E:
		return CLK_RST_REG(clk_src_uarte);
	}

	return NULL;
}

static inline uint32_t console_uart_clk_src_dev_id(void)
{
	switch (console_uart_get_id()) {
	case UART_ID_NONE:
		return 0;
	case UART_ID_A:
		return CLK_SRC_DEV_ID(UARTA, PLLP);
	case UART_ID_B:
		return CLK_SRC_DEV_ID(UARTB, PLLP);
	case UART_ID_C:
		return CLK_SRC_DEV_ID(UARTC, PLLP);
	case UART_ID_D:
		return CLK_SRC_DEV_ID(UARTD, PLLP);
	case UART_ID_E:
		return CLK_SRC_DEV_ID(UARTE, PLLP);
	}

	return 0;
}

static inline void console_uart_clock_enable_clear_reset(void)
{
	switch (console_uart_get_id()) {
	case UART_ID_NONE:
		return;
	case UART_ID_A:
		clock_enable_clear_reset_l(CLK_L_UARTA);
		break;
	case UART_ID_B:
		clock_enable_clear_reset_l(CLK_L_UARTB);
		break;
	case UART_ID_C:
		clock_enable_clear_reset_h(CLK_H_UARTC);
		break;
	case UART_ID_D:
		clock_enable_clear_reset_u(CLK_U_UARTD);
		break;
	case UART_ID_E:
		clock_enable_clear_reset_u(CLK_U_UARTE);
		break;
	}
}

#endif /* __SOC_NVIDIA_TEGRA210_INCLUDE_SOC_CONSOLE_UART_H__ */