xref: /openbmc/u-boot/board/engicam/common/board.c (revision b9553986)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2016 Amarula Solutions B.V.
4  * Copyright (C) 2016 Engicam S.r.l.
5  * Author: Jagan Teki <jagan@amarulasolutions.com>
6  */
7 
8 #include <common.h>
9 #include <mmc.h>
10 #include <asm/arch/sys_proto.h>
11 #include <watchdog.h>
12 
13 #include "board.h"
14 
15 DECLARE_GLOBAL_DATA_PTR;
16 
17 #ifdef CONFIG_ENV_IS_IN_MMC
18 static void mmc_late_init(void)
19 {
20 	char cmd[32];
21 	char mmcblk[32];
22 	u32 dev_no = mmc_get_env_dev();
23 
24 	env_set_ulong("mmcdev", dev_no);
25 
26 	/* Set mmcblk env */
27 	sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", dev_no);
28 	env_set("mmcroot", mmcblk);
29 
30 	sprintf(cmd, "mmc dev %d", dev_no);
31 	run_command(cmd, 0);
32 }
33 #endif
34 
35 static void setenv_fdt_file(void)
36 {
37 	const char *cmp_dtb = CONFIG_DEFAULT_DEVICE_TREE;
38 
39 	if (!strcmp(cmp_dtb, "imx6q-icore")) {
40 		if (is_mx6dq())
41 			env_set("fdt_file", "imx6q-icore.dtb");
42 		else if (is_mx6dl() || is_mx6solo())
43 			env_set("fdt_file", "imx6dl-icore.dtb");
44 	} else if (!strcmp(cmp_dtb, "imx6q-icore-mipi")) {
45 		if (is_mx6dq())
46 			env_set("fdt_file", "imx6q-icore-mipi.dtb");
47 		else if (is_mx6dl() || is_mx6solo())
48 			env_set("fdt_file", "imx6dl-icore-mipi.dtb");
49 	} else if (!strcmp(cmp_dtb, "imx6q-icore-rqs")) {
50 		if (is_mx6dq())
51 			env_set("fdt_file", "imx6q-icore-rqs.dtb");
52 		else if (is_mx6dl() || is_mx6solo())
53 			env_set("fdt_file", "imx6dl-icore-rqs.dtb");
54 	} else if (!strcmp(cmp_dtb, "imx6ul-geam"))
55 		env_set("fdt_file", "imx6ul-geam.dtb");
56 	else if (!strcmp(cmp_dtb, "imx6ul-isiot-mmc"))
57 		env_set("fdt_file", "imx6ul-isiot-emmc.dtb");
58 	else if (!strcmp(cmp_dtb, "imx6ul-isiot-emmc"))
59 		env_set("fdt_file", "imx6ul-isiot-emmc.dtb");
60 	else if (!strcmp(cmp_dtb, "imx6ul-isiot-nand"))
61 		env_set("fdt_file", "imx6ul-isiot-nand.dtb");
62 }
63 
64 int board_late_init(void)
65 {
66 	switch ((imx6_src_get_boot_mode() & IMX6_BMODE_MASK) >>
67 			IMX6_BMODE_SHIFT) {
68 	case IMX6_BMODE_SD:
69 	case IMX6_BMODE_ESD:
70 	case IMX6_BMODE_MMC:
71 	case IMX6_BMODE_EMMC:
72 #ifdef CONFIG_ENV_IS_IN_MMC
73 		mmc_late_init();
74 #endif
75 		env_set("modeboot", "mmcboot");
76 		break;
77 	case IMX6_BMODE_NAND_MIN ... IMX6_BMODE_NAND_MAX:
78 		env_set("modeboot", "nandboot");
79 		break;
80 	default:
81 		env_set("modeboot", "");
82 		break;
83 	}
84 
85 	if (is_mx6ul())
86 		env_set("console", "ttymxc0");
87 	else
88 		env_set("console", "ttymxc3");
89 
90 	setenv_fdt_file();
91 
92 #ifdef CONFIG_HW_WATCHDOG
93 	hw_watchdog_init();
94 #endif
95 
96 	return 0;
97 }
98 
99 int board_init(void)
100 {
101 	/* Address of boot parameters */
102 	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
103 
104 #ifdef CONFIG_NAND_MXS
105 	setup_gpmi_nand();
106 #endif
107 
108 #ifdef CONFIG_VIDEO_IPUV3
109 	setup_display();
110 #endif
111 
112 	return 0;
113 }
114 
115 int dram_init(void)
116 {
117 	gd->ram_size = imx_ddr_size();
118 
119 	return 0;
120 }
121