1 /* 2 * (C) Copyright 2010-2012 3 * NVIDIA Corporation <www.nvidia.com> 4 * 5 * See file CREDITS for list of people who contributed to this 6 * project. 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as 10 * published by the Free Software Foundation; either version 2 of 11 * the License, or (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21 * MA 02111-1307 USA 22 */ 23 24 #ifndef __TEGRA_COMMON_POST_H 25 #define __TEGRA_COMMON_POST_H 26 27 #ifdef CONFIG_BOOTCOMMAND 28 29 #define BOOTCMDS_COMMON "" 30 31 #else 32 33 #ifdef CONFIG_CMD_EXT2 34 #define BOOT_FSTYPE_EXT2 "ext2 " 35 #else 36 #define BOOT_FSTYPE_EXT2 "" 37 #endif 38 39 #ifdef CONFIG_CMD_FAT 40 #define BOOT_FSTYPE_FAT "fat" 41 #else 42 #define BOOT_FSTYPE_FAT "" 43 #endif 44 45 #ifdef CONFIG_CMD_MMC 46 #define BOOTCMDS_MMC \ 47 "mmc_boot=" \ 48 "setenv devtype mmc; " \ 49 "if mmc dev ${devnum}; then " \ 50 "run scan_boot; " \ 51 "fi\0" \ 52 "bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0" \ 53 "bootcmd_mmc1=setenv devnum 1; run mmc_boot;\0" 54 #define BOOT_TARGETS_MMC "mmc1 mmc0" 55 #else 56 #define BOOTCMDS_MMC "" 57 #define BOOT_TARGETS_MMC "" 58 #endif 59 60 #ifdef CONFIG_CMD_USB 61 #define BOOTCMD_INIT_USB "run usb_init; " 62 #define BOOTCMDS_USB \ 63 "usb_init=" \ 64 "if ${usb_need_init}; then " \ 65 "set usb_need_init false; " \ 66 "usb start 0; " \ 67 "fi\0" \ 68 \ 69 "usb_boot=" \ 70 "setenv devtype usb; " \ 71 BOOTCMD_INIT_USB \ 72 "if usb dev ${devnum}; then " \ 73 "run scan_boot; " \ 74 "fi\0" \ 75 \ 76 "bootcmd_usb0=setenv devnum 0; run usb_boot;\0" 77 #define BOOT_TARGETS_USB "usb0" 78 #else 79 #define BOOTCMD_INIT_USB "" 80 #define BOOTCMDS_USB "" 81 #define BOOT_TARGETS_USB "" 82 #endif 83 84 #ifdef CONFIG_CMD_DHCP 85 #define BOOTCMDS_DHCP \ 86 "bootcmd_dhcp=" \ 87 BOOTCMD_INIT_USB \ 88 "if dhcp ${scriptaddr} boot.scr.uimg; then "\ 89 "source ${scriptaddr}; " \ 90 "fi\0" 91 #define BOOT_TARGETS_DHCP "dhcp" 92 #else 93 #define BOOTCMDS_DHCP "" 94 #define BOOT_TARGETS_DHCP "" 95 #endif 96 97 #define BOOTCMDS_COMMON \ 98 "rootpart=1\0" \ 99 \ 100 "script_boot=" \ 101 "if ${fs}load ${devtype} ${devnum}:${rootpart} " \ 102 "${scriptaddr} ${prefix}${script}; then " \ 103 "echo ${script} found! Executing ...;" \ 104 "source ${scriptaddr};" \ 105 "fi;\0" \ 106 \ 107 "scan_boot=" \ 108 "echo Scanning ${devtype} ${devnum}...; " \ 109 "for fs in ${boot_fstypes}; do " \ 110 "for prefix in ${boot_prefixes}; do " \ 111 "for script in ${boot_scripts}; do " \ 112 "run script_boot; " \ 113 "done; " \ 114 "done; " \ 115 "done;\0" \ 116 \ 117 "boot_targets=" \ 118 BOOT_TARGETS_MMC " " \ 119 BOOT_TARGETS_USB " " \ 120 BOOT_TARGETS_DHCP " " \ 121 "\0" \ 122 \ 123 "boot_fstypes=" \ 124 BOOT_FSTYPE_EXT2 " " \ 125 BOOT_FSTYPE_FAT " " \ 126 "\0" \ 127 \ 128 "boot_prefixes=/ /boot/\0" \ 129 \ 130 "boot_scripts=boot.scr.uimg boot.scr\0" \ 131 \ 132 BOOTCMDS_MMC \ 133 BOOTCMDS_USB \ 134 BOOTCMDS_DHCP 135 136 #define CONFIG_BOOTCOMMAND \ 137 "for target in ${boot_targets}; do run bootcmd_${target}; done" 138 139 #endif 140 141 /* 142 * Memory layout for where various images get loaded by boot scripts: 143 * 144 * scriptaddr can be pretty much anywhere that doesn't conflict with something 145 * else. Put it above BOOTMAPSZ to eliminate conflicts. 146 * 147 * kernel_addr_r must be within the first 128M of RAM in order for the 148 * kernel's CONFIG_AUTO_ZRELADDR option to work. Since the kernel will 149 * decompress itself to 0x8000 after the start of RAM, kernel_addr_r 150 * should not overlap that area, or the kernel will have to copy itself 151 * somewhere else before decompression. Similarly, the address of any other 152 * data passed to the kernel shouldn't overlap the start of RAM. Pushing 153 * this up to 16M allows for a sizable kernel to be decompressed below the 154 * compressed load address. 155 * 156 * fdt_addr_r simply shouldn't overlap anything else. Choosing 32M allows for 157 * the compressed kernel to be up to 16M too. 158 * 159 * ramdisk_addr_r simply shouldn't overlap anything else. Choosing 33M allows 160 * for the FDT/DTB to be up to 1M, which is hopefully plenty. 161 */ 162 #define MEM_LAYOUT_ENV_SETTINGS \ 163 "scriptaddr=0x10000000\0" \ 164 "kernel_addr_r=0x01000000\0" \ 165 "fdt_addr_r=0x02000000\0" \ 166 "ramdisk_addr_r=0x02100000\0" \ 167 168 #define CONFIG_EXTRA_ENV_SETTINGS \ 169 TEGRA_DEVICE_SETTINGS \ 170 MEM_LAYOUT_ENV_SETTINGS \ 171 BOOTCMDS_COMMON 172 173 /* overrides for SPL build here */ 174 #ifdef CONFIG_SPL_BUILD 175 176 /* remove devicetree support */ 177 #ifdef CONFIG_OF_CONTROL 178 #undef CONFIG_OF_CONTROL 179 #endif 180 181 /* remove I2C support */ 182 #ifdef CONFIG_TEGRA_I2C 183 #undef CONFIG_TEGRA_I2C 184 #endif 185 #ifdef CONFIG_CMD_I2C 186 #undef CONFIG_CMD_I2C 187 #endif 188 189 /* remove MMC support */ 190 #ifdef CONFIG_MMC 191 #undef CONFIG_MMC 192 #endif 193 #ifdef CONFIG_GENERIC_MMC 194 #undef CONFIG_GENERIC_MMC 195 #endif 196 #ifdef CONFIG_TEGRA_MMC 197 #undef CONFIG_TEGRA_MMC 198 #endif 199 #ifdef CONFIG_CMD_MMC 200 #undef CONFIG_CMD_MMC 201 #endif 202 203 /* remove partitions/filesystems */ 204 #ifdef CONFIG_DOS_PARTITION 205 #undef CONFIG_DOS_PARTITION 206 #endif 207 #ifdef CONFIG_EFI_PARTITION 208 #undef CONFIG_EFI_PARTITION 209 #endif 210 #ifdef CONFIG_CMD_EXT2 211 #undef CONFIG_CMD_EXT2 212 #endif 213 #ifdef CONFIG_CMD_FAT 214 #undef CONFIG_CMD_FAT 215 #endif 216 217 /* remove USB */ 218 #ifdef CONFIG_USB_EHCI 219 #undef CONFIG_USB_EHCI 220 #endif 221 #ifdef CONFIG_USB_EHCI_TEGRA 222 #undef CONFIG_USB_EHCI_TEGRA 223 #endif 224 #ifdef CONFIG_USB_STORAGE 225 #undef CONFIG_USB_STORAGE 226 #endif 227 #ifdef CONFIG_CMD_USB 228 #undef CONFIG_CMD_USB 229 #endif 230 231 /* remove part command support */ 232 #ifdef CONFIG_PARTITION_UUIDS 233 #undef CONFIG_PARTITION_UUIDS 234 #endif 235 236 #ifdef CONFIG_CMD_PART 237 #undef CONFIG_CMD_PART 238 #endif 239 240 #endif /* CONFIG_SPL_BUILD */ 241 242 #endif /* __TEGRA_COMMON_POST_H */ 243