1. 20 Jan, 2020 4 commits
    • Lionel Debieve's avatar
      Add SPI-NOR framework · a13550d0
      Lionel Debieve authored
      
      
      SPI-NOR framework is based on SPI-MEM framework using
      spi_mem_op execution interface.
      
      It implements read functions and allows NOR configuration
      up to quad mode.
      Default management is 1 data line but it can be overridden
      by platform.
      It also includes specific quad mode configuration for
      Spansion, Micron and Macronix memories.
      
      Change-Id: If49502b899b4a75f6ebc3190f6bde1013651197f
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      Signed-off-by: default avatarChristophe Kerello <christophe.kerello@st.com>
      a13550d0
    • Lionel Debieve's avatar
      Add SPI-NAND framework · c3e57739
      Lionel Debieve authored
      
      
      This framework supports SPI-NAND and is based on the
      SPI-MEM framework for SPI operations. It uses a common high
      level access using the io_mtd.
      
      It is limited to the read functionalities.
      
      Default behavior is the basic one data line operation
      but it could be overridden by platform.
      
      Change-Id: Icb4e0887c4003a826f47c876479dd004a323a32b
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      Signed-off-by: default avatarChristophe Kerello <christophe.kerello@st.com>
      c3e57739
    • Lionel Debieve's avatar
      Add SPI-MEM framework · 05e6a563
      Lionel Debieve authored
      
      
      This framework supports SPI operations using a common
      spi_mem_op structure:
       - command
       - addr
       - dummy
       - data
      
      The framework manages SPI bus configuration:
       - speed
       - bus width (Up to quad mode)
       - chip select
      
      Change-Id: Idc2736c59bfc5ac6e55429eba5d385275ea3fbde
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      Signed-off-by: default avatarChristophe Kerello <christophe.kerello@st.com>
      05e6a563
    • Lionel Debieve's avatar
      Add raw NAND framework · b114abb6
      Lionel Debieve authored
      
      
      The raw NAND framework supports SLC NAND devices.
      
      It introduces a new high level interface (io_mtd) that
      defines operations a driver can register to the NAND framework.
      This interface will fill in the io_mtd device specification:
      	- device_size
              - erase_size
      that could be used by the io_storage interface.
      
      NAND core source file integrates the standard read loop that
      performs NAND device read operations using a skip bad block strategy.
      A platform buffer must be defined in case of unaligned
      data. This buffer must fit to the maximum device page size
      defined by PLATFORM_MTD_MAX_PAGE_SIZE.
      
      The raw_nand.c source file embeds the specific NAND operations
      to read data.
      The read command is a raw page read without any ECC correction.
      This can be overridden by a low level driver.
      No generic support for write or erase command or software
      ECC correction.
      
      NAND ONFI detection is available and can be enabled using
      NAND_ONFI_DETECT=1.
      For non-ONFI NAND management, platform can define required
      information.
      
      Change-Id: Id80e9864456cf47f02b74938cf25d99261da8e82
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      Signed-off-by: default avatarChristophe Kerello <christophe.kerello@st.com>
      b114abb6
  2. 10 Jan, 2020 2 commits
    • Yann Gautier's avatar
      io: change seek offset to signed long long · 70cb0bff
      Yann Gautier authored
      
      
      IO seek offset can be set to values above UINT32_MAX, this change
      changes the seek offset argument from 'ssize_t' to 'signed long long'.
      Fixing platform seek functions to match the new interface update.
      
      Change-Id: I25de83b3b7abe5f52a7b0fee36f71e60cac9cfcb
      Signed-off-by: default avatarYann Gautier <yann.gautier@st.com>
      Signed-off-by: default avatarEtienne Carriere <etienne.carriere@st.com>
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      70cb0bff
    • Deepika Bhavnani's avatar
      Unify type of "cpu_idx" across PSCI module. · 5b33ad17
      Deepika Bhavnani authored
      
      
      NOTE for platform integrators:
         API `plat_psci_stat_get_residency()` third argument
         `last_cpu_idx` is changed from "signed int" to the
         "unsigned int" type.
      
      Issue / Trouble points
      1. cpu_idx is used as mix of `unsigned int` and `signed int` in code
      with typecasting at some places leading to coverity issues.
      
      2. Underlying platform API's return cpu_idx as `unsigned int`
      and comparison is performed with platform specific defines
      `PLAFORM_xxx` which is not consistent
      
      Misra Rule 10.4:
      The value of a complex expression of integer type may only be cast to
      a type that is narrower and of the same signedness as the underlying
      type of the expression.
      
      Based on above points, cpu_idx is kept as `unsigned int` to match
      the API's and low-level functions and platform defines are updated
      where ever required
      Signed-off-by: default avatarDeepika Bhavnani <deepika.bhavnani@arm.com>
      Change-Id: Ib26fd16e420c35527204b126b9b91e8babcc3a5c
      5b33ad17
  3. 09 Jan, 2020 1 commit
  4. 06 Jan, 2020 1 commit
  5. 03 Jan, 2020 1 commit
    • Vishnu Banavath's avatar
      drivers: add a driver for snoop control unit · c20c0525
      Vishnu Banavath authored
      
      
      The SCU connects one to four Cortex-A5/Cortex-A9 processors
      to the memory system through the AXI interfaces.
      
      The SCU functions are to:
      - maintain data cache coherency between the Cortex-A5/Cortex-A9
        processors
      - initiate L2 AXI memory accesses
      - arbitrate between Cortex-A5/Cortex-A9 processors requesting
        L2 accesses
      - manage ACP accesses.
      
      Snoop Control Unit will enable to snoop on other CPUs caches.
      This is very important when it comes to synchronizing data between
      CPUs. As an example, there is a high chance that data might be
      cache'd and other CPUs can't see the change. In such cases,
      if snoop control unit is enabled, data is synchoronized immediately
      between CPUs and the changes are visible to other CPUs.
      
      This driver provides functionality to enable SCU as well as enabling
      user to know the following
      - number of CPUs present
      - is a particular CPU operating in SMP mode or AMP mode
      - data cache size of a particular CPU
      - does SCU has ACP port
      - is L2CPRESENT
      
      Change-Id: I0d977970154fa60df57caf449200d471f02312a0
      Signed-off-by: default avatarVishnu Banavath <vishnu.banavath@arm.com>
      c20c0525
  6. 30 Dec, 2019 1 commit
    • Andre Przywara's avatar
      console: 16550: Prepare for skipping initialisation · cd50ffd2
      Andre Przywara authored
      
      
      On some platforms the UART might have already been initialised, for
      instance by firmware running before TF-A or by a separate management
      processor. In this case it would not be need to initialise it again
      (doing so could create spurious characters). But more importantly this
      saves us from knowing the right baudrate and the right base clock rate
      for the UART. This can lead to more robust and versatile firmware builds.
      
      Allow to skip the 16550 UART initialisation and baud rate divisor
      programming, by interpreting an input clock rate of "0" to signify this
      case. This will just skip the call to console_16550_core_init, but still
      will register the console properly.
      
      Users should just pass 0 as the second parameter, the baudrate (third
      parameter) will then be ignored as well.
      
      Fix copy & paste typos in comments for the console_16550_register()
      function on the way.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      Change-Id: I9f8fca5b358f878fac0f31dc411358fd160786ee
      cd50ffd2
  7. 14 Dec, 2019 2 commits
    • Samuel Holland's avatar
      allwinner: Convert AXP803 regulator setup code into a driver · 0bc752c9
      Samuel Holland authored
      
      
      Previously, the A64/H5 and H6 platforms' PMIC setup code was entirely
      independent. However, some H6 boards also need early regulator setup.
      
      Most of the register interface and all of the device tree traversal code
      can be reused between the AXP803 and AXP805. The main difference is the
      hardware bus interface, so that part is left to the platforms. The
      remainder is moved into a driver.
      
      I factored out the bits that were obviously specific to the AXP803;
      additional changes for compatibility with other PMICs can be made as
      needed.
      
      The only functional change is that rsb_init() now checks the PMIC's chip
      ID register against the expected value. This was already being done in
      the H6 version of the code.
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Change-Id: Icdcf9edd6565f78cccc503922405129ac27e08a2
      0bc752c9
    • Samuel Holland's avatar
      drivers: allwinner: axp: Add AXP805 support · f6d9c4ca
      Samuel Holland authored
      
      
      This adds the new regulator list, as well as changes to make the switch
      (equivalent to DC1SW on the AXP803) work on both PMICs.
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Change-Id: I9a1eac8ddfc54b27096c10a8eebdd51aaf9b8311
      f6d9c4ca
  8. 11 Dec, 2019 3 commits
  9. 06 Dec, 2019 1 commit
    • Bence Szépkúti's avatar
      libc: Consolidate unified definitions · b382ac68
      Bence Szépkúti authored
      
      
      As supporting architectures aside from AArch32 and AArch64 is not a
      concern, keeping identical definitions in two places for a large part
      of the libc seems counterproductive
      
      The int128 types were left un-unified as __int128 is not supported by
      gcc on AArch32
      Signed-off-by: default avatarBence Szépkúti <bence.szepkuti@arm.com>
      Change-Id: Idf08e6fab7e4680d9da62d3c57266ea2d80472cf
      b382ac68
  10. 19 Nov, 2019 3 commits
    • Justin Chadwell's avatar
      Enable -Wlogical-op always · d7b4cd41
      Justin Chadwell authored
      
      
      -Wlogical-op prevents common errors with using numerical constants where
      a boolean one is expected as well as when the operands of a logical
      operator are the same. While these are perfectly valid behavior, they
      can be a sign that something is slightly off.
      
      This patch adds this warning to gcc and it's closest equivalent to
      clang, while also fixing any warnings that enabling them causes.
      
      Change-Id: Iabadfc1e6ee0c44eef6685a23b0aed8abef8ce89
      Signed-off-by: default avatarJustin Chadwell <justin.chadwell@arm.com>
      d7b4cd41
    • Justin Chadwell's avatar
      Enable -Wshadow always · b7f6525d
      Justin Chadwell authored
      
      
      Variable shadowing is, according to the C standard, permitted and valid
      behaviour. However, allowing a local variable to take the same name as a
      global one can cause confusion and can make refactoring and bug hunting
      more difficult.
      
      This patch moves -Wshadow from WARNING2 into the general warning group
      so it is always used. It also fixes all warnings that this introduces
      by simply renaming the local variable to a new name
      
      Change-Id: I6b71bdce6580c6e58b5e0b41e4704ab0aa38576e
      Signed-off-by: default avatarJustin Chadwell <justin.chadwell@arm.com>
      b7f6525d
    • Max Shvetsov's avatar
      GIC-600: Fix include ordering according to the coding style · ac426351
      Max Shvetsov authored
      
      
      Change-Id: Ia120bcaacea3a462ab78db13f84ed23493033601
      Signed-off-by: default avatarMax Shvetsov <maksims.svecovs@arm.com>
      ac426351
  11. 15 Nov, 2019 1 commit
    • Alexei Fedorov's avatar
      GIC-600: Fix power up sequence · 7a7fbb12
      Alexei Fedorov authored
      
      
      Arm's GIC-600 features a Power Register (GICR_PWRR),
      which needs to be programmed to enable redistributor
      operation. Section 3.6.1 in the GIC-600 TRM describes
      the power-up and power-down sequence in pseudo code,
      which deviates from the current TF-A implementation
      in drivers/arm/gic/v3/gic600.c.
      For powering on a redistributor, the pseudo code suggests
      to loop over the whole sequence (check for transition,
      write request bit) instead of just looping over the
      ready bit read as TF-A does in gic600_pwr_on().
      This patch fixes GIC-600 power up sequence according
      to the TRM.
      
      Change-Id: I445c480e96ba356b69a2d8e5308ffe6c0a97f45b
      Signed-off-by: default avatarAlexei Fedorov <Alexei.Fedorov@arm.com>
      7a7fbb12
  12. 14 Nov, 2019 1 commit
  13. 11 Nov, 2019 1 commit
  14. 01 Nov, 2019 1 commit
  15. 08 Oct, 2019 1 commit
    • Avinash Mehta's avatar
      Correct UART PL011 initialization calculation · 38d5e150
      Avinash Mehta authored
      
      
      Currently for Armv7 plaforms the quotient calculated in pl011
      uart init code is moved to register r1.
      
      This patch moves the quotient to register r2 as done for other
      platforms in the udiv instruction. Value of register r2 is then
      used to calculate the values for IBRD and FBRD register
      
      Change-Id: Ie6622f9f0e6d634378b471df5d02823b492c8a24
      Signed-off-by: default avatarAvinash Mehta <avinash.mehta@arm.com>
      38d5e150
  16. 03 Oct, 2019 2 commits
  17. 26 Sep, 2019 1 commit
    • Madhukar Pappireddy's avatar
      GICv3: Enable multi socket GIC redistributor frame discovery · ec834925
      Madhukar Pappireddy authored
      
      
      This patch provides declaration and definition of new GICv3 driver
      API: gicv3_rdistif_probe().This function delegates the responsibility
      of discovering the corresponding Redistributor base frame to each CPU
      itself. It is a modified version of gicv3_rdistif_base_addrs_probe()
      and is executed by each CPU in the platform unlike the previous
      approach in which only the Primary CPU did the discovery of all the
      Redistributor frames for every CPU.
      
      The flush operations as part of gicv3_driver_init() function are
      made necessary even for platforms with WARMBOOT_ENABLE_DCACHE_EARLY
      because the GICv3 driver data structure contents are accessed by CPU
      with D-Cache turned off during power down operations.
      
      Change-Id: I1833e81d3974b32a3e4a3df4766a33d070982268
      Signed-off-by: default avatarMadhukar Pappireddy <madhukar.pappireddy@arm.com>
      ec834925
  18. 23 Sep, 2019 1 commit
    • Lionel Debieve's avatar
      stm32mp1: add authentication support for stm32image · 4bdb1a7a
      Lionel Debieve authored
      
      
      This commit adds authentication binary support for STM32MP1.
      It prints the bootrom authentication result if signed
      image is used and authenticates the next loaded STM32 images.
      It also enables the dynamic translation table support
      (PLAT_XLAT_TABLES_DYNAMIC) to use bootrom services.
      Signed-off-by: default avatarLionel Debieve <lionel.debieve@st.com>
      Change-Id: Iba706519e0dc6b6fae1f3dd498383351f0f75f51
      4bdb1a7a
  19. 20 Sep, 2019 2 commits
  20. 18 Sep, 2019 2 commits
  21. 13 Sep, 2019 3 commits
  22. 12 Sep, 2019 2 commits
    • Justin Chadwell's avatar
      Remove RSA PKCS#1 v1.5 support from cert_tool · 6a415a50
      Justin Chadwell authored
      Support for PKCS#1 v1.5 was deprecated in SHA 1001202d and fully removed
      in SHA fe199e3b
      
      , however, cert_tool is still able to generate
      certificates in that form. This patch fully removes the ability for
      cert_tool to generate these certificates.
      
      Additionally, this patch also fixes a bug where the issuing certificate
      was a RSA and the issued certificate was EcDSA. In this case, the issued
      certificate would be signed using PKCS#1 v1.5 instead of RSAPSS per
      PKCS#1 v2.1, preventing TF-A from verifying the image signatures. Now
      that PKCS#1 v1.5 support is removed, all certificates that are signed
      with RSA now use the more modern padding scheme.
      
      Change-Id: Id87d7d915be594a1876a73080528d968e65c4e9a
      Signed-off-by: default avatarJustin Chadwell <justin.chadwell@arm.com>
      6a415a50
    • Justin Chadwell's avatar
      Support larger RSA key sizes when using MBEDTLS · aacff749
      Justin Chadwell authored
      
      
      Previously, TF-A could not support large RSA key sizes as the
      configuration options passed to MBEDTLS prevented storing and performing
      calculations with the larger, higher-precision numbers required. With
      these changes to the arguments passed to MBEDTLS, TF-A now supports
      using 3072 (3K) and 4096 (4K) keys in certificates.
      
      Change-Id: Ib73a6773145d2faa25c28d04f9a42e86f2fd555f
      Signed-off-by: default avatarJustin Chadwell <justin.chadwell@arm.com>
      aacff749
  23. 10 Sep, 2019 1 commit
  24. 05 Sep, 2019 2 commits