1. 30 Oct, 2018 1 commit
  2. 29 Oct, 2018 3 commits
    • Soby Mathew's avatar
      FVP: Enable PIE for RESET_TO_BL31=1 · fc922ca8
      Soby Mathew authored
      
      
      This patch enabled PIE for FVP when RESET_TO_BL31=1. The references
      to BL31_BASE are replaced by BL31_START as being a symbol exported by
      the linker, will create a dynamic relocation entry in .rela.dyn and
      hence will be fixed up by dynamic linker at runtime. Also, we disable
      RECLAIM_INIT_CODE when PIE is enabled as the init section overlay
      creates some static relocations which cannot be handled by the
      dynamic linker currently.
      
      Change-Id: I86df1b0a8b2a8bbbe7c3f3c0b9a08c86c2963ec0
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      fc922ca8
    • Soby Mathew's avatar
      plat/arm: Use `mov_imm` macro to load immediate values · bd83b396
      Soby Mathew authored
      
      
      This patch makes use of mov_imm macro where possible to load
      immediate values within ARM platform layer.
      
      Change-Id: I02bc7fbc1fa334c9fccf76fbddf515952f9a1298
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      bd83b396
    • Soby Mathew's avatar
      Add helper to return reference to a symbol · 6a7b3005
      Soby Mathew authored
      
      
      This patch adds a utility function to return
      the address of a symbol. By default, the compiler
      generates adr/adrp instruction pair to return
      the reference and this utility is used to override
      this compiler generated to code and use `ldr`
      instruction.
      
      This is needed for Position Independent Executable
      when it needs to reference a symbol which is constant
      and does not depend on the execute address of the
      binary.
      
      For example, on the FVP, the GICv3 register context is
      stored in a secure carveout (arm_el3_tzc_dram) within
      DDR and does not relocate with the BL image. Now if
      BL31 is executing at a different address other than
      the compiled address, using adrp/adr instructions to
      reference this memory will not work as they generate an
      address that is PC relative. The way to get around this
      problem is to reference it as non-PC relative (i.e
      non-relocatable location) via `ldr` instruction.
      
      Change-Id: I5008a951b007144258121690afb68dc8e12ee6f7
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      6a7b3005
  3. 26 Oct, 2018 5 commits
  4. 25 Oct, 2018 6 commits
    • Antonio Nino Diaz's avatar
      Deprecate weak crash console functions · e74afb65
      Antonio Nino Diaz authored
      
      
      The default behaviour of the plat_crash_console_xxx functions isn't
      obvious to someone that hasn't read all the documentation. As they are
      not mandatory, it is unlikely that the code will be checked when doing a
      platform port, which may mean that some platforms may not have crash
      console support at all.
      
      The idea of this patch is to force platform maintainers to decide how
      the crash console has to behave so that the final behaviour isn't
      unexpected.
      
      Change-Id: I40b2a7b56c5530c1dcd63eace5bd37ae6335056e
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      e74afb65
    • Antonio Nino Diaz's avatar
      rockchip: Use common crash console functions · a9d5a3ff
      Antonio Nino Diaz authored
      
      
      This platform depends on weak functions defined in
      ``plat/common/aarch64/platform_helpers.S`` that are going to be removed.
      
      Change-Id: I5104d091c32271d77ed9690e9dc257c061289def
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      a9d5a3ff
    • Antonio Nino Diaz's avatar
      Add sample crash console functions · 6c9ada31
      Antonio Nino Diaz authored
      
      
      Platforms that wish to use the sample functions have to add the file to
      their Makefile. It is not included by default.
      
      Change-Id: I713617bb58dc218967199248f68da86241d7ec40
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      6c9ada31
    • Antonio Nino Diaz's avatar
      plat/arm: Make crash console functions strong · c02c69f8
      Antonio Nino Diaz authored
      
      
      In Arm platforms the crash console doesn't print anything if the crash
      happens early enough. This happens in all images, not only BL1. The
      reason is that they the files ``plat/common/aarch64/platform_helpers.S``
      and ``plat/arm/common/aarch64/arm_helpers.S``, and the crash console
      functions are defined as weak in both files. In practice, the linker
      can pick the one in ``plat/common``, which simply switches the multi
      console to crash mode when it wants to initialize the crash console.
      In the case of Arm platforms, there are no console drivers registered
      at that point, so nothing is printed.
      
      This patch makes the functions in plat/arm strong so that they override
      the weak functions in plat/common.
      
      Change-Id: Id358db7d2567d7df0951790a695636cf6c9ac57f
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      c02c69f8
    • Antonio Nino Diaz's avatar
      Add plat_crash_console_flush to platforms without it · 9c675b37
      Antonio Nino Diaz authored
      
      
      Even though at this point plat_crash_console_flush is optional, it will
      stop being optional in a following patch.
      
      The console driver of warp7 doesn't support flush, so the implementation
      is a placeholder.
      
      TI had ``plat_crash_console_init`` and ``plat_crash_console_putc``, but
      they weren't global so they weren't actually used. Also, they were
      calling the wrong functions.
      
      imx8_helpers.S only has placeholders for all of the functions.
      
      Change-Id: I8d17bbf37c7dad74e134c61ceb92acb9af497718
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      9c675b37
    • Antonio Nino Diaz's avatar
      zynqmp: Remove dependency on arm_helpers.S · bde25ae2
      Antonio Nino Diaz authored
      
      
      Non-Arm platforms shouldn't use Arm platform code. This patch copies the
      implementation of the functions in arm_helpers.S to zynqmp_helpers.S to
      remove this dependency of zynqmp on Arm platforms.
      
      Change-Id: Ia85f303c4c63bcf0ffa57c7f3ef9d88376729b6b
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      bde25ae2
  5. 24 Oct, 2018 1 commit
    • Antonio Nino Diaz's avatar
      rpi3: Add mem reserve region to DTB if present · 5341b42e
      Antonio Nino Diaz authored
      
      
      When a device tree blob is present at a known address, instead of, for
      example, relying on the user modifying the Linux command line to warn
      about the memory reserved for the Trusted Firmware, pass it on the DTB.
      
      The current code deletes the memory reserved for the default bootstrap
      of the Raspberry Pi and adds the region used by the Trusted Firmware.
      
      This system replaces the previous one consisting on adding
      ``memmap=16M$256M`` to the Linux command line. It's also meant to be
      used by U-Boot and any other bootloader that understands DTB files.
      
      Change-Id: I13ee528475fb043d6e8d9e9f24228e37ac3ac436
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      5341b42e
  6. 23 Oct, 2018 2 commits
    • Antonio Nino Diaz's avatar
      juno: Increase BL2 max size · 472158f6
      Antonio Nino Diaz authored
      
      
      Version 1.4.7 of libfdt is bigger than the current one (1.4.2) and the
      current reserved space for BL2 in Juno isn't enough to fit the Trusted
      Firmware when compiling with clang or armclang.
      
      Change-Id: I7b73394ca60d17f417773f56dd5b3d54495a45a8
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      472158f6
    • Antonio Nino Diaz's avatar
      tzc: Fix MISRA defects · af6491f8
      Antonio Nino Diaz authored
      
      
      The definitions FAIL_CONTROL_*_SHIFT were incorrect, they have been
      fixed.
      
      The types tzc_region_attributes_t and tzc_action_t have been removed and
      replaced by unsigned int because it is not allowed to do logical
      operations on enums.
      
      Also, fix some address definitions in arm_def.h.
      
      Change-Id: Id37941d76883f9fe5045a5f0a4224c133c504d8b
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      af6491f8
  7. 19 Oct, 2018 1 commit
    • Soby Mathew's avatar
      Multi-console: Deprecate the `finish_console_register` macro · cc5859ca
      Soby Mathew authored
      
      
      The `finish_console_register` macro is used by the multi console
      framework to register the `console_t` driver callbacks. It relied
      on weak references to the `ldr` instruction to populate 0 to the
      callback in case the driver has not defined the appropriate
      function. Use of `ldr` instruction to load absolute address to a
      reference makes the binary position dependant. These instructions
      should be replaced with adrp/adr instruction for position independant
      executable(PIE). But adrp/adr instructions don't work well with weak
      references as described in GNU ld bugzilla issue 22589.
      
      This patch defines a new version of `finish_console_register` macro
      which can spcify which driver callbacks are valid and deprecates the
      old one. If any of the argument is not specified, then the macro
      populates 0 for that callback. Hence the functionality of the previous
      deprecated macro is preserved. The USE_FINISH_CONSOLE_REG_2 define
      is used to select the new variant of the macro and will be removed
      once the deprecated variant is removed.
      
      All the upstream console drivers have been migrated to use the new
      macro in this patch.
      
      NOTE: Platforms be aware that the new variant of the
      `finish_console_register` should be used and the old variant is
      deprecated.
      
      Change-Id: Ia6a67aaf2aa3ba93932992d683587bbd0ad25259
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      cc5859ca
  8. 18 Oct, 2018 6 commits
    • Jerome Forissier's avatar
      qemu: increase PLAT_QEMU_DT_MAX_SIZE to 1 MiB · bde0f327
      Jerome Forissier authored
      
      
      Since upstream QEMU commit 14ec3cbd7c1e ("device_tree: Increase
      FDT_MAX_SIZE to 1 MiB"), which is included in release v2.12.1
      and later, BL2 initialization fails with the following error (-3 is
      -FDT_ERR_NOSPACE):
      
       ERROR:   Invalid Device Tree at 0x40000000: error -3
      
      Increase PLAT_QEMU_DT_MAX_SIZE accordingly.
      Signed-off-by: default avatarJerome Forissier <jerome.forissier@linaro.org>
      bde0f327
    • Chandni Cherukuri's avatar
      plat/arm/scmi: introduce plat_css_get_scmi_info API · b911dddc
      Chandni Cherukuri authored
      
      
      The default values of 'plat_css_scmi_plat_info' is not applicable for
      all the platforms. There should be a provision to let platform code to
      register a platform specific instance of scmi_channel_plat_info_t.
      
      Add a new API 'plat_css_get_scmi_info' which lets the platform to
      register a platform specific instance of scmi_channel_plat_info_t and
      remove the default values.
      
      In addition to this, the existing 'plat_css_scmi_plat_info' structure
      is removed from the common code and instantiated for the platforms that
      need it. This allows for a consistent provisioning of the SCMI channel
      information across all the existing and upcoming platforms.
      
      Change-Id: I4fb65d7f2f165b78697b4677f1e8d81edebeac06
      Signed-off-by: default avatarChandni Cherukuri <chandni.cherukuri@arm.com>
      b911dddc
    • Chandni Cherukuri's avatar
      plat/arm/sgi: add system-id node in HW_CONFIG dts · 8c7b55f9
      Chandni Cherukuri authored
      
      
      Dynamically populating the 'system-id' node in the HW_CONFIG dts makes
      it difficult to enforce memory overlap checks. So add the system-id node
      in the HW_CONFIG dts file as a place holder with 'platform-id' and
      'config-id' set to zero.
      
      The code at BL2 stage determines the values of 'platform-id' and
      'config-id' at runtime and updates the corresponding fields in the
      system-id node of HW_CONFIG dts.
      
      Change-Id: I2ca9980b994ac418da8afa0c72716ede10aff68a
      Signed-off-by: default avatarChandni Cherukuri <chandni.cherukuri@arm.com>
      8c7b55f9
    • Chandni Cherukuri's avatar
      plat/arm/sgi: move fdts files to sgi575 board directory · 63197d01
      Chandni Cherukuri authored
      
      
      To align the placement of ftds files with that of other Arm platforms,
      move the ftds files from plat/arm/css/sgi/ to plat/arm/board/sgi575.
      
      Change-Id: Id7c772eb5cf3d308d4e02a3c8099218e889a0e96
      Signed-off-by: default avatarChandni Cherukuri <chandni.cherukuri@arm.com>
      63197d01
    • Chandni Cherukuri's avatar
      plat/arm/sgi: remove unused code · a50a5830
      Chandni Cherukuri authored
      
      
      On SGI platforms, the interconnect is setup by the SCP and so the
      existing unused interconnect setup in sgi575 platform code can be
      removed. As a result of this, sgi_plat_config.c and sgi_bl1_setup.c
      files can be removed as these files are now empty or can be
      substainated by the existing weak functions.
      
      Change-Id: I3c883e4d1959d890bf2213a9be01f02551ea3a45
      Signed-off-by: default avatarChandni Cherukuri <chandni.cherukuri@arm.com>
      a50a5830
    • Chandni Cherukuri's avatar
      plat/arm/sgi: reorganize platform macros · 91e6f26f
      Chandni Cherukuri authored
      
      
      In preparation of adding support for upcoming SGI platforms, macros
      common to all the SGI platforms are moved into sgi_base_platform_def.h
      file. Macros that are specific to sgi575 platform remain in the
      platform_def.h file. In addition to this, the platform_def.h file is
      moved to sgi575 board directory. Also the ENT_CPU_SOURCES has been
      renamed to SGI_CPU_SOURCES and moved from sgi-common.mk to board
      specific makefile platform.mk
      
      Change-Id: Iccdd9f070f4feea232b9fbf4fdcc0ef2e8eccbf2
      Signed-off-by: default avatarChandni Cherukuri <chandni.cherukuri@arm.com>
      91e6f26f
  9. 17 Oct, 2018 2 commits
    • Jorge Ramirez-Ortiz's avatar
      rcar_gen3: drivers: staging · 6ac2892a
      Jorge Ramirez-Ortiz authored
       - ddr
       - pfc [pin function controller]
       - qos [bandwidth]
      
      checkpatch.pl is generating too many errors.
      6ac2892a
    • Jorge Ramirez-Ortiz's avatar
      rcar-gen3: initial commit for the rcar-gen3 boards · 7e532c4b
      Jorge Ramirez-Ortiz authored
      Reference code:
      ==============
      
      rar_gen3: IPL and Secure Monitor Rev1.0.22
      https://github.com/renesas-rcar/arm-trusted-firmware [rcar_gen3]
      
      Author: Takuya Sakata <takuya.sakata.wz@bp.renesas.com>
      Date:   Thu Aug 30 21:26:41 2018 +0900
      	Update IPL and Secure Monitor Rev1.0.22
      
      General Information:
      ===================
      
      This port has been tested on the Salvator-X Soc_id r8a7795 revision
      ES1.1 (uses an SPD).
      
      Build Tested:
      -------------
      ATFW_OPT="LSI=H3 RCAR_DRAM_SPLIT=1 RCAR_LOSSY_ENABLE=1"
      MBEDTLS_DIR=$mbedtls
      
      $ make clean bl2 bl31 rcar PLAT=rcar ${ATFW_OPT} SPD=opteed
      
      Other dependencies:
      ------------------
      * mbed_tls:
        git@github.com:ARMmbed/mbedtls.git [devel]
      
        Merge: 68dbc94 f34a4c1
        Author: Simon Butcher <simon.butcher@arm.com>
        Date:   Thu Aug 30 00:57:28 2018 +0100
      
      * optee_os:
        https://github.com/BayLibre/optee_os
      
      
      
        Until it gets merged into OP-TEE, the port requires Renesas' Trusted
        Environment with a modification to support power management.
      
        Author: Jorge Ramirez-Ortiz <jramirez@baylibre.com>
        Date:   Thu Aug 30 16:49:49 2018 +0200
          plat-rcar: cpu-suspend: handle the power level
      Signed-off-by: default avatarJorge Ramirez-Ortiz <jramirez@baylibre.com>
      
      * u-boot:
        The port has beent tested using mainline uboot.
      
        Author: Fabio Estevam <festevam@gmail.com>
        Date:   Tue Sep 4 10:23:12 2018 -0300
      
      *linux:
        The port has beent tested using mainline kernel.
      
        Author: Linus Torvalds <torvalds@linux-foundation.org>
        Date:   Sun Sep 16 11:52:37 2018 -0700
            Linux 4.19-rc4
      
      Overview
      ---------
      
      BOOTROM starts the cpu at EL3; In this port BL2 will therefore be entered
      at this exception level (the Renesas' ATF reference tree [1] resets into
      EL1 before entering BL2 - see its bl2.ld.S)
      
      BL2 initializes DDR (and i2c to talk to the PMIC on some platforms)
      before determining the boot reason (cold or warm).
      
      During suspend all CPUs are switched off and the DDR is put in
      backup mode (some kind of self-refresh mode). This means that BL2 is
      always entered in a cold boot scenario.
      
      Once BL2 boots, it determines the boot reason, writes it to shared
      memory (BOOT_KIND_BASE) together with the BL31 parameters
      (PARAMS_BASE) and jumps to BL31.
      
      To all effects, BL31 is as if it is being entered in reset mode since
      it still needs to initialize the rest of the cores; this is the reason
      behind using direct shared memory access to  BOOT_KIND_BASE and
      PARAMS_BASE instead of using registers to get to those locations (see
      el3_common_macros.S and bl31_entrypoint.S for the RESET_TO_BL31 use
      case).
      
      Depending on the boot reason BL31 initializes the rest of the cores:
      in case of suspend, it uses a MBOX memory region to recover the
      program counters.
      
      [1] https://github.com/renesas-rcar/arm-trusted-firmware
      
      
      Tests
      -----
      
      * cpuidle
        -------
         enable kernel's cpuidle arm_idle driver and boot
      
      * system suspend
        --------------
        $ cat suspend.sh
          #!/bin/bash
          i2cset -f -y 7 0x30 0x20 0x0F
          read -p "Switch off SW23 and press return " foo
          echo mem > /sys/power/state
      
      * cpu hotplug:
        ------------
        $ cat offline.sh
          #!/bin/bash
          nbr=$1
          echo 0 > /sys/devices/system/cpu/cpu$nbr/online
          printf "ONLINE:  " && cat /sys/devices/system/cpu/online
          printf "OFFLINE: " && cat /sys/devices/system/cpu/offline
      
        $ cat online.sh
          #!/bin/bash
          nbr=$1
          echo 1 > /sys/devices/system/cpu/cpu$nbr/online
          printf "ONLINE:  " && cat /sys/devices/system/cpu/online
          printf "OFFLINE: " && cat /sys/devices/system/cpu/offline
      Signed-off-by: default avatarldts <jramirez@baylibre.com>
      7e532c4b
  10. 16 Oct, 2018 2 commits
  11. 15 Oct, 2018 3 commits
  12. 11 Oct, 2018 3 commits
  13. 10 Oct, 2018 4 commits
  14. 09 Oct, 2018 1 commit