1. 01 Feb, 2018 22 commits
    • Masahiro Yamada's avatar
      uniphier: add a helper to get image_info · 0ac60c08
      Masahiro Yamada authored
      
      
      In the next commit, I will have more usecases to get struct image_info
      from image ID.  It is better to make a helper function at a different
      layer.  I do not need the current uniphier_image_descs_fixup() since
      the code is small enough to be squashed into the caller side.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      0ac60c08
    • Masahiro Yamada's avatar
      image_decompress: add APIs for decompressing images · 2e379d2f
      Masahiro Yamada authored
      
      
      These APIs are used by platforms that need to decompress images.
      
      image_decompress_init():
        This registers a temporary buffer and a decompressor callback.
        This should be called from platform init code.
      
      image_decompress_prepare():
        This should be called before each compressed image is loaded.  The
        best location to call this will be bl*_plat_handle_pre_image_load().
      
      image_decompress():
        This should be called after each compressed image is loaded.  The
        best location to call this will be bl*_plat_handle_post_image_load().
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      2e379d2f
    • Masahiro Yamada's avatar
      bl1: add bl1_plat_handle_{pre,post}_image_load() · 11f001cb
      Masahiro Yamada authored
      
      
      Just like bl2_, add pre/post image load handlers for BL1.  No argument
      is needed since BL2 is the only image loaded by BL1.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      11f001cb
    • Masahiro Yamada's avatar
      bl2: add bl2_plat_handle_pre_image_load() · ba68ef55
      Masahiro Yamada authored
      
      
      There are cases where we need to manipulate image information before
      the load.  For example, for decompressing data, we cannot load the
      compressed images to their final destination.  Instead, we need to
      load them to the temporary buffer for the decompressor.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      ba68ef55
    • Masahiro Yamada's avatar
      plat/common: move arch-agnostic fallback functions to C file · 0fc50a86
      Masahiro Yamada authored
      
      
      When we add a new callback, we need to duplicate fallbacks among
      plat/common/{aarch32,aarch64}/platform_helpers.S  This is tedious.
      
      I created a new C file, then moved 3 functions:
        plat_error_handler
        bl2_plat_preload_setup
        plat_try_next_boot_source
      
      They are called from C, so I do not see a good reason to implement
      them in assembly.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      0fc50a86
    • Masahiro Yamada's avatar
      zlib: add gunzip() support · c43d6851
      Masahiro Yamada authored
      
      
      This commit adds some more files to use zlib from TF.
      
      To use zlib, ->zalloc and ->zfree hooks are needed.  The implementation
      depends on the system.  For user-space, the libc provides malloc() and
      friends.  Unfortunately, ARM Trusted Firmware does not provide malloc()
      or any concept of dynamic memory allocation.
      
      I implemented very simple calloc() and free() for this.  Stupidly,
      zfree() never frees memory, but it works enough for this.
      
      The purpose of using zlib is to implement gunzip() - this function
      takes compressed data from in_buf, then dumps the decompressed data
      to oub_buf.  The work_buf is used for memory allocation during the
      decompress.  Upon exit, it updates in_buf and out_buf.  If successful,
      in_buf points to the end of input data, out_buf to the end of the
      decompressed data.
      
      To use this feature, you need to do:
      
       - include lib/zlib/zlib.mk from your platform.mk
      
       - add $(ZLIB_SOURCES) to your BL*_SOURCES
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      c43d6851
    • Masahiro Yamada's avatar
      zlib: import zlib files from zlib 1.2.11 · 221b1638
      Masahiro Yamada authored
      Import the following files from zlib 1.2.11:
      
         adler32.c
         crc32.c
         crc32.h
         inffast.c
         inffast.h
         inffixed.h
         inflate.c
         inflate.h
         inftrees.c
         inftrees.h
         zconf.h
         zlib.h
         zutil.c
         zutil.h
      
      The original tarball is available from http://zlib.net/
      
      The zlib is free software, distributed under the zlib license.  The
      license text is included in the "zlib.h" file.  It should be compatible
      with BSD-3-Clause.
      
      The zlib license is included in the SPDX license list available at
      https://spdx.org/licenses/
      
      , but I did not add the SPDX license tag to
      the imported files above, to keep them as they are in the upstream
      project.  This seems the general policy for ARM Trusted Firmware, as
      SPDX License Identifier was not added to files imported from FreeBSD.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      221b1638
    • Masahiro Yamada's avatar
      Build: add GZIP compression filter · 14db8908
      Masahiro Yamada authored
      
      
      One typical usage of the pre-tool image filter is data compression,
      and GZIP is one of the most commonly used compression methods.
      I guess this is generic enough to be put in the common script instead
      of platform.mk.
      
      If you want to use this, you can add something like follows to your
      platform.mk:
      
          BL32_PRE_TOOL_FILTER := GZIP
          BL33_PRE_TOOL_FILTER := GZIP
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      14db8908
    • Masahiro Yamada's avatar
      Build: support pre-tool image processing · 2da522bb
      Masahiro Yamada authored
      
      
      There are cases where we want to process images before they are
      passed to cert_create / fiptool.
      
      My main motivation is data compression.  By compressing images, we can
      save data storage, and possibly speed up loading images.  The image
      verification will also get faster because certificates are generated
      based on compressed images.
      
      Other image transformation filters (for ex. encryption), and their
      combinations would be possible.  So, our build system should support
      transformation filters in a generic manner.
      
      The choice of applied filters is up to platforms (so specified in
      platform.mk)
      
      To define a new filter, <FILTER_NAME>_RULE and <FILTER_NAME>_SUFFIX
      are needed.
      
      For example, the GZIP compression filter can be implemented as follows:
      
      ------------------------>8------------------------
      define GZIP_RULE
      $(1): $(2)
              @echo "  GZIP    $$@"
              $(Q)gzip -n -f -9 $$< --stdout > $$@
      endef
      
      GZIP_SUFFIX := .gz
      ------------------------>8------------------------
      
      The _RULE defines how to create the target $(1) from the source $(2).
      The _SUFFIX defines the extension appended to the processed image path.
      The suffix is not so important because the file name information is not
      propagated to FIP, but adding a sensible suffix will be good to classify
      the data file.
      
      Platforms can specify which filter is applied to which BL image, like
      this:
      
      ------------------------>8------------------------
      BL32_PRE_TOOL_FILTER := GZIP
      BL33_PRE_TOOL_FILTER := GZIP
      ------------------------>8------------------------
      
      <IMAGE_NAME>_PRE_TOOL_FILTER specifies per-image filter.  With this,
      different images can be transformed differently.  For the case above,
      only BL32 and BL33 are GZIP-compressed.  Nothing is done for other
      images.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      2da522bb
    • Masahiro Yamada's avatar
      Build: change the first parameter of TOOL_ADD_IMG to lowercase · 33950dd8
      Masahiro Yamada authored
      
      
      In the next commit, I need the image name in lowercase because
      output files are generally named in lowercase.
      
      Unfortunately, TOOL_ADD_IMG takes the first argument in uppercase
      since we generally use uppercase Make variables.
      
      make_helpers/build_macros.mk provides 'uppercase' macro to convert
      a string into uppercase, but 'lowercase' does not exist.  We can
      implement it if we like, but it would be more straightforward to
      change the argument of TOOL_ADD_IMG.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      33950dd8
    • Masahiro Yamada's avatar
      Build: make tools depend on $(BIN) instead of PHONY target · 36af3455
      Masahiro Yamada authored
      
      
      The PHONY target "bl*" generate $(BIN) and $(DUMP), but host tools
      (fiptool, cert_create) only need $(BIN).
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      36af3455
    • Masahiro Yamada's avatar
      Build: remove third argument of CERT_ADD_CMD_OPT · 91704d9d
      Masahiro Yamada authored
      
      
      The third argument was given "true" by images, but it was moved
      to TOOL_ADD_PAYLOAD.  No more caller of CERT_ADD_CMD_OPT uses this.
      So, the third argument is always empty.  Remove it.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      91704d9d
    • Masahiro Yamada's avatar
      Build: rename FIP_ADD_IMG to TOOL_ADD_IMG · c939d13a
      Masahiro Yamada authored
      
      
      Now FIP_ADD_IMG takes care of both fiptool and cert_create
      symmetrically.  Rename it so that it matches the behavior.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      c939d13a
    • Masahiro Yamada's avatar
      Build: rename FIP_ADD_PAYLOAD to TOOL_ADD_PAYLOAD · 10cea934
      Masahiro Yamada authored
      
      
      Now FIP_ADD_PAYLOAD takes care of both fiptool and cert_create
      symmetrically.  Rename it so that it matches the behavior.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      10cea934
    • Masahiro Yamada's avatar
      Build: move cert_create arguments and dependency to FIP_ADD_PAYLOAD · f30ee0b9
      Masahiro Yamada authored
      
      
      The fiptool and cert_create use the same command options for images.
      It is pretty easy to handle both in the same, symmetrical way.
      
      Move CRT_ARGS and CRT_DEPS to FIP_ADD_PAYLOAD.  This refactoring makes
      sense because FIP_ADD_PAYLOAD is called from MAKE_BL (when building
      images from source), and from FIP_ADD_IMG (when including external
      images).  (FIP_ADD_PAYLOAD will be renamed later on since it now
      caters to both fiptool and cert_create).
      
      We can delete CERT_ADD_CMD_OPT for images in tbbr.mk.  It still
      needs to call CERT_ADD_CMD_OPT directly for certificates.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      f30ee0b9
    • Masahiro Yamada's avatar
      Build: rip off unneeded $(eval ...) from buid macros · 945b316f
      Masahiro Yamada authored
      
      
      The callers of these macros are supposed to use $(eval $(call, ...)).
      The $(eval ...) on the callee side is unneeded.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      945b316f
    • Masahiro Yamada's avatar
      Build: merge build macros between FIP_ and FWU_FIP_ · 1dc0714f
      Masahiro Yamada authored
      
      
      The build system supports generating two FIP images, fip and fwu_fip.
      Accordingly, we have similar build macros.
      
         FIP_ADD_PAYLOAD   <-->  FWU_FIP_ADD_PAYLOAD
         CERT_ADD_CMD_OPT  <-->  FWU_CERT_ADD_CMD_OPT
         FIP_ADD_IMG       <-->  FWU_FIP_ADD_IMG
      
      The duplicated code increases the maintenance burden.  Also, the build
      rule of BL2U looks clumsy - we want to call MAKE_BL to compile it from
      source files, but we want to put it in fwu_fip.  We can not do it in a
      single macro call since the current MAKE_BL does not support fwu_fip.
      
      To refactor those in a clean way is to support one more argument to
      specify the FIP prefix.  If it is empty, the images are targeted to
      fip, whereas if the argument is "FWU_", targeted to fwu_fip.
      
      The build macros prefixed with FWU_ go away.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      1dc0714f
    • Masahiro Yamada's avatar
      Build: squash MAKE_TOOL_ARGS into MAKE_BL · 34ec8494
      Masahiro Yamada authored
      
      
      Now, MAKE_TOOL_ARGS is only called from MAKE_BL.  Squash it.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      34ec8494
    • Masahiro Yamada's avatar
      Build: refactor BL32 build rules · 9cd15239
      Masahiro Yamada authored
      This complicated if-conditional combo was introduced by commit
      70d1fc53
      
       ("Fix build error when `BL32` is not defined") in order
      to fix the compile error of "make all" when SPD=opteed is given.
      
      The requirement for the build system is like follows:
      
       - If both BL32 and BL32_SOURCES are defined, the former takes
         precedence.
      
       - If BL32 is undefined but BL32_SOURCES is defined, we compile
         BL32 from the source files.
      
       - We want to let the build fail if neither of them is defined,
         but we want to check it only when we are building FIP.
      
      Refactor the code to not call FIP_ADD_IMG twice.  The behavior is
      still the same.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      9cd15239
    • Masahiro Yamada's avatar
      Build: replace $(call MAKE_TOOL_ARGS,...) with $(call FIP_ADD_IMG,...) · 76d27d24
      Masahiro Yamada authored
      
      
      We use $(call MAKE_TOOL_ARGS,...) or $(call FIP_ADD_IMG,...) where we
      expect externally built images.  The difference between the two is
      check_* target.  It now checks if the given path exists, so it is a
      good thing to use $(call FIP_ADD_IMG,...) in all the places.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      76d27d24
    • Masahiro Yamada's avatar
      Build: check if specified external image exists · 802d2dd2
      Masahiro Yamada authored
      
      
      check_* targets check if the required option are given, but do not
      check the validity of the argument.  If the specified file does not
      exist, let the build fail immediately instead of passing the invalid
      file path to tools.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      802d2dd2
    • davidcunado-arm's avatar
      Merge pull request #1236 from dbasehore/gic-save-restore · 334e1ceb
      davidcunado-arm authored
      RK3399 GIC save/restore
      334e1ceb
  2. 30 Jan, 2018 4 commits
  3. 29 Jan, 2018 8 commits
  4. 27 Jan, 2018 2 commits
  5. 26 Jan, 2018 2 commits
  6. 25 Jan, 2018 2 commits
    • Julius Werner's avatar
      delay_timer: Guarantee that delay time can never be undershot · e2aec918
      Julius Werner authored
      
      
      Delay functions like udelay() are often used to ensure that the
      necessary time passed to allow some asynchronous event to finish, such
      as the stabilization delay for a power rail. For these use cases it is
      not very problematic if the delay is slightly longer than requested,
      but it is critical that the delay must never be shorter.
      
      The current udelay() implementation contains two hazards that may cause
      the delay to be slightly shorter than intended: Firstly, the amount of
      ticks to wait is calculated with an integer division, which may cut off
      the last fraction of ticks needed. Secondly, the delay may be short by a
      fraction of a tick because we do not know whether the initial ("start")
      sample of the timer was near the start or near the end of the current
      tick. Thus, if the code intends to wait for one tick, it might read the
      timer value close to the end of the current tick and then read it again
      right after the start of the next tick, concluding that the duration of
      a full tick has passed when it in fact was just a fraction of it.
      
      This patch rounds up the division and always adds one extra tick to
      counteract both problems and ensure that delays will always be larger
      but never smaller than requested.
      
      Change-Id: Ic5fe5f858b5cdf3c0dbf3e488d4d5702d9569433
      Signed-off-by: default avatarJulius Werner <jwerner@chromium.org>
      e2aec918
    • davidcunado-arm's avatar
      Merge pull request #1232 from masahir0y/uniphier · f478253d
      davidcunado-arm authored
      uniphier: migrate to BL2-AT-EL3
      f478253d