19 Feb, 2018

1 commit

  • Only ARM and in some configs MIPS really implement arch_fixup_fdt().
    Others just use the same boilerplate which is not good by itself,
    but what's worse if we try to build with disabled CONFIG_CMD_BOOTM
    and enabled CONFIG_OF_LIBFDT we'll hit an unknown symbol which was
    apparently implemented in arch/xxx/lib/bootm.c.

    Now with weak arch_fixup_fdt() right in image-fdt.c where it is
    used we get both items highlighted above fixed.

    Signed-off-by: Alexey Brodkin
    Cc: Daniel Schwierzeck
    Cc: Simon Glass
    Cc: York Sun
    Cc: Stefan Roese
    Reviewed-by: Tom Rini
    Reviewed-by: Daniel Schwierzeck

    Alexey Brodkin
     

26 Jan, 2018

6 commits


24 Jan, 2018

11 commits


29 Nov, 2017

4 commits

  • If we run on a CPU which doesn't implement a particular cache then we
    would previously get stuck in an infinite loop, executing a cache op on
    the first "line" of the missing cache & then incrementing the address by
    0. This was being avoided for the L2 caches, but not for the L1s. Fix
    this by generalising the check for a zero line size & avoiding the cache
    op loop when this is the case.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck
    Cc: u-boot@lists.denx.de

    Paul Burton
     
  • When writing code, for example during relocation, we ensure that the
    icache has a coherent view of the new instructions with a call to
    flush_cache(). This handles the bulk of the work to ensure the new
    instructions will execute as expected, however it does not ensure that
    the CPU pipeline doesn't already contain instructions taken from a stale
    view of the affected memory. This could theoretically be a problem for
    relocation, but in practice typically isn't because we sync caches for
    enough code after the entry point of the newly written code that by the
    time the CPU pipeline might possibly fetch any of it we'll have long ago
    written it back & invalidated any stale icache entries. This is however
    a problem for shorter regions of code.

    In preparation for later patches which write shorter segments of code,
    ensure any instruction hazards are cleared by flush_cache() by
    introducing & using a new instruction_hazard_barrier() function which
    makes use of the jr.hb instruction to clear the hazard.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck
    Cc: u-boot@lists.denx.de

    Paul Burton
     
  • A typical use of cache maintenance functions is to force writeback of
    data which a device is about to read using DMA - for example a
    descriptor or command structure. Such users of cache maintenance
    functions require that operations on the cache have completed before
    they proceed to instruct a device to read memory. This requires that we
    place a completion barrier (ie. sync instruction) between the cache ops
    and whatever write informs the device to perform DMA.

    Whilst strictly speaking this isn't all users of the cache maintenance
    functions & we could instead place the barriers in the drivers that
    require them, it would be much more invasive to do so than to just have
    the barrier be the default by placing it in the cache functions
    themselves. The cost is low enough that it shouldn't matter to us in any
    rare cases that we use the cache functions when not performing DMA.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck
    Cc: u-boot@lists.denx.de

    Paul Burton
     
  • The u-boot.lds linker script for MIPS defines a PTR_COUNT_SHIFT macro to
    2 or 3 for 32 bit or 64 bit builds respectively. This macro is never
    actually used though, so remove the dead code.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck

    Paul Burton
     

03 Oct, 2017

1 commit

  • Convert the mips architecture to make use of the new asm-generic/io.h to
    provide address mapping functions. As mips actually performs
    non-identity mapping between physical & virtual addresses we can't
    simply make use of the generic functions, with the exception of being
    able to drop our no-op unmap_physmem() and definitions of unused map
    flags.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck
    Reviewed-by: Daniel Schwierzeck
    Acked-by: Daniel Schwierzeck

    Paul Burton
     

16 Aug, 2017

2 commits

  • We are now using an env_ prefix for environment functions. Rename these
    two functions for consistency. Also add function comments in common.h.

    Quite a few places use getenv() in a condition context, provoking a
    warning from checkpatch. These are fixed up in this patch also.

    Suggested-by: Wolfgang Denk
    Signed-off-by: Simon Glass

    Simon Glass
     
  • At present we support multiple environment drivers but there is not way to
    select between them at run time. Also settings related to the position and
    size of the environment area are global (i.e. apply to all locations).

    Until these limitations are removed we cannot really support more than one
    environment location. Adjust the location to be a choice so that only one
    can be selected. By default the environment is 'nowhere', meaning that the
    environment exists only in memory and cannot be saved.

    Also expand the help for the 'nowhere' option and move it to the top since
    it is the default.

    Signed-off-by: Simon Glass
    [trini: Move all of the imply logic to default X if Y so it works again]
    Signed-off-by: Tom Rini

    Simon Glass
     

27 Jul, 2017

1 commit

  • Some platforms have very limited SRAM to run SPL code, so there may
    not be the same amount space for a malloc pool before relocation in
    the SPL stage as the normal U-Boot stage.

    Make SPL and (the full) U-Boot stage use independent SYS_MALLOC_F_LEN,
    so the size of pre-relocation malloc pool can be configured memory
    space independently.

    Signed-off-by: Andy Yan
    Acked-by: Daniel Schwierzeck
    Acked-by: Philipp Tomsich
    Reviewed-by: Philipp Tomsich
    [fixed up commit-message:]
    Signed-off-by: Philipp Tomsich

    Andy Yan
     

26 Jul, 2017

5 commits

  • Tom Rini
     
  • This converts the following to Kconfig:
    CONFIG_ENV_IS_IN_FLASH

    Signed-off-by: Simon Glass

    Simon Glass
     
  • This converts the following to Kconfig:
    CONFIG_ENV_IS_IN_MMC
    CONFIG_ENV_IS_IN_NAND
    CONFIG_ENV_IS_IN_UBI
    CONFIG_ENV_IS_NOWHERE

    In fact this already exists for sunxi as a 'choice' config. However not
    all the choices are available in Kconfig yet so we cannot use that. It
    would lead to more than one option being set.

    In addition, one purpose of this series is to allow the environment to be
    stored in more than one place. So the existing choice is converted to a
    normal config allowing each option to be set independently.

    There are not many opportunities for Kconfig updates to reduce the size of
    this patch. This was tested with

    ./tools/moveconfig.py -i CONFIG_ENV_IS_IN_MMC

    And then manual updates. This is because for CHAIN_OF_TRUST boards they
    can only have ENV_IS_NOWHERE set, so we enforce that via Kconfig logic
    now.

    Signed-off-by: Simon Glass
    Signed-off-by: Tom Rini

    Simon Glass
     
  • This patch fixes 2 bugs introduced by the following commit

    2bb5b63 MIPS: bootm: rework and fix broken bootm code

    The CONFIG_IS_ENABLED macro prepends 'CONFIG_' Hence, remove CONFIG_
    from CONFIG_MIPS_BOOT_ENV_LEGACY usage.

    Also, 2bb5b63 reworks bootm so that linux_env_legacy runs before
    linux_cmdline_legacy. However, linux_env_legacy depends on
    linux_cmdline_legacy running first as linux_cmdline_init initialilzes
    linux_argp which linux_env_legacy later depends on during its
    initialization.

    Reorder the code so that linux_cmdline_legacy runs before
    linux_env_legacy.

    Signed-off-by: Zubair Lutfullah Kakakhel

    Zubair Lutfullah Kakakhel
     
  • U-Boot has up until now built with -fpic for the MIPS architecture,
    producing position independent code which uses indirection through a
    global offset table, making relocation fairly straightforward as it
    simply involves patching up GOT entries.

    Using -fpic does however have some downsides. The biggest of these is
    that generated code is bloated in various ways. For example, function
    calls are indirected through the GOT & the t9 register:

    8f998064 lw t9,-32668(gp)
    0320f809 jalr t9

    Without -fpic the call is simply:

    0f803f01 jal be00fc04

    This is more compact & faster (due to the lack of the load & the
    dependency the jump has on its result). It is also easier to read &
    debug because the disassembly shows what function is being called,
    rather than just an offset from gp which would then have to be looked up
    in the ELF to discover the target function.

    Another disadvantage of -fpic is that each function begins with a
    sequence to calculate the value of the gp register, for example:

    3c1c0004 lui gp,0x4
    279c3384 addiu gp,gp,13188
    0399e021 addu gp,gp,t9

    Without using -fpic this sequence no longer appears at the start of each
    function, reducing code size considerably.

    This patch switches U-Boot from building with -fpic to building with
    -fno-pic, in order to gain the benefits described above. The cost of
    this is an extra step during the build process to extract relocation
    data from the ELF & write it into a new .rel section in a compact
    format, plus the added complexity of dealing with multiple types of
    relocation rather than the single type that applied to the GOT. The
    benefit is smaller, cleaner, more debuggable code. The relocate_code()
    function is reimplemented in C to handle the new relocation scheme,
    which also makes it easier to read & debug.

    Taking maltael_defconfig as an example the size of u-boot.bin built
    using the Codescape MIPS 2016.05-06 toolchain (gcc 4.9.2, binutils
    2.24.90) shrinks from 254KiB to 224KiB.

    Signed-off-by: Paul Burton
    Cc: Daniel Schwierzeck
    Cc: u-boot@lists.denx.de
    Reviewed-by: Daniel Schwierzeck
    Tested-by: Daniel Schwierzeck

    Paul Burton
     

05 Jun, 2017

1 commit


31 May, 2017

8 commits