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 12 #include "board.h" 13 14 DECLARE_GLOBAL_DATA_PTR; 15 16 #ifdef CONFIG_ENV_IS_IN_MMC 17 static void mmc_late_init(void) 18 { 19 char cmd[32]; 20 char mmcblk[32]; 21 u32 dev_no = mmc_get_env_dev(); 22 23 env_set_ulong("mmcdev", dev_no); 24 25 /* Set mmcblk env */ 26 sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", dev_no); 27 env_set("mmcroot", mmcblk); 28 29 sprintf(cmd, "mmc dev %d", dev_no); 30 run_command(cmd, 0); 31 } 32 #endif 33 34 static void setenv_fdt_file(void) 35 { 36 const char *cmp_dtb = CONFIG_DEFAULT_DEVICE_TREE; 37 38 if (!strcmp(cmp_dtb, "imx6q-icore")) { 39 if (is_mx6dq()) 40 env_set("fdt_file", "imx6q-icore.dtb"); 41 else if (is_mx6dl() || is_mx6solo()) 42 env_set("fdt_file", "imx6dl-icore.dtb"); 43 } else if (!strcmp(cmp_dtb, "imx6q-icore-mipi")) { 44 if (is_mx6dq()) 45 env_set("fdt_file", "imx6q-icore-mipi.dtb"); 46 else if (is_mx6dl() || is_mx6solo()) 47 env_set("fdt_file", "imx6dl-icore-mipi.dtb"); 48 } else if (!strcmp(cmp_dtb, "imx6q-icore-rqs")) { 49 if (is_mx6dq()) 50 env_set("fdt_file", "imx6q-icore-rqs.dtb"); 51 else if (is_mx6dl() || is_mx6solo()) 52 env_set("fdt_file", "imx6dl-icore-rqs.dtb"); 53 } else if (!strcmp(cmp_dtb, "imx6ul-geam-kit")) 54 env_set("fdt_file", "imx6ul-geam-kit.dtb"); 55 else if (!strcmp(cmp_dtb, "imx6ul-isiot-mmc")) 56 env_set("fdt_file", "imx6ul-isiot-emmc.dtb"); 57 else if (!strcmp(cmp_dtb, "imx6ul-isiot-emmc")) 58 env_set("fdt_file", "imx6ul-isiot-emmc.dtb"); 59 else if (!strcmp(cmp_dtb, "imx6ul-isiot-nand")) 60 env_set("fdt_file", "imx6ul-isiot-nand.dtb"); 61 } 62 63 int board_late_init(void) 64 { 65 switch ((imx6_src_get_boot_mode() & IMX6_BMODE_MASK) >> 66 IMX6_BMODE_SHIFT) { 67 case IMX6_BMODE_SD: 68 case IMX6_BMODE_ESD: 69 case IMX6_BMODE_MMC: 70 case IMX6_BMODE_EMMC: 71 #ifdef CONFIG_ENV_IS_IN_MMC 72 mmc_late_init(); 73 #endif 74 env_set("modeboot", "mmcboot"); 75 break; 76 case IMX6_BMODE_NAND_MIN ... IMX6_BMODE_NAND_MAX: 77 env_set("modeboot", "nandboot"); 78 break; 79 default: 80 env_set("modeboot", ""); 81 break; 82 } 83 84 if (is_mx6ul()) 85 env_set("console", "ttymxc0"); 86 else 87 env_set("console", "ttymxc3"); 88 89 setenv_fdt_file(); 90 91 return 0; 92 } 93 94 int board_init(void) 95 { 96 /* Address of boot parameters */ 97 gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 98 99 #ifdef CONFIG_NAND_MXS 100 setup_gpmi_nand(); 101 #endif 102 103 #ifdef CONFIG_VIDEO_IPUV3 104 setup_display(); 105 #endif 106 107 return 0; 108 } 109 110 int dram_init(void) 111 { 112 gd->ram_size = imx_ddr_size(); 113 114 return 0; 115 } 116