1. 08 Jul, 2016 1 commit
    • Sandrine Bailleux's avatar
      xlat lib: Refactor mmap_desc() function · bcbe19af
      Sandrine Bailleux authored
      This patch clarifies the mmap_desc() function by adding some comments
      and reorganising its code. No functional change has been introduced.
      
      Change-Id: I873493be17b4e60a89c1dc087dd908b425065401
      bcbe19af
  2. 26 Apr, 2016 1 commit
    • Sandrine Bailleux's avatar
      Fix computation of L1 bitmask in the translation table lib · aa447b9c
      Sandrine Bailleux authored
      This patch fixes the computation of the bitmask used to isolate
      the level 1 field of a virtual address. The whole computation needs
      to work on 64-bit values to produce the correct bitmask value.
      XLAT_TABLE_ENTRIES_MASK being a C constant, it is a 32-bit value
      so it needs to be extended to a 64-bit value before it takes part
      in any other computation.
      
      This patch fixes this bug by casting XLAT_TABLE_ENTRIES_MASK as
      an unsigned long long.
      
      Note that this bug doesn't manifest itself in practice because
      address spaces larger than 39 bits are not yet supported in the
      Trusted Firmware.
      
      Change-Id: I955fd263ecb691ca94b29b9c9f576008ce1d87ee
      aa447b9c
  3. 15 Apr, 2016 1 commit
    • Antonio Nino Diaz's avatar
      Limit support for region overlaps in xlat_tables · e1ea9290
      Antonio Nino Diaz authored
      The only case in which regions can now overlap is if they are
      identity mapped or they have the same virtual to physical address
      offset (identity mapping is just a particular case of the latter).
      They must overlap completely (i.e. one of them must be completely
      inside the other one) and not cover the same area.
      
      This allow future enhancements to the xlat_tables library without
      having to support unnecessarily complex edge cases.
      
      Outer regions are now sorted by mmap_add_region() before inner
      regions with the same base virtual address for consistency: all
      regions contained inside another one must be placed after the outer
      one in the list.
      
      If an inner region has the same attributes as the outer ones it will
      be merged when creating the tables with init_xlation_table(). This
      cannot be done as regions are added because there may be cases where
      adding a region makes previously mergeable regions no longer
      mergeable.
      
      If the attributes of an inner region are different than the outer
      region, new pages will be generated regardless of how "restrictive"
      they are. For example, RO memory is more restrictive than RW. The
      old implementation would give priority to RO if there is an overlap,
      the new one doesn't.
      
      NOTE: THIS IS THEORETICALLY A COMPATABILITY BREAK FOR PLATFORMS THAT
      USE THE XLAT_TABLES LIBRARY IN AN UNEXPECTED WAY. PLEASE RAISE A
      TF-ISSUE IF YOUR PLATFORM IS AFFECTED.
      
      Change-Id: I75fba5cf6db627c2ead70da3feb3cc648c4fe2af
      e1ea9290
  4. 13 Apr, 2016 1 commit
    • Soby Mathew's avatar
      Refactor the xlat_tables library code · 3ca9928d
      Soby Mathew authored
      The AArch32 long descriptor format and the AArch64 descriptor format
      correspond to each other which allows possible sharing of xlat_tables
      library code between AArch64 and AArch32. This patch refactors the
      xlat_tables library code to seperate the common functionality from
      architecture specific code. Prior to this patch, all of the xlat_tables
      library code were in `lib/aarch64/xlat_tables.c` file. The refactored code
      is now in `lib/xlat_tables/` directory. The AArch64 specific programming
      for xlat_tables is in `lib/xlat_tables/aarch64/xlat_tables.c` and the rest
      of the code common to AArch64 and AArch32 is in
      `lib/xlat_tables/xlat_tables_common.c`. Also the data types used in
      xlat_tables library APIs are reworked to make it compatible between AArch64
      and AArch32.
      
      The `lib/aarch64/xlat_tables.c` file now includes the new xlat_tables
      library files to retain compatibility for existing platform ports.
      The macros related to xlat_tables library are also moved from
      `include/lib/aarch64/arch.h` to the header `include/lib/xlat_tables.h`.
      
      NOTE: THE `lib/aarch64/xlat_tables.c` FILE IS DEPRECATED AND PLATFORM PORTS
      ARE EXPECTED TO INCLUDE THE NEW XLAT_TABLES LIBRARY FILES IN THEIR MAKEFILES.
      
      Change-Id: I3d17217d24aaf3a05a4685d642a31d4d56255a0f
      3ca9928d