183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2bda920c6SVitaly Andrianov /*
3bda920c6SVitaly Andrianov * K2G EVM : Board initialization
4bda920c6SVitaly Andrianov *
5bda920c6SVitaly Andrianov * (C) Copyright 2015
6bda920c6SVitaly Andrianov * Texas Instruments Incorporated, <www.ti.com>
7bda920c6SVitaly Andrianov */
8bda920c6SVitaly Andrianov #include <common.h>
9*62465631SSimon Glass #include <eeprom.h>
10bda920c6SVitaly Andrianov #include <asm/arch/clock.h>
1191266ccbSVitaly Andrianov #include <asm/ti-common/keystone_net.h>
123b68939fSRoger Quadros #include <asm/arch/psc_defs.h>
133b68939fSRoger Quadros #include <asm/arch/mmc_host_def.h>
145f48da9aSCooper Jr., Franklin #include <fdtdec.h>
155f48da9aSCooper Jr., Franklin #include <i2c.h>
1658fac52dSAndrew F. Davis #include <remoteproc.h>
17dd78b8cfSVitaly Andrianov #include "mux-k2g.h"
18752a8311SRoger Quadros #include "../common/board_detect.h"
19bda920c6SVitaly Andrianov
205f48da9aSCooper Jr., Franklin #define K2G_GP_AUDIO_CODEC_ADDRESS 0x1B
215f48da9aSCooper Jr., Franklin
22c5f177deSLokesh Vutla const unsigned int sysclk_array[MAX_SYSCLK] = {
23c5f177deSLokesh Vutla 19200000,
24c5f177deSLokesh Vutla 24000000,
25c5f177deSLokesh Vutla 25000000,
26c5f177deSLokesh Vutla 26000000,
27c5f177deSLokesh Vutla };
28c5f177deSLokesh Vutla
get_external_clk(u32 clk)29ee3c6532SLokesh Vutla unsigned int get_external_clk(u32 clk)
30ee3c6532SLokesh Vutla {
31ee3c6532SLokesh Vutla unsigned int clk_freq;
32ee3c6532SLokesh Vutla u8 sysclk_index = get_sysclk_index();
33ee3c6532SLokesh Vutla
34ee3c6532SLokesh Vutla switch (clk) {
35ee3c6532SLokesh Vutla case sys_clk:
36ee3c6532SLokesh Vutla clk_freq = sysclk_array[sysclk_index];
37ee3c6532SLokesh Vutla break;
38ee3c6532SLokesh Vutla case pa_clk:
39ee3c6532SLokesh Vutla clk_freq = sysclk_array[sysclk_index];
40ee3c6532SLokesh Vutla break;
41ee3c6532SLokesh Vutla case tetris_clk:
42ee3c6532SLokesh Vutla clk_freq = sysclk_array[sysclk_index];
43ee3c6532SLokesh Vutla break;
44ee3c6532SLokesh Vutla case ddr3a_clk:
45ee3c6532SLokesh Vutla clk_freq = sysclk_array[sysclk_index];
46ee3c6532SLokesh Vutla break;
47ee3c6532SLokesh Vutla case uart_clk:
48ee3c6532SLokesh Vutla clk_freq = sysclk_array[sysclk_index];
49ee3c6532SLokesh Vutla break;
50ee3c6532SLokesh Vutla default:
51ee3c6532SLokesh Vutla clk_freq = 0;
52ee3c6532SLokesh Vutla break;
53ee3c6532SLokesh Vutla }
54ee3c6532SLokesh Vutla
55ee3c6532SLokesh Vutla return clk_freq;
56ee3c6532SLokesh Vutla }
57e6d71e1cSVitaly Andrianov
584849d954SRex Chang int speeds[DEVSPEED_NUMSPDS] = {
59ef76ebb1SLokesh Vutla SPD400,
60ef76ebb1SLokesh Vutla SPD600,
61ef76ebb1SLokesh Vutla SPD800,
62ef76ebb1SLokesh Vutla SPD900,
63ef76ebb1SLokesh Vutla SPD1000,
64ef76ebb1SLokesh Vutla SPD900,
65ef76ebb1SLokesh Vutla SPD800,
66ef76ebb1SLokesh Vutla SPD600,
67ef76ebb1SLokesh Vutla SPD400,
68ef76ebb1SLokesh Vutla SPD200,
69ef76ebb1SLokesh Vutla };
70ef76ebb1SLokesh Vutla
71ef76ebb1SLokesh Vutla static int dev_speeds[DEVSPEED_NUMSPDS] = {
72ef76ebb1SLokesh Vutla SPD600,
73ef76ebb1SLokesh Vutla SPD800,
74ef76ebb1SLokesh Vutla SPD900,
75ef76ebb1SLokesh Vutla SPD1000,
76ef76ebb1SLokesh Vutla SPD900,
77ef76ebb1SLokesh Vutla SPD800,
78ef76ebb1SLokesh Vutla SPD600,
79ef76ebb1SLokesh Vutla SPD400,
80ef76ebb1SLokesh Vutla };
81ef76ebb1SLokesh Vutla
82c5f177deSLokesh Vutla static struct pll_init_data main_pll_config[MAX_SYSCLK][NUM_SPDS] = {
83c5f177deSLokesh Vutla [SYSCLK_19MHz] = {
84c5f177deSLokesh Vutla [SPD400] = {MAIN_PLL, 125, 3, 2},
85c5f177deSLokesh Vutla [SPD600] = {MAIN_PLL, 125, 2, 2},
86c5f177deSLokesh Vutla [SPD800] = {MAIN_PLL, 250, 3, 2},
879cb5eaf2SLokesh Vutla [SPD900] = {MAIN_PLL, 187, 2, 2},
889cb5eaf2SLokesh Vutla [SPD1000] = {MAIN_PLL, 104, 1, 2},
89c5f177deSLokesh Vutla },
90c5f177deSLokesh Vutla [SYSCLK_24MHz] = {
91ef76ebb1SLokesh Vutla [SPD400] = {MAIN_PLL, 100, 3, 2},
92ef76ebb1SLokesh Vutla [SPD600] = {MAIN_PLL, 300, 6, 2},
93ef76ebb1SLokesh Vutla [SPD800] = {MAIN_PLL, 200, 3, 2},
949cb5eaf2SLokesh Vutla [SPD900] = {MAIN_PLL, 75, 1, 2},
959cb5eaf2SLokesh Vutla [SPD1000] = {MAIN_PLL, 250, 3, 2},
96c5f177deSLokesh Vutla },
97c5f177deSLokesh Vutla [SYSCLK_25MHz] = {
98c5f177deSLokesh Vutla [SPD400] = {MAIN_PLL, 32, 1, 2},
99c5f177deSLokesh Vutla [SPD600] = {MAIN_PLL, 48, 1, 2},
100c5f177deSLokesh Vutla [SPD800] = {MAIN_PLL, 64, 1, 2},
1019cb5eaf2SLokesh Vutla [SPD900] = {MAIN_PLL, 72, 1, 2},
1029cb5eaf2SLokesh Vutla [SPD1000] = {MAIN_PLL, 80, 1, 2},
103c5f177deSLokesh Vutla },
104c5f177deSLokesh Vutla [SYSCLK_26MHz] = {
105c5f177deSLokesh Vutla [SPD400] = {MAIN_PLL, 400, 13, 2},
106c5f177deSLokesh Vutla [SPD600] = {MAIN_PLL, 230, 5, 2},
107c5f177deSLokesh Vutla [SPD800] = {MAIN_PLL, 123, 2, 2},
1089cb5eaf2SLokesh Vutla [SPD900] = {MAIN_PLL, 69, 1, 2},
1099cb5eaf2SLokesh Vutla [SPD1000] = {MAIN_PLL, 384, 5, 2},
110c5f177deSLokesh Vutla },
111ef76ebb1SLokesh Vutla };
112ef76ebb1SLokesh Vutla
113c5f177deSLokesh Vutla static struct pll_init_data tetris_pll_config[MAX_SYSCLK][NUM_SPDS] = {
114c5f177deSLokesh Vutla [SYSCLK_19MHz] = {
115c5f177deSLokesh Vutla [SPD200] = {TETRIS_PLL, 625, 6, 10},
116c5f177deSLokesh Vutla [SPD400] = {TETRIS_PLL, 125, 1, 6},
117c5f177deSLokesh Vutla [SPD600] = {TETRIS_PLL, 125, 1, 4},
118c5f177deSLokesh Vutla [SPD800] = {TETRIS_PLL, 333, 2, 4},
119c5f177deSLokesh Vutla [SPD900] = {TETRIS_PLL, 187, 2, 2},
120c5f177deSLokesh Vutla [SPD1000] = {TETRIS_PLL, 104, 1, 2},
121c5f177deSLokesh Vutla },
122c5f177deSLokesh Vutla [SYSCLK_24MHz] = {
123ef76ebb1SLokesh Vutla [SPD200] = {TETRIS_PLL, 250, 3, 10},
124ef76ebb1SLokesh Vutla [SPD400] = {TETRIS_PLL, 100, 1, 6},
125ef76ebb1SLokesh Vutla [SPD600] = {TETRIS_PLL, 100, 1, 4},
126ef76ebb1SLokesh Vutla [SPD800] = {TETRIS_PLL, 400, 3, 4},
127ef76ebb1SLokesh Vutla [SPD900] = {TETRIS_PLL, 75, 1, 2},
128ef76ebb1SLokesh Vutla [SPD1000] = {TETRIS_PLL, 250, 3, 2},
129c5f177deSLokesh Vutla },
130c5f177deSLokesh Vutla [SYSCLK_25MHz] = {
131c5f177deSLokesh Vutla [SPD200] = {TETRIS_PLL, 80, 1, 10},
132c5f177deSLokesh Vutla [SPD400] = {TETRIS_PLL, 96, 1, 6},
133c5f177deSLokesh Vutla [SPD600] = {TETRIS_PLL, 96, 1, 4},
134c5f177deSLokesh Vutla [SPD800] = {TETRIS_PLL, 128, 1, 4},
135c5f177deSLokesh Vutla [SPD900] = {TETRIS_PLL, 72, 1, 2},
136c5f177deSLokesh Vutla [SPD1000] = {TETRIS_PLL, 80, 1, 2},
137c5f177deSLokesh Vutla },
138c5f177deSLokesh Vutla [SYSCLK_26MHz] = {
139c5f177deSLokesh Vutla [SPD200] = {TETRIS_PLL, 307, 4, 10},
140c5f177deSLokesh Vutla [SPD400] = {TETRIS_PLL, 369, 4, 6},
141c5f177deSLokesh Vutla [SPD600] = {TETRIS_PLL, 369, 4, 4},
142c5f177deSLokesh Vutla [SPD800] = {TETRIS_PLL, 123, 1, 4},
143c5f177deSLokesh Vutla [SPD900] = {TETRIS_PLL, 69, 1, 2},
144c5f177deSLokesh Vutla [SPD1000] = {TETRIS_PLL, 384, 5, 2},
145c5f177deSLokesh Vutla },
146ef76ebb1SLokesh Vutla };
147ef76ebb1SLokesh Vutla
148c5f177deSLokesh Vutla static struct pll_init_data uart_pll_config[MAX_SYSCLK] = {
149c5f177deSLokesh Vutla [SYSCLK_19MHz] = {UART_PLL, 160, 1, 8},
150c5f177deSLokesh Vutla [SYSCLK_24MHz] = {UART_PLL, 128, 1, 8},
151c5f177deSLokesh Vutla [SYSCLK_25MHz] = {UART_PLL, 768, 5, 10},
152c5f177deSLokesh Vutla [SYSCLK_26MHz] = {UART_PLL, 384, 13, 2},
153c5f177deSLokesh Vutla };
154c5f177deSLokesh Vutla
155c5f177deSLokesh Vutla static struct pll_init_data nss_pll_config[MAX_SYSCLK] = {
156c5f177deSLokesh Vutla [SYSCLK_19MHz] = {NSS_PLL, 625, 6, 2},
157c5f177deSLokesh Vutla [SYSCLK_24MHz] = {NSS_PLL, 250, 3, 2},
158c5f177deSLokesh Vutla [SYSCLK_25MHz] = {NSS_PLL, 80, 1, 2},
159c5f177deSLokesh Vutla [SYSCLK_26MHz] = {NSS_PLL, 1000, 13, 2},
160c5f177deSLokesh Vutla };
161c5f177deSLokesh Vutla
1624849d954SRex Chang static struct pll_init_data ddr3_pll_config_800[MAX_SYSCLK] = {
163c5f177deSLokesh Vutla [SYSCLK_19MHz] = {DDR3A_PLL, 167, 1, 16},
164c5f177deSLokesh Vutla [SYSCLK_24MHz] = {DDR3A_PLL, 133, 1, 16},
165c5f177deSLokesh Vutla [SYSCLK_25MHz] = {DDR3A_PLL, 128, 1, 16},
166c5f177deSLokesh Vutla [SYSCLK_26MHz] = {DDR3A_PLL, 123, 1, 16},
167c5f177deSLokesh Vutla };
168bda920c6SVitaly Andrianov
1694849d954SRex Chang static struct pll_init_data ddr3_pll_config_1066[MAX_SYSCLK] = {
1704849d954SRex Chang [SYSCLK_19MHz] = {DDR3A_PLL, 194, 1, 14},
1714849d954SRex Chang [SYSCLK_24MHz] = {DDR3A_PLL, 156, 1, 14},
1724849d954SRex Chang [SYSCLK_25MHz] = {DDR3A_PLL, 149, 1, 14},
1734849d954SRex Chang [SYSCLK_26MHz] = {DDR3A_PLL, 144, 1, 14},
1744849d954SRex Chang };
1754849d954SRex Chang
get_pll_init_data(int pll)176bda920c6SVitaly Andrianov struct pll_init_data *get_pll_init_data(int pll)
177bda920c6SVitaly Andrianov {
178ef76ebb1SLokesh Vutla int speed;
179bda920c6SVitaly Andrianov struct pll_init_data *data = NULL;
180c5f177deSLokesh Vutla u8 sysclk_index = get_sysclk_index();
181bda920c6SVitaly Andrianov
182bda920c6SVitaly Andrianov switch (pll) {
183bda920c6SVitaly Andrianov case MAIN_PLL:
184ef76ebb1SLokesh Vutla speed = get_max_dev_speed(dev_speeds);
185c5f177deSLokesh Vutla data = &main_pll_config[sysclk_index][speed];
186bda920c6SVitaly Andrianov break;
187bda920c6SVitaly Andrianov case TETRIS_PLL:
1884849d954SRex Chang speed = get_max_arm_speed(speeds);
189c5f177deSLokesh Vutla data = &tetris_pll_config[sysclk_index][speed];
190bda920c6SVitaly Andrianov break;
191bda920c6SVitaly Andrianov case NSS_PLL:
192c5f177deSLokesh Vutla data = &nss_pll_config[sysclk_index];
193bda920c6SVitaly Andrianov break;
194bda920c6SVitaly Andrianov case UART_PLL:
195c5f177deSLokesh Vutla data = &uart_pll_config[sysclk_index];
196bda920c6SVitaly Andrianov break;
197bda920c6SVitaly Andrianov case DDR3_PLL:
1984849d954SRex Chang if (cpu_revision() & CPU_66AK2G1x) {
1994849d954SRex Chang speed = get_max_arm_speed(speeds);
2004849d954SRex Chang if (speed == SPD1000)
2014849d954SRex Chang data = &ddr3_pll_config_1066[sysclk_index];
2024849d954SRex Chang else
2034849d954SRex Chang data = &ddr3_pll_config_800[sysclk_index];
2044849d954SRex Chang } else {
2054849d954SRex Chang data = &ddr3_pll_config_800[sysclk_index];
2064849d954SRex Chang }
207bda920c6SVitaly Andrianov break;
208bda920c6SVitaly Andrianov default:
209bda920c6SVitaly Andrianov data = NULL;
210bda920c6SVitaly Andrianov }
211bda920c6SVitaly Andrianov
212bda920c6SVitaly Andrianov return data;
213bda920c6SVitaly Andrianov }
214bda920c6SVitaly Andrianov
215bda920c6SVitaly Andrianov s16 divn_val[16] = {
216bda920c6SVitaly Andrianov -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
217bda920c6SVitaly Andrianov };
218bda920c6SVitaly Andrianov
2194aa2ba3aSMasahiro Yamada #if defined(CONFIG_MMC)
board_mmc_init(bd_t * bis)2203b68939fSRoger Quadros int board_mmc_init(bd_t *bis)
2213b68939fSRoger Quadros {
2223b68939fSRoger Quadros if (psc_enable_module(KS2_LPSC_MMC)) {
2233b68939fSRoger Quadros printf("%s module enabled failed\n", __func__);
2243b68939fSRoger Quadros return -1;
2253b68939fSRoger Quadros }
2263b68939fSRoger Quadros
2274849d954SRex Chang if (board_is_k2g_gp() || board_is_k2g_g1())
2283b68939fSRoger Quadros omap_mmc_init(0, 0, 0, -1, -1);
2294f490402SCooper Jr., Franklin
2303b68939fSRoger Quadros omap_mmc_init(1, 0, 0, -1, -1);
2313b68939fSRoger Quadros return 0;
2323b68939fSRoger Quadros }
2333b68939fSRoger Quadros #endif
2343b68939fSRoger Quadros
23511955590SJean-Jacques Hiblot #if defined(CONFIG_MULTI_DTB_FIT)
board_fit_config_name_match(const char * name)2367234f215SCooper Jr., Franklin int board_fit_config_name_match(const char *name)
2377234f215SCooper Jr., Franklin {
2387234f215SCooper Jr., Franklin bool eeprom_read = board_ti_was_eeprom_read();
2397234f215SCooper Jr., Franklin
2407234f215SCooper Jr., Franklin if (!strcmp(name, "keystone-k2g-generic") && !eeprom_read)
2417234f215SCooper Jr., Franklin return 0;
2424849d954SRex Chang else if (!strcmp(name, "keystone-k2g-evm") &&
2434849d954SRex Chang (board_ti_is("66AK2GGP") || board_ti_is("66AK2GG1")))
2447234f215SCooper Jr., Franklin return 0;
245bc420967SCooper Jr., Franklin else if (!strcmp(name, "keystone-k2g-ice") && board_ti_is("66AK2GIC"))
246bc420967SCooper Jr., Franklin return 0;
2477234f215SCooper Jr., Franklin else
2487234f215SCooper Jr., Franklin return -1;
2497234f215SCooper Jr., Franklin }
2507234f215SCooper Jr., Franklin #endif
2517234f215SCooper Jr., Franklin
2525f48da9aSCooper Jr., Franklin #if defined(CONFIG_DTB_RESELECT)
k2g_alt_board_detect(void)2535f48da9aSCooper Jr., Franklin static int k2g_alt_board_detect(void)
2545f48da9aSCooper Jr., Franklin {
2551514244cSJean-Jacques Hiblot #ifndef CONFIG_DM_I2C
2565f48da9aSCooper Jr., Franklin int rc;
2575f48da9aSCooper Jr., Franklin
2585f48da9aSCooper Jr., Franklin rc = i2c_set_bus_num(1);
2595f48da9aSCooper Jr., Franklin if (rc)
2605f48da9aSCooper Jr., Franklin return rc;
2615f48da9aSCooper Jr., Franklin
2625f48da9aSCooper Jr., Franklin rc = i2c_probe(K2G_GP_AUDIO_CODEC_ADDRESS);
2635f48da9aSCooper Jr., Franklin if (rc)
2645f48da9aSCooper Jr., Franklin return rc;
2651514244cSJean-Jacques Hiblot #else
2661514244cSJean-Jacques Hiblot struct udevice *bus, *dev;
2671514244cSJean-Jacques Hiblot int rc;
2685f48da9aSCooper Jr., Franklin
2691514244cSJean-Jacques Hiblot rc = uclass_get_device_by_seq(UCLASS_I2C, 1, &bus);
2701514244cSJean-Jacques Hiblot if (rc)
2711514244cSJean-Jacques Hiblot return rc;
2721514244cSJean-Jacques Hiblot rc = dm_i2c_probe(bus, K2G_GP_AUDIO_CODEC_ADDRESS, 0, &dev);
2731514244cSJean-Jacques Hiblot if (rc)
2741514244cSJean-Jacques Hiblot return rc;
2751514244cSJean-Jacques Hiblot #endif
2765f48da9aSCooper Jr., Franklin ti_i2c_eeprom_am_set("66AK2GGP", "1.0X");
2775f48da9aSCooper Jr., Franklin
2785f48da9aSCooper Jr., Franklin return 0;
2795f48da9aSCooper Jr., Franklin }
2805f48da9aSCooper Jr., Franklin
k2g_reset_mux_config(void)281e2924e59SLokesh Vutla static void k2g_reset_mux_config(void)
282e2924e59SLokesh Vutla {
283e2924e59SLokesh Vutla /* Unlock the reset mux register */
284e2924e59SLokesh Vutla clrbits_le32(KS2_RSTMUX8, RSTMUX_LOCK8_MASK);
285e2924e59SLokesh Vutla
286e2924e59SLokesh Vutla /* Configure BOOTCFG_RSTMUX8 for WDT event to cause a device reset */
287e2924e59SLokesh Vutla clrsetbits_le32(KS2_RSTMUX8, RSTMUX_OMODE8_MASK,
288e2924e59SLokesh Vutla RSTMUX_OMODE8_DEV_RESET << RSTMUX_OMODE8_SHIFT);
289e2924e59SLokesh Vutla
290e2924e59SLokesh Vutla /* lock the reset mux register to prevent any spurious writes. */
291e2924e59SLokesh Vutla setbits_le32(KS2_RSTMUX8, RSTMUX_LOCK8_MASK);
292e2924e59SLokesh Vutla }
293e2924e59SLokesh Vutla
embedded_dtb_select(void)294e820f523SCooper Jr., Franklin int embedded_dtb_select(void)
295bda920c6SVitaly Andrianov {
296e820f523SCooper Jr., Franklin int rc;
297e820f523SCooper Jr., Franklin rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
298e820f523SCooper Jr., Franklin CONFIG_EEPROM_CHIP_ADDRESS);
299e820f523SCooper Jr., Franklin if (rc) {
300e820f523SCooper Jr., Franklin rc = k2g_alt_board_detect();
301e820f523SCooper Jr., Franklin if (rc) {
302e820f523SCooper Jr., Franklin printf("Unable to do board detection\n");
303e820f523SCooper Jr., Franklin return -1;
304e820f523SCooper Jr., Franklin }
305e820f523SCooper Jr., Franklin }
306bda920c6SVitaly Andrianov
307e820f523SCooper Jr., Franklin fdtdec_setup();
308dd78b8cfSVitaly Andrianov
309b9b342eaSCooper Jr., Franklin k2g_mux_config();
310b9b342eaSCooper Jr., Franklin
311e2924e59SLokesh Vutla k2g_reset_mux_config();
312e2924e59SLokesh Vutla
3134849d954SRex Chang if (board_is_k2g_gp() || board_is_k2g_g1()) {
31483b9bf11SLokesh Vutla /* deassert FLASH_HOLD */
31583b9bf11SLokesh Vutla clrbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_DIR_OFFSET,
31683b9bf11SLokesh Vutla BIT(9));
31783b9bf11SLokesh Vutla setbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_SETDATA_OFFSET,
31883b9bf11SLokesh Vutla BIT(9));
3194f490402SCooper Jr., Franklin }
32083b9bf11SLokesh Vutla
321bda920c6SVitaly Andrianov return 0;
322bda920c6SVitaly Andrianov }
323bda920c6SVitaly Andrianov #endif
324bda920c6SVitaly Andrianov
325752a8311SRoger Quadros #ifdef CONFIG_BOARD_LATE_INIT
board_late_init(void)326752a8311SRoger Quadros int board_late_init(void)
327752a8311SRoger Quadros {
328752a8311SRoger Quadros #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_TI_I2C_BOARD_DETECT)
329752a8311SRoger Quadros int rc;
330752a8311SRoger Quadros
331752a8311SRoger Quadros rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
332752a8311SRoger Quadros CONFIG_EEPROM_CHIP_ADDRESS);
333752a8311SRoger Quadros if (rc)
334752a8311SRoger Quadros printf("ti_i2c_eeprom_init failed %d\n", rc);
335752a8311SRoger Quadros
336752a8311SRoger Quadros board_ti_set_ethaddr(1);
337752a8311SRoger Quadros #endif
338752a8311SRoger Quadros
33992761fccSCooper Jr., Franklin #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
34092761fccSCooper Jr., Franklin if (board_is_k2g_gp())
341382bee57SSimon Glass env_set("board_name", "66AK2GGP\0");
3424849d954SRex Chang else if (board_is_k2g_g1())
3434849d954SRex Chang env_set("board_name", "66AK2GG1\0");
34492761fccSCooper Jr., Franklin else if (board_is_k2g_ice())
345382bee57SSimon Glass env_set("board_name", "66AK2GIC\0");
34692761fccSCooper Jr., Franklin #endif
347752a8311SRoger Quadros return 0;
348752a8311SRoger Quadros }
349752a8311SRoger Quadros #endif
350752a8311SRoger Quadros
351e820f523SCooper Jr., Franklin #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)352e820f523SCooper Jr., Franklin int board_early_init_f(void)
353e820f523SCooper Jr., Franklin {
354e820f523SCooper Jr., Franklin init_plls();
355e820f523SCooper Jr., Franklin
356e820f523SCooper Jr., Franklin k2g_mux_config();
357e820f523SCooper Jr., Franklin
358e820f523SCooper Jr., Franklin return 0;
359e820f523SCooper Jr., Franklin }
360e820f523SCooper Jr., Franklin #endif
361e820f523SCooper Jr., Franklin
362bda920c6SVitaly Andrianov #ifdef CONFIG_SPL_BUILD
spl_init_keystone_plls(void)363bda920c6SVitaly Andrianov void spl_init_keystone_plls(void)
364bda920c6SVitaly Andrianov {
365bda920c6SVitaly Andrianov init_plls();
366bda920c6SVitaly Andrianov }
367bda920c6SVitaly Andrianov #endif
36891266ccbSVitaly Andrianov
36958fac52dSAndrew F. Davis #ifdef CONFIG_TI_SECURE_DEVICE
board_pmmc_image_process(ulong pmmc_image,size_t pmmc_size)37058fac52dSAndrew F. Davis void board_pmmc_image_process(ulong pmmc_image, size_t pmmc_size)
37158fac52dSAndrew F. Davis {
372952c3462SAndrew F. Davis int id = env_get_ulong("dev_pmmc", 10, 0);
37358fac52dSAndrew F. Davis int ret;
37458fac52dSAndrew F. Davis
37558fac52dSAndrew F. Davis if (!rproc_is_initialized())
37658fac52dSAndrew F. Davis rproc_init();
37758fac52dSAndrew F. Davis
37858fac52dSAndrew F. Davis ret = rproc_load(id, pmmc_image, pmmc_size);
37958fac52dSAndrew F. Davis printf("Load Remote Processor %d with data@addr=0x%08lx %u bytes:%s\n",
38058fac52dSAndrew F. Davis id, pmmc_image, pmmc_size, ret ? " Failed!" : " Success!");
38158fac52dSAndrew F. Davis
38258fac52dSAndrew F. Davis if (!ret)
38358fac52dSAndrew F. Davis rproc_start(id);
38458fac52dSAndrew F. Davis }
38558fac52dSAndrew F. Davis
38658fac52dSAndrew F. Davis U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_PMMC, board_pmmc_image_process);
38758fac52dSAndrew F. Davis #endif
388