1 /* 2 * This file implements recording of each stage of the boot process. It is 3 * intended to implement timing of each stage, reporting this information 4 * to the user and passing it to the OS for logging / further analysis. 5 * 6 * Copyright (c) 2011 The Chromium OS Authors. 7 * See file CREDITS for list of people who contributed to this 8 * project. 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License as 12 * published by the Free Software Foundation; either version 2 of 13 * the License, or (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 23 * MA 02111-1307 USA 24 */ 25 26 #ifndef _BOOTSTAGE_H 27 #define _BOOTSTAGE_H 28 29 /* 30 * A list of boot stages that we know about. Each of these indicates the 31 * state that we are at, and the action that we are about to perform. For 32 * errors, we issue an error for an item when it fails. Therefore the 33 * normal sequence is: 34 * 35 * progress action1 36 * progress action2 37 * progress action3 38 * 39 * and an error condition where action 3 failed would be: 40 * 41 * progress action1 42 * progress action2 43 * progress action3 44 * error on action3 45 */ 46 enum bootstage_id { 47 BOOTSTAGE_ID_START = 0, 48 BOOTSTAGE_ID_CHECK_MAGIC, /* Checking image magic */ 49 BOOTSTAGE_ID_CHECK_HEADER, /* Checking image header */ 50 BOOTSTAGE_ID_CHECK_CHECKSUM, /* Checking image checksum */ 51 BOOTSTAGE_ID_CHECK_ARCH, /* Checking architecture */ 52 53 BOOTSTAGE_ID_CHECK_IMAGETYPE = 5,/* Checking image type */ 54 BOOTSTAGE_ID_DECOMP_IMAGE, /* Decompressing image */ 55 BOOTSTAGE_ID_KERNEL_LOADED, /* Kernel has been loaded */ 56 BOOTSTAGE_ID_DECOMP_UNIMPL = 7, /* Odd decompression algorithm */ 57 BOOTSTAGE_ID_CHECK_BOOT_OS, /* Calling OS-specific boot function */ 58 BOOTSTAGE_ID_BOOT_OS_RETURNED, /* Tried to boot OS, but it returned */ 59 BOOTSTAGE_ID_CHECK_RAMDISK = 9, /* Checking ram disk */ 60 61 BOOTSTAGE_ID_RD_MAGIC, /* Checking ram disk magic */ 62 BOOTSTAGE_ID_RD_HDR_CHECKSUM, /* Checking ram disk heder checksum */ 63 BOOTSTAGE_ID_RD_CHECKSUM, /* Checking ram disk checksum */ 64 BOOTSTAGE_ID_COPY_RAMDISK = 12, /* Copying ram disk into place */ 65 BOOTSTAGE_ID_RAMDISK, /* Checking for valid ramdisk */ 66 BOOTSTAGE_ID_NO_RAMDISK, /* No ram disk found (not an error) */ 67 68 BOOTSTAGE_ID_RUN_OS = 15, /* Exiting U-Boot, entering OS */ 69 70 BOOTSTAGE_ID_NEED_RESET = 30, 71 BOOTSTAGE_ID_POST_FAIL, /* Post failure */ 72 BOOTSTAGE_ID_POST_FAIL_R, /* Post failure reported after reloc */ 73 74 /* 75 * This set is reported ony by x86, and the meaning is different. In 76 * this case we are reporting completion of a particular stage. 77 * This should probably change in he x86 code (which doesn't report 78 * errors in any case), but discussion this can perhaps wait until we 79 * have a generic board implementation. 80 */ 81 BOOTSTAGE_ID_BOARD_INIT_R, /* We have relocated */ 82 BOOTSTAGE_ID_BOARD_GLOBAL_DATA, /* Global data is set up */ 83 84 BOOTSTAGE_ID_BOARD_INIT_SEQ, /* We completed the init sequence */ 85 BOOTSTAGE_ID_BOARD_FLASH, /* We have configured flash banks */ 86 BOOTSTAGE_ID_BOARD_FLASH_37, /* In case you didn't hear... */ 87 BOOTSTAGE_ID_BOARD_ENV, /* Environment is relocated & ready */ 88 BOOTSTAGE_ID_BOARD_PCI, /* PCI is up */ 89 90 BOOTSTAGE_ID_BOARD_INTERRUPTS, /* Exceptions / interrupts ready */ 91 BOOTSTAGE_ID_BOARD_DONE, /* Board init done, off to main loop */ 92 /* ^^^ here ends the x86 sequence */ 93 94 /* Boot stages related to loading a kernel from an IDE device */ 95 BOOTSTAGE_ID_IDE_START = 41, 96 BOOTSTAGE_ID_IDE_ADDR, 97 BOOTSTAGE_ID_IDE_BOOT_DEVICE, 98 BOOTSTAGE_ID_IDE_TYPE, 99 100 BOOTSTAGE_ID_IDE_PART, 101 BOOTSTAGE_ID_IDE_PART_INFO, 102 BOOTSTAGE_ID_IDE_PART_TYPE, 103 BOOTSTAGE_ID_IDE_PART_READ, 104 BOOTSTAGE_ID_IDE_FORMAT, 105 106 BOOTSTAGE_ID_IDE_CHECKSUM, /* 50 */ 107 BOOTSTAGE_ID_IDE_READ, 108 109 /* Boot stages related to loading a kernel from an NAND device */ 110 BOOTSTAGE_ID_NAND_PART, 111 BOOTSTAGE_ID_NAND_SUFFIX, 112 BOOTSTAGE_ID_NAND_BOOT_DEVICE, 113 BOOTSTAGE_ID_NAND_HDR_READ = 55, 114 BOOTSTAGE_ID_NAND_AVAILABLE = 55, 115 BOOTSTAGE_ID_NAND_TYPE = 57, 116 BOOTSTAGE_ID_NAND_READ, 117 118 /* Boot stages related to loading a kernel from an network device */ 119 BOOTSTAGE_ID_NET_CHECKSUM = 60, 120 BOOTSTAGE_ID_NET_ETH_START = 64, 121 BOOTSTAGE_ID_NET_ETH_INIT, 122 123 BOOTSTAGE_ID_NET_START = 80, 124 BOOTSTAGE_ID_NET_NETLOOP_OK, 125 BOOTSTAGE_ID_NET_LOADED, 126 BOOTSTAGE_ID_NET_DONE_ERR, 127 BOOTSTAGE_ID_NET_DONE, 128 129 BOOTSTAGE_ID_IDE_FIT_READ = 140, 130 BOOTSTAGE_ID_IDE_FIT_READ_OK, 131 132 BOOTSTAGE_ID_NAND_FIT_READ = 150, 133 BOOTSTAGE_ID_NAND_FIT_READ_OK, 134 }; 135 136 /* 137 * Board code can implement show_boot_progress() if needed. 138 * 139 * @param val Progress state (enum bootstage_id), or -id if an error 140 * has occurred. 141 */ 142 void show_boot_progress(int val); 143 static inline void show_boot_error(int val) 144 { 145 show_boot_progress(-val); 146 } 147 148 #endif 149