Merge branch 'master' of git://git.denx.de/u-boot-i2c
[platform/kernel/u-boot.git] / board / ti / am43xx / board.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * board.c
4  *
5  * Board functions for TI AM43XX based boards
6  *
7  * Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/
8  */
9
10 #include <common.h>
11 #include <environment.h>
12 #include <i2c.h>
13 #include <linux/errno.h>
14 #include <spl.h>
15 #include <usb.h>
16 #include <asm/omap_sec_common.h>
17 #include <asm/arch/clock.h>
18 #include <asm/arch/sys_proto.h>
19 #include <asm/arch/mux.h>
20 #include <asm/arch/ddr_defs.h>
21 #include <asm/arch/gpio.h>
22 #include <asm/emif.h>
23 #include <asm/omap_common.h>
24 #include "../common/board_detect.h"
25 #include "board.h"
26 #include <power/pmic.h>
27 #include <power/tps65218.h>
28 #include <power/tps62362.h>
29 #include <miiphy.h>
30 #include <cpsw.h>
31 #include <linux/usb/gadget.h>
32 #include <dwc3-uboot.h>
33 #include <dwc3-omap-uboot.h>
34 #include <ti-usb-phy-uboot.h>
35
36 DECLARE_GLOBAL_DATA_PTR;
37
38 static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
39
40 /*
41  * Read header information from EEPROM into global structure.
42  */
43 #ifdef CONFIG_TI_I2C_BOARD_DETECT
44 void do_board_detect(void)
45 {
46         /* Ensure I2C is initialized for EEPROM access*/
47         gpi2c_init();
48         if (ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS,
49                                  CONFIG_EEPROM_CHIP_ADDRESS))
50                 printf("ti_i2c_eeprom_init failed\n");
51 }
52 #endif
53
54 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
55
56 const struct dpll_params dpll_mpu[NUM_CRYSTAL_FREQ][NUM_OPPS] = {
57         {       /* 19.2 MHz */
58                 {125, 3, 2, -1, -1, -1, -1},    /* OPP 50 */
59                 {-1, -1, -1, -1, -1, -1, -1},   /* OPP RESERVED */
60                 {125, 3, 1, -1, -1, -1, -1},    /* OPP 100 */
61                 {150, 3, 1, -1, -1, -1, -1},    /* OPP 120 */
62                 {125, 2, 1, -1, -1, -1, -1},    /* OPP TB */
63                 {625, 11, 1, -1, -1, -1, -1}    /* OPP NT */
64         },
65         {       /* 24 MHz */
66                 {300, 23, 1, -1, -1, -1, -1},   /* OPP 50 */
67                 {-1, -1, -1, -1, -1, -1, -1},   /* OPP RESERVED */
68                 {600, 23, 1, -1, -1, -1, -1},   /* OPP 100 */
69                 {720, 23, 1, -1, -1, -1, -1},   /* OPP 120 */
70                 {800, 23, 1, -1, -1, -1, -1},   /* OPP TB */
71                 {1000, 23, 1, -1, -1, -1, -1}   /* OPP NT */
72         },
73         {       /* 25 MHz */
74                 {300, 24, 1, -1, -1, -1, -1},   /* OPP 50 */
75                 {-1, -1, -1, -1, -1, -1, -1},   /* OPP RESERVED */
76                 {600, 24, 1, -1, -1, -1, -1},   /* OPP 100 */
77                 {720, 24, 1, -1, -1, -1, -1},   /* OPP 120 */
78                 {800, 24, 1, -1, -1, -1, -1},   /* OPP TB */
79                 {1000, 24, 1, -1, -1, -1, -1}   /* OPP NT */
80         },
81         {       /* 26 MHz */
82                 {300, 25, 1, -1, -1, -1, -1},   /* OPP 50 */
83                 {-1, -1, -1, -1, -1, -1, -1},   /* OPP RESERVED */
84                 {600, 25, 1, -1, -1, -1, -1},   /* OPP 100 */
85                 {720, 25, 1, -1, -1, -1, -1},   /* OPP 120 */
86                 {800, 25, 1, -1, -1, -1, -1},   /* OPP TB */
87                 {1000, 25, 1, -1, -1, -1, -1}   /* OPP NT */
88         },
89 };
90
91 const struct dpll_params dpll_core[NUM_CRYSTAL_FREQ] = {
92                 {625, 11, -1, -1, 10, 8, 4},    /* 19.2 MHz */
93                 {1000, 23, -1, -1, 10, 8, 4},   /* 24 MHz */
94                 {1000, 24, -1, -1, 10, 8, 4},   /* 25 MHz */
95                 {1000, 25, -1, -1, 10, 8, 4}    /* 26 MHz */
96 };
97
98 const struct dpll_params dpll_per[NUM_CRYSTAL_FREQ] = {
99                 {400, 7, 5, -1, -1, -1, -1},    /* 19.2 MHz */
100                 {400, 9, 5, -1, -1, -1, -1},    /* 24 MHz */
101                 {384, 9, 5, -1, -1, -1, -1},    /* 25 MHz */
102                 {480, 12, 5, -1, -1, -1, -1}    /* 26 MHz */
103 };
104
105 const struct dpll_params epos_evm_dpll_ddr[NUM_CRYSTAL_FREQ] = {
106                 {665, 47, 1, -1, 4, -1, -1}, /*19.2*/
107                 {133, 11, 1, -1, 4, -1, -1}, /* 24 MHz */
108                 {266, 24, 1, -1, 4, -1, -1}, /* 25 MHz */
109                 {133, 12, 1, -1, 4, -1, -1}  /* 26 MHz */
110 };
111
112 const struct dpll_params gp_evm_dpll_ddr = {
113                 50, 2, 1, -1, 2, -1, -1};
114
115 static const struct dpll_params idk_dpll_ddr = {
116         400, 23, 1, -1, 2, -1, -1
117 };
118
119 static const u32 ext_phy_ctrl_const_base_lpddr2[] = {
120         0x00500050,
121         0x00350035,
122         0x00350035,
123         0x00350035,
124         0x00350035,
125         0x00350035,
126         0x00000000,
127         0x00000000,
128         0x00000000,
129         0x00000000,
130         0x00000000,
131         0x00000000,
132         0x00000000,
133         0x00000000,
134         0x00000000,
135         0x00000000,
136         0x00000000,
137         0x00000000,
138         0x40001000,
139         0x08102040
140 };
141
142 const struct ctrl_ioregs ioregs_lpddr2 = {
143         .cm0ioctl               = LPDDR2_ADDRCTRL_IOCTRL_VALUE,
144         .cm1ioctl               = LPDDR2_ADDRCTRL_WD0_IOCTRL_VALUE,
145         .cm2ioctl               = LPDDR2_ADDRCTRL_WD1_IOCTRL_VALUE,
146         .dt0ioctl               = LPDDR2_DATA0_IOCTRL_VALUE,
147         .dt1ioctl               = LPDDR2_DATA0_IOCTRL_VALUE,
148         .dt2ioctrl              = LPDDR2_DATA0_IOCTRL_VALUE,
149         .dt3ioctrl              = LPDDR2_DATA0_IOCTRL_VALUE,
150         .emif_sdram_config_ext  = 0x1,
151 };
152
153 const struct emif_regs emif_regs_lpddr2 = {
154         .sdram_config                   = 0x808012BA,
155         .ref_ctrl                       = 0x0000040D,
156         .sdram_tim1                     = 0xEA86B411,
157         .sdram_tim2                     = 0x103A094A,
158         .sdram_tim3                     = 0x0F6BA37F,
159         .read_idle_ctrl                 = 0x00050000,
160         .zq_config                      = 0x50074BE4,
161         .temp_alert_config              = 0x0,
162         .emif_rd_wr_lvl_rmp_win         = 0x0,
163         .emif_rd_wr_lvl_rmp_ctl         = 0x0,
164         .emif_rd_wr_lvl_ctl             = 0x0,
165         .emif_ddr_phy_ctlr_1            = 0x0E284006,
166         .emif_rd_wr_exec_thresh         = 0x80000405,
167         .emif_ddr_ext_phy_ctrl_1        = 0x04010040,
168         .emif_ddr_ext_phy_ctrl_2        = 0x00500050,
169         .emif_ddr_ext_phy_ctrl_3        = 0x00500050,
170         .emif_ddr_ext_phy_ctrl_4        = 0x00500050,
171         .emif_ddr_ext_phy_ctrl_5        = 0x00500050,
172         .emif_prio_class_serv_map       = 0x80000001,
173         .emif_connect_id_serv_1_map     = 0x80000094,
174         .emif_connect_id_serv_2_map     = 0x00000000,
175         .emif_cos_config                        = 0x000FFFFF
176 };
177
178 const struct ctrl_ioregs ioregs_ddr3 = {
179         .cm0ioctl               = DDR3_ADDRCTRL_IOCTRL_VALUE,
180         .cm1ioctl               = DDR3_ADDRCTRL_WD0_IOCTRL_VALUE,
181         .cm2ioctl               = DDR3_ADDRCTRL_WD1_IOCTRL_VALUE,
182         .dt0ioctl               = DDR3_DATA0_IOCTRL_VALUE,
183         .dt1ioctl               = DDR3_DATA0_IOCTRL_VALUE,
184         .dt2ioctrl              = DDR3_DATA0_IOCTRL_VALUE,
185         .dt3ioctrl              = DDR3_DATA0_IOCTRL_VALUE,
186         .emif_sdram_config_ext  = 0xc163,
187 };
188
189 const struct emif_regs ddr3_emif_regs_400Mhz = {
190         .sdram_config                   = 0x638413B2,
191         .ref_ctrl                       = 0x00000C30,
192         .sdram_tim1                     = 0xEAAAD4DB,
193         .sdram_tim2                     = 0x266B7FDA,
194         .sdram_tim3                     = 0x107F8678,
195         .read_idle_ctrl                 = 0x00050000,
196         .zq_config                      = 0x50074BE4,
197         .temp_alert_config              = 0x0,
198         .emif_ddr_phy_ctlr_1            = 0x0E004008,
199         .emif_ddr_ext_phy_ctrl_1        = 0x08020080,
200         .emif_ddr_ext_phy_ctrl_2        = 0x00400040,
201         .emif_ddr_ext_phy_ctrl_3        = 0x00400040,
202         .emif_ddr_ext_phy_ctrl_4        = 0x00400040,
203         .emif_ddr_ext_phy_ctrl_5        = 0x00400040,
204         .emif_rd_wr_lvl_rmp_win         = 0x0,
205         .emif_rd_wr_lvl_rmp_ctl         = 0x0,
206         .emif_rd_wr_lvl_ctl             = 0x0,
207         .emif_rd_wr_exec_thresh         = 0x80000405,
208         .emif_prio_class_serv_map       = 0x80000001,
209         .emif_connect_id_serv_1_map     = 0x80000094,
210         .emif_connect_id_serv_2_map     = 0x00000000,
211         .emif_cos_config                = 0x000FFFFF
212 };
213
214 /* EMIF DDR3 Configurations are different for beta AM43X GP EVMs */
215 const struct emif_regs ddr3_emif_regs_400Mhz_beta = {
216         .sdram_config                   = 0x638413B2,
217         .ref_ctrl                       = 0x00000C30,
218         .sdram_tim1                     = 0xEAAAD4DB,
219         .sdram_tim2                     = 0x266B7FDA,
220         .sdram_tim3                     = 0x107F8678,
221         .read_idle_ctrl                 = 0x00050000,
222         .zq_config                      = 0x50074BE4,
223         .temp_alert_config              = 0x0,
224         .emif_ddr_phy_ctlr_1            = 0x0E004008,
225         .emif_ddr_ext_phy_ctrl_1        = 0x08020080,
226         .emif_ddr_ext_phy_ctrl_2        = 0x00000065,
227         .emif_ddr_ext_phy_ctrl_3        = 0x00000091,
228         .emif_ddr_ext_phy_ctrl_4        = 0x000000B5,
229         .emif_ddr_ext_phy_ctrl_5        = 0x000000E5,
230         .emif_rd_wr_exec_thresh         = 0x80000405,
231         .emif_prio_class_serv_map       = 0x80000001,
232         .emif_connect_id_serv_1_map     = 0x80000094,
233         .emif_connect_id_serv_2_map     = 0x00000000,
234         .emif_cos_config                = 0x000FFFFF
235 };
236
237 /* EMIF DDR3 Configurations are different for production AM43X GP EVMs */
238 const struct emif_regs ddr3_emif_regs_400Mhz_production = {
239         .sdram_config                   = 0x638413B2,
240         .ref_ctrl                       = 0x00000C30,
241         .sdram_tim1                     = 0xEAAAD4DB,
242         .sdram_tim2                     = 0x266B7FDA,
243         .sdram_tim3                     = 0x107F8678,
244         .read_idle_ctrl                 = 0x00050000,
245         .zq_config                      = 0x50074BE4,
246         .temp_alert_config              = 0x0,
247         .emif_ddr_phy_ctlr_1            = 0x0E004008,
248         .emif_ddr_ext_phy_ctrl_1        = 0x08020080,
249         .emif_ddr_ext_phy_ctrl_2        = 0x00000066,
250         .emif_ddr_ext_phy_ctrl_3        = 0x00000091,
251         .emif_ddr_ext_phy_ctrl_4        = 0x000000B9,
252         .emif_ddr_ext_phy_ctrl_5        = 0x000000E6,
253         .emif_rd_wr_exec_thresh         = 0x80000405,
254         .emif_prio_class_serv_map       = 0x80000001,
255         .emif_connect_id_serv_1_map     = 0x80000094,
256         .emif_connect_id_serv_2_map     = 0x00000000,
257         .emif_cos_config                = 0x000FFFFF
258 };
259
260 static const struct emif_regs ddr3_sk_emif_regs_400Mhz = {
261         .sdram_config                   = 0x638413b2,
262         .sdram_config2                  = 0x00000000,
263         .ref_ctrl                       = 0x00000c30,
264         .sdram_tim1                     = 0xeaaad4db,
265         .sdram_tim2                     = 0x266b7fda,
266         .sdram_tim3                     = 0x107f8678,
267         .read_idle_ctrl                 = 0x00050000,
268         .zq_config                      = 0x50074be4,
269         .temp_alert_config              = 0x0,
270         .emif_ddr_phy_ctlr_1            = 0x0e084008,
271         .emif_ddr_ext_phy_ctrl_1        = 0x08020080,
272         .emif_ddr_ext_phy_ctrl_2        = 0x89,
273         .emif_ddr_ext_phy_ctrl_3        = 0x90,
274         .emif_ddr_ext_phy_ctrl_4        = 0x8e,
275         .emif_ddr_ext_phy_ctrl_5        = 0x8d,
276         .emif_rd_wr_lvl_rmp_win         = 0x0,
277         .emif_rd_wr_lvl_rmp_ctl         = 0x00000000,
278         .emif_rd_wr_lvl_ctl             = 0x00000000,
279         .emif_rd_wr_exec_thresh         = 0x80000000,
280         .emif_prio_class_serv_map       = 0x80000001,
281         .emif_connect_id_serv_1_map     = 0x80000094,
282         .emif_connect_id_serv_2_map     = 0x00000000,
283         .emif_cos_config                = 0x000FFFFF
284 };
285
286 static const struct emif_regs ddr3_idk_emif_regs_400Mhz = {
287         .sdram_config                   = 0x61a11b32,
288         .sdram_config2                  = 0x00000000,
289         .ref_ctrl                       = 0x00000c30,
290         .sdram_tim1                     = 0xeaaad4db,
291         .sdram_tim2                     = 0x266b7fda,
292         .sdram_tim3                     = 0x107f8678,
293         .read_idle_ctrl                 = 0x00050000,
294         .zq_config                      = 0x50074be4,
295         .temp_alert_config              = 0x00000000,
296         .emif_ddr_phy_ctlr_1            = 0x00008009,
297         .emif_ddr_ext_phy_ctrl_1        = 0x08020080,
298         .emif_ddr_ext_phy_ctrl_2        = 0x00000040,
299         .emif_ddr_ext_phy_ctrl_3        = 0x0000003e,
300         .emif_ddr_ext_phy_ctrl_4        = 0x00000051,
301         .emif_ddr_ext_phy_ctrl_5        = 0x00000051,
302         .emif_rd_wr_lvl_rmp_win         = 0x00000000,
303         .emif_rd_wr_lvl_rmp_ctl         = 0x00000000,
304         .emif_rd_wr_lvl_ctl             = 0x00000000,
305         .emif_rd_wr_exec_thresh         = 0x00000405,
306         .emif_prio_class_serv_map       = 0x00000000,
307         .emif_connect_id_serv_1_map     = 0x00000000,
308         .emif_connect_id_serv_2_map     = 0x00000000,
309         .emif_cos_config                = 0x00ffffff
310 };
311
312 void emif_get_ext_phy_ctrl_const_regs(const u32 **regs, u32 *size)
313 {
314         if (board_is_eposevm()) {
315                 *regs = ext_phy_ctrl_const_base_lpddr2;
316                 *size = ARRAY_SIZE(ext_phy_ctrl_const_base_lpddr2);
317         }
318
319         return;
320 }
321
322 const struct dpll_params *get_dpll_ddr_params(void)
323 {
324         int ind = get_sys_clk_index();
325
326         if (board_is_eposevm())
327                 return &epos_evm_dpll_ddr[ind];
328         else if (board_is_evm() || board_is_sk())
329                 return &gp_evm_dpll_ddr;
330         else if (board_is_idk())
331                 return &idk_dpll_ddr;
332
333         printf(" Board '%s' not supported\n", board_ti_get_name());
334         return NULL;
335 }
336
337
338 /*
339  * get_opp_offset:
340  * Returns the index for safest OPP of the device to boot.
341  * max_off:     Index of the MAX OPP in DEV ATTRIBUTE register.
342  * min_off:     Index of the MIN OPP in DEV ATTRIBUTE register.
343  * This data is read from dev_attribute register which is e-fused.
344  * A'1' in bit indicates OPP disabled and not available, a '0' indicates
345  * OPP available. Lowest OPP starts with min_off. So returning the
346  * bit with rightmost '0'.
347  */
348 static int get_opp_offset(int max_off, int min_off)
349 {
350         struct ctrl_stat *ctrl = (struct ctrl_stat *)CTRL_BASE;
351         int opp, offset, i;
352
353         /* Bits 0:11 are defined to be the MPU_MAX_FREQ */
354         opp = readl(&ctrl->dev_attr) & ~0xFFFFF000;
355
356         for (i = max_off; i >= min_off; i--) {
357                 offset = opp & (1 << i);
358                 if (!offset)
359                         return i;
360         }
361
362         return min_off;
363 }
364
365 const struct dpll_params *get_dpll_mpu_params(void)
366 {
367         int opp = get_opp_offset(DEV_ATTR_MAX_OFFSET, DEV_ATTR_MIN_OFFSET);
368         u32 ind = get_sys_clk_index();
369
370         return &dpll_mpu[ind][opp];
371 }
372
373 const struct dpll_params *get_dpll_core_params(void)
374 {
375         int ind = get_sys_clk_index();
376
377         return &dpll_core[ind];
378 }
379
380 const struct dpll_params *get_dpll_per_params(void)
381 {
382         int ind = get_sys_clk_index();
383
384         return &dpll_per[ind];
385 }
386
387 void scale_vcores_generic(u32 m)
388 {
389         int mpu_vdd, ddr_volt;
390
391 #ifndef CONFIG_DM_I2C
392         if (i2c_probe(TPS65218_CHIP_PM))
393                 return;
394 #else
395         if (power_tps65218_init(0))
396                 return;
397 #endif
398
399         switch (m) {
400         case 1000:
401                 mpu_vdd = TPS65218_DCDC_VOLT_SEL_1330MV;
402                 break;
403         case 800:
404                 mpu_vdd = TPS65218_DCDC_VOLT_SEL_1260MV;
405                 break;
406         case 720:
407                 mpu_vdd = TPS65218_DCDC_VOLT_SEL_1200MV;
408                 break;
409         case 600:
410                 mpu_vdd = TPS65218_DCDC_VOLT_SEL_1100MV;
411                 break;
412         case 300:
413                 mpu_vdd = TPS65218_DCDC_VOLT_SEL_0950MV;
414                 break;
415         default:
416                 puts("Unknown MPU clock, not scaling\n");
417                 return;
418         }
419
420         /* Set DCDC1 (CORE) voltage to 1.1V */
421         if (tps65218_voltage_update(TPS65218_DCDC1,
422                                     TPS65218_DCDC_VOLT_SEL_1100MV)) {
423                 printf("%s failure\n", __func__);
424                 return;
425         }
426
427         /* Set DCDC2 (MPU) voltage */
428         if (tps65218_voltage_update(TPS65218_DCDC2, mpu_vdd)) {
429                 printf("%s failure\n", __func__);
430                 return;
431         }
432
433         if (board_is_eposevm())
434                 ddr_volt = TPS65218_DCDC3_VOLT_SEL_1200MV;
435         else
436                 ddr_volt = TPS65218_DCDC3_VOLT_SEL_1350MV;
437
438         /* Set DCDC3 (DDR) voltage */
439         if (tps65218_voltage_update(TPS65218_DCDC3, ddr_volt)) {
440                 printf("%s failure\n", __func__);
441                 return;
442         }
443 }
444
445 void scale_vcores_idk(u32 m)
446 {
447         int mpu_vdd;
448
449 #ifndef CONFIG_DM_I2C
450         if (i2c_probe(TPS62362_I2C_ADDR))
451                 return;
452 #else
453         if (power_tps62362_init(0))
454                 return;
455 #endif
456
457         switch (m) {
458         case 1000:
459                 mpu_vdd = TPS62362_DCDC_VOLT_SEL_1330MV;
460                 break;
461         case 800:
462                 mpu_vdd = TPS62362_DCDC_VOLT_SEL_1260MV;
463                 break;
464         case 720:
465                 mpu_vdd = TPS62362_DCDC_VOLT_SEL_1200MV;
466                 break;
467         case 600:
468                 mpu_vdd = TPS62362_DCDC_VOLT_SEL_1100MV;
469                 break;
470         case 300:
471                 mpu_vdd = TPS62362_DCDC_VOLT_SEL_1330MV;
472                 break;
473         default:
474                 puts("Unknown MPU clock, not scaling\n");
475                 return;
476         }
477         /* Set VDD_MPU voltage */
478         if (tps62362_voltage_update(TPS62362_SET3, mpu_vdd)) {
479                 printf("%s failure\n", __func__);
480                 return;
481         }
482 }
483 void gpi2c_init(void)
484 {
485         /* When needed to be invoked prior to BSS initialization */
486         static bool first_time = true;
487
488         if (first_time) {
489                 enable_i2c0_pin_mux();
490 #ifndef CONFIG_DM_I2C
491                 i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED,
492                          CONFIG_SYS_OMAP24_I2C_SLAVE);
493 #endif
494                 first_time = false;
495         }
496 }
497
498 void scale_vcores(void)
499 {
500         const struct dpll_params *mpu_params;
501
502         /* Ensure I2C is initialized for PMIC configuration */
503         gpi2c_init();
504
505         /* Get the frequency */
506         mpu_params = get_dpll_mpu_params();
507
508         if (board_is_idk())
509                 scale_vcores_idk(mpu_params->m);
510         else
511                 scale_vcores_generic(mpu_params->m);
512 }
513
514 void set_uart_mux_conf(void)
515 {
516         enable_uart0_pin_mux();
517 }
518
519 void set_mux_conf_regs(void)
520 {
521         enable_board_pin_mux();
522 }
523
524 static void enable_vtt_regulator(void)
525 {
526         u32 temp;
527
528         /* enable module */
529         writel(GPIO_CTRL_ENABLEMODULE, AM33XX_GPIO5_BASE + OMAP_GPIO_CTRL);
530
531         /* enable output for GPIO5_7 */
532         writel(GPIO_SETDATAOUT(7),
533                AM33XX_GPIO5_BASE + OMAP_GPIO_SETDATAOUT);
534         temp = readl(AM33XX_GPIO5_BASE + OMAP_GPIO_OE);
535         temp = temp & ~(GPIO_OE_ENABLE(7));
536         writel(temp, AM33XX_GPIO5_BASE + OMAP_GPIO_OE);
537 }
538
539 enum {
540         RTC_BOARD_EPOS = 1,
541         RTC_BOARD_EVM14,
542         RTC_BOARD_EVM12,
543         RTC_BOARD_GPEVM,
544         RTC_BOARD_SK,
545 };
546
547 /*
548  * In the rtc_only+DRR in self-refresh boot path we have the board type info
549  * in the rtc scratch pad register hence we bypass the costly i2c reads to
550  * eeprom and directly programthe board name string
551  */
552 void rtc_only_update_board_type(u32 btype)
553 {
554         const char *name = "";
555         const char *rev = "1.0";
556
557         switch (btype) {
558         case RTC_BOARD_EPOS:
559                 name = "AM43EPOS";
560                 break;
561         case RTC_BOARD_EVM14:
562                 name = "AM43__GP";
563                 rev = "1.4";
564                 break;
565         case RTC_BOARD_EVM12:
566                 name = "AM43__GP";
567                 rev = "1.2";
568                 break;
569         case RTC_BOARD_GPEVM:
570                 name = "AM43__GP";
571                 break;
572         case RTC_BOARD_SK:
573                 name = "AM43__SK";
574                 break;
575         }
576         ti_i2c_eeprom_am_set(name, rev);
577 }
578
579 u32 rtc_only_get_board_type(void)
580 {
581         if (board_is_eposevm())
582                 return RTC_BOARD_EPOS;
583         else if (board_is_evm_14_or_later())
584                 return RTC_BOARD_EVM14;
585         else if (board_is_evm_12_or_later())
586                 return RTC_BOARD_EVM12;
587         else if (board_is_gpevm())
588                 return RTC_BOARD_GPEVM;
589         else if (board_is_sk())
590                 return RTC_BOARD_SK;
591
592         return 0;
593 }
594
595 void sdram_init(void)
596 {
597         /*
598          * EPOS EVM has 1GB LPDDR2 connected to EMIF.
599          * GP EMV has 1GB DDR3 connected to EMIF
600          * along with VTT regulator.
601          */
602         if (board_is_eposevm()) {
603                 config_ddr(0, &ioregs_lpddr2, NULL, NULL, &emif_regs_lpddr2, 0);
604         } else if (board_is_evm_14_or_later()) {
605                 enable_vtt_regulator();
606                 config_ddr(0, &ioregs_ddr3, NULL, NULL,
607                            &ddr3_emif_regs_400Mhz_production, 0);
608         } else if (board_is_evm_12_or_later()) {
609                 enable_vtt_regulator();
610                 config_ddr(0, &ioregs_ddr3, NULL, NULL,
611                            &ddr3_emif_regs_400Mhz_beta, 0);
612         } else if (board_is_evm()) {
613                 enable_vtt_regulator();
614                 config_ddr(0, &ioregs_ddr3, NULL, NULL,
615                            &ddr3_emif_regs_400Mhz, 0);
616         } else if (board_is_sk()) {
617                 config_ddr(400, &ioregs_ddr3, NULL, NULL,
618                            &ddr3_sk_emif_regs_400Mhz, 0);
619         } else if (board_is_idk()) {
620                 config_ddr(400, &ioregs_ddr3, NULL, NULL,
621                            &ddr3_idk_emif_regs_400Mhz, 0);
622         }
623 }
624 #endif
625
626 /* setup board specific PMIC */
627 int power_init_board(void)
628 {
629         int rc;
630 #ifndef CONFIG_DM_I2C
631         struct pmic *p = NULL;
632 #endif
633         if (board_is_idk()) {
634                 rc = power_tps62362_init(0);
635                 if (rc)
636                         goto done;
637 #ifndef CONFIG_DM_I2C
638                 p = pmic_get("TPS62362");
639                 if (!p || pmic_probe(p))
640                         goto done;
641 #endif
642                 puts("PMIC:  TPS62362\n");
643         } else {
644                 rc = power_tps65218_init(0);
645                 if (rc)
646                         goto done;
647 #ifndef CONFIG_DM_I2C
648                 p = pmic_get("TPS65218_PMIC");
649                 if (!p || pmic_probe(p))
650                         goto done;
651 #endif
652                 puts("PMIC:  TPS65218\n");
653         }
654 done:
655         return 0;
656 }
657
658 int board_init(void)
659 {
660         struct l3f_cfg_bwlimiter *bwlimiter = (struct l3f_cfg_bwlimiter *)L3F_CFG_BWLIMITER;
661         u32 mreqprio_0, mreqprio_1, modena_init0_bw_fractional,
662             modena_init0_bw_integer, modena_init0_watermark_0;
663
664         gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
665         gpmc_init();
666
667         /*
668          * Call this to initialize *ctrl again
669          */
670         hw_data_init();
671
672         /* Clear all important bits for DSS errata that may need to be tweaked*/
673         mreqprio_0 = readl(&cdev->mreqprio_0) & MREQPRIO_0_SAB_INIT1_MASK &
674                            MREQPRIO_0_SAB_INIT0_MASK;
675
676         mreqprio_1 = readl(&cdev->mreqprio_1) & MREQPRIO_1_DSS_MASK;
677
678         modena_init0_bw_fractional = readl(&bwlimiter->modena_init0_bw_fractional) &
679                                            BW_LIMITER_BW_FRAC_MASK;
680
681         modena_init0_bw_integer = readl(&bwlimiter->modena_init0_bw_integer) &
682                                         BW_LIMITER_BW_INT_MASK;
683
684         modena_init0_watermark_0 = readl(&bwlimiter->modena_init0_watermark_0) &
685                                          BW_LIMITER_BW_WATERMARK_MASK;
686
687         /* Setting MReq Priority of the DSS*/
688         mreqprio_0 |= 0x77;
689
690         /*
691          * Set L3 Fast Configuration Register
692          * Limiting bandwith for ARM core to 700 MBPS
693          */
694         modena_init0_bw_fractional |= 0x10;
695         modena_init0_bw_integer |= 0x3;
696
697         writel(mreqprio_0, &cdev->mreqprio_0);
698         writel(mreqprio_1, &cdev->mreqprio_1);
699
700         writel(modena_init0_bw_fractional, &bwlimiter->modena_init0_bw_fractional);
701         writel(modena_init0_bw_integer, &bwlimiter->modena_init0_bw_integer);
702         writel(modena_init0_watermark_0, &bwlimiter->modena_init0_watermark_0);
703
704         return 0;
705 }
706
707 #ifdef CONFIG_BOARD_LATE_INIT
708 int board_late_init(void)
709 {
710 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
711         set_board_info_env(NULL);
712
713         /*
714          * Default FIT boot on HS devices. Non FIT images are not allowed
715          * on HS devices.
716          */
717         if (get_device_type() == HS_DEVICE)
718                 env_set("boot_fit", "1");
719 #endif
720         return 0;
721 }
722 #endif
723
724 #ifdef CONFIG_USB_DWC3
725 static struct dwc3_device usb_otg_ss1 = {
726         .maximum_speed = USB_SPEED_HIGH,
727         .base = USB_OTG_SS1_BASE,
728         .tx_fifo_resize = false,
729         .index = 0,
730 };
731
732 static struct dwc3_omap_device usb_otg_ss1_glue = {
733         .base = (void *)USB_OTG_SS1_GLUE_BASE,
734         .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
735         .index = 0,
736 };
737
738 static struct ti_usb_phy_device usb_phy1_device = {
739         .usb2_phy_power = (void *)USB2_PHY1_POWER,
740         .index = 0,
741 };
742
743 static struct dwc3_device usb_otg_ss2 = {
744         .maximum_speed = USB_SPEED_HIGH,
745         .base = USB_OTG_SS2_BASE,
746         .tx_fifo_resize = false,
747         .index = 1,
748 };
749
750 static struct dwc3_omap_device usb_otg_ss2_glue = {
751         .base = (void *)USB_OTG_SS2_GLUE_BASE,
752         .utmi_mode = DWC3_OMAP_UTMI_MODE_SW,
753         .index = 1,
754 };
755
756 static struct ti_usb_phy_device usb_phy2_device = {
757         .usb2_phy_power = (void *)USB2_PHY2_POWER,
758         .index = 1,
759 };
760
761 int usb_gadget_handle_interrupts(int index)
762 {
763         u32 status;
764
765         status = dwc3_omap_uboot_interrupt_status(index);
766         if (status)
767                 dwc3_uboot_handle_interrupt(index);
768
769         return 0;
770 }
771 #endif /* CONFIG_USB_DWC3 */
772
773 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
774 int board_usb_init(int index, enum usb_init_type init)
775 {
776         enable_usb_clocks(index);
777 #ifdef CONFIG_USB_DWC3
778         switch (index) {
779         case 0:
780                 if (init == USB_INIT_DEVICE) {
781                         usb_otg_ss1.dr_mode = USB_DR_MODE_PERIPHERAL;
782                         usb_otg_ss1_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
783                         dwc3_omap_uboot_init(&usb_otg_ss1_glue);
784                         ti_usb_phy_uboot_init(&usb_phy1_device);
785                         dwc3_uboot_init(&usb_otg_ss1);
786                 }
787                 break;
788         case 1:
789                 if (init == USB_INIT_DEVICE) {
790                         usb_otg_ss2.dr_mode = USB_DR_MODE_PERIPHERAL;
791                         usb_otg_ss2_glue.vbus_id_status = OMAP_DWC3_VBUS_VALID;
792                         ti_usb_phy_uboot_init(&usb_phy2_device);
793                         dwc3_omap_uboot_init(&usb_otg_ss2_glue);
794                         dwc3_uboot_init(&usb_otg_ss2);
795                 }
796                 break;
797         default:
798                 printf("Invalid Controller Index\n");
799         }
800 #endif
801
802         return 0;
803 }
804
805 int board_usb_cleanup(int index, enum usb_init_type init)
806 {
807 #ifdef CONFIG_USB_DWC3
808         switch (index) {
809         case 0:
810         case 1:
811                 if (init == USB_INIT_DEVICE) {
812                         ti_usb_phy_uboot_exit(index);
813                         dwc3_uboot_exit(index);
814                         dwc3_omap_uboot_exit(index);
815                 }
816                 break;
817         default:
818                 printf("Invalid Controller Index\n");
819         }
820 #endif
821         disable_usb_clocks(index);
822
823         return 0;
824 }
825 #endif /* defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP) */
826
827 #ifdef CONFIG_DRIVER_TI_CPSW
828
829 static void cpsw_control(int enabled)
830 {
831         /* Additional controls can be added here */
832         return;
833 }
834
835 static struct cpsw_slave_data cpsw_slaves[] = {
836         {
837                 .slave_reg_ofs  = 0x208,
838                 .sliver_reg_ofs = 0xd80,
839                 .phy_addr       = 16,
840         },
841         {
842                 .slave_reg_ofs  = 0x308,
843                 .sliver_reg_ofs = 0xdc0,
844                 .phy_addr       = 1,
845         },
846 };
847
848 static struct cpsw_platform_data cpsw_data = {
849         .mdio_base              = CPSW_MDIO_BASE,
850         .cpsw_base              = CPSW_BASE,
851         .mdio_div               = 0xff,
852         .channels               = 8,
853         .cpdma_reg_ofs          = 0x800,
854         .slaves                 = 1,
855         .slave_data             = cpsw_slaves,
856         .ale_reg_ofs            = 0xd00,
857         .ale_entries            = 1024,
858         .host_port_reg_ofs      = 0x108,
859         .hw_stats_reg_ofs       = 0x900,
860         .bd_ram_ofs             = 0x2000,
861         .mac_control            = (1 << 5),
862         .control                = cpsw_control,
863         .host_port_num          = 0,
864         .version                = CPSW_CTRL_VERSION_2,
865 };
866
867 int board_eth_init(bd_t *bis)
868 {
869         int rv;
870         uint8_t mac_addr[6];
871         uint32_t mac_hi, mac_lo;
872
873         /* try reading mac address from efuse */
874         mac_lo = readl(&cdev->macid0l);
875         mac_hi = readl(&cdev->macid0h);
876         mac_addr[0] = mac_hi & 0xFF;
877         mac_addr[1] = (mac_hi & 0xFF00) >> 8;
878         mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
879         mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
880         mac_addr[4] = mac_lo & 0xFF;
881         mac_addr[5] = (mac_lo & 0xFF00) >> 8;
882
883         if (!env_get("ethaddr")) {
884                 puts("<ethaddr> not set. Validating first E-fuse MAC\n");
885                 if (is_valid_ethaddr(mac_addr))
886                         eth_env_set_enetaddr("ethaddr", mac_addr);
887         }
888
889         mac_lo = readl(&cdev->macid1l);
890         mac_hi = readl(&cdev->macid1h);
891         mac_addr[0] = mac_hi & 0xFF;
892         mac_addr[1] = (mac_hi & 0xFF00) >> 8;
893         mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
894         mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
895         mac_addr[4] = mac_lo & 0xFF;
896         mac_addr[5] = (mac_lo & 0xFF00) >> 8;
897
898         if (!env_get("eth1addr")) {
899                 if (is_valid_ethaddr(mac_addr))
900                         eth_env_set_enetaddr("eth1addr", mac_addr);
901         }
902
903         if (board_is_eposevm()) {
904                 writel(RMII_MODE_ENABLE | RMII_CHIPCKL_ENABLE, &cdev->miisel);
905                 cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RMII;
906                 cpsw_slaves[0].phy_addr = 16;
907         } else if (board_is_sk()) {
908                 writel(RGMII_MODE_ENABLE, &cdev->miisel);
909                 cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RGMII;
910                 cpsw_slaves[0].phy_addr = 4;
911                 cpsw_slaves[1].phy_addr = 5;
912         } else if (board_is_idk()) {
913                 writel(RGMII_MODE_ENABLE, &cdev->miisel);
914                 cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RGMII;
915                 cpsw_slaves[0].phy_addr = 0;
916         } else {
917                 writel(RGMII_MODE_ENABLE, &cdev->miisel);
918                 cpsw_slaves[0].phy_if = PHY_INTERFACE_MODE_RGMII;
919                 cpsw_slaves[0].phy_addr = 0;
920         }
921
922         rv = cpsw_register(&cpsw_data);
923         if (rv < 0)
924                 printf("Error %d registering CPSW switch\n", rv);
925
926         return rv;
927 }
928 #endif
929
930 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
931 int ft_board_setup(void *blob, bd_t *bd)
932 {
933         ft_cpu_setup(blob, bd);
934
935         return 0;
936 }
937 #endif
938
939 #if defined(CONFIG_SPL_LOAD_FIT) || defined(CONFIG_DTB_RESELECT)
940 int board_fit_config_name_match(const char *name)
941 {
942         bool eeprom_read = board_ti_was_eeprom_read();
943
944         if (!strcmp(name, "am4372-generic") && !eeprom_read)
945                 return 0;
946         else if (board_is_evm() && !strcmp(name, "am437x-gp-evm"))
947                 return 0;
948         else if (board_is_sk() && !strcmp(name, "am437x-sk-evm"))
949                 return 0;
950         else if (board_is_eposevm() && !strcmp(name, "am43x-epos-evm"))
951                 return 0;
952         else if (board_is_idk() && !strcmp(name, "am437x-idk-evm"))
953                 return 0;
954         else
955                 return -1;
956 }
957 #endif
958
959 #ifdef CONFIG_DTB_RESELECT
960 int embedded_dtb_select(void)
961 {
962         do_board_detect();
963         fdtdec_setup();
964
965         return 0;
966 }
967 #endif
968
969 #ifdef CONFIG_TI_SECURE_DEVICE
970 void board_fit_image_post_process(void **p_image, size_t *p_size)
971 {
972         secure_boot_verify_image(p_image, p_size);
973 }
974
975 void board_tee_image_process(ulong tee_image, size_t tee_size)
976 {
977         secure_tee_install((u32)tee_image);
978 }
979
980 U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_TEE, board_tee_image_process);
981 #endif