18 Jan, 2020

1 commit


03 Dec, 2019

1 commit


28 Oct, 2019

4 commits

  • At present bootstage relocation assumes that it is possible to point back
    to memory available before relocation, so it does not relocate the
    strings. However this is not the case on some platforms, such as x86 which
    uses the cache as RAM and loses access to this when the cache is enabled.

    Move the relocation step to before U-Boot relocates, expand the allocated
    region to include space for the strings and relocate the strings at the
    same time as the bootstage records.

    This ensures that bootstage data can remain accessible from TPL through
    SPL to U-Boot before/after relocation.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • At present there is a single shared address for bootstage data in both
    TPL and SPL. If SPL unstashs TPL bootstage info and then stashes it again
    to pass it to U-Boot, the new stash overwrites the strings of the old
    stash.

    Fix this by duplicating the strings into the malloc() region. This should
    be a small code. Fix the header-file order at the same time.

    This problem doesn't happen at the next stage (SPL->U-Boot) since U-Boot
    relocates the boostage data.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The current code searches for empty records but these not existing with
    bootstage now. This used to be needed when bootstage records were stored
    in a spare array.

    Drop the unnecessary code and fix a code-style nit at the same time.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • When stashing bootstage info, store the next ID so that it can be used
    when the stash is restored. This avoids the ID starting at zero and
    potentially overwriting existing entries.

    Signed-off-by: Simon Glass

    Simon Glass
     

24 Apr, 2019

1 commit


07 May, 2018

1 commit

  • When U-Boot started using SPDX tags we were among the early adopters and
    there weren't a lot of other examples to borrow from. So we picked the
    area of the file that usually had a full license text and replaced it
    with an appropriate SPDX-License-Identifier: entry. Since then, the
    Linux Kernel has adopted SPDX tags and they place it as the very first
    line in a file (except where shebangs are used, then it's second line)
    and with slightly different comment styles than us.

    In part due to community overlap, in part due to better tag visibility
    and in part for other minor reasons, switch over to that style.

    This commit changes all instances where we have a single declared
    license in the tag as both the before and after are identical in tag
    contents. There's also a few places where I found we did not have a tag
    and have introduced one.

    Signed-off-by: Tom Rini

    Tom Rini
     

05 Mar, 2018

1 commit

  • Thomas reported U-Boot failed to build host tools if libfdt-devel
    package is installed because tools include libfdt headers from
    /usr/include/ instead of using internal ones.

    This commit moves the header code:
    include/libfdt.h -> include/linux/libfdt.h
    include/libfdt_env.h -> include/linux/libfdt_env.h

    and replaces include directives:
    #include -> #include
    #include -> #include

    Reported-by: Thomas Petazzoni
    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

16 Sep, 2017

2 commits


06 Jun, 2017

9 commits

  • There are a few places that should use const *, such as
    bootstage_unstash(). Update these to make it clearer when parameters are
    changed.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • We should return a proper error number instead of just -1. This helps the
    caller to determine what when wrong. Update a few functions to fix this.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Some boards cannot access pre-relocation data after relocation. Reserve
    space for this and copy it during preparation for relocation.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • We don't normally want to see these messages. Change them to debug-only.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • We can now use the record count to determine whether a record is valid or
    not. Drop the test for a zero time.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • At present bootstage has a large array with all possible bootstage IDs
    recorded. It adds times to the array element indexed by the ID. This is
    inefficient because many IDs are not used during boot. We can save space
    by only recording those IDs which actually have timestamps.

    Update the array to use a record count, which increments with each
    addition of a new timestamp. This takes longer to record a time, since it
    may involve an array search. Such a search may be particularly expensive
    before relocation when the CPU is running slowly or the cache is off. But
    at that stage there should be very few records.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • There are several code style and comment nits. Fix them and also remove
    the comment about passing bootstage to the kernel being TBD. This is
    already supported.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • At present bootstage uses the data section of the image to store its
    information. There are a few problems with this:

    - It does not work on all boards (e.g. those which run from flash before
    relocation)
    - Allocated strings still point back to the pre-relocation data after
    relocation

    Now that U-Boot has a pre-relocation malloc() we can use this instead,
    with a pointer to the data in global_data. Update bootstage to do this and
    set up an init routine to allocate the memory.

    Now that we have a real init function, we can drop the fake 'reset' record
    and add a normal one instead.

    Note that part of the problem with allocated strings remains. They are
    reallocated but this will only work where pre-relocation memory is
    accessible after relocation.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • At present we provide a default version of this function for use by
    bootstage. However it uses the system timer and therefore likely requires
    driver model. This makes it impossible to time driver-model init.

    Drop the function and require boards to provide their own. Add a sandbox
    version also. There is a default implememtation in lib/time.c for boards
    which use CONFIG_SYS_TIMER_COUNTER.

    Signed-off-by: Simon Glass

    Simon Glass
     

24 Jul, 2013

1 commit


26 Jun, 2013

2 commits


14 May, 2013

2 commits

  • Add a function which allows a (file, function, line number) to be marked
    in bootstage.

    Signed-off-by: Simon Glass
    Reviewed-by: Che-Liang Chiou

    Simon Glass
     
  • Any pointers to name strings that were passed to bootstage_mark_name()
    pre-relocation should be copied post-relocation so that they don't get
    trashed as the original location of U-Boot is re-used for other
    purposes.

    This change introduces a new API call that should be called from
    board_init_r() after malloc has been initted on any board that uses
    bootstage.

    Signed-off-by: Doug Anderson
    Signed-off-by: Simon Glass
    Reviewed-by: Simon Glass

    Doug Anderson
     

03 Oct, 2012

4 commits

  • It is useful to be able to write the bootstage information to memory for
    use by a later utility, or the Linux kernel. Provide a function to do
    this as well as a function to read bootstage information back and incorporate
    it into the current table.

    This also makes it possible for U-Boot to chain to another U-Boot and pass
    on its bootstage information.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add an option, CONFIG_BOOTSTAGE_FDT to pass boot timings to the kernel
    in the device tree, if available. To use this, you must have
    CONFIG_OF_LIBFDT defined.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Sometimes we want to add up the amount of time spent in a particular
    activity when it is happening in a number of discrete chunks.

    Add bootstage_start() to mark the start of an acitivity and
    bootstage_accum() to accumulate the time since the last start. Calling
    these function in pairs results in the accumulated time being collected.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • This function is not static, but not exported either. Add a prototype
    in the header file and move the required enum to the header also.

    Signed-off-by: Simon Glass

    Simon Glass
     

11 Apr, 2012

1 commit

  • The standalone example does not have get_timer() defined, so we cannot
    rely on it being available.

    Move the timer function into boootstage.c to avoid this problem.

    This corrects a build breakage for the standalone example on some boards.

    Signed-off-by: Simon Glass
    Acked-by: Matthias Fuchs

    Simon Glass
     

19 Mar, 2012

1 commit

  • This defines the basics of a new boot time measurement feature. This allows
    logging of very accurate time measurements as the boot proceeds, by using
    an available microsecond counter.

    To enable the feature, define CONFIG_BOOTSTAGE in your board config file.
    Also available is CONFIG_BOOTSTAGE_REPORT which will cause a report to be
    printed just before handing off to the OS.

    Most IDs are not named at this stage. For that I would first like to
    renumber them all.

    Timer summary in microseconds:
    Mark Elapsed Stage
    0 0 reset
    205,000 205,000 board_init_f
    6,053,000 5,848,000 bootm_start
    6,053,000 0 id=1
    6,058,000 5,000 id=101
    6,058,000 0 id=100
    6,061,000 3,000 id=103
    6,064,000 3,000 id=104
    6,093,000 29,000 id=107
    6,093,000 0 id=106
    6,093,000 0 id=105
    6,093,000 0 id=108
    7,089,000 996,000 id=7
    7,089,000 0 id=15
    7,089,000 0 id=8
    7,097,000 8,000 start_kernel

    Signed-off-by: Simon Glass

    Simon Glass