1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * (C) Copyright 2013
3*4882a593Smuzhiyun * Texas Instruments Incorporated, <www.ti.com>
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Lokesh Vutla <lokeshvutla@ti.com>
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Based on previous work by:
8*4882a593Smuzhiyun * Aneesh V <aneesh@ti.com>
9*4882a593Smuzhiyun * Steve Sakoman <steve@sakoman.com>
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+
12*4882a593Smuzhiyun */
13*4882a593Smuzhiyun #include <common.h>
14*4882a593Smuzhiyun #include <palmas.h>
15*4882a593Smuzhiyun #include <sata.h>
16*4882a593Smuzhiyun #include <linux/string.h>
17*4882a593Smuzhiyun #include <asm/gpio.h>
18*4882a593Smuzhiyun #include <usb.h>
19*4882a593Smuzhiyun #include <linux/usb/gadget.h>
20*4882a593Smuzhiyun #include <asm/omap_common.h>
21*4882a593Smuzhiyun #include <asm/omap_sec_common.h>
22*4882a593Smuzhiyun #include <asm/arch/gpio.h>
23*4882a593Smuzhiyun #include <asm/arch/dra7xx_iodelay.h>
24*4882a593Smuzhiyun #include <asm/emif.h>
25*4882a593Smuzhiyun #include <asm/arch/sys_proto.h>
26*4882a593Smuzhiyun #include <asm/arch/mmc_host_def.h>
27*4882a593Smuzhiyun #include <asm/arch/sata.h>
28*4882a593Smuzhiyun #include <environment.h>
29*4882a593Smuzhiyun #include <dwc3-uboot.h>
30*4882a593Smuzhiyun #include <dwc3-omap-uboot.h>
31*4882a593Smuzhiyun #include <ti-usb-phy-uboot.h>
32*4882a593Smuzhiyun #include <miiphy.h>
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun #include "mux_data.h"
35*4882a593Smuzhiyun #include "../common/board_detect.h"
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun #define board_is_dra74x_evm() board_ti_is("5777xCPU")
38*4882a593Smuzhiyun #define board_is_dra72x_evm() board_ti_is("DRA72x-T")
39*4882a593Smuzhiyun #define board_is_dra71x_evm() board_ti_is("DRA79x,D")
40*4882a593Smuzhiyun #define board_is_dra74x_revh_or_later() (board_is_dra74x_evm() && \
41*4882a593Smuzhiyun (strncmp("H", board_ti_get_rev(), 1) <= 0))
42*4882a593Smuzhiyun #define board_is_dra72x_revc_or_later() (board_is_dra72x_evm() && \
43*4882a593Smuzhiyun (strncmp("C", board_ti_get_rev(), 1) <= 0))
44*4882a593Smuzhiyun #define board_ti_get_emif_size() board_ti_get_emif1_size() + \
45*4882a593Smuzhiyun board_ti_get_emif2_size()
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun #ifdef CONFIG_DRIVER_TI_CPSW
48*4882a593Smuzhiyun #include <cpsw.h>
49*4882a593Smuzhiyun #endif
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun /* GPIO 7_11 */
54*4882a593Smuzhiyun #define GPIO_DDR_VTT_EN 203
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun #define SYSINFO_BOARD_NAME_MAX_LEN 37
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun const struct omap_sysinfo sysinfo = {
59*4882a593Smuzhiyun "Board: UNKNOWN(DRA7 EVM) REV UNKNOWN\n"
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun static const struct emif_regs emif1_ddr3_532_mhz_1cs = {
63*4882a593Smuzhiyun .sdram_config_init = 0x61851ab2,
64*4882a593Smuzhiyun .sdram_config = 0x61851ab2,
65*4882a593Smuzhiyun .sdram_config2 = 0x08000000,
66*4882a593Smuzhiyun .ref_ctrl = 0x000040F1,
67*4882a593Smuzhiyun .ref_ctrl_final = 0x00001035,
68*4882a593Smuzhiyun .sdram_tim1 = 0xCCCF36B3,
69*4882a593Smuzhiyun .sdram_tim2 = 0x308F7FDA,
70*4882a593Smuzhiyun .sdram_tim3 = 0x427F88A8,
71*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
72*4882a593Smuzhiyun .zq_config = 0x0007190B,
73*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
74*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0024400B,
75*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400B,
76*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
77*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
78*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
79*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x009B009B,
80*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x009E009E,
81*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
82*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
83*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
84*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun static const struct emif_regs emif2_ddr3_532_mhz_1cs = {
88*4882a593Smuzhiyun .sdram_config_init = 0x61851B32,
89*4882a593Smuzhiyun .sdram_config = 0x61851B32,
90*4882a593Smuzhiyun .sdram_config2 = 0x08000000,
91*4882a593Smuzhiyun .ref_ctrl = 0x000040F1,
92*4882a593Smuzhiyun .ref_ctrl_final = 0x00001035,
93*4882a593Smuzhiyun .sdram_tim1 = 0xCCCF36B3,
94*4882a593Smuzhiyun .sdram_tim2 = 0x308F7FDA,
95*4882a593Smuzhiyun .sdram_tim3 = 0x427F88A8,
96*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
97*4882a593Smuzhiyun .zq_config = 0x0007190B,
98*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
99*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0024400B,
100*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400B,
101*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
102*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
103*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
104*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x009B009B,
105*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x009E009E,
106*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
107*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
108*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
109*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
110*4882a593Smuzhiyun };
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun static const struct emif_regs emif_1_regs_ddr3_666_mhz_1cs_dra_es1 = {
113*4882a593Smuzhiyun .sdram_config_init = 0x61862B32,
114*4882a593Smuzhiyun .sdram_config = 0x61862B32,
115*4882a593Smuzhiyun .sdram_config2 = 0x08000000,
116*4882a593Smuzhiyun .ref_ctrl = 0x0000514C,
117*4882a593Smuzhiyun .ref_ctrl_final = 0x0000144A,
118*4882a593Smuzhiyun .sdram_tim1 = 0xD113781C,
119*4882a593Smuzhiyun .sdram_tim2 = 0x30717FE3,
120*4882a593Smuzhiyun .sdram_tim3 = 0x409F86A8,
121*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
122*4882a593Smuzhiyun .zq_config = 0x5007190B,
123*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
124*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0024400D,
125*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400D,
126*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
127*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x00A400A4,
128*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x00A900A9,
129*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x00B000B0,
130*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x00B000B0,
131*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
132*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
133*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
134*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun const struct emif_regs emif_1_regs_ddr3_666_mhz_1cs_dra_es2 = {
138*4882a593Smuzhiyun .sdram_config_init = 0x61862BB2,
139*4882a593Smuzhiyun .sdram_config = 0x61862BB2,
140*4882a593Smuzhiyun .sdram_config2 = 0x00000000,
141*4882a593Smuzhiyun .ref_ctrl = 0x0000514D,
142*4882a593Smuzhiyun .ref_ctrl_final = 0x0000144A,
143*4882a593Smuzhiyun .sdram_tim1 = 0xD1137824,
144*4882a593Smuzhiyun .sdram_tim2 = 0x30B37FE3,
145*4882a593Smuzhiyun .sdram_tim3 = 0x409F8AD8,
146*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
147*4882a593Smuzhiyun .zq_config = 0x5007190B,
148*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
149*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0824400E,
150*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400E,
151*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x04040100,
152*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x006B009F,
153*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x006B00A2,
154*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x006B00A8,
155*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x006B00A8,
156*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
157*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
158*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
159*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun const struct emif_regs emif1_ddr3_532_mhz_1cs_2G = {
163*4882a593Smuzhiyun .sdram_config_init = 0x61851ab2,
164*4882a593Smuzhiyun .sdram_config = 0x61851ab2,
165*4882a593Smuzhiyun .sdram_config2 = 0x08000000,
166*4882a593Smuzhiyun .ref_ctrl = 0x000040F1,
167*4882a593Smuzhiyun .ref_ctrl_final = 0x00001035,
168*4882a593Smuzhiyun .sdram_tim1 = 0xCCCF36B3,
169*4882a593Smuzhiyun .sdram_tim2 = 0x30BF7FDA,
170*4882a593Smuzhiyun .sdram_tim3 = 0x427F8BA8,
171*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
172*4882a593Smuzhiyun .zq_config = 0x0007190B,
173*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
174*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0024400B,
175*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400B,
176*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
177*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
178*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
179*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x009B009B,
180*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x009E009E,
181*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
182*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
183*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
184*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
185*4882a593Smuzhiyun };
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun const struct emif_regs emif2_ddr3_532_mhz_1cs_2G = {
188*4882a593Smuzhiyun .sdram_config_init = 0x61851B32,
189*4882a593Smuzhiyun .sdram_config = 0x61851B32,
190*4882a593Smuzhiyun .sdram_config2 = 0x08000000,
191*4882a593Smuzhiyun .ref_ctrl = 0x000040F1,
192*4882a593Smuzhiyun .ref_ctrl_final = 0x00001035,
193*4882a593Smuzhiyun .sdram_tim1 = 0xCCCF36B3,
194*4882a593Smuzhiyun .sdram_tim2 = 0x308F7FDA,
195*4882a593Smuzhiyun .sdram_tim3 = 0x427F88A8,
196*4882a593Smuzhiyun .read_idle_ctrl = 0x00050000,
197*4882a593Smuzhiyun .zq_config = 0x0007190B,
198*4882a593Smuzhiyun .temp_alert_config = 0x00000000,
199*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1_init = 0x0024400B,
200*4882a593Smuzhiyun .emif_ddr_phy_ctlr_1 = 0x0E24400B,
201*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_1 = 0x10040100,
202*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_2 = 0x00910091,
203*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_3 = 0x00950095,
204*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_4 = 0x009B009B,
205*4882a593Smuzhiyun .emif_ddr_ext_phy_ctrl_5 = 0x009E009E,
206*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_win = 0x00000000,
207*4882a593Smuzhiyun .emif_rd_wr_lvl_rmp_ctl = 0x80000000,
208*4882a593Smuzhiyun .emif_rd_wr_lvl_ctl = 0x00000000,
209*4882a593Smuzhiyun .emif_rd_wr_exec_thresh = 0x00000305
210*4882a593Smuzhiyun };
211*4882a593Smuzhiyun
emif_get_reg_dump(u32 emif_nr,const struct emif_regs ** regs)212*4882a593Smuzhiyun void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
213*4882a593Smuzhiyun {
214*4882a593Smuzhiyun u64 ram_size;
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun ram_size = board_ti_get_emif_size();
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun switch (omap_revision()) {
219*4882a593Smuzhiyun case DRA752_ES1_0:
220*4882a593Smuzhiyun case DRA752_ES1_1:
221*4882a593Smuzhiyun case DRA752_ES2_0:
222*4882a593Smuzhiyun switch (emif_nr) {
223*4882a593Smuzhiyun case 1:
224*4882a593Smuzhiyun if (ram_size > CONFIG_MAX_MEM_MAPPED)
225*4882a593Smuzhiyun *regs = &emif1_ddr3_532_mhz_1cs_2G;
226*4882a593Smuzhiyun else
227*4882a593Smuzhiyun *regs = &emif1_ddr3_532_mhz_1cs;
228*4882a593Smuzhiyun break;
229*4882a593Smuzhiyun case 2:
230*4882a593Smuzhiyun if (ram_size > CONFIG_MAX_MEM_MAPPED)
231*4882a593Smuzhiyun *regs = &emif2_ddr3_532_mhz_1cs_2G;
232*4882a593Smuzhiyun else
233*4882a593Smuzhiyun *regs = &emif2_ddr3_532_mhz_1cs;
234*4882a593Smuzhiyun break;
235*4882a593Smuzhiyun }
236*4882a593Smuzhiyun break;
237*4882a593Smuzhiyun case DRA722_ES1_0:
238*4882a593Smuzhiyun case DRA722_ES2_0:
239*4882a593Smuzhiyun if (ram_size < CONFIG_MAX_MEM_MAPPED)
240*4882a593Smuzhiyun *regs = &emif_1_regs_ddr3_666_mhz_1cs_dra_es1;
241*4882a593Smuzhiyun else
242*4882a593Smuzhiyun *regs = &emif_1_regs_ddr3_666_mhz_1cs_dra_es2;
243*4882a593Smuzhiyun break;
244*4882a593Smuzhiyun default:
245*4882a593Smuzhiyun *regs = &emif1_ddr3_532_mhz_1cs;
246*4882a593Smuzhiyun }
247*4882a593Smuzhiyun }
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun static const struct dmm_lisa_map_regs lisa_map_dra7_1536MB = {
250*4882a593Smuzhiyun .dmm_lisa_map_0 = 0x0,
251*4882a593Smuzhiyun .dmm_lisa_map_1 = 0x80640300,
252*4882a593Smuzhiyun .dmm_lisa_map_2 = 0xC0500220,
253*4882a593Smuzhiyun .dmm_lisa_map_3 = 0xFF020100,
254*4882a593Smuzhiyun .is_ma_present = 0x1
255*4882a593Smuzhiyun };
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun static const struct dmm_lisa_map_regs lisa_map_2G_x_2 = {
258*4882a593Smuzhiyun .dmm_lisa_map_0 = 0x0,
259*4882a593Smuzhiyun .dmm_lisa_map_1 = 0x0,
260*4882a593Smuzhiyun .dmm_lisa_map_2 = 0x80600100,
261*4882a593Smuzhiyun .dmm_lisa_map_3 = 0xFF020100,
262*4882a593Smuzhiyun .is_ma_present = 0x1
263*4882a593Smuzhiyun };
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun const struct dmm_lisa_map_regs lisa_map_dra7_2GB = {
266*4882a593Smuzhiyun .dmm_lisa_map_0 = 0x0,
267*4882a593Smuzhiyun .dmm_lisa_map_1 = 0x0,
268*4882a593Smuzhiyun .dmm_lisa_map_2 = 0x80740300,
269*4882a593Smuzhiyun .dmm_lisa_map_3 = 0xFF020100,
270*4882a593Smuzhiyun .is_ma_present = 0x1
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun
273*4882a593Smuzhiyun /*
274*4882a593Smuzhiyun * DRA722 EVM EMIF1 2GB CONFIGURATION
275*4882a593Smuzhiyun * EMIF1 4 devices of 512Mb x 8 Micron
276*4882a593Smuzhiyun */
277*4882a593Smuzhiyun const struct dmm_lisa_map_regs lisa_map_2G_x_4 = {
278*4882a593Smuzhiyun .dmm_lisa_map_0 = 0x0,
279*4882a593Smuzhiyun .dmm_lisa_map_1 = 0x0,
280*4882a593Smuzhiyun .dmm_lisa_map_2 = 0x80700100,
281*4882a593Smuzhiyun .dmm_lisa_map_3 = 0xFF020100,
282*4882a593Smuzhiyun .is_ma_present = 0x1
283*4882a593Smuzhiyun };
284*4882a593Smuzhiyun
emif_get_dmm_regs(const struct dmm_lisa_map_regs ** dmm_lisa_regs)285*4882a593Smuzhiyun void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
286*4882a593Smuzhiyun {
287*4882a593Smuzhiyun u64 ram_size;
288*4882a593Smuzhiyun
289*4882a593Smuzhiyun ram_size = board_ti_get_emif_size();
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun switch (omap_revision()) {
292*4882a593Smuzhiyun case DRA752_ES1_0:
293*4882a593Smuzhiyun case DRA752_ES1_1:
294*4882a593Smuzhiyun case DRA752_ES2_0:
295*4882a593Smuzhiyun if (ram_size > CONFIG_MAX_MEM_MAPPED)
296*4882a593Smuzhiyun *dmm_lisa_regs = &lisa_map_dra7_2GB;
297*4882a593Smuzhiyun else
298*4882a593Smuzhiyun *dmm_lisa_regs = &lisa_map_dra7_1536MB;
299*4882a593Smuzhiyun break;
300*4882a593Smuzhiyun case DRA722_ES1_0:
301*4882a593Smuzhiyun case DRA722_ES2_0:
302*4882a593Smuzhiyun default:
303*4882a593Smuzhiyun if (ram_size < CONFIG_MAX_MEM_MAPPED)
304*4882a593Smuzhiyun *dmm_lisa_regs = &lisa_map_2G_x_2;
305*4882a593Smuzhiyun else
306*4882a593Smuzhiyun *dmm_lisa_regs = &lisa_map_2G_x_4;
307*4882a593Smuzhiyun break;
308*4882a593Smuzhiyun }
309*4882a593Smuzhiyun }
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun struct vcores_data dra752_volts = {
312*4882a593Smuzhiyun .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
313*4882a593Smuzhiyun .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
314*4882a593Smuzhiyun .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
315*4882a593Smuzhiyun .mpu.addr = TPS659038_REG_ADDR_SMPS12,
316*4882a593Smuzhiyun .mpu.pmic = &tps659038,
317*4882a593Smuzhiyun .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
320*4882a593Smuzhiyun .eve.value[OPP_OD] = VDD_EVE_DRA7_OD,
321*4882a593Smuzhiyun .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
322*4882a593Smuzhiyun .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
323*4882a593Smuzhiyun .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD,
324*4882a593Smuzhiyun .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
325*4882a593Smuzhiyun .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
326*4882a593Smuzhiyun .eve.addr = TPS659038_REG_ADDR_SMPS45,
327*4882a593Smuzhiyun .eve.pmic = &tps659038,
328*4882a593Smuzhiyun .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
331*4882a593Smuzhiyun .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD,
332*4882a593Smuzhiyun .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH,
333*4882a593Smuzhiyun .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
334*4882a593Smuzhiyun .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD,
335*4882a593Smuzhiyun .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH,
336*4882a593Smuzhiyun .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
337*4882a593Smuzhiyun .gpu.addr = TPS659038_REG_ADDR_SMPS6,
338*4882a593Smuzhiyun .gpu.pmic = &tps659038,
339*4882a593Smuzhiyun .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
340*4882a593Smuzhiyun
341*4882a593Smuzhiyun .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
342*4882a593Smuzhiyun .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
343*4882a593Smuzhiyun .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
344*4882a593Smuzhiyun .core.addr = TPS659038_REG_ADDR_SMPS7,
345*4882a593Smuzhiyun .core.pmic = &tps659038,
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
348*4882a593Smuzhiyun .iva.value[OPP_OD] = VDD_IVA_DRA7_OD,
349*4882a593Smuzhiyun .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
350*4882a593Smuzhiyun .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
351*4882a593Smuzhiyun .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD,
352*4882a593Smuzhiyun .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
353*4882a593Smuzhiyun .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
354*4882a593Smuzhiyun .iva.addr = TPS659038_REG_ADDR_SMPS8,
355*4882a593Smuzhiyun .iva.pmic = &tps659038,
356*4882a593Smuzhiyun .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun struct vcores_data dra722_volts = {
360*4882a593Smuzhiyun .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
361*4882a593Smuzhiyun .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
362*4882a593Smuzhiyun .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
363*4882a593Smuzhiyun .mpu.addr = TPS65917_REG_ADDR_SMPS1,
364*4882a593Smuzhiyun .mpu.pmic = &tps659038,
365*4882a593Smuzhiyun .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
368*4882a593Smuzhiyun .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
369*4882a593Smuzhiyun .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
370*4882a593Smuzhiyun .core.addr = TPS65917_REG_ADDR_SMPS2,
371*4882a593Smuzhiyun .core.pmic = &tps659038,
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun /*
374*4882a593Smuzhiyun * The DSPEVE, GPU and IVA rails are usually grouped on DRA72x
375*4882a593Smuzhiyun * designs and powered by TPS65917 SMPS3, as on the J6Eco EVM.
376*4882a593Smuzhiyun */
377*4882a593Smuzhiyun .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
378*4882a593Smuzhiyun .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD,
379*4882a593Smuzhiyun .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH,
380*4882a593Smuzhiyun .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
381*4882a593Smuzhiyun .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD,
382*4882a593Smuzhiyun .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH,
383*4882a593Smuzhiyun .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
384*4882a593Smuzhiyun .gpu.addr = TPS65917_REG_ADDR_SMPS3,
385*4882a593Smuzhiyun .gpu.pmic = &tps659038,
386*4882a593Smuzhiyun .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
389*4882a593Smuzhiyun .eve.value[OPP_OD] = VDD_EVE_DRA7_OD,
390*4882a593Smuzhiyun .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
391*4882a593Smuzhiyun .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
392*4882a593Smuzhiyun .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD,
393*4882a593Smuzhiyun .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
394*4882a593Smuzhiyun .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
395*4882a593Smuzhiyun .eve.addr = TPS65917_REG_ADDR_SMPS3,
396*4882a593Smuzhiyun .eve.pmic = &tps659038,
397*4882a593Smuzhiyun .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
400*4882a593Smuzhiyun .iva.value[OPP_OD] = VDD_IVA_DRA7_OD,
401*4882a593Smuzhiyun .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
402*4882a593Smuzhiyun .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
403*4882a593Smuzhiyun .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD,
404*4882a593Smuzhiyun .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
405*4882a593Smuzhiyun .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
406*4882a593Smuzhiyun .iva.addr = TPS65917_REG_ADDR_SMPS3,
407*4882a593Smuzhiyun .iva.pmic = &tps659038,
408*4882a593Smuzhiyun .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
409*4882a593Smuzhiyun };
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun struct vcores_data dra718_volts = {
412*4882a593Smuzhiyun /*
413*4882a593Smuzhiyun * In the case of dra71x GPU MPU and CORE
414*4882a593Smuzhiyun * are all powered up by BUCK0 of LP873X PMIC
415*4882a593Smuzhiyun */
416*4882a593Smuzhiyun .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM,
417*4882a593Smuzhiyun .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM,
418*4882a593Smuzhiyun .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
419*4882a593Smuzhiyun .mpu.addr = LP873X_REG_ADDR_BUCK0,
420*4882a593Smuzhiyun .mpu.pmic = &lp8733,
421*4882a593Smuzhiyun .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM,
424*4882a593Smuzhiyun .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM,
425*4882a593Smuzhiyun .core.efuse.reg_bits = DRA752_EFUSE_REGBITS,
426*4882a593Smuzhiyun .core.addr = LP873X_REG_ADDR_BUCK0,
427*4882a593Smuzhiyun .core.pmic = &lp8733,
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM,
430*4882a593Smuzhiyun .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM,
431*4882a593Smuzhiyun .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS,
432*4882a593Smuzhiyun .gpu.addr = LP873X_REG_ADDR_BUCK0,
433*4882a593Smuzhiyun .gpu.pmic = &lp8733,
434*4882a593Smuzhiyun .gpu.abb_tx_done_mask = OMAP_ABB_GPU_TXDONE_MASK,
435*4882a593Smuzhiyun
436*4882a593Smuzhiyun /*
437*4882a593Smuzhiyun * The DSPEVE and IVA rails are grouped on DRA71x-evm
438*4882a593Smuzhiyun * and are powered by BUCK1 of LP873X PMIC
439*4882a593Smuzhiyun */
440*4882a593Smuzhiyun .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM,
441*4882a593Smuzhiyun .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH,
442*4882a593Smuzhiyun .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM,
443*4882a593Smuzhiyun .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
444*4882a593Smuzhiyun .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS,
445*4882a593Smuzhiyun .eve.addr = LP873X_REG_ADDR_BUCK1,
446*4882a593Smuzhiyun .eve.pmic = &lp8733,
447*4882a593Smuzhiyun .eve.abb_tx_done_mask = OMAP_ABB_EVE_TXDONE_MASK,
448*4882a593Smuzhiyun
449*4882a593Smuzhiyun .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM,
450*4882a593Smuzhiyun .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH,
451*4882a593Smuzhiyun .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM,
452*4882a593Smuzhiyun .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH,
453*4882a593Smuzhiyun .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS,
454*4882a593Smuzhiyun .iva.addr = LP873X_REG_ADDR_BUCK1,
455*4882a593Smuzhiyun .iva.pmic = &lp8733,
456*4882a593Smuzhiyun .iva.abb_tx_done_mask = OMAP_ABB_IVA_TXDONE_MASK,
457*4882a593Smuzhiyun };
458*4882a593Smuzhiyun
get_voltrail_opp(int rail_offset)459*4882a593Smuzhiyun int get_voltrail_opp(int rail_offset)
460*4882a593Smuzhiyun {
461*4882a593Smuzhiyun int opp;
462*4882a593Smuzhiyun
463*4882a593Smuzhiyun switch (rail_offset) {
464*4882a593Smuzhiyun case VOLT_MPU:
465*4882a593Smuzhiyun opp = DRA7_MPU_OPP;
466*4882a593Smuzhiyun /* DRA71x supports only OPP_NOM for MPU */
467*4882a593Smuzhiyun if (board_is_dra71x_evm())
468*4882a593Smuzhiyun opp = OPP_NOM;
469*4882a593Smuzhiyun break;
470*4882a593Smuzhiyun case VOLT_CORE:
471*4882a593Smuzhiyun opp = DRA7_CORE_OPP;
472*4882a593Smuzhiyun /* DRA71x supports only OPP_NOM for CORE */
473*4882a593Smuzhiyun if (board_is_dra71x_evm())
474*4882a593Smuzhiyun opp = OPP_NOM;
475*4882a593Smuzhiyun break;
476*4882a593Smuzhiyun case VOLT_GPU:
477*4882a593Smuzhiyun opp = DRA7_GPU_OPP;
478*4882a593Smuzhiyun /* DRA71x supports only OPP_NOM for GPU */
479*4882a593Smuzhiyun if (board_is_dra71x_evm())
480*4882a593Smuzhiyun opp = OPP_NOM;
481*4882a593Smuzhiyun break;
482*4882a593Smuzhiyun case VOLT_EVE:
483*4882a593Smuzhiyun opp = DRA7_DSPEVE_OPP;
484*4882a593Smuzhiyun /*
485*4882a593Smuzhiyun * DRA71x does not support OPP_OD for EVE.
486*4882a593Smuzhiyun * If OPP_OD is selected by menuconfig, fallback
487*4882a593Smuzhiyun * to OPP_NOM.
488*4882a593Smuzhiyun */
489*4882a593Smuzhiyun if (board_is_dra71x_evm() && opp == OPP_OD)
490*4882a593Smuzhiyun opp = OPP_NOM;
491*4882a593Smuzhiyun break;
492*4882a593Smuzhiyun case VOLT_IVA:
493*4882a593Smuzhiyun opp = DRA7_IVA_OPP;
494*4882a593Smuzhiyun /*
495*4882a593Smuzhiyun * DRA71x does not support OPP_OD for IVA.
496*4882a593Smuzhiyun * If OPP_OD is selected by menuconfig, fallback
497*4882a593Smuzhiyun * to OPP_NOM.
498*4882a593Smuzhiyun */
499*4882a593Smuzhiyun if (board_is_dra71x_evm() && opp == OPP_OD)
500*4882a593Smuzhiyun opp = OPP_NOM;
501*4882a593Smuzhiyun break;
502*4882a593Smuzhiyun default:
503*4882a593Smuzhiyun opp = OPP_NOM;
504*4882a593Smuzhiyun }
505*4882a593Smuzhiyun
506*4882a593Smuzhiyun return opp;
507*4882a593Smuzhiyun }
508*4882a593Smuzhiyun
509*4882a593Smuzhiyun /**
510*4882a593Smuzhiyun * @brief board_init
511*4882a593Smuzhiyun *
512*4882a593Smuzhiyun * @return 0
513*4882a593Smuzhiyun */
board_init(void)514*4882a593Smuzhiyun int board_init(void)
515*4882a593Smuzhiyun {
516*4882a593Smuzhiyun gpmc_init();
517*4882a593Smuzhiyun gd->bd->bi_boot_params = (0x80000000 + 0x100); /* boot param addr */
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun return 0;
520*4882a593Smuzhiyun }
521*4882a593Smuzhiyun
dram_init_banksize(void)522*4882a593Smuzhiyun int dram_init_banksize(void)
523*4882a593Smuzhiyun {
524*4882a593Smuzhiyun u64 ram_size;
525*4882a593Smuzhiyun
526*4882a593Smuzhiyun ram_size = board_ti_get_emif_size();
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
529*4882a593Smuzhiyun gd->bd->bi_dram[0].size = get_effective_memsize();
530*4882a593Smuzhiyun if (ram_size > CONFIG_MAX_MEM_MAPPED) {
531*4882a593Smuzhiyun gd->bd->bi_dram[1].start = 0x200000000;
532*4882a593Smuzhiyun gd->bd->bi_dram[1].size = ram_size - CONFIG_MAX_MEM_MAPPED;
533*4882a593Smuzhiyun }
534*4882a593Smuzhiyun
535*4882a593Smuzhiyun return 0;
536*4882a593Smuzhiyun }
537*4882a593Smuzhiyun
board_late_init(void)538*4882a593Smuzhiyun int board_late_init(void)
539*4882a593Smuzhiyun {
540*4882a593Smuzhiyun #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
541*4882a593Smuzhiyun char *name = "unknown";
542*4882a593Smuzhiyun
543*4882a593Smuzhiyun if (is_dra72x()) {
544*4882a593Smuzhiyun if (board_is_dra72x_revc_or_later())
545*4882a593Smuzhiyun name = "dra72x-revc";
546*4882a593Smuzhiyun else if (board_is_dra71x_evm())
547*4882a593Smuzhiyun name = "dra71x";
548*4882a593Smuzhiyun else
549*4882a593Smuzhiyun name = "dra72x";
550*4882a593Smuzhiyun } else {
551*4882a593Smuzhiyun name = "dra7xx";
552*4882a593Smuzhiyun }
553*4882a593Smuzhiyun
554*4882a593Smuzhiyun set_board_info_env(name);
555*4882a593Smuzhiyun
556*4882a593Smuzhiyun /*
557*4882a593Smuzhiyun * Default FIT boot on HS devices. Non FIT images are not allowed
558*4882a593Smuzhiyun * on HS devices.
559*4882a593Smuzhiyun */
560*4882a593Smuzhiyun if (get_device_type() == HS_DEVICE)
561*4882a593Smuzhiyun env_set("boot_fit", "1");
562*4882a593Smuzhiyun
563*4882a593Smuzhiyun omap_die_id_serial();
564*4882a593Smuzhiyun omap_set_fastboot_vars();
565*4882a593Smuzhiyun #endif
566*4882a593Smuzhiyun return 0;
567*4882a593Smuzhiyun }
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun #ifdef CONFIG_SPL_BUILD
do_board_detect(void)570*4882a593Smuzhiyun void do_board_detect(void)
571*4882a593Smuzhiyun {
572*4882a593Smuzhiyun int rc;
573*4882a593Smuzhiyun
574*4882a593Smuzhiyun rc = ti_i2c_eeprom_dra7_get(CONFIG_EEPROM_BUS_ADDRESS,
575*4882a593Smuzhiyun CONFIG_EEPROM_CHIP_ADDRESS);
576*4882a593Smuzhiyun if (rc)
577*4882a593Smuzhiyun printf("ti_i2c_eeprom_init failed %d\n", rc);
578*4882a593Smuzhiyun }
579*4882a593Smuzhiyun
580*4882a593Smuzhiyun #else
581*4882a593Smuzhiyun
do_board_detect(void)582*4882a593Smuzhiyun void do_board_detect(void)
583*4882a593Smuzhiyun {
584*4882a593Smuzhiyun char *bname = NULL;
585*4882a593Smuzhiyun int rc;
586*4882a593Smuzhiyun
587*4882a593Smuzhiyun rc = ti_i2c_eeprom_dra7_get(CONFIG_EEPROM_BUS_ADDRESS,
588*4882a593Smuzhiyun CONFIG_EEPROM_CHIP_ADDRESS);
589*4882a593Smuzhiyun if (rc)
590*4882a593Smuzhiyun printf("ti_i2c_eeprom_init failed %d\n", rc);
591*4882a593Smuzhiyun
592*4882a593Smuzhiyun if (board_is_dra74x_evm()) {
593*4882a593Smuzhiyun bname = "DRA74x EVM";
594*4882a593Smuzhiyun } else if (board_is_dra72x_evm()) {
595*4882a593Smuzhiyun bname = "DRA72x EVM";
596*4882a593Smuzhiyun } else if (board_is_dra71x_evm()) {
597*4882a593Smuzhiyun bname = "DRA71x EVM";
598*4882a593Smuzhiyun } else {
599*4882a593Smuzhiyun /* If EEPROM is not populated */
600*4882a593Smuzhiyun if (is_dra72x())
601*4882a593Smuzhiyun bname = "DRA72x EVM";
602*4882a593Smuzhiyun else
603*4882a593Smuzhiyun bname = "DRA74x EVM";
604*4882a593Smuzhiyun }
605*4882a593Smuzhiyun
606*4882a593Smuzhiyun if (bname)
607*4882a593Smuzhiyun snprintf(sysinfo.board_string, SYSINFO_BOARD_NAME_MAX_LEN,
608*4882a593Smuzhiyun "Board: %s REV %s\n", bname, board_ti_get_rev());
609*4882a593Smuzhiyun }
610*4882a593Smuzhiyun #endif /* CONFIG_SPL_BUILD */
611*4882a593Smuzhiyun
vcores_init(void)612*4882a593Smuzhiyun void vcores_init(void)
613*4882a593Smuzhiyun {
614*4882a593Smuzhiyun if (board_is_dra74x_evm()) {
615*4882a593Smuzhiyun *omap_vcores = &dra752_volts;
616*4882a593Smuzhiyun } else if (board_is_dra72x_evm()) {
617*4882a593Smuzhiyun *omap_vcores = &dra722_volts;
618*4882a593Smuzhiyun } else if (board_is_dra71x_evm()) {
619*4882a593Smuzhiyun *omap_vcores = &dra718_volts;
620*4882a593Smuzhiyun } else {
621*4882a593Smuzhiyun /* If EEPROM is not populated */
622*4882a593Smuzhiyun if (is_dra72x())
623*4882a593Smuzhiyun *omap_vcores = &dra722_volts;
624*4882a593Smuzhiyun else
625*4882a593Smuzhiyun *omap_vcores = &dra752_volts;
626*4882a593Smuzhiyun }
627*4882a593Smuzhiyun }
628*4882a593Smuzhiyun
set_muxconf_regs(void)629*4882a593Smuzhiyun void set_muxconf_regs(void)
630*4882a593Smuzhiyun {
631*4882a593Smuzhiyun do_set_mux32((*ctrl)->control_padconf_core_base,
632*4882a593Smuzhiyun early_padconf, ARRAY_SIZE(early_padconf));
633*4882a593Smuzhiyun }
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun #ifdef CONFIG_IODELAY_RECALIBRATION
recalibrate_iodelay(void)636*4882a593Smuzhiyun void recalibrate_iodelay(void)
637*4882a593Smuzhiyun {
638*4882a593Smuzhiyun struct pad_conf_entry const *pads, *delta_pads = NULL;
639*4882a593Smuzhiyun struct iodelay_cfg_entry const *iodelay;
640*4882a593Smuzhiyun int npads, niodelays, delta_npads = 0;
641*4882a593Smuzhiyun int ret;
642*4882a593Smuzhiyun
643*4882a593Smuzhiyun switch (omap_revision()) {
644*4882a593Smuzhiyun case DRA722_ES1_0:
645*4882a593Smuzhiyun case DRA722_ES2_0:
646*4882a593Smuzhiyun pads = dra72x_core_padconf_array_common;
647*4882a593Smuzhiyun npads = ARRAY_SIZE(dra72x_core_padconf_array_common);
648*4882a593Smuzhiyun if (board_is_dra71x_evm()) {
649*4882a593Smuzhiyun pads = dra71x_core_padconf_array;
650*4882a593Smuzhiyun npads = ARRAY_SIZE(dra71x_core_padconf_array);
651*4882a593Smuzhiyun iodelay = dra71_iodelay_cfg_array;
652*4882a593Smuzhiyun niodelays = ARRAY_SIZE(dra71_iodelay_cfg_array);
653*4882a593Smuzhiyun } else if (board_is_dra72x_revc_or_later()) {
654*4882a593Smuzhiyun delta_pads = dra72x_rgmii_padconf_array_revc;
655*4882a593Smuzhiyun delta_npads =
656*4882a593Smuzhiyun ARRAY_SIZE(dra72x_rgmii_padconf_array_revc);
657*4882a593Smuzhiyun iodelay = dra72_iodelay_cfg_array_revc;
658*4882a593Smuzhiyun niodelays = ARRAY_SIZE(dra72_iodelay_cfg_array_revc);
659*4882a593Smuzhiyun } else {
660*4882a593Smuzhiyun delta_pads = dra72x_rgmii_padconf_array_revb;
661*4882a593Smuzhiyun delta_npads =
662*4882a593Smuzhiyun ARRAY_SIZE(dra72x_rgmii_padconf_array_revb);
663*4882a593Smuzhiyun iodelay = dra72_iodelay_cfg_array_revb;
664*4882a593Smuzhiyun niodelays = ARRAY_SIZE(dra72_iodelay_cfg_array_revb);
665*4882a593Smuzhiyun }
666*4882a593Smuzhiyun break;
667*4882a593Smuzhiyun case DRA752_ES1_0:
668*4882a593Smuzhiyun case DRA752_ES1_1:
669*4882a593Smuzhiyun pads = dra74x_core_padconf_array;
670*4882a593Smuzhiyun npads = ARRAY_SIZE(dra74x_core_padconf_array);
671*4882a593Smuzhiyun iodelay = dra742_es1_1_iodelay_cfg_array;
672*4882a593Smuzhiyun niodelays = ARRAY_SIZE(dra742_es1_1_iodelay_cfg_array);
673*4882a593Smuzhiyun break;
674*4882a593Smuzhiyun default:
675*4882a593Smuzhiyun case DRA752_ES2_0:
676*4882a593Smuzhiyun pads = dra74x_core_padconf_array;
677*4882a593Smuzhiyun npads = ARRAY_SIZE(dra74x_core_padconf_array);
678*4882a593Smuzhiyun iodelay = dra742_es2_0_iodelay_cfg_array;
679*4882a593Smuzhiyun niodelays = ARRAY_SIZE(dra742_es2_0_iodelay_cfg_array);
680*4882a593Smuzhiyun /* Setup port1 and port2 for rgmii with 'no-id' mode */
681*4882a593Smuzhiyun clrset_spare_register(1, 0, RGMII2_ID_MODE_N_MASK |
682*4882a593Smuzhiyun RGMII1_ID_MODE_N_MASK);
683*4882a593Smuzhiyun break;
684*4882a593Smuzhiyun }
685*4882a593Smuzhiyun /* Setup I/O isolation */
686*4882a593Smuzhiyun ret = __recalibrate_iodelay_start();
687*4882a593Smuzhiyun if (ret)
688*4882a593Smuzhiyun goto err;
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun /* Do the muxing here */
691*4882a593Smuzhiyun do_set_mux32((*ctrl)->control_padconf_core_base, pads, npads);
692*4882a593Smuzhiyun
693*4882a593Smuzhiyun /* Now do the weird minor deltas that should be safe */
694*4882a593Smuzhiyun if (delta_npads)
695*4882a593Smuzhiyun do_set_mux32((*ctrl)->control_padconf_core_base,
696*4882a593Smuzhiyun delta_pads, delta_npads);
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun /* Setup IOdelay configuration */
699*4882a593Smuzhiyun ret = do_set_iodelay((*ctrl)->iodelay_config_base, iodelay, niodelays);
700*4882a593Smuzhiyun err:
701*4882a593Smuzhiyun /* Closeup.. remove isolation */
702*4882a593Smuzhiyun __recalibrate_iodelay_end(ret);
703*4882a593Smuzhiyun }
704*4882a593Smuzhiyun #endif
705*4882a593Smuzhiyun
706*4882a593Smuzhiyun #if defined(CONFIG_MMC)
board_mmc_init(bd_t * bis)707*4882a593Smuzhiyun int board_mmc_init(bd_t *bis)
708*4882a593Smuzhiyun {
709*4882a593Smuzhiyun omap_mmc_init(0, 0, 0, -1, -1);
710*4882a593Smuzhiyun omap_mmc_init(1, 0, 0, -1, -1);
711*4882a593Smuzhiyun return 0;
712*4882a593Smuzhiyun }
713*4882a593Smuzhiyun #endif
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun #ifdef CONFIG_USB_DWC3
716*4882a593Smuzhiyun static struct dwc3_device usb_otg_ss1 = {
717*4882a593Smuzhiyun .maximum_speed = USB_SPEED_SUPER,
718*4882a593Smuzhiyun .base = DRA7_USB_OTG_SS1_BASE,
719*4882a593Smuzhiyun .tx_fifo_resize = false,
720*4882a593Smuzhiyun .index = 0,
721*4882a593Smuzhiyun };
722*4882a593Smuzhiyun
723*4882a593Smuzhiyun static struct dwc3_omap_device usb_otg_ss1_glue = {
724*4882a593Smuzhiyun .base = (void *)DRA7_USB_OTG_SS1_GLUE_BASE,
725*4882a593Smuzhiyun .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
726*4882a593Smuzhiyun .index = 0,
727*4882a593Smuzhiyun };
728*4882a593Smuzhiyun
729*4882a593Smuzhiyun static struct ti_usb_phy_device usb_phy1_device = {
730*4882a593Smuzhiyun .pll_ctrl_base = (void *)DRA7_USB3_PHY1_PLL_CTRL,
731*4882a593Smuzhiyun .usb2_phy_power = (void *)DRA7_USB2_PHY1_POWER,
732*4882a593Smuzhiyun .usb3_phy_power = (void *)DRA7_USB3_PHY1_POWER,
733*4882a593Smuzhiyun .index = 0,
734*4882a593Smuzhiyun };
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun static struct dwc3_device usb_otg_ss2 = {
737*4882a593Smuzhiyun .maximum_speed = USB_SPEED_SUPER,
738*4882a593Smuzhiyun .base = DRA7_USB_OTG_SS2_BASE,
739*4882a593Smuzhiyun .tx_fifo_resize = false,
740*4882a593Smuzhiyun .index = 1,
741*4882a593Smuzhiyun };
742*4882a593Smuzhiyun
743*4882a593Smuzhiyun static struct dwc3_omap_device usb_otg_ss2_glue = {
744*4882a593Smuzhiyun .base = (void *)DRA7_USB_OTG_SS2_GLUE_BASE,
745*4882a593Smuzhiyun .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
746*4882a593Smuzhiyun .index = 1,
747*4882a593Smuzhiyun };
748*4882a593Smuzhiyun
749*4882a593Smuzhiyun static struct ti_usb_phy_device usb_phy2_device = {
750*4882a593Smuzhiyun .usb2_phy_power = (void *)DRA7_USB2_PHY2_POWER,
751*4882a593Smuzhiyun .index = 1,
752*4882a593Smuzhiyun };
753*4882a593Smuzhiyun
board_usb_init(int index,enum usb_init_type init)754*4882a593Smuzhiyun int board_usb_init(int index, enum usb_init_type init)
755*4882a593Smuzhiyun {
756*4882a593Smuzhiyun enable_usb_clocks(index);
757*4882a593Smuzhiyun switch (index) {
758*4882a593Smuzhiyun case 0:
759*4882a593Smuzhiyun if (init == USB_INIT_DEVICE) {
760*4882a593Smuzhiyun usb_otg_ss1.dr_mode = USB_DR_MODE_PERIPHERAL;
761*4882a593Smuzhiyun usb_otg_ss1_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
762*4882a593Smuzhiyun } else {
763*4882a593Smuzhiyun usb_otg_ss1.dr_mode = USB_DR_MODE_HOST;
764*4882a593Smuzhiyun usb_otg_ss1_glue.vbus_id_status = OMAP_DWC3_ID_GROUND;
765*4882a593Smuzhiyun }
766*4882a593Smuzhiyun
767*4882a593Smuzhiyun ti_usb_phy_uboot_init(&usb_phy1_device);
768*4882a593Smuzhiyun dwc3_omap_uboot_init(&usb_otg_ss1_glue);
769*4882a593Smuzhiyun dwc3_uboot_init(&usb_otg_ss1);
770*4882a593Smuzhiyun break;
771*4882a593Smuzhiyun case 1:
772*4882a593Smuzhiyun if (init == USB_INIT_DEVICE) {
773*4882a593Smuzhiyun usb_otg_ss2.dr_mode = USB_DR_MODE_PERIPHERAL;
774*4882a593Smuzhiyun usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
775*4882a593Smuzhiyun } else {
776*4882a593Smuzhiyun usb_otg_ss2.dr_mode = USB_DR_MODE_HOST;
777*4882a593Smuzhiyun usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_ID_GROUND;
778*4882a593Smuzhiyun }
779*4882a593Smuzhiyun
780*4882a593Smuzhiyun ti_usb_phy_uboot_init(&usb_phy2_device);
781*4882a593Smuzhiyun dwc3_omap_uboot_init(&usb_otg_ss2_glue);
782*4882a593Smuzhiyun dwc3_uboot_init(&usb_otg_ss2);
783*4882a593Smuzhiyun break;
784*4882a593Smuzhiyun default:
785*4882a593Smuzhiyun printf("Invalid Controller Index\n");
786*4882a593Smuzhiyun }
787*4882a593Smuzhiyun
788*4882a593Smuzhiyun return 0;
789*4882a593Smuzhiyun }
790*4882a593Smuzhiyun
board_usb_cleanup(int index,enum usb_init_type init)791*4882a593Smuzhiyun int board_usb_cleanup(int index, enum usb_init_type init)
792*4882a593Smuzhiyun {
793*4882a593Smuzhiyun switch (index) {
794*4882a593Smuzhiyun case 0:
795*4882a593Smuzhiyun case 1:
796*4882a593Smuzhiyun ti_usb_phy_uboot_exit(index);
797*4882a593Smuzhiyun dwc3_uboot_exit(index);
798*4882a593Smuzhiyun dwc3_omap_uboot_exit(index);
799*4882a593Smuzhiyun break;
800*4882a593Smuzhiyun default:
801*4882a593Smuzhiyun printf("Invalid Controller Index\n");
802*4882a593Smuzhiyun }
803*4882a593Smuzhiyun disable_usb_clocks(index);
804*4882a593Smuzhiyun return 0;
805*4882a593Smuzhiyun }
806*4882a593Smuzhiyun
usb_gadget_handle_interrupts(int index)807*4882a593Smuzhiyun int usb_gadget_handle_interrupts(int index)
808*4882a593Smuzhiyun {
809*4882a593Smuzhiyun u32 status;
810*4882a593Smuzhiyun
811*4882a593Smuzhiyun status = dwc3_omap_uboot_interrupt_status(index);
812*4882a593Smuzhiyun if (status)
813*4882a593Smuzhiyun dwc3_uboot_handle_interrupt(index);
814*4882a593Smuzhiyun
815*4882a593Smuzhiyun return 0;
816*4882a593Smuzhiyun }
817*4882a593Smuzhiyun #endif
818*4882a593Smuzhiyun
819*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_OS_BOOT)
spl_start_uboot(void)820*4882a593Smuzhiyun int spl_start_uboot(void)
821*4882a593Smuzhiyun {
822*4882a593Smuzhiyun /* break into full u-boot on 'c' */
823*4882a593Smuzhiyun if (serial_tstc() && serial_getc() == 'c')
824*4882a593Smuzhiyun return 1;
825*4882a593Smuzhiyun
826*4882a593Smuzhiyun #ifdef CONFIG_SPL_ENV_SUPPORT
827*4882a593Smuzhiyun env_init();
828*4882a593Smuzhiyun env_load();
829*4882a593Smuzhiyun if (env_get_yesno("boot_os") != 1)
830*4882a593Smuzhiyun return 1;
831*4882a593Smuzhiyun #endif
832*4882a593Smuzhiyun
833*4882a593Smuzhiyun return 0;
834*4882a593Smuzhiyun }
835*4882a593Smuzhiyun #endif
836*4882a593Smuzhiyun
837*4882a593Smuzhiyun #ifdef CONFIG_DRIVER_TI_CPSW
838*4882a593Smuzhiyun extern u32 *const omap_si_rev;
839*4882a593Smuzhiyun
cpsw_control(int enabled)840*4882a593Smuzhiyun static void cpsw_control(int enabled)
841*4882a593Smuzhiyun {
842*4882a593Smuzhiyun /* VTP can be added here */
843*4882a593Smuzhiyun
844*4882a593Smuzhiyun return;
845*4882a593Smuzhiyun }
846*4882a593Smuzhiyun
847*4882a593Smuzhiyun static struct cpsw_slave_data cpsw_slaves[] = {
848*4882a593Smuzhiyun {
849*4882a593Smuzhiyun .slave_reg_ofs = 0x208,
850*4882a593Smuzhiyun .sliver_reg_ofs = 0xd80,
851*4882a593Smuzhiyun .phy_addr = 2,
852*4882a593Smuzhiyun },
853*4882a593Smuzhiyun {
854*4882a593Smuzhiyun .slave_reg_ofs = 0x308,
855*4882a593Smuzhiyun .sliver_reg_ofs = 0xdc0,
856*4882a593Smuzhiyun .phy_addr = 3,
857*4882a593Smuzhiyun },
858*4882a593Smuzhiyun };
859*4882a593Smuzhiyun
860*4882a593Smuzhiyun static struct cpsw_platform_data cpsw_data = {
861*4882a593Smuzhiyun .mdio_base = CPSW_MDIO_BASE,
862*4882a593Smuzhiyun .cpsw_base = CPSW_BASE,
863*4882a593Smuzhiyun .mdio_div = 0xff,
864*4882a593Smuzhiyun .channels = 8,
865*4882a593Smuzhiyun .cpdma_reg_ofs = 0x800,
866*4882a593Smuzhiyun .slaves = 2,
867*4882a593Smuzhiyun .slave_data = cpsw_slaves,
868*4882a593Smuzhiyun .ale_reg_ofs = 0xd00,
869*4882a593Smuzhiyun .ale_entries = 1024,
870*4882a593Smuzhiyun .host_port_reg_ofs = 0x108,
871*4882a593Smuzhiyun .hw_stats_reg_ofs = 0x900,
872*4882a593Smuzhiyun .bd_ram_ofs = 0x2000,
873*4882a593Smuzhiyun .mac_control = (1 << 5),
874*4882a593Smuzhiyun .control = cpsw_control,
875*4882a593Smuzhiyun .host_port_num = 0,
876*4882a593Smuzhiyun .version = CPSW_CTRL_VERSION_2,
877*4882a593Smuzhiyun };
878*4882a593Smuzhiyun
board_eth_init(bd_t * bis)879*4882a593Smuzhiyun int board_eth_init(bd_t *bis)
880*4882a593Smuzhiyun {
881*4882a593Smuzhiyun int ret;
882*4882a593Smuzhiyun uint8_t mac_addr[6];
883*4882a593Smuzhiyun uint32_t mac_hi, mac_lo;
884*4882a593Smuzhiyun uint32_t ctrl_val;
885*4882a593Smuzhiyun
886*4882a593Smuzhiyun /* try reading mac address from efuse */
887*4882a593Smuzhiyun mac_lo = readl((*ctrl)->control_core_mac_id_0_lo);
888*4882a593Smuzhiyun mac_hi = readl((*ctrl)->control_core_mac_id_0_hi);
889*4882a593Smuzhiyun mac_addr[0] = (mac_hi & 0xFF0000) >> 16;
890*4882a593Smuzhiyun mac_addr[1] = (mac_hi & 0xFF00) >> 8;
891*4882a593Smuzhiyun mac_addr[2] = mac_hi & 0xFF;
892*4882a593Smuzhiyun mac_addr[3] = (mac_lo & 0xFF0000) >> 16;
893*4882a593Smuzhiyun mac_addr[4] = (mac_lo & 0xFF00) >> 8;
894*4882a593Smuzhiyun mac_addr[5] = mac_lo & 0xFF;
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun if (!env_get("ethaddr")) {
897*4882a593Smuzhiyun printf("<ethaddr> not set. Validating first E-fuse MAC\n");
898*4882a593Smuzhiyun
899*4882a593Smuzhiyun if (is_valid_ethaddr(mac_addr))
900*4882a593Smuzhiyun eth_env_set_enetaddr("ethaddr", mac_addr);
901*4882a593Smuzhiyun }
902*4882a593Smuzhiyun
903*4882a593Smuzhiyun mac_lo = readl((*ctrl)->control_core_mac_id_1_lo);
904*4882a593Smuzhiyun mac_hi = readl((*ctrl)->control_core_mac_id_1_hi);
905*4882a593Smuzhiyun mac_addr[0] = (mac_hi & 0xFF0000) >> 16;
906*4882a593Smuzhiyun mac_addr[1] = (mac_hi & 0xFF00) >> 8;
907*4882a593Smuzhiyun mac_addr[2] = mac_hi & 0xFF;
908*4882a593Smuzhiyun mac_addr[3] = (mac_lo & 0xFF0000) >> 16;
909*4882a593Smuzhiyun mac_addr[4] = (mac_lo & 0xFF00) >> 8;
910*4882a593Smuzhiyun mac_addr[5] = mac_lo & 0xFF;
911*4882a593Smuzhiyun
912*4882a593Smuzhiyun if (!env_get("eth1addr")) {
913*4882a593Smuzhiyun if (is_valid_ethaddr(mac_addr))
914*4882a593Smuzhiyun eth_env_set_enetaddr("eth1addr", mac_addr);
915*4882a593Smuzhiyun }
916*4882a593Smuzhiyun
917*4882a593Smuzhiyun ctrl_val = readl((*ctrl)->control_core_control_io1) & (~0x33);
918*4882a593Smuzhiyun ctrl_val |= 0x22;
919*4882a593Smuzhiyun writel(ctrl_val, (*ctrl)->control_core_control_io1);
920*4882a593Smuzhiyun
921*4882a593Smuzhiyun if (*omap_si_rev == DRA722_ES1_0)
922*4882a593Smuzhiyun cpsw_data.active_slave = 1;
923*4882a593Smuzhiyun
924*4882a593Smuzhiyun if (board_is_dra72x_revc_or_later()) {
925*4882a593Smuzhiyun cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RGMII_ID;
926*4882a593Smuzhiyun cpsw_slaves[1].phy_if = PHY_INTERFACE_MODE_RGMII_ID;
927*4882a593Smuzhiyun }
928*4882a593Smuzhiyun
929*4882a593Smuzhiyun ret = cpsw_register(&cpsw_data);
930*4882a593Smuzhiyun if (ret < 0)
931*4882a593Smuzhiyun printf("Error %d registering CPSW switch\n", ret);
932*4882a593Smuzhiyun
933*4882a593Smuzhiyun return ret;
934*4882a593Smuzhiyun }
935*4882a593Smuzhiyun #endif
936*4882a593Smuzhiyun
937*4882a593Smuzhiyun #ifdef CONFIG_BOARD_EARLY_INIT_F
938*4882a593Smuzhiyun /* VTT regulator enable */
vtt_regulator_enable(void)939*4882a593Smuzhiyun static inline void vtt_regulator_enable(void)
940*4882a593Smuzhiyun {
941*4882a593Smuzhiyun if (omap_hw_init_context() == OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL)
942*4882a593Smuzhiyun return;
943*4882a593Smuzhiyun
944*4882a593Smuzhiyun /* Do not enable VTT for DRA722 */
945*4882a593Smuzhiyun if (is_dra72x())
946*4882a593Smuzhiyun return;
947*4882a593Smuzhiyun
948*4882a593Smuzhiyun /*
949*4882a593Smuzhiyun * EVM Rev G and later use gpio7_11 for DDR3 termination.
950*4882a593Smuzhiyun * This is safe enough to do on older revs.
951*4882a593Smuzhiyun */
952*4882a593Smuzhiyun gpio_request(GPIO_DDR_VTT_EN, "ddr_vtt_en");
953*4882a593Smuzhiyun gpio_direction_output(GPIO_DDR_VTT_EN, 1);
954*4882a593Smuzhiyun }
955*4882a593Smuzhiyun
board_early_init_f(void)956*4882a593Smuzhiyun int board_early_init_f(void)
957*4882a593Smuzhiyun {
958*4882a593Smuzhiyun vtt_regulator_enable();
959*4882a593Smuzhiyun return 0;
960*4882a593Smuzhiyun }
961*4882a593Smuzhiyun #endif
962*4882a593Smuzhiyun
963*4882a593Smuzhiyun #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
ft_board_setup(void * blob,bd_t * bd)964*4882a593Smuzhiyun int ft_board_setup(void *blob, bd_t *bd)
965*4882a593Smuzhiyun {
966*4882a593Smuzhiyun ft_cpu_setup(blob, bd);
967*4882a593Smuzhiyun
968*4882a593Smuzhiyun return 0;
969*4882a593Smuzhiyun }
970*4882a593Smuzhiyun #endif
971*4882a593Smuzhiyun
972*4882a593Smuzhiyun #ifdef CONFIG_SPL_LOAD_FIT
board_fit_config_name_match(const char * name)973*4882a593Smuzhiyun int board_fit_config_name_match(const char *name)
974*4882a593Smuzhiyun {
975*4882a593Smuzhiyun if (is_dra72x()) {
976*4882a593Smuzhiyun if (board_is_dra71x_evm()) {
977*4882a593Smuzhiyun if (!strcmp(name, "dra71-evm"))
978*4882a593Smuzhiyun return 0;
979*4882a593Smuzhiyun }else if(board_is_dra72x_revc_or_later()) {
980*4882a593Smuzhiyun if (!strcmp(name, "dra72-evm-revc"))
981*4882a593Smuzhiyun return 0;
982*4882a593Smuzhiyun } else if (!strcmp(name, "dra72-evm")) {
983*4882a593Smuzhiyun return 0;
984*4882a593Smuzhiyun }
985*4882a593Smuzhiyun } else if (!is_dra72x() && !strcmp(name, "dra7-evm")) {
986*4882a593Smuzhiyun return 0;
987*4882a593Smuzhiyun }
988*4882a593Smuzhiyun
989*4882a593Smuzhiyun return -1;
990*4882a593Smuzhiyun }
991*4882a593Smuzhiyun #endif
992*4882a593Smuzhiyun
993*4882a593Smuzhiyun #ifdef CONFIG_TI_SECURE_DEVICE
board_fit_image_post_process(void ** p_image,size_t * p_size)994*4882a593Smuzhiyun void board_fit_image_post_process(void **p_image, size_t *p_size)
995*4882a593Smuzhiyun {
996*4882a593Smuzhiyun secure_boot_verify_image(p_image, p_size);
997*4882a593Smuzhiyun }
998*4882a593Smuzhiyun
board_tee_image_process(ulong tee_image,size_t tee_size)999*4882a593Smuzhiyun void board_tee_image_process(ulong tee_image, size_t tee_size)
1000*4882a593Smuzhiyun {
1001*4882a593Smuzhiyun secure_tee_install((u32)tee_image);
1002*4882a593Smuzhiyun }
1003*4882a593Smuzhiyun
1004*4882a593Smuzhiyun U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_TEE, board_tee_image_process);
1005*4882a593Smuzhiyun #endif
1006