1 /* 2 * Copyright (C) 2016 Amarula Solutions B.V. 3 * Copyright (C) 2016 Engicam S.r.l. 4 * Author: Jagan Teki <jagan@amarulasolutions.com> 5 * 6 * SPDX-License-Identifier: GPL-2.0+ 7 */ 8 9 #include <common.h> 10 #include <mmc.h> 11 #include <asm/arch/sys_proto.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-kit")) 55 env_set("fdt_file", "imx6ul-geam-kit.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 return 0; 93 } 94 95 int board_init(void) 96 { 97 /* Address of boot parameters */ 98 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 99 100 #ifdef CONFIG_NAND_MXS 101 setup_gpmi_nand(); 102 #endif 103 104 #ifdef CONFIG_VIDEO_IPUV3 105 setup_display(); 106 #endif 107 108 return 0; 109 } 110 111 int dram_init(void) 112 { 113 gd->ram_size = imx_ddr_size(); 114 115 return 0; 116 } 117