]>
Commit | Line | Data |
---|---|---|
3d603665 MZ |
1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | |
3 | * Copyright 2019 Toradex | |
4 | */ | |
5 | ||
6 | #include <common.h> | |
5255932f | 7 | #include <init.h> |
3d603665 MZ |
8 | |
9 | #include <asm/arch/clock.h> | |
10 | #include <asm/arch/imx8-pins.h> | |
11 | #include <asm/arch/iomux.h> | |
12 | #include <asm/arch/sci/sci.h> | |
13 | #include <asm/arch/sys_proto.h> | |
14 | #include <asm/gpio.h> | |
15 | #include <asm/io.h> | |
9fb625ce | 16 | #include <env.h> |
3d603665 MZ |
17 | #include <errno.h> |
18 | #include <linux/libfdt.h> | |
19 | ||
20 | #include "../common/tdx-cfg-block.h" | |
21 | ||
22 | DECLARE_GLOBAL_DATA_PTR; | |
23 | ||
24 | #define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \ | |
25 | (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \ | |
26 | (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \ | |
27 | (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) | |
28 | ||
29 | static iomux_cfg_t uart1_pads[] = { | |
30 | SC_P_UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL), | |
31 | SC_P_UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL), | |
32 | }; | |
33 | ||
34 | static void setup_iomux_uart(void) | |
35 | { | |
36 | imx8_iomux_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); | |
37 | } | |
38 | ||
39 | int board_early_init_f(void) | |
40 | { | |
64b5f469 | 41 | sc_pm_clock_rate_t rate = SC_80MHZ; |
3d603665 MZ |
42 | sc_err_t err = 0; |
43 | ||
64b5f469 AG |
44 | /* Set UART1 clock root to 80 MHz and enable it */ |
45 | err = sc_pm_setup_uart(SC_R_UART_1, rate); | |
3d603665 MZ |
46 | if (err != SC_ERR_NONE) |
47 | return 0; | |
48 | ||
49 | setup_iomux_uart(); | |
50 | ||
51 | return 0; | |
52 | } | |
53 | ||
54 | #if IS_ENABLED(CONFIG_DM_GPIO) | |
55 | static void board_gpio_init(void) | |
56 | { | |
57 | /* TODO */ | |
58 | } | |
59 | #else | |
60 | static inline void board_gpio_init(void) {} | |
61 | #endif | |
62 | ||
63 | #if IS_ENABLED(CONFIG_FEC_MXC) | |
64 | #include <miiphy.h> | |
65 | ||
66 | int board_phy_config(struct phy_device *phydev) | |
67 | { | |
68 | if (phydev->drv->config) | |
69 | phydev->drv->config(phydev); | |
70 | ||
71 | return 0; | |
72 | } | |
73 | #endif | |
74 | ||
3d603665 MZ |
75 | int checkboard(void) |
76 | { | |
77 | puts("Model: Toradex Apalis iMX8\n"); | |
78 | ||
79 | build_info(); | |
80 | print_bootinfo(); | |
81 | ||
82 | return 0; | |
83 | } | |
84 | ||
85 | int board_init(void) | |
86 | { | |
87 | board_gpio_init(); | |
88 | ||
89 | return 0; | |
90 | } | |
91 | ||
92 | void detail_board_ddr_info(void) | |
93 | { | |
94 | puts("\nDDR "); | |
95 | } | |
96 | ||
97 | /* | |
98 | * Board specific reset that is system reset. | |
99 | */ | |
100 | void reset_cpu(ulong addr) | |
101 | { | |
102 | /* TODO */ | |
103 | } | |
104 | ||
105 | #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) | |
106 | int ft_board_setup(void *blob, bd_t *bd) | |
107 | { | |
108 | return ft_common_board_setup(blob, bd); | |
109 | } | |
110 | #endif | |
111 | ||
112 | int board_mmc_get_env_dev(int devno) | |
113 | { | |
114 | return devno; | |
115 | } | |
116 | ||
117 | int board_late_init(void) | |
118 | { | |
119 | #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG | |
120 | /* TODO move to common */ | |
121 | env_set("board_name", "Apalis iMX8QM"); | |
122 | env_set("board_rev", "v1.0"); | |
123 | #endif | |
124 | ||
125 | return 0; | |
126 | } |