1. 15 Aug, 2017 1 commit
    • Julius Werner's avatar
      Add new alignment parameter to func assembler macro · 64726e6d
      Julius Werner authored
      
      
      Assembler programmers are used to being able to define functions with a
      specific aligment with a pattern like this:
      
          .align X
        myfunction:
      
      However, this pattern is subtly broken when instead of a direct label
      like 'myfunction:', you use the 'func myfunction' macro that's standard
      in Trusted Firmware. Since the func macro declares a new section for the
      function, the .align directive written above it actually applies to the
      *previous* section in the assembly file, and the function it was
      supposed to apply to is linked with default alignment.
      
      An extreme case can be seen in Rockchip's plat_helpers.S which contains
      this code:
      
        [...]
        endfunc plat_crash_console_putc
      
        .align 16
        func platform_cpu_warmboot
        [...]
      
      This assembles into the following plat_helpers.o:
      
        Sections:
        Idx Name                             Size  [...]  Algn
         9 .text.plat_crash_console_putc 00010000  [...]  2**16
        10 .text.platform_cpu_warmboot   00000080  [...]  2**3
      
      As can be seen, the *previous* function actually got the alignment
      constraint, and it is also 64KB big even though it contains only two
      instructions, because the .align directive at the end of its section
      forces the assembler to insert a giant sled of NOPs. The function we
      actually wanted to align has the default constraint. This code only
      works at all because the linker just happens to put the two functions
      right behind each other when linking the final image, and since the end
      of plat_crash_console_putc is aligned the start of platform_cpu_warmboot
      will also be. But it still wastes almost 64KB of image space
      unnecessarily, and it will break under certain circumstances (e.g. if
      the plat_crash_console_putc function becomes unused and its section gets
      garbage-collected out).
      
      There's no real way to fix this with the existing func macro. Code like
      
       func myfunc
       .align X
      
      happens to do the right thing, but is still not really correct code
      (because the function label is inserted before the .align directive, so
      the assembler is technically allowed to insert padding at the beginning
      of the function which would then get executed as instructions if the
      function was called). Therefore, this patch adds a new parameter with a
      default value to the func macro that allows overriding its alignment.
      
      Also fix up all existing instances of this dangerous antipattern.
      
      Change-Id: I5696a07e2fde896f21e0e83644c95b7b6ac79a10
      Signed-off-by: default avatarJulius Werner <jwerner@chromium.org>
      64726e6d
  2. 14 Aug, 2017 5 commits
  3. 09 Aug, 2017 3 commits
    • Edison Ai's avatar
      Support paging function for OPTEE. · d59a6acc
      Edison Ai authored
      
      
      ARM TF need transfer information about pageable image load address
      and memory limit to OPTEE. OPTEE will relocate the pageable image
      to where it's needed.
      The legacy OP-TEE images that do not include header information
      are not affected.
      
      Change-Id: Id057efbbc894de7c36b2209b391febea4729c455
      Signed-off-by: default avatarEdison Ai <edison.ai@arm.com>
      d59a6acc
    • Summer Qin's avatar
      Add Trusted OS extra image parsing support for ARM standard platforms · 54661cd2
      Summer Qin authored
      
      
      Trusted OS may have extra images to be loaded. Load them one by one
      and do the parsing. In this patch, ARM TF need to load up to 3 images
      for optee os: header, pager and paged images. Header image is the info
      about optee os and images. Pager image include pager code and data.
      Paged image include the paging parts using virtual memory.
      
      Change-Id: Ia3bcfa6d8a3ed7850deb5729654daca7b00be394
      Signed-off-by: default avatarSummer Qin <summer.qin@arm.com>
      54661cd2
    • Summer Qin's avatar
      Support Trusted OS firmware extra images in TF tools · 71fb3964
      Summer Qin authored
      
      
      Since Trusted OS firmware may have extra images, need to
      assign new uuid and image id for them.
      The TBBR chain of trust has been extended to add support
      for the new images within the existing Trusted OS firmware
      content certificate.
      
      Change-Id: I678dac7ba1137e85c5779b05e0c4331134c10e06
      Signed-off-by: default avatarSummer Qin <summer.qin@arm.com>
      71fb3964
  4. 08 Aug, 2017 1 commit
  5. 04 Aug, 2017 1 commit
  6. 03 Aug, 2017 2 commits
  7. 02 Aug, 2017 2 commits
    • Douglas Raillard's avatar
      Fix BL2U entrypoint possible parameter corruption · 5c2c88b5
      Douglas Raillard authored
      
      
      Replace the use of r12 by r10 to save the value of a parameter of
      bl2u_entrypoint to pass it to bl2u_early_platform_setup at the end of
      the function. r10 is a callee saved register so it will not become
      corrupted by C code, whereas r12 is the The Intra-Procedure-call scratch
      register potentially used by veneers. See the ARM AAPCS document (ARM
      IHI 0042F).
      
      Change-Id: I4f37e54a6b550719edb40bb24cd8f498827e2749
      Signed-off-by: default avatarDouglas Raillard <douglas.raillard@arm.com>
      5c2c88b5
    • Jeenu Viswambharan's avatar
      FVP: Support Base FVP RevC · 955242d8
      Jeenu Viswambharan authored
      
      
      Revision C of the Base FVP has the same memory map as earlier revisions,
      but has the following differences:
      
        - Implements CCI550 instead of CCI400,
        - Has a single instantiation of SMMUv3,
        - CPU MPIDs are shifted left by one level, and has MT bit set in them.
      
      The correct interconnect to program is chosen at run time based on the
      FVP revision. Therefore, this patch implements FVP functions for
      interconnect programming, rather than depending on ARM generic ones. The
      macros used have been renamed to reflect this change.
      
      Additionally, this patch initializes SMMUv3 as part of FVP early
      platform setup.
      
      New ARM config flags are introduced for feature queries at run time.
      
      Change-Id: Ic7b7f080953a51fceaf62ce7daa6de0573801f09
      Signed-off-by: default avatarJeenu Viswambharan <jeenu.viswambharan@arm.com>
      955242d8
  8. 01 Aug, 2017 11 commits
  9. 31 Jul, 2017 9 commits
  10. 26 Jul, 2017 5 commits
    • Masahiro Yamada's avatar
      fiptool: remove unneeded -I. include path · 5954298d
      Masahiro Yamada authored
      
      
      All local headers in tools/fiptool are included by #include "..."
      notation instead of #include <...>, so there is no need to add the
      local directory to to the header search path.
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      5954298d
    • davidcunado-arm's avatar
      Merge pull request #1032 from soby-mathew/sm/css_scp_reorg · 401e4911
      davidcunado-arm authored
      Reorganise CSS SCP bootloader layer
      401e4911
    • davidcunado-arm's avatar
      Merge pull request #1031 from robertovargas-arm/assert_format · 881cf374
      davidcunado-arm authored
      Use standard UNIX file:line format in assert
      881cf374
    • David Cunado's avatar
      Address edge case for stale PSCI CPU data in cache · 71341d23
      David Cunado authored
      
      
      There is a theoretical edge case during CPU_ON where the cache
      may contain stale data for the target CPU data - this can occur
      under the following conditions:
      
      - the target CPU is in another cluster from the current
      - the target CPU was the last CPU to shutdown on its cluster
      - the cluster was removed from coherency as part of the CPU shutdown
      
      In this case the cache maintenace that was performed as part of the
      target CPUs shutdown was not seen by the current CPU's cluster. And
      so the cache may contain stale data for the target CPU.
      
      This patch adds a cache maintenance operation (flush) for the
      cache-line containing the target CPU data - this ensures that the
      target CPU data is read from main memory.
      
      Change-Id: If8cfd42639b03174f60669429b7f7a757027d0fb
      Signed-off-by: default avatarDavid Cunado <david.cunado@arm.com>
      71341d23
    • Sandrine Bailleux's avatar
      Emphasize that TF only supports 4 KB granule size · de3d704d
      Sandrine Bailleux authored
      
      
      At the moment, various parts of the Trusted Firmware code assume
      that the granule size used is 4 KB. For example, the linker scripts
      enforce 4 KB alignment restrictions on some sections.
      
      However, the ARMv8-A architecture allows 16 KB and 64 KB granule
      sizes as well. Some other parts of the TF code, particularly the
      architectural code and definitions, have been implemented with
      this in mind and cater for all 3 cases.
      
      This discrepancy creates some confusion as to what is effectively
      supported in TF. This patch adds some code comments and clarification
      in the documentation to make this limitation clearer.
      
      Change-Id: I1f202369b240d8bed9d43d57ecd2a548c86c8598
      Signed-off-by: default avatarSandrine Bailleux <sandrine.bailleux@arm.com>
      de3d704d