1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
4 *
5 * Author: Felipe Balbi <balbi@ti.com>
6 *
7 * Based on board/ti/dra7xx/evm.c
8 */
9
10 #include <common.h>
11 #include <palmas.h>
12 #include <sata.h>
13 #include <usb.h>
14 #include <asm/omap_common.h>
15 #include <asm/omap_sec_common.h>
16 #include <asm/emif.h>
17 #include <asm/gpio.h>
18 #include <asm/arch/gpio.h>
19 #include <asm/arch/clock.h>
20 #include <asm/arch/dra7xx_iodelay.h>
21 #include <asm/arch/sys_proto.h>
22 #include <asm/arch/mmc_host_def.h>
23 #include <asm/arch/sata.h>
24 #include <asm/arch/gpio.h>
25 #include <asm/arch/omap.h>
26 #include <environment.h>
27 #include <usb.h>
28 #include <linux/usb/gadget.h>
29 #include <dwc3-uboot.h>
30 #include <dwc3-omap-uboot.h>
31 #include <ti-usb-phy-uboot.h>
32 #include <mmc.h>
33
34 #include "../common/board_detect.h"
35 #include "mux_data.h"
36
37 #define board_is_x15() board_ti_is("BBRDX15_")
38 #define board_is_x15_revb1() (board_ti_is("BBRDX15_") && \
39 !strncmp("B.10", board_ti_get_rev(), 3))
40 #define board_is_x15_revc() (board_ti_is("BBRDX15_") && \
41 !strncmp("C.00", board_ti_get_rev(), 3))
42 #define board_is_am572x_evm() board_ti_is("AM572PM_")
43 #define board_is_am572x_evm_reva3() \
44 (board_ti_is("AM572PM_") && \
45 !strncmp("A.30", board_ti_get_rev(), 3))
46 #define board_is_am574x_idk() board_ti_is("AM574IDK")
47 #define board_is_am572x_idk() board_ti_is("AM572IDK")
48 #define board_is_am571x_idk() board_ti_is("AM571IDK")
49
50 #ifdef CONFIG_DRIVER_TI_CPSW
51 #include <cpsw.h>
52 #endif
53
54 DECLARE_GLOBAL_DATA_PTR;
55
56 #define GPIO_ETH_LCD GPIO_TO_PIN(2, 22)
57 /* GPIO 7_11 */
58 #define GPIO_DDR_VTT_EN 203
59
60 /* Touch screen controller to identify the LCD */
61 #define OSD_TS_FT_BUS_ADDRESS 0
62 #define OSD_TS_FT_CHIP_ADDRESS 0x38
63 #define OSD_TS_FT_REG_ID 0xA3
64 /*
65 * Touchscreen IDs for various OSD panels
66 * Ref: http://www.osddisplays.com/TI/OSD101T2587-53TS_A.1.pdf
67 */
68 /* Used on newer osd101t2587 Panels */
69 #define OSD_TS_FT_ID_5x46 0x54
70 /* Used on older osd101t2045 Panels */
71 #define OSD_TS_FT_ID_5606 0x08
72
73 #define SYSINFO_BOARD_NAME_MAX_LEN 45
74
75 #define TPS65903X_PRIMARY_SECONDARY_PAD2 0xFB
76 #define TPS65903X_PAD2_POWERHOLD_MASK 0x20
77
78 const struct omap_sysinfo sysinfo = {
79 "Board: UNKNOWN(BeagleBoard X15?) REV UNKNOWN\n"
80 };
81
82 static const struct dmm_lisa_map_regs beagle_x15_lisa_regs = {
83 .dmm_lisa_map_3 = 0x80740300,
84 .is_ma_present = 0x1
85 };
86
87 static const struct dmm_lisa_map_regs am571x_idk_lisa_regs = {
88 .dmm_lisa_map_3 = 0x80640100,
89 .is_ma_present = 0x1
90 };
91
92 static const struct dmm_lisa_map_regs am574x_idk_lisa_regs = {
93 .dmm_lisa_map_2 = 0xc0600200,
94 .dmm_lisa_map_3 = 0x80600100,
95 .is_ma_present = 0x1
96 };
97
emif_get_dmm_regs(const struct dmm_lisa_map_regs ** dmm_lisa_regs)98 void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
99 {
100 if (board_is_am571x_idk())
101 *dmm_lisa_regs = &am571x_idk_lisa_regs;
102 else if (board_is_am574x_idk())
103 *dmm_lisa_regs = &am574x_idk_lisa_regs;
104 else
105 *dmm_lisa_regs = &beagle_x15_lisa_regs;
106 }
107
108 static const struct emif_regs beagle_x15_emif1_ddr3_532mhz_emif_regs = {
109 .sdram_config_init = 0x61851b32,
110 .sdram_config = 0x61851b32,
111 .sdram_config2 = 0x08000000,
112 .ref_ctrl = 0x000040F1,
113 .ref_ctrl_final = 0x00001035,
114 .sdram_tim1 = 0xcccf36ab,
115 .sdram_tim2 = 0x308f7fda,
116 .sdram_tim3 = 0x409f88a8,
117 .read_idle_ctrl = 0x00050000,
118 .zq_config = 0x5007190b,
119 .temp_alert_config = 0x00000000,
120 .emif_ddr_phy_ctlr_1_init = 0x0024400b,
121 .emif_ddr_phy_ctlr_1 = 0x0e24400b,
122 .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
123 .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
124 .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
125 .emif_ddr_ext_phy_ctrl_4 = 0x009b009b,
126 .emif_ddr_ext_phy_ctrl_5 = 0x009e009e,
127 .emif_rd_wr_lvl_rmp_win = 0x00000000,
128 .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
129 .emif_rd_wr_lvl_ctl = 0x00000000,
130 .emif_rd_wr_exec_thresh = 0x00000305
131 };
132
133 /* Ext phy ctrl regs 1-35 */
134 static const u32 beagle_x15_emif1_ddr3_ext_phy_ctrl_const_regs[] = {
135 0x10040100,
136 0x00910091,
137 0x00950095,
138 0x009B009B,
139 0x009E009E,
140 0x00980098,
141 0x00340034,
142 0x00350035,
143 0x00340034,
144 0x00310031,
145 0x00340034,
146 0x007F007F,
147 0x007F007F,
148 0x007F007F,
149 0x007F007F,
150 0x007F007F,
151 0x00480048,
152 0x004A004A,
153 0x00520052,
154 0x00550055,
155 0x00500050,
156 0x00000000,
157 0x00600020,
158 0x40011080,
159 0x08102040,
160 0x0,
161 0x0,
162 0x0,
163 0x0,
164 0x0,
165 0x0,
166 0x0,
167 0x0,
168 0x0,
169 0x0
170 };
171
172 static const struct emif_regs beagle_x15_emif2_ddr3_532mhz_emif_regs = {
173 .sdram_config_init = 0x61851b32,
174 .sdram_config = 0x61851b32,
175 .sdram_config2 = 0x08000000,
176 .ref_ctrl = 0x000040F1,
177 .ref_ctrl_final = 0x00001035,
178 .sdram_tim1 = 0xcccf36b3,
179 .sdram_tim2 = 0x308f7fda,
180 .sdram_tim3 = 0x407f88a8,
181 .read_idle_ctrl = 0x00050000,
182 .zq_config = 0x5007190b,
183 .temp_alert_config = 0x00000000,
184 .emif_ddr_phy_ctlr_1_init = 0x0024400b,
185 .emif_ddr_phy_ctlr_1 = 0x0e24400b,
186 .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
187 .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
188 .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
189 .emif_ddr_ext_phy_ctrl_4 = 0x009b009b,
190 .emif_ddr_ext_phy_ctrl_5 = 0x009e009e,
191 .emif_rd_wr_lvl_rmp_win = 0x00000000,
192 .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
193 .emif_rd_wr_lvl_ctl = 0x00000000,
194 .emif_rd_wr_exec_thresh = 0x00000305
195 };
196
197 static const u32 beagle_x15_emif2_ddr3_ext_phy_ctrl_const_regs[] = {
198 0x10040100,
199 0x00910091,
200 0x00950095,
201 0x009B009B,
202 0x009E009E,
203 0x00980098,
204 0x00340034,
205 0x00350035,
206 0x00340034,
207 0x00310031,
208 0x00340034,
209 0x007F007F,
210 0x007F007F,
211 0x007F007F,
212 0x007F007F,
213 0x007F007F,
214 0x00480048,
215 0x004A004A,
216 0x00520052,
217 0x00550055,
218 0x00500050,
219 0x00000000,
220 0x00600020,
221 0x40011080,
222 0x08102040,
223 0x0,
224 0x0,
225 0x0,
226 0x0,
227 0x0,
228 0x0,
229 0x0,
230 0x0,
231 0x0,
232 0x0
233 };
234
235 static const struct emif_regs am571x_emif1_ddr3_666mhz_emif_regs = {
236 .sdram_config_init = 0x61863332,
237 .sdram_config = 0x61863332,
238 .sdram_config2 = 0x08000000,
239 .ref_ctrl = 0x0000514d,
240 .ref_ctrl_final = 0x0000144a,
241 .sdram_tim1 = 0xd333887c,
242 .sdram_tim2 = 0x30b37fe3,
243 .sdram_tim3 = 0x409f8ad8,
244 .read_idle_ctrl = 0x00050000,
245 .zq_config = 0x5007190b,
246 .temp_alert_config = 0x00000000,
247 .emif_ddr_phy_ctlr_1_init = 0x0024400f,
248 .emif_ddr_phy_ctlr_1 = 0x0e24400f,
249 .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
250 .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
251 .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
252 .emif_ddr_ext_phy_ctrl_4 = 0x009b009b,
253 .emif_ddr_ext_phy_ctrl_5 = 0x009e009e,
254 .emif_rd_wr_lvl_rmp_win = 0x00000000,
255 .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
256 .emif_rd_wr_lvl_ctl = 0x00000000,
257 .emif_rd_wr_exec_thresh = 0x00000305
258 };
259
260 static const struct emif_regs am574x_emif1_ddr3_666mhz_emif_ecc_regs = {
261 .sdram_config_init = 0x61863332,
262 .sdram_config = 0x61863332,
263 .sdram_config2 = 0x08000000,
264 .ref_ctrl = 0x0000514d,
265 .ref_ctrl_final = 0x0000144a,
266 .sdram_tim1 = 0xd333887c,
267 .sdram_tim2 = 0x30b37fe3,
268 .sdram_tim3 = 0x409f8ad8,
269 .read_idle_ctrl = 0x00050000,
270 .zq_config = 0x5007190b,
271 .temp_alert_config = 0x00000000,
272 .emif_ddr_phy_ctlr_1_init = 0x0024400f,
273 .emif_ddr_phy_ctlr_1 = 0x0e24400f,
274 .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
275 .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
276 .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
277 .emif_ddr_ext_phy_ctrl_4 = 0x009b009b,
278 .emif_ddr_ext_phy_ctrl_5 = 0x009e009e,
279 .emif_rd_wr_lvl_rmp_win = 0x00000000,
280 .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
281 .emif_rd_wr_lvl_ctl = 0x00000000,
282 .emif_rd_wr_exec_thresh = 0x00000305,
283 .emif_ecc_ctrl_reg = 0xD0000001,
284 .emif_ecc_address_range_1 = 0x3FFF0000,
285 .emif_ecc_address_range_2 = 0x00000000
286 };
287
emif_get_reg_dump(u32 emif_nr,const struct emif_regs ** regs)288 void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
289 {
290 switch (emif_nr) {
291 case 1:
292 if (board_is_am571x_idk())
293 *regs = &am571x_emif1_ddr3_666mhz_emif_regs;
294 else if (board_is_am574x_idk())
295 *regs = &am574x_emif1_ddr3_666mhz_emif_ecc_regs;
296 else
297 *regs = &beagle_x15_emif1_ddr3_532mhz_emif_regs;
298 break;
299 case 2:
300 if (board_is_am574x_idk())
301 *regs = &am571x_emif1_ddr3_666mhz_emif_regs;
302 else
303 *regs = &beagle_x15_emif2_ddr3_532mhz_emif_regs;
304 break;
305 }
306 }
307
emif_get_ext_phy_ctrl_const_regs(u32 emif_nr,const u32 ** regs,u32 * size)308 void emif_get_ext_phy_ctrl_const_regs(u32 emif_nr, const u32 **regs, u32 *size)
309 {
310 switch (emif_nr) {
311 case 1:
312 *regs = beagle_x15_emif1_ddr3_ext_phy_ctrl_const_regs;
313 *size = ARRAY_SIZE(beagle_x15_emif1_ddr3_ext_phy_ctrl_const_regs);
314 break;
315 case 2:
316 *regs = beagle_x15_emif2_ddr3_ext_phy_ctrl_const_regs;
317 *size = ARRAY_SIZE(beagle_x15_emif2_ddr3_ext_phy_ctrl_const_regs);
318 break;
319 }
320 }
321
322 struct vcores_data beagle_x15_volts = {
323 .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
324 .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
325 .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
326 .mpu.addr = TPS659038_REG_ADDR_SMPS12,
327 .mpu.pmic = &tps659038,
328 .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
329
330 .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
331 .eve.value[OPP_OD] = VDD_EVE_DRA7_OD,
332 .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
333 .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
334 .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD,
335 .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
336 .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
337 .eve.addr = TPS659038_REG_ADDR_SMPS45,
338 .eve.pmic = &tps659038,
339 .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
340
341 .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
342 .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD,
343 .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH,
344 .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
345 .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD,
346 .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH,
347 .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
348 .gpu.addr = TPS659038_REG_ADDR_SMPS45,
349 .gpu.pmic = &tps659038,
350 .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
351
352 .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
353 .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
354 .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
355 .core.addr = TPS659038_REG_ADDR_SMPS6,
356 .core.pmic = &tps659038,
357
358 .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
359 .iva.value[OPP_OD] = VDD_IVA_DRA7_OD,
360 .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
361 .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
362 .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD,
363 .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
364 .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
365 .iva.addr = TPS659038_REG_ADDR_SMPS45,
366 .iva.pmic = &tps659038,
367 .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
368 };
369
370 struct vcores_data am572x_idk_volts = {
371 .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
372 .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
373 .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
374 .mpu.addr = TPS659038_REG_ADDR_SMPS12,
375 .mpu.pmic = &tps659038,
376 .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
377
378 .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
379 .eve.value[OPP_OD] = VDD_EVE_DRA7_OD,
380 .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
381 .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
382 .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD,
383 .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
384 .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
385 .eve.addr = TPS659038_REG_ADDR_SMPS45,
386 .eve.pmic = &tps659038,
387 .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
388
389 .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
390 .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD,
391 .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH,
392 .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
393 .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD,
394 .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH,
395 .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
396 .gpu.addr = TPS659038_REG_ADDR_SMPS6,
397 .gpu.pmic = &tps659038,
398 .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
399
400 .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
401 .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
402 .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
403 .core.addr = TPS659038_REG_ADDR_SMPS7,
404 .core.pmic = &tps659038,
405
406 .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
407 .iva.value[OPP_OD] = VDD_IVA_DRA7_OD,
408 .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
409 .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
410 .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD,
411 .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
412 .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
413 .iva.addr = TPS659038_REG_ADDR_SMPS8,
414 .iva.pmic = &tps659038,
415 .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
416 };
417
418 struct vcores_data am571x_idk_volts = {
419 .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
420 .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
421 .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
422 .mpu.addr = TPS659038_REG_ADDR_SMPS12,
423 .mpu.pmic = &tps659038,
424 .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
425
426 .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
427 .eve.value[OPP_OD] = VDD_EVE_DRA7_OD,
428 .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
429 .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
430 .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD,
431 .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
432 .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
433 .eve.addr = TPS659038_REG_ADDR_SMPS45,
434 .eve.pmic = &tps659038,
435 .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
436
437 .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
438 .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD,
439 .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH,
440 .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
441 .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD,
442 .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH,
443 .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
444 .gpu.addr = TPS659038_REG_ADDR_SMPS6,
445 .gpu.pmic = &tps659038,
446 .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
447
448 .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
449 .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
450 .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
451 .core.addr = TPS659038_REG_ADDR_SMPS7,
452 .core.pmic = &tps659038,
453
454 .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
455 .iva.value[OPP_OD] = VDD_IVA_DRA7_OD,
456 .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
457 .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
458 .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD,
459 .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
460 .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
461 .iva.addr = TPS659038_REG_ADDR_SMPS45,
462 .iva.pmic = &tps659038,
463 .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
464 };
465
get_voltrail_opp(int rail_offset)466 int get_voltrail_opp(int rail_offset)
467 {
468 int opp;
469
470 switch (rail_offset) {
471 case VOLT_MPU:
472 opp = DRA7_MPU_OPP;
473 break;
474 case VOLT_CORE:
475 opp = DRA7_CORE_OPP;
476 break;
477 case VOLT_GPU:
478 opp = DRA7_GPU_OPP;
479 break;
480 case VOLT_EVE:
481 opp = DRA7_DSPEVE_OPP;
482 break;
483 case VOLT_IVA:
484 opp = DRA7_IVA_OPP;
485 break;
486 default:
487 opp = OPP_NOM;
488 }
489
490 return opp;
491 }
492
493
494 #ifdef CONFIG_SPL_BUILD
495 /* No env to setup for SPL */
setup_board_eeprom_env(void)496 static inline void setup_board_eeprom_env(void) { }
497
498 /* Override function to read eeprom information */
do_board_detect(void)499 void do_board_detect(void)
500 {
501 int rc;
502
503 rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
504 CONFIG_EEPROM_CHIP_ADDRESS);
505 if (rc)
506 printf("ti_i2c_eeprom_init failed %d\n", rc);
507 }
508
509 #else /* CONFIG_SPL_BUILD */
510
511 /* Override function to read eeprom information: actual i2c read done by SPL*/
do_board_detect(void)512 void do_board_detect(void)
513 {
514 char *bname = NULL;
515 int rc;
516
517 rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
518 CONFIG_EEPROM_CHIP_ADDRESS);
519 if (rc)
520 printf("ti_i2c_eeprom_init failed %d\n", rc);
521
522 if (board_is_x15())
523 bname = "BeagleBoard X15";
524 else if (board_is_am572x_evm())
525 bname = "AM572x EVM";
526 else if (board_is_am574x_idk())
527 bname = "AM574x IDK";
528 else if (board_is_am572x_idk())
529 bname = "AM572x IDK";
530 else if (board_is_am571x_idk())
531 bname = "AM571x IDK";
532
533 if (bname)
534 snprintf(sysinfo.board_string, SYSINFO_BOARD_NAME_MAX_LEN,
535 "Board: %s REV %s\n", bname, board_ti_get_rev());
536 }
537
setup_board_eeprom_env(void)538 static void setup_board_eeprom_env(void)
539 {
540 char *name = "beagle_x15";
541 int rc;
542
543 rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
544 CONFIG_EEPROM_CHIP_ADDRESS);
545 if (rc)
546 goto invalid_eeprom;
547
548 if (board_is_x15()) {
549 if (board_is_x15_revb1())
550 name = "beagle_x15_revb1";
551 else if (board_is_x15_revc())
552 name = "beagle_x15_revc";
553 else
554 name = "beagle_x15";
555 } else if (board_is_am572x_evm()) {
556 if (board_is_am572x_evm_reva3())
557 name = "am57xx_evm_reva3";
558 else
559 name = "am57xx_evm";
560 } else if (board_is_am574x_idk()) {
561 name = "am574x_idk";
562 } else if (board_is_am572x_idk()) {
563 name = "am572x_idk";
564 } else if (board_is_am571x_idk()) {
565 name = "am571x_idk";
566 } else {
567 printf("Unidentified board claims %s in eeprom header\n",
568 board_ti_get_name());
569 }
570
571 invalid_eeprom:
572 set_board_info_env(name);
573 }
574
575 #endif /* CONFIG_SPL_BUILD */
576
vcores_init(void)577 void vcores_init(void)
578 {
579 if (board_is_am572x_idk() || board_is_am574x_idk())
580 *omap_vcores = &am572x_idk_volts;
581 else if (board_is_am571x_idk())
582 *omap_vcores = &am571x_idk_volts;
583 else
584 *omap_vcores = &beagle_x15_volts;
585 }
586
hw_data_init(void)587 void hw_data_init(void)
588 {
589 *prcm = &dra7xx_prcm;
590 if (is_dra72x())
591 *dplls_data = &dra72x_dplls;
592 else if (is_dra76x())
593 *dplls_data = &dra76x_dplls;
594 else
595 *dplls_data = &dra7xx_dplls;
596 *ctrl = &dra7xx_ctrl;
597 }
598
am571x_idk_needs_lcd(void)599 bool am571x_idk_needs_lcd(void)
600 {
601 bool needs_lcd;
602
603 gpio_request(GPIO_ETH_LCD, "nLCD_Detect");
604 if (gpio_get_value(GPIO_ETH_LCD))
605 needs_lcd = false;
606 else
607 needs_lcd = true;
608
609 gpio_free(GPIO_ETH_LCD);
610
611 return needs_lcd;
612 }
613
board_init(void)614 int board_init(void)
615 {
616 gpmc_init();
617 gd->bd->bi_boot_params = (CONFIG_SYS_SDRAM_BASE + 0x100);
618
619 return 0;
620 }
621
am57x_idk_lcd_detect(void)622 void am57x_idk_lcd_detect(void)
623 {
624 int r = -ENODEV;
625 char *idk_lcd = "no";
626 struct udevice *dev;
627
628 /* Only valid for IDKs */
629 if (board_is_x15() || board_is_am572x_evm())
630 return;
631
632 /* Only AM571x IDK has gpio control detect.. so check that */
633 if (board_is_am571x_idk() && !am571x_idk_needs_lcd())
634 goto out;
635
636 r = i2c_get_chip_for_busnum(OSD_TS_FT_BUS_ADDRESS,
637 OSD_TS_FT_CHIP_ADDRESS, 1, &dev);
638 if (r) {
639 printf("%s: Failed to get I2C device %d/%d (ret %d)\n",
640 __func__, OSD_TS_FT_BUS_ADDRESS, OSD_TS_FT_CHIP_ADDRESS,
641 r);
642 /* AM572x IDK has no explicit settings for optional LCD kit */
643 if (board_is_am571x_idk())
644 printf("%s: Touch screen detect failed: %d!\n",
645 __func__, r);
646 goto out;
647 }
648
649 /* Read FT ID */
650 r = dm_i2c_reg_read(dev, OSD_TS_FT_REG_ID);
651 if (r < 0) {
652 printf("%s: Touch screen ID read %d:0x%02x[0x%02x] failed:%d\n",
653 __func__, OSD_TS_FT_BUS_ADDRESS, OSD_TS_FT_CHIP_ADDRESS,
654 OSD_TS_FT_REG_ID, r);
655 goto out;
656 }
657
658 switch (r) {
659 case OSD_TS_FT_ID_5606:
660 idk_lcd = "osd101t2045";
661 break;
662 case OSD_TS_FT_ID_5x46:
663 idk_lcd = "osd101t2587";
664 break;
665 default:
666 printf("%s: Unidentifed Touch screen ID 0x%02x\n",
667 __func__, r);
668 /* we will let default be "no lcd" */
669 }
670 out:
671 env_set("idk_lcd", idk_lcd);
672 return;
673 }
674
675 #if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
device_okay(const char * path)676 static int device_okay(const char *path)
677 {
678 int node;
679
680 node = fdt_path_offset(gd->fdt_blob, path);
681 if (node < 0)
682 return 0;
683
684 return fdtdec_get_is_enabled(gd->fdt_blob, node);
685 }
686 #endif
687
board_late_init(void)688 int board_late_init(void)
689 {
690 setup_board_eeprom_env();
691 u8 val;
692
693 /*
694 * DEV_CTRL.DEV_ON = 1 please - else palmas switches off in 8 seconds
695 * This is the POWERHOLD-in-Low behavior.
696 */
697 palmas_i2c_write_u8(TPS65903X_CHIP_P1, 0xA0, 0x1);
698
699 /*
700 * Default FIT boot on HS devices. Non FIT images are not allowed
701 * on HS devices.
702 */
703 if (get_device_type() == HS_DEVICE)
704 env_set("boot_fit", "1");
705
706 /*
707 * Set the GPIO7 Pad to POWERHOLD. This has higher priority
708 * over DEV_CTRL.DEV_ON bit. This can be reset in case of
709 * PMIC Power off. So to be on the safer side set it back
710 * to POWERHOLD mode irrespective of the current state.
711 */
712 palmas_i2c_read_u8(TPS65903X_CHIP_P1, TPS65903X_PRIMARY_SECONDARY_PAD2,
713 &val);
714 val = val | TPS65903X_PAD2_POWERHOLD_MASK;
715 palmas_i2c_write_u8(TPS65903X_CHIP_P1, TPS65903X_PRIMARY_SECONDARY_PAD2,
716 val);
717
718 omap_die_id_serial();
719 omap_set_fastboot_vars();
720
721 am57x_idk_lcd_detect();
722
723 #if !defined(CONFIG_SPL_BUILD)
724 board_ti_set_ethaddr(2);
725 #endif
726
727 #if CONFIG_IS_ENABLED(DM_USB) && CONFIG_IS_ENABLED(OF_CONTROL)
728 if (device_okay("/ocp/omap_dwc3_1@48880000"))
729 enable_usb_clocks(0);
730 if (device_okay("/ocp/omap_dwc3_2@488c0000"))
731 enable_usb_clocks(1);
732 #endif
733 return 0;
734 }
735
set_muxconf_regs(void)736 void set_muxconf_regs(void)
737 {
738 do_set_mux32((*ctrl)->control_padconf_core_base,
739 early_padconf, ARRAY_SIZE(early_padconf));
740 }
741
742 #ifdef CONFIG_IODELAY_RECALIBRATION
recalibrate_iodelay(void)743 void recalibrate_iodelay(void)
744 {
745 const struct pad_conf_entry *pconf;
746 const struct iodelay_cfg_entry *iod, *delta_iod;
747 int pconf_sz, iod_sz, delta_iod_sz = 0;
748 int ret;
749
750 if (board_is_am572x_idk()) {
751 pconf = core_padconf_array_essential_am572x_idk;
752 pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am572x_idk);
753 iod = iodelay_cfg_array_am572x_idk;
754 iod_sz = ARRAY_SIZE(iodelay_cfg_array_am572x_idk);
755 } else if (board_is_am574x_idk()) {
756 pconf = core_padconf_array_essential_am574x_idk;
757 pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am574x_idk);
758 iod = iodelay_cfg_array_am574x_idk;
759 iod_sz = ARRAY_SIZE(iodelay_cfg_array_am574x_idk);
760 } else if (board_is_am571x_idk()) {
761 pconf = core_padconf_array_essential_am571x_idk;
762 pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am571x_idk);
763 iod = iodelay_cfg_array_am571x_idk;
764 iod_sz = ARRAY_SIZE(iodelay_cfg_array_am571x_idk);
765 } else {
766 /* Common for X15/GPEVM */
767 pconf = core_padconf_array_essential_x15;
768 pconf_sz = ARRAY_SIZE(core_padconf_array_essential_x15);
769 /* There never was an SR1.0 X15.. So.. */
770 if (omap_revision() == DRA752_ES1_1) {
771 iod = iodelay_cfg_array_x15_sr1_1;
772 iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15_sr1_1);
773 } else {
774 /* Since full production should switch to SR2.0 */
775 iod = iodelay_cfg_array_x15_sr2_0;
776 iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15_sr2_0);
777 }
778 }
779
780 /* Setup I/O isolation */
781 ret = __recalibrate_iodelay_start();
782 if (ret)
783 goto err;
784
785 /* Do the muxing here */
786 do_set_mux32((*ctrl)->control_padconf_core_base, pconf, pconf_sz);
787
788 /* Now do the weird minor deltas that should be safe */
789 if (board_is_x15() || board_is_am572x_evm()) {
790 if (board_is_x15_revb1() || board_is_am572x_evm_reva3() ||
791 board_is_x15_revc()) {
792 pconf = core_padconf_array_delta_x15_sr2_0;
793 pconf_sz = ARRAY_SIZE(core_padconf_array_delta_x15_sr2_0);
794 } else {
795 pconf = core_padconf_array_delta_x15_sr1_1;
796 pconf_sz = ARRAY_SIZE(core_padconf_array_delta_x15_sr1_1);
797 }
798 do_set_mux32((*ctrl)->control_padconf_core_base, pconf, pconf_sz);
799 }
800
801 if (board_is_am571x_idk()) {
802 if (am571x_idk_needs_lcd()) {
803 pconf = core_padconf_array_vout_am571x_idk;
804 pconf_sz = ARRAY_SIZE(core_padconf_array_vout_am571x_idk);
805 delta_iod = iodelay_cfg_array_am571x_idk_4port;
806 delta_iod_sz = ARRAY_SIZE(iodelay_cfg_array_am571x_idk_4port);
807
808 } else {
809 pconf = core_padconf_array_icss1eth_am571x_idk;
810 pconf_sz = ARRAY_SIZE(core_padconf_array_icss1eth_am571x_idk);
811 }
812 do_set_mux32((*ctrl)->control_padconf_core_base, pconf, pconf_sz);
813 }
814
815 /* Setup IOdelay configuration */
816 ret = do_set_iodelay((*ctrl)->iodelay_config_base, iod, iod_sz);
817 if (delta_iod_sz)
818 ret = do_set_iodelay((*ctrl)->iodelay_config_base, delta_iod,
819 delta_iod_sz);
820
821 err:
822 /* Closeup.. remove isolation */
823 __recalibrate_iodelay_end(ret);
824 }
825 #endif
826
827 #if defined(CONFIG_MMC)
board_mmc_init(bd_t * bis)828 int board_mmc_init(bd_t *bis)
829 {
830 omap_mmc_init(0, 0, 0, -1, -1);
831 omap_mmc_init(1, 0, 0, -1, -1);
832 return 0;
833 }
834
835 static const struct mmc_platform_fixups am57x_es1_1_mmc1_fixups = {
836 .hw_rev = "rev11",
837 .unsupported_caps = MMC_CAP(MMC_HS_200) |
838 MMC_CAP(UHS_SDR104),
839 .max_freq = 96000000,
840 };
841
842 static const struct mmc_platform_fixups am57x_es1_1_mmc23_fixups = {
843 .hw_rev = "rev11",
844 .unsupported_caps = MMC_CAP(MMC_HS_200) |
845 MMC_CAP(UHS_SDR104) |
846 MMC_CAP(UHS_SDR50),
847 .max_freq = 48000000,
848 };
849
platform_fixups_mmc(uint32_t addr)850 const struct mmc_platform_fixups *platform_fixups_mmc(uint32_t addr)
851 {
852 switch (omap_revision()) {
853 case DRA752_ES1_0:
854 case DRA752_ES1_1:
855 if (addr == OMAP_HSMMC1_BASE)
856 return &am57x_es1_1_mmc1_fixups;
857 else
858 return &am57x_es1_1_mmc23_fixups;
859 default:
860 return NULL;
861 }
862 }
863 #endif
864
865 #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_OS_BOOT)
spl_start_uboot(void)866 int spl_start_uboot(void)
867 {
868 /* break into full u-boot on 'c' */
869 if (serial_tstc() && serial_getc() == 'c')
870 return 1;
871
872 #ifdef CONFIG_SPL_ENV_SUPPORT
873 env_init();
874 env_load();
875 if (env_get_yesno("boot_os") != 1)
876 return 1;
877 #endif
878
879 return 0;
880 }
881 #endif
882
883 #ifdef CONFIG_DRIVER_TI_CPSW
884
885 /* Delay value to add to calibrated value */
886 #define RGMII0_TXCTL_DLY_VAL ((0x3 << 5) + 0x8)
887 #define RGMII0_TXD0_DLY_VAL ((0x3 << 5) + 0x8)
888 #define RGMII0_TXD1_DLY_VAL ((0x3 << 5) + 0x2)
889 #define RGMII0_TXD2_DLY_VAL ((0x4 << 5) + 0x0)
890 #define RGMII0_TXD3_DLY_VAL ((0x4 << 5) + 0x0)
891 #define VIN2A_D13_DLY_VAL ((0x3 << 5) + 0x8)
892 #define VIN2A_D17_DLY_VAL ((0x3 << 5) + 0x8)
893 #define VIN2A_D16_DLY_VAL ((0x3 << 5) + 0x2)
894 #define VIN2A_D15_DLY_VAL ((0x4 << 5) + 0x0)
895 #define VIN2A_D14_DLY_VAL ((0x4 << 5) + 0x0)
896
cpsw_control(int enabled)897 static void cpsw_control(int enabled)
898 {
899 /* VTP can be added here */
900 }
901
902 static struct cpsw_slave_data cpsw_slaves[] = {
903 {
904 .slave_reg_ofs = 0x208,
905 .sliver_reg_ofs = 0xd80,
906 .phy_addr = 1,
907 },
908 {
909 .slave_reg_ofs = 0x308,
910 .sliver_reg_ofs = 0xdc0,
911 .phy_addr = 2,
912 },
913 };
914
915 static struct cpsw_platform_data cpsw_data = {
916 .mdio_base = CPSW_MDIO_BASE,
917 .cpsw_base = CPSW_BASE,
918 .mdio_div = 0xff,
919 .channels = 8,
920 .cpdma_reg_ofs = 0x800,
921 .slaves = 1,
922 .slave_data = cpsw_slaves,
923 .ale_reg_ofs = 0xd00,
924 .ale_entries = 1024,
925 .host_port_reg_ofs = 0x108,
926 .hw_stats_reg_ofs = 0x900,
927 .bd_ram_ofs = 0x2000,
928 .mac_control = (1 << 5),
929 .control = cpsw_control,
930 .host_port_num = 0,
931 .version = CPSW_CTRL_VERSION_2,
932 };
933
mac_to_u64(u8 mac[6])934 static u64 mac_to_u64(u8 mac[6])
935 {
936 int i;
937 u64 addr = 0;
938
939 for (i = 0; i < 6; i++) {
940 addr <<= 8;
941 addr |= mac[i];
942 }
943
944 return addr;
945 }
946
u64_to_mac(u64 addr,u8 mac[6])947 static void u64_to_mac(u64 addr, u8 mac[6])
948 {
949 mac[5] = addr;
950 mac[4] = addr >> 8;
951 mac[3] = addr >> 16;
952 mac[2] = addr >> 24;
953 mac[1] = addr >> 32;
954 mac[0] = addr >> 40;
955 }
956
board_eth_init(bd_t * bis)957 int board_eth_init(bd_t *bis)
958 {
959 int ret;
960 uint8_t mac_addr[6];
961 uint32_t mac_hi, mac_lo;
962 uint32_t ctrl_val;
963 int i;
964 u64 mac1, mac2;
965 u8 mac_addr1[6], mac_addr2[6];
966 int num_macs;
967
968 /* try reading mac address from efuse */
969 mac_lo = readl((*ctrl)->control_core_mac_id_0_lo);
970 mac_hi = readl((*ctrl)->control_core_mac_id_0_hi);
971 mac_addr[0] = (mac_hi & 0xFF0000) >> 16;
972 mac_addr[1] = (mac_hi & 0xFF00) >> 8;
973 mac_addr[2] = mac_hi & 0xFF;
974 mac_addr[3] = (mac_lo & 0xFF0000) >> 16;
975 mac_addr[4] = (mac_lo & 0xFF00) >> 8;
976 mac_addr[5] = mac_lo & 0xFF;
977
978 if (!env_get("ethaddr")) {
979 printf("<ethaddr> not set. Validating first E-fuse MAC\n");
980
981 if (is_valid_ethaddr(mac_addr))
982 eth_env_set_enetaddr("ethaddr", mac_addr);
983 }
984
985 mac_lo = readl((*ctrl)->control_core_mac_id_1_lo);
986 mac_hi = readl((*ctrl)->control_core_mac_id_1_hi);
987 mac_addr[0] = (mac_hi & 0xFF0000) >> 16;
988 mac_addr[1] = (mac_hi & 0xFF00) >> 8;
989 mac_addr[2] = mac_hi & 0xFF;
990 mac_addr[3] = (mac_lo & 0xFF0000) >> 16;
991 mac_addr[4] = (mac_lo & 0xFF00) >> 8;
992 mac_addr[5] = mac_lo & 0xFF;
993
994 if (!env_get("eth1addr")) {
995 if (is_valid_ethaddr(mac_addr))
996 eth_env_set_enetaddr("eth1addr", mac_addr);
997 }
998
999 ctrl_val = readl((*ctrl)->control_core_control_io1) & (~0x33);
1000 ctrl_val |= 0x22;
1001 writel(ctrl_val, (*ctrl)->control_core_control_io1);
1002
1003 /* The phy address for the AM57xx IDK are different than x15 */
1004 if (board_is_am572x_idk() || board_is_am571x_idk() ||
1005 board_is_am574x_idk()) {
1006 cpsw_data.slave_data[0].phy_addr = 0;
1007 cpsw_data.slave_data[1].phy_addr = 1;
1008 }
1009
1010 ret = cpsw_register(&cpsw_data);
1011 if (ret < 0)
1012 printf("Error %d registering CPSW switch\n", ret);
1013
1014 /*
1015 * Export any Ethernet MAC addresses from EEPROM.
1016 * On AM57xx the 2 MAC addresses define the address range
1017 */
1018 board_ti_get_eth_mac_addr(0, mac_addr1);
1019 board_ti_get_eth_mac_addr(1, mac_addr2);
1020
1021 if (is_valid_ethaddr(mac_addr1) && is_valid_ethaddr(mac_addr2)) {
1022 mac1 = mac_to_u64(mac_addr1);
1023 mac2 = mac_to_u64(mac_addr2);
1024
1025 /* must contain an address range */
1026 num_macs = mac2 - mac1 + 1;
1027 /* <= 50 to protect against user programming error */
1028 if (num_macs > 0 && num_macs <= 50) {
1029 for (i = 0; i < num_macs; i++) {
1030 u64_to_mac(mac1 + i, mac_addr);
1031 if (is_valid_ethaddr(mac_addr)) {
1032 eth_env_set_enetaddr_by_index("eth",
1033 i + 2,
1034 mac_addr);
1035 }
1036 }
1037 }
1038 }
1039
1040 return ret;
1041 }
1042 #endif
1043
1044 #ifdef CONFIG_BOARD_EARLY_INIT_F
1045 /* VTT regulator enable */
vtt_regulator_enable(void)1046 static inline void vtt_regulator_enable(void)
1047 {
1048 if (omap_hw_init_context() == OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL)
1049 return;
1050
1051 gpio_request(GPIO_DDR_VTT_EN, "ddr_vtt_en");
1052 gpio_direction_output(GPIO_DDR_VTT_EN, 1);
1053 }
1054
board_early_init_f(void)1055 int board_early_init_f(void)
1056 {
1057 vtt_regulator_enable();
1058 return 0;
1059 }
1060 #endif
1061
1062 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
ft_board_setup(void * blob,bd_t * bd)1063 int ft_board_setup(void *blob, bd_t *bd)
1064 {
1065 ft_cpu_setup(blob, bd);
1066
1067 return 0;
1068 }
1069 #endif
1070
1071 #ifdef CONFIG_SPL_LOAD_FIT
board_fit_config_name_match(const char * name)1072 int board_fit_config_name_match(const char *name)
1073 {
1074 if (board_is_x15()) {
1075 if (board_is_x15_revb1()) {
1076 if (!strcmp(name, "am57xx-beagle-x15-revb1"))
1077 return 0;
1078 } else if (board_is_x15_revc()) {
1079 if (!strcmp(name, "am57xx-beagle-x15-revc"))
1080 return 0;
1081 } else if (!strcmp(name, "am57xx-beagle-x15")) {
1082 return 0;
1083 }
1084 } else if (board_is_am572x_evm() &&
1085 !strcmp(name, "am57xx-beagle-x15")) {
1086 return 0;
1087 } else if (board_is_am572x_idk() && !strcmp(name, "am572x-idk")) {
1088 return 0;
1089 } else if (board_is_am574x_idk() && !strcmp(name, "am574x-idk")) {
1090 return 0;
1091 } else if (board_is_am571x_idk() && !strcmp(name, "am571x-idk")) {
1092 return 0;
1093 }
1094
1095 return -1;
1096 }
1097 #endif
1098
1099 #if CONFIG_IS_ENABLED(FASTBOOT) && !CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
fastboot_set_reboot_flag(void)1100 int fastboot_set_reboot_flag(void)
1101 {
1102 printf("Setting reboot to fastboot flag ...\n");
1103 env_set("dofastboot", "1");
1104 env_save();
1105 return 0;
1106 }
1107 #endif
1108
1109 #ifdef CONFIG_TI_SECURE_DEVICE
board_fit_image_post_process(const void * fit,int node,void ** p_image,size_t * p_size)1110 void board_fit_image_post_process(const void *fit, int node, void **p_image, size_t *p_size)
1111 {
1112 secure_boot_verify_image(p_image, p_size);
1113 }
1114
board_tee_image_process(ulong tee_image,size_t tee_size)1115 void board_tee_image_process(ulong tee_image, size_t tee_size)
1116 {
1117 secure_tee_install((u32)tee_image);
1118 }
1119
1120 U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_TEE, board_tee_image_process);
1121 #endif
1122