]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/bootstage.h
lcd: fix integer overflow in calculation of number of colors
[karo-tx-uboot.git] / include / bootstage.h
index bdda76849fb63441c264b9474ca8d71084561a13..97653602d3dd1eee50510b1d0bd57805f3f44a6a 100644 (file)
@@ -4,29 +4,14 @@
  * to the user and passing it to the OS for logging / further analysis.
  *
  * Copyright (c) 2011 The Chromium OS Authors.
- * See file CREDITS for list of people who contributed to this
- * project.
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #ifndef _BOOTSTAGE_H
 #define _BOOTSTAGE_H
 
-/* The number of boot stage records available for the user */
+/* Define this for host tools */
 #ifndef CONFIG_BOOTSTAGE_USER_COUNT
 #define CONFIG_BOOTSTAGE_USER_COUNT    20
 #endif
@@ -37,6 +22,24 @@ enum bootstage_flags {
        BOOTSTAGEF_ALLOC        = 1 << 1,       /* Allocate an id */
 };
 
+/* bootstate sub-IDs used for kernel and ramdisk ranges */
+enum {
+       BOOTSTAGE_SUB_FORMAT,
+       BOOTSTAGE_SUB_FORMAT_OK,
+       BOOTSTAGE_SUB_NO_UNIT_NAME,
+       BOOTSTAGE_SUB_UNIT_NAME,
+       BOOTSTAGE_SUB_SUBNODE,
+
+       BOOTSTAGE_SUB_CHECK,
+       BOOTSTAGE_SUB_HASH = 5,
+       BOOTSTAGE_SUB_CHECK_ARCH = 5,
+       BOOTSTAGE_SUB_CHECK_ALL,
+       BOOTSTAGE_SUB_GET_DATA,
+       BOOTSTAGE_SUB_CHECK_ALL_OK = 7,
+       BOOTSTAGE_SUB_GET_DATA_OK,
+       BOOTSTAGE_SUB_LOAD,
+};
+
 /*
  * A list of boot stages that we know about. Each of these indicates the
  * state that we are at, and the action that we are about to perform. For
@@ -83,9 +86,9 @@ enum bootstage_id {
        BOOTSTAGE_ID_POST_FAIL_R,       /* Post failure reported after reloc */
 
        /*
-        * This set is reported ony by x86, and the meaning is different. In
+        * This set is reported only by x86, and the meaning is different. In
         * this case we are reporting completion of a particular stage.
-        * This should probably change in he x86 code (which doesn't report
+        * This should probably change in the x86 code (which doesn't report
         * errors in any case), but discussion this can perhaps wait until we
         * have a generic board implementation.
         */
@@ -137,43 +140,27 @@ enum bootstage_id {
        BOOTSTAGE_ID_NET_DONE_ERR,
        BOOTSTAGE_ID_NET_DONE,
 
+       BOOTSTAGE_ID_FIT_FDT_START = 90,
        /*
         * Boot stages related to loading a FIT image. Some of these are a
         * bit wonky.
         */
-       BOOTSTAGE_ID_FIT_FORMAT = 100,
-       BOOTSTAGE_ID_FIT_NO_UNIT_NAME,
-       BOOTSTAGE_ID_FIT_UNIT_NAME,
-       BOOTSTAGE_ID_FIT_CONFIG,
-       BOOTSTAGE_ID_FIT_CHECK_SUBIMAGE,
-       BOOTSTAGE_ID_FIT_CHECK_HASH = 104,
-
-       BOOTSTAGE_ID_FIT_CHECK_ARCH,
-       BOOTSTAGE_ID_FIT_CHECK_KERNEL,
-       BOOTSTAGE_ID_FIT_CHECKED,
-
-       BOOTSTAGE_ID_FIT_KERNEL_INFO_ERR = 107,
-       BOOTSTAGE_ID_FIT_KERNEL_INFO,
+       BOOTSTAGE_ID_FIT_KERNEL_START = 100,
+
+       BOOTSTAGE_ID_FIT_CONFIG = 110,
        BOOTSTAGE_ID_FIT_TYPE,
+       BOOTSTAGE_ID_FIT_KERNEL_INFO,
 
        BOOTSTAGE_ID_FIT_COMPRESSION,
        BOOTSTAGE_ID_FIT_OS,
        BOOTSTAGE_ID_FIT_LOADADDR,
        BOOTSTAGE_ID_OVERWRITTEN,
 
-       BOOTSTAGE_ID_FIT_RD_FORMAT = 120,
-       BOOTSTAGE_ID_FIT_RD_FORMAT_OK,
-       BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME,
-       BOOTSTAGE_ID_FIT_RD_UNIT_NAME,
-       BOOTSTAGE_ID_FIT_RD_SUBNODE,
+       /* Next 10 IDs used by BOOTSTAGE_SUB_... */
+       BOOTSTAGE_ID_FIT_RD_START = 120,        /* Ramdisk stages */
 
-       BOOTSTAGE_ID_FIT_RD_CHECK,
-       BOOTSTAGE_ID_FIT_RD_HASH = 125,
-       BOOTSTAGE_ID_FIT_RD_CHECK_ALL,
-       BOOTSTAGE_ID_FIT_RD_GET_DATA,
-       BOOTSTAGE_ID_FIT_RD_CHECK_ALL_OK = 127,
-       BOOTSTAGE_ID_FIT_RD_GET_DATA_OK,
-       BOOTSTAGE_ID_FIT_RD_LOAD,
+       /* Next 10 IDs used by BOOTSTAGE_SUB_... */
+       BOOTSTAGE_ID_FIT_SETUP_START = 130,     /* x86 setup stages */
 
        BOOTSTAGE_ID_IDE_FIT_READ = 140,
        BOOTSTAGE_ID_IDE_FIT_READ_OK,
@@ -181,6 +168,7 @@ enum bootstage_id {
        BOOTSTAGE_ID_NAND_FIT_READ = 150,
        BOOTSTAGE_ID_NAND_FIT_READ_OK,
 
+       BOOTSTAGE_ID_FIT_LOADABLE_START = 160,  /* for Loadable Images */
        /*
         * These boot stages are new, higher level, and not directly related
         * to the old boot progress numbers. They are useful for recording
@@ -207,6 +195,9 @@ enum bootstage_id {
        BOOTSTAGE_ID_MAIN_CPU_READY,
 
        BOOTSTAGE_ID_ACCUM_LCD,
+       BOOTSTAGE_ID_ACCUM_SCSI,
+       BOOTSTAGE_ID_ACCUM_SPI,
+       BOOTSTAGE_ID_ACCUM_DECOMP,
 
        /* a few spare for the user, from here */
        BOOTSTAGE_ID_USER,
@@ -221,7 +212,7 @@ enum bootstage_id {
  */
 ulong timer_get_boot_us(void);
 
-#ifndef CONFIG_SPL_BUILD
+#if !defined(CONFIG_SPL_BUILD) && !defined(USE_HOSTCC)
 /*
  * Board code can implement show_boot_progress() if needed.
  *
@@ -233,9 +224,20 @@ void show_boot_progress(int val);
 #define show_boot_progress(val) do {} while (0)
 #endif
 
-#if defined(CONFIG_BOOTSTAGE) && !defined(CONFIG_SPL_BUILD)
+#if defined(CONFIG_BOOTSTAGE) && !defined(CONFIG_SPL_BUILD) && \
+       !defined(USE_HOSTCC)
 /* This is the full bootstage implementation */
 
+/**
+ * Relocate existing bootstage records
+ *
+ * Call this after relocation has happened and after malloc has been initted.
+ * We need to copy any pointers in bootstage records that were added pre-
+ * relocation, since memory can be overritten later.
+ * @return Always returns 0, to indicate success
+ */
+int bootstage_relocate(void);
+
 /**
  * Add a new bootstage record
  *
@@ -256,6 +258,19 @@ ulong bootstage_error(enum bootstage_id id);
 
 ulong bootstage_mark_name(enum bootstage_id id, const char *name);
 
+/**
+ * Mark a time stamp in the given function and line number
+ *
+ * See BOOTSTAGE_MARKER() for a convenient macro.
+ *
+ * @param file         Filename to record (NULL if none)
+ * @param func         Function name to record
+ * @param linenum      Line number to record
+ * @return recorded time stamp
+ */
+ulong bootstage_mark_code(const char *file, const char *func,
+                         int linenum);
+
 /**
  * Mark the start of a bootstage activity. The end will be marked later with
  * bootstage_accum() and at that point we accumulate the time taken. Calling
@@ -326,6 +341,11 @@ static inline ulong bootstage_add_record(enum bootstage_id id,
  * and won't even do that unless CONFIG_SHOW_BOOT_PROGRESS is defined
  */
 
+static inline int bootstage_relocate(void)
+{
+       return 0;
+}
+
 static inline ulong bootstage_mark(enum bootstage_id id)
 {
        show_boot_progress(id);
@@ -339,6 +359,13 @@ static inline ulong bootstage_error(enum bootstage_id id)
 }
 
 static inline ulong bootstage_mark_name(enum bootstage_id id, const char *name)
+{
+       show_boot_progress(id);
+       return 0;
+}
+
+static inline ulong bootstage_mark_code(const char *file, const char *func,
+                                       int linenum)
 {
        return 0;
 }
@@ -364,4 +391,8 @@ static inline int bootstage_unstash(void *base, int size)
 }
 #endif /* CONFIG_BOOTSTAGE */
 
+/* Helper macro for adding a bootstage to a line of code */
+#define BOOTSTAGE_MARKER()     \
+               bootstage_mark_code(__FILE__, __func__, __LINE__)
+
 #endif