1. 16 Sep, 2014 1 commit
    • Soby Mathew's avatar
      Add support for specifying pre-built BL binaries in Makefile · 27713fb4
      Soby Mathew authored
      This patch adds support for supplying pre-built BL binaries for BL2,
      BL3-1 and BL3-2 during trusted firmware build. Specifying BLx = <path_to_BLx>
      in the build command line, where 'x' is any one of BL2, BL3-1 or BL3-2, will
      skip building that BL stage from source and include the specified binary in
      final fip image.
      
      This patch also makes BL3-3 binary for FIP optional depending on the
      value of 'NEED_BL33' flag which is defined by the platform.
      
      Fixes ARM-software/tf-issues#244
      Fixes ARM-software/tf-issues#245
      
      Change-Id: I3ebe1d4901f8b857e8bb51372290978a3323bfe7
      27713fb4
  2. 28 Aug, 2014 4 commits
  3. 27 Aug, 2014 8 commits
  4. 21 Aug, 2014 10 commits
    • danh-arm's avatar
      Merge pull request #198 from danh-arm/dh/move-up-dependencies · 17f89d08
      danh-arm authored
      Move up dependency versions in user guide
      17f89d08
    • danh-arm's avatar
      Merge pull request #197 from soby-mathew/rationalize_uarts · 4ed74d02
      danh-arm authored
      Rationalize UART usage among different BL stages
      4ed74d02
    • Soby Mathew's avatar
      Rationalize UART usage among different BL stages · 12d554f9
      Soby Mathew authored
      This patch changes the UART port assignment for various BL stages
      so as to make it consistent on the platform ports. The BL1, BL2 and
      BL3-1 now uses UART0 on the FVP port and SoC UART0 on the Juno port.
      The BL3-2 uses UART2 on the FVP port and FPGA UART0 on the Juno
      port.
      
      This provides an interim fix to ARM-software/tf-issues#220 until
      support is added for changing the UART port for a BL image between
      cold boot and runtime.
      
      Change-Id: Iae5faea90be3d59e41e597b34a902f93e737505a
      12d554f9
    • Dan Handley's avatar
      Move up dependency versions in user guide · ba73bb09
      Dan Handley authored
      Move up the version numbers of the following Trusted Firmware
      dependencies in the user guide:
      
      *   Foundation and Base FVPs (latest publically available
          versions).
      
      *   EDK2 implementation. The guide now uses the latest version from
          https://github.com/ARM-software/edk2.git. This requires the
          `iasl` package to also be installed.
      
      *   Linux kernel. The guide now uses the latest version from
          https://github.com/ARM-software/linux.git.
      
      *   Linaro OpenEmbedded file system.
      
      *   ARM Development Studio 5.
      
      Change-Id: I95bb863a61e47b9ef8be3d110f7087375ee78add
      ba73bb09
    • danh-arm's avatar
      Merge pull request #196 from soby-mathew/sm/tf_juno_support · e434cf1a
      danh-arm authored
      Add support for Juno in Trusted Firmware
      e434cf1a
    • Juan Castillo's avatar
      Juno: Read primary CPU MPID from SCC GPR_1 · 38af430a
      Juan Castillo authored
      This patch removes the PRIMARY_CPU definition hardcoded in the
      Juno port. Instead, the primary CPU is obtained at runtime by
      reading the SCC General Purpose Register 1 (GPR_1), whose value
      is copied by the SCP into shared memory during the boot process.
      
      Change-Id: I3981daa92eb7142250712274cf7f655b219837f5
      38af430a
    • Juan Castillo's avatar
      Juno: Implement PSCI SYSTEM_OFF and SYSTEM_RESET APIs · efafbc89
      Juan Castillo authored
      This patch adds the Juno platform specific handlers for PSCI
      SYSTEM_OFF and SYSTEM_RESET operations.
      
      Change-Id: Ie389adead533ec2314af44d721b4d0f306147c7d
      efafbc89
    • Sandrine Bailleux's avatar
      Juno: Add support for Test Secure-EL1 Payload · edfda10a
      Sandrine Bailleux authored
      This patch implements the TSP on Juno. It executes from on-chip Trusted
      SRAM.
      
      Also, the other bootloader images (i.e. BL1 R/W, BL2 and BL3-1) have
      been moved around. The reason is, although there was enough space
      overall to store the TSP in SRAM, there was no contiguous free chunk
      of SRAM big enough to hold it.
      
      This patch keeps the overall memory layout (i.e. keeping BL1 R/W at
      the bottom, BL2 at the top and BL3-1 in between) but moves the base
      addresses of all the bootloader images in such a way that:
       - memory fragmentation is reduced enough to fit BL3-2 in;
       - new base addresses are suitable for release builds as well as debug
         ones;
       - each image has a few extra kilobytes for future growth.
         BL3-1 and BL3-2 are the images which received the biggest allocations
         since they will most probably grow the most.
      
      This patch also adds instruction synchronization barriers around the code which
      handles the timer interrupt in the TSP. This ensures that the interrupt is not
      acknowledged after or EOIed before it is deactivated at the peripheral.
      
      Change-Id: I1c5b51858700027ee283ac85d18e06863a27c72e
      edfda10a
    • Achin Gupta's avatar
      Juno: Implement PSCI CPU_OFF and CPU_SUSPEND APIs · fef4fdb9
      Achin Gupta authored
      This patch adds support for PSCI CPU_OFF and CPU_SUSPEND APIs to the Juno port
      of the ARM Trusted Firmware. The maximum affinity level that can be suspended is
      the cluster level (affinity level 1). Support for suspending the system level is
      not present.
      
      Change-Id: Ie2c9da0acd7d1b0d5ac64940cdf40347153e52c8
      fef4fdb9
    • Sandrine Bailleux's avatar
      Juno: Implement initial platform port · 01b916bf
      Sandrine Bailleux authored
      This patch adds the initial port of the ARM Trusted Firmware on the Juno
      development platform. This port does not support a BL3-2 image or any PSCI APIs
      apart from PSCI_VERSION and PSCI_CPU_ON. It enables workarounds for selected
      Cortex-A57 (#806969 & #813420) errata and implements the workaround for a Juno
      platform errata (Defect id 831273).
      
      Change-Id: Ib3d92df3af53820cfbb2977582ed0d7abf6ef893
      01b916bf
  5. 20 Aug, 2014 9 commits
    • danh-arm's avatar
      Merge pull request #195 from achingupta/ag/fvp_dt_updates · e822d7c1
      danh-arm authored
      FVP: Update device trees to match cpuidle driver
      e822d7c1
    • danh-arm's avatar
      Merge pull request #194 from danh-arm/sm/tf-issues#98 · 7963671c
      danh-arm authored
      Implement the CPU Specific operations framework v3
      7963671c
    • Achin Gupta's avatar
      FVP: Update device trees to match cpuidle driver · bab7bfd2
      Achin Gupta authored
      This patch updates the representation of idle tables and cpu/cluster topology in
      the device tree source files for the FVP to what the latest cpuidle driver in
      Linux expects. The device tree binaries have also been updated.
      
      Change-Id: If0668b96234f65aa0435fba52f288c9378bd8824
      bab7bfd2
    • Soby Mathew's avatar
      Add documentation for CPU specific abstraction and Errata workarounds · 3fd5ddfe
      Soby Mathew authored
      This patch adds documentation for CPU specific abstraction in the firmware-
      design.md and adds a new document cpu-errata-workarounds.md to describe
      the cpu errata workaround build flags.
      
      Change-Id: Ia08c2fec0b868a0a107d0264e87a60182797a1bd
      3fd5ddfe
    • Soby Mathew's avatar
      Add support for selected Cortex-A57 errata workarounds · d9bdaf2d
      Soby Mathew authored
      This patch adds workarounds for selected errata which affect the Cortex-A57 r0p0
      part. Each workaround has a build time flag which should be used by the platform
      port to enable or disable the corresponding workaround. The workarounds are
      disabled by default. An assertion is raised if the platform enables a workaround
      which does not match the CPU revision at runtime.
      
      Change-Id: I9ae96b01c6ff733d04dc733bd4e67dbf77b29fb0
      d9bdaf2d
    • Soby Mathew's avatar
      Add CPU specific crash reporting handlers · d3f70af6
      Soby Mathew authored
      This patch adds handlers for dumping Cortex-A57 and Cortex-A53 specific register
      state to the CPU specific operations framework. The contents of CPUECTLR_EL1 are
      dumped currently.
      
      Change-Id: I63d3dbfc4ac52fef5e25a8cf6b937c6f0975c8ab
      d3f70af6
    • Soby Mathew's avatar
      Add CPU specific power management operations · add40351
      Soby Mathew authored
      This patch adds CPU core and cluster power down sequences to the CPU specific
      operations framework introduced in a earlier patch. Cortex-A53, Cortex-A57 and
      generic AEM sequences have been added. The latter is suitable for the
      Foundation and Base AEM FVPs. A pointer to each CPU's operations structure is
      saved in the per-cpu data so that it can be easily accessed during power down
      seqeunces.
      
      An optional platform API has been introduced to allow a platform to disable the
      Accelerator Coherency Port (ACP) during a cluster power down sequence. The weak
      definition of this function (plat_disable_acp()) does not take any action. It
      should be overriden with a strong definition if the ACP is present on a
      platform.
      
      Change-Id: I8d09bd40d2f528a28d2d3f19b77101178778685d
      add40351
    • Soby Mathew's avatar
      Add platform API for reset handling · 24fb838f
      Soby Mathew authored
      This patch adds an optional platform API (plat_reset_handler) which allows the
      platform to perform any actions immediately after a cold or warm reset
      e.g. implement errata workarounds. The function is called with MMU and caches
      turned off. This API is weakly defined and does nothing by default but can be
      overriden by a platform with a strong definition.
      
      Change-Id: Ib0acdccbd24bc756528a8bd647df21e8d59707ff
      24fb838f
    • Soby Mathew's avatar
      Introduce framework for CPU specific operations · 9b476841
      Soby Mathew authored
      This patch introduces a framework which will allow CPUs to perform
      implementation defined actions after a CPU reset, during a CPU or cluster power
      down, and when a crash occurs. CPU specific reset handlers have been implemented
      in this patch. Other handlers will be implemented in subsequent patches.
      
      Also moved cpu_helpers.S to the new directory lib/cpus/aarch64/.
      
      Change-Id: I1ca1bade4d101d11a898fb30fea2669f9b37b956
      9b476841
  6. 19 Aug, 2014 8 commits
    • Soby Mathew's avatar
      Rework use of labels in assembly macros. · aecc0840
      Soby Mathew authored
      This patch provides a workaround for the ASM_ASSERT label issue
      and also reworks the use of labels in assembly macros.
      If the caller of the ASM_ASSERT macro happened to use the
      label '1' to jump past the ASM_ASSERT macro, it would not have
      worked since the ASM_ASSERT macro internally used the same label.
      Hence, as a workaround, this patch makes the label a high
      number in the expectation that the caller will never use it.
      
      Also updated the other assembly macros using numerical labels to
      named lables.
      
      Change-Id: Iec892359db84f2391ad2a83a92141c4d7049776a
      aecc0840
    • Achin Gupta's avatar
      Miscellaneous PSCI code cleanups · a4a8eaeb
      Achin Gupta authored
      This patch implements the following cleanups in PSCI generic code:
      
      1. It reworks the affinity level specific handlers in the PSCI implementation
         such that.
      
         a. Usage of the 'rc' local variable is restricted to only where it is
            absolutely needed
      
         b. 'plat_state' local variable is defined only when a direct invocation of
            plat_get_phys_state() does not suffice.
      
         c. If a platform handler is not registered then the level specific handler
            returns early.
      
      2. It limits the use of the mpidr_aff_map_nodes_t typedef to declaration of
         arrays of the type instead of using it in function prototypes as well.
      
      3. It removes dangling declarations of __psci_cpu_off() and
         __psci_cpu_suspend(). The definitions of these functions were removed in
         earlier patches.
      
      Change-Id: I51e851967c148be9c2eeda3a3c41878f7b4d6978
      a4a8eaeb
    • Achin Gupta's avatar
      fvp: Rework when platform actions are performed · 7d2ccfd7
      Achin Gupta authored
      This patch reworks FVP port's power management implementation to perform
      platform actions only when the platform exported hook is invoked for the highest
      affinity level to enter/exit the OFF state.
      
      For example, during a CPU_OFF operation, fvp_affinst_off() is called twice: for
      affinity level 0 and affinity level 1 (in that order). CPU specific operations
      are deferred until the next invocation if it is determined through a call to
      psci_get_max_phys_off_afflvl() that this is CPU is the last in the cluster.
      
      Similarly, during power up if the CPU is the first in the cluster, both CPU and
      cluster specific operations are performed when fvp_affinst_on_finish() is
      invoked for affinity level 1. Earlier, they were done across the two invocations
      of the handler.
      
      Change-Id: I4288ed3ba1385db36a69cc2e598deb219f209b8a
      7d2ccfd7
    • Achin Gupta's avatar
      Add APIs to preserve highest affinity level in OFF state · 0a46e2c3
      Achin Gupta authored
      This patch adds APIs to find, save and retrieve the highest affinity level which
      will enter or exit from the physical OFF state during a PSCI power management
      operation. The level is stored in per-cpu data.
      
      It then reworks the PSCI implementation to perform cache maintenance only
      when the handler for the highest affinity level to enter/exit the OFF state is
      called.
      
      For example. during a CPU_SUSPEND operation, state management is done prior to
      calling the affinity level specific handlers. The highest affinity level which
      will be turned off is determined using the psci_find_max_phys_off_afflvl()
      API. This level is saved using the psci_set_max_phys_off_afflvl() API. In the
      code that does generic handling for each level, prior to performing cache
      maintenance it is first determined if the current affinity level matches the
      value returned by psci_get_max_phys_off_afflvl(). Cache maintenance is done if
      the values match.
      
      This change allows the last CPU in a cluster to perform cache maintenance
      independently. Earlier, cache maintenance was started in the level 0 handler and
      finished in the level 1 handler. This change in approach will facilitate
      implementation of tf-issues#98.
      
      Change-Id: I57233f0a27b3ddd6ddca6deb6a88b234525b0ae6
      0a46e2c3
    • Achin Gupta's avatar
      Rework state management in the PSCI implementation · 84c9f100
      Achin Gupta authored
      This patch pulls out state management from the affinity level specific handlers
      into the top level functions specific to the operation
      i.e. psci_afflvl_suspend(), psci_afflvl_on() etc.
      
      In the power down path this patch will allow an affinity instance at level X to
      determine the state that an affinity instance at level X+1 will enter before the
      level specific handlers are called. This will be useful to determine whether a
      CPU is the last in the cluster during a suspend/off request and so on.
      
      Similarly, in the power up path this patch will allow an affinity instance at
      level X to determine the state that an affinity instance at level X+1 has
      emerged from, even after the level specific handlers have been called. This will
      be useful in determining whether a CPU is the first in the cluster during a
      on/resume request and so on.
      
      As before, while powering down, state is updated before the level specific
      handlers are invoked so that they can perform actions based upon their target
      state. While powering up, state is updated after the level specific handlers have
      been invoked so that they can perform actions based upon the state they emerged
      from.
      
      Change-Id: I40fe64cb61bb096c66f88f6d493a1931243cfd37
      84c9f100
    • Achin Gupta's avatar
      Add PSCI service specific per-CPU data · 776b68ae
      Achin Gupta authored
      This patch adds a structure defined by the PSCI service to the per-CPU data
      array. The structure is used to save the 'power_state' parameter specified
      during a 'cpu_suspend' call on the current CPU. This parameter was being saved
      in the cpu node in the PSCI topology tree earlier.
      
      The existing API to return the state id specified during a PSCI CPU_SUSPEND call
      i.e. psci_get_suspend_stateid(mpidr) has been renamed to
      psci_get_suspend_stateid_by_mpidr(mpidr). The new psci_get_suspend_stateid() API
      returns the state id of the current cpu.
      
      The psci_get_suspend_afflvl() API has been changed to return the target affinity
      level of the current CPU. This was specified using the 'mpidr' parameter in the
      old implementation.
      
      The behaviour of the get_power_on_target_afflvl() has been tweaked such that
      traversal of the PSCI topology tree to locate the affinity instance node for the
      current CPU is done only in the debug build as it is an expensive operation.
      
      Change-Id: Iaad49db75abda471f6a82d697ee6e0df554c4caf
      776b68ae
    • Achin Gupta's avatar
      Add macro to flush per-CPU data · 04fafcee
      Achin Gupta authored
      This patch adds a macro which will flush the contents of the specified member of
      the per-CPU data structure to the PoC. This is required to enable an update of a
      per-CPU data member to be visible to all observers.
      
      Change-Id: I20e0feb9b9f345dc5a1162e88adc7956a7ad7a64
      04fafcee
    • danh-arm's avatar
      Merge pull request #191 from danh-arm/jc/tf-issues/218 · f139a39a
      danh-arm authored
      Add support for PSCI SYSTEM_OFF and SYSTEM_RESET APIs v2
      f139a39a