project/bcm63xx/atf.git
7 years agoTegra: define platform power states
Varun Wadekar [Tue, 19 Jan 2016 21:55:19 +0000 (13:55 -0800)]
Tegra: define platform power states

The platform power states, PLAT_MAX_RET_STATE and PLAT_MAX_OFF_STATE,
can change on Tegra SoCs and so should be defined per-soc.

This patch moves these macro definitions to individual SoC's tegra_def.h
files.

Change-Id: Ib9b2752bc4d79cef6f79bee49882d340f71977a2
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: drivers: memctrl: introduce function to secure on-chip TZRAM
Varun Wadekar [Wed, 30 Dec 2015 23:06:41 +0000 (15:06 -0800)]
Tegra: drivers: memctrl: introduce function to secure on-chip TZRAM

This patch introduces a function to secure the on-chip TZRAM memory. The
Tegra132 and Tegra210 chips do not have a compelling use case to lock the
TZRAM. The trusted OS owns the TZRAM aperture on these chips and so it
can take care of locking the aperture. This might not be true for future
chips and this patch makes the TZRAM programming flexible.

Change-Id: I3ac9f1de1b792ccd23d4ded274784bbab2ea224a
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: enable runtime console
Varun Wadekar [Sat, 9 Jan 2016 01:48:42 +0000 (17:48 -0800)]
Tegra: enable runtime console

This patch enables the runtime console for all Tegra platforms
before exiting BL31. This would enable debug/error prints to be
always displayed on the UART console.

Change-Id: Ic48d61d05b0ab07973d6fc2dc6b68733a42a3f63
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: PM: soc-specific system off handler
Varun Wadekar [Thu, 7 Jan 2016 22:04:21 +0000 (14:04 -0800)]
Tegra: PM: soc-specific system off handler

This patch introduces a power down handler which can be overriden
by SoCs to customise the power down process. The current SoCs do
not have a way of powering down the entire system as external PMIC
chips are involved in the process.

But future SoCs will have a way to power off the entire system
without talking to an external PMIC.

Change-Id: Ie7750714141a29cb0a1a616fafc531c4f11d0985
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: handlers for common and SoC-specific SiP calls
Varun Wadekar [Thu, 10 Dec 2015 02:18:53 +0000 (18:18 -0800)]
Tegra: handlers for common and SoC-specific SiP calls

This patch implements a handler for common SiP calls. A weak
implementation for the SoC-specific handler has been provided
which can be overridden by SoCs to implement any custom SiP
calls.

Change-Id: I45122892a84ea35d7b44be0f35dc15f6bb95193e
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agospd: trusty: OEN_TAP_START aperture for standard calls
Amith [Thu, 20 Aug 2015 03:13:12 +0000 (20:13 -0700)]
spd: trusty: OEN_TAP_START aperture for standard calls

This patch uses the OEN_TAP_START aperture for all the standard
calls being passed to Trusty.

Change-Id: Id78d01c7f48e4f54855600d7c789ffbfb898c541
Signed-off-by: Amith <aramachan@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoMerge pull request #845 from vwadekar/tegra-changes-from-downstream-v1
davidcunado-arm [Thu, 23 Feb 2017 17:30:54 +0000 (17:30 +0000)]
Merge pull request #845 from vwadekar/tegra-changes-from-downstream-v1

Tegra changes from downstream v1

7 years agoTegra: init normal/crash console for platforms
Varun Wadekar [Thu, 29 Oct 2015 05:07:28 +0000 (10:37 +0530)]
Tegra: init normal/crash console for platforms

The BL2 fills in the UART controller ID to be used as the normal as
well as the crash console on Tegra platforms. The controller ID to
UART controller base address mapping is handled by each Tegra SoC
the base addresses might change across Tegra chips.

This patch adds the handler to parse the platform params to get the
UART ID for the per-soc handlers.

Change-Id: I4d167b20a59aaf52a31e2a8edf94d8d6f89598fa
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: add tzdram_base to plat_params_from_bl2 struct
Varun Wadekar [Tue, 6 Oct 2015 07:19:31 +0000 (12:49 +0530)]
Tegra: add tzdram_base to plat_params_from_bl2 struct

This patch adds another member, tzdram_base, to the plat_params_from_bl2 struct
in order to store the TZDRAM carveout base address used to load the Trusted OS.
The monitor programs the memory controller with the TZDRAM base and size in order
to deny any accesses from the NS world.

Change-Id: If39b8674d548175d7ccb6525c18d196ae8a8506c
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: Memory Controller Driver (v1)
Varun Wadekar [Fri, 18 Sep 2015 05:51:22 +0000 (11:21 +0530)]
Tegra: Memory Controller Driver (v1)

This patch renames the current Memory Controller driver files to
"_v1". This is done to add a driver for the new Memory Controller
hardware (v2).

Change-Id: I668dbba42f6ee0db2f59a7103f0ae7e1d4684ecf
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: sanity check members of the "from_bl2" struct
Varun Wadekar [Tue, 22 Sep 2015 09:30:06 +0000 (15:00 +0530)]
Tegra: sanity check members of the "from_bl2" struct

This patch checks that the pointers to BL3-3 and BL3-2 ep_info
structs are valid before accessing them. Add some INFO prints
in the BL3-1 setup path for early debugging purposes.

Change-Id: I62b23fa870f1b2fb783c8de69aab819f1749d15a
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agocpus: Add support for all Denver variants
Varun Wadekar [Thu, 3 Sep 2015 11:45:06 +0000 (17:15 +0530)]
cpus: Add support for all Denver variants

This patch adds support for all variants of the Denver CPUs. The
variants export their cpu_ops to allow all Denver platforms to run
the Trusted Firmware stack.

Change-Id: I1488813ddfd506ffe363d8a32cda1b575e437035
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: use ClusterId for calculating core position
Varun Wadekar [Tue, 22 Sep 2015 08:15:07 +0000 (13:45 +0530)]
Tegra: use ClusterId for calculating core position

This patch modifies platform_get_core_pos() to use the Cluster ID
field as well to calculate the final index value. This helps the
system to store CPU data for multi-cluster configurations.

Change-Id: I76e35f723f741e995c6c9156e9d61b0b2cdd2709
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: enable processor retention and L2/CPUECTLR access
Varun Wadekar [Tue, 22 Sep 2015 08:03:56 +0000 (13:33 +0530)]
Tegra: enable processor retention and L2/CPUECTLR access

This patch enables the processor retention and L2/CPUECTLR read/write
access from the NS world only for Cortex-A57 CPUs on the Tegra SoCs.

Change-Id: I9941a67686ea149cb95d80716fa1d03645325445
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: define MAX_XLAT_TABLES and MAX_MMAP_REGIONS per-platform
Varun Wadekar [Wed, 9 Sep 2015 05:59:24 +0000 (11:29 +0530)]
Tegra: define MAX_XLAT_TABLES and MAX_MMAP_REGIONS per-platform

This patch moves these address translation helper macros to individual
Tegra SoC makefiles to provide more control.

Change-Id: Ieab53c457c73747bd0deb250459befb5b7b9363f
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: SoC specific SiP handlers
Varun Wadekar [Thu, 3 Sep 2015 09:02:44 +0000 (14:32 +0530)]
Tegra: SoC specific SiP handlers

This patch converts the common SiP handler to SoC specific SiP
handler. T210 and T132 have different SiP SMCs and so it makes
sense to move the SiP handler to soc/t132 and soc/t210 folders.

Change-Id: Idfe48384d63641137d74a095432df4724986b241
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoTegra: include flowctlr driver from SoC specific makefiles
Varun Wadekar [Tue, 25 Aug 2015 11:31:06 +0000 (17:01 +0530)]
Tegra: include flowctlr driver from SoC specific makefiles

The Flow Controller hardware block is not present across all Tegra
SoCs, hence include the driver files from SoC specific makefiles.

T132/T210 are the SoCs which include this hardware block while future
SoCs have removed it.

Change-Id: Iaca25766a4fa51567293d10cf14dae968b0fae80
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
7 years agoMerge pull request #844 from antonio-nino-diaz-arm/an/no-timingsafe
danh-arm [Mon, 20 Feb 2017 14:00:05 +0000 (14:00 +0000)]
Merge pull request #844 from antonio-nino-diaz-arm/an/no-timingsafe

Revert "tbbr: Use constant-time bcmp() to compare hashes"

7 years agoMerge pull request #843 from jeenu-arm/cas-lock
danh-arm [Mon, 20 Feb 2017 13:59:50 +0000 (13:59 +0000)]
Merge pull request #843 from jeenu-arm/cas-lock

Introduce locking primitives using CAS instruction

7 years agoMerge pull request #842 from jeenu-arm/io-memmap-asserts
danh-arm [Mon, 20 Feb 2017 13:59:12 +0000 (13:59 +0000)]
Merge pull request #842 from jeenu-arm/io-memmap-asserts

Add bounds checking asserts to memmap IO driver

7 years agoMerge pull request #841 from dp-arm/dp/debug-regs
danh-arm [Mon, 20 Feb 2017 13:58:48 +0000 (13:58 +0000)]
Merge pull request #841 from dp-arm/dp/debug-regs

Disable secure self-hosted debug

7 years agoRevert "tbbr: Use constant-time bcmp() to compare hashes"
Antonio Nino Diaz [Thu, 9 Feb 2017 10:26:54 +0000 (10:26 +0000)]
Revert "tbbr: Use constant-time bcmp() to compare hashes"

This reverts commit b621fb503c76f3bdf06ed5ed1d3a995df8da9c50.

Because of the Trusted Firmware design, timing-safe functions are not
needed. Using them may be misleading as it could be interpreted as being
a protection against private data leakage, which isn't the case here.

For each image, the SHA-256 hash is calculated. Some padding is appended
and the result is encrypted with a private key using RSA-2048. This is
the signature of the image. The public key is stored along with BL1 in
read-only memory and the encrypted hash is stored in the FIP.

When authenticating an image, the TF decrypts the hash stored in the FIP
and recalculates the hash of the image. If they don't match, the boot
sequence won't continue.

A constant-time comparison does not provide additional security as all
the data involved in this process is already known to any attacker.
There is no private data that can leaked through a timing attack when
authenticating an image.

`timingsafe_bcmp()` is kept in the codebase because it could be useful
in the future.

Change-Id: I44bdcd58faa586a050cc89447e38c142508c9888
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #834 from douglas-raillard-arm/dr/use_dc_zva_zeroing
davidcunado-arm [Thu, 16 Feb 2017 14:49:37 +0000 (14:49 +0000)]
Merge pull request #834 from douglas-raillard-arm/dr/use_dc_zva_zeroing

Use DC ZVA instruction to zero memory

7 years agoMerge pull request #840 from dp-arm/dp/cppcheck-fixes
davidcunado-arm [Thu, 16 Feb 2017 09:57:56 +0000 (09:57 +0000)]
Merge pull request #840 from dp-arm/dp/cppcheck-fixes

Fix minor issues found by cppcheck

7 years agoMerge pull request #838 from davidcunado-arm/dc/update_userguide
davidcunado-arm [Thu, 16 Feb 2017 09:56:45 +0000 (09:56 +0000)]
Merge pull request #838 from davidcunado-arm/dc/update_userguide

Migrate to Linaro Release 16.12

7 years agoMerge pull request #829 from masahir0y/build
davidcunado-arm [Thu, 16 Feb 2017 09:56:17 +0000 (09:56 +0000)]
Merge pull request #829 from masahir0y/build

Makefile: use git describe for BUILD_STRING

7 years agoJuno: Disable SPIDEN in release builds
dp-arm [Wed, 8 Feb 2017 12:16:42 +0000 (12:16 +0000)]
Juno: Disable SPIDEN in release builds

On Juno, the secure privileged invasive debug authentication signal
(SPIDEN) is controlled by board SCC registers, which by default enable
SPIDEN.  Disable secure privileged external debug in release builds by
programming the appropriate Juno SoC registers.

Change-Id: I61045f09a47dc647bbe95e1b7a60e768f5499f49
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoDisable secure self-hosted debug via MDCR_EL3/SDCR
dp-arm [Wed, 8 Feb 2017 11:51:50 +0000 (11:51 +0000)]
Disable secure self-hosted debug via MDCR_EL3/SDCR

Trusted Firmware currently has no support for secure self-hosted
debug.  To avoid unexpected exceptions, disable software debug
exceptions, other than software breakpoint instruction exceptions,
from all exception levels in secure state.  This applies to both
AArch32 and AArch64 EL3 initialization.

Change-Id: Id097e54a6bbcd0ca6a2be930df5d860d8d09e777
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoFix minor issues found by cppcheck
dp-arm [Thu, 9 Feb 2017 10:25:29 +0000 (10:25 +0000)]
Fix minor issues found by cppcheck

cppcheck highlighted variables that were initialized but then later
reassigned.

Change-Id: Ie12742c01fd3bf48b2d6c05a3b448da91d57a2e4
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoAdd bounds checking asserts to memmap IO driver
Jeenu Viswambharan [Mon, 13 Feb 2017 13:06:18 +0000 (13:06 +0000)]
Add bounds checking asserts to memmap IO driver

The memmap IO driver doesn't perform bounds check when reading, writing,
or seeking. The onus to vet parameters is on the caller, and this patch
asserts that:

  - non-negative size is specified for for backing memory;

  - valid parameters are passed into the driver for read, write and seek
    operations.

Change-Id: I6518c4065817e640e9e7e39a8a4577655f2680f7
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoIntroduce locking primitives using CAS instruction
Jeenu Viswambharan [Mon, 16 Jan 2017 16:52:35 +0000 (16:52 +0000)]
Introduce locking primitives using CAS instruction

The ARMv8v.1 architecture extension has introduced support for far
atomics, which includes compare-and-swap. Compare and Swap instruction
is only available for AArch64.

Introduce build options to choose the architecture versions to target
ARM Trusted Firmware:

  - ARM_ARCH_MAJOR: selects the major version of target ARM
    Architecture. Default value is 8.

  - ARM_ARCH_MINOR: selects the minor version of target ARM
    Architecture. Default value is 0.

When:

  (ARM_ARCH_MAJOR > 8) || ((ARM_ARCH_MAJOR == 8) && (ARM_ARCH_MINOR >= 1)),

for AArch64, Compare and Swap instruction is used to implement spin
locks. Otherwise, the implementation falls back to using
load-/store-exclusive instructions.

Update user guide, and introduce a section in Firmware Design guide to
summarize support for features introduced in ARMv8 Architecture
Extensions.

Change-Id: I73096a0039502f7aef9ec6ab3ae36680da033f16
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoMerge pull request #833 from masahir0y/cert_create
davidcunado-arm [Tue, 14 Feb 2017 08:56:44 +0000 (08:56 +0000)]
Merge pull request #833 from masahir0y/cert_create

Bug fix and cleanup of cert_create tool

7 years agoMerge pull request #828 from masahir0y/fiptool
davidcunado-arm [Mon, 13 Feb 2017 17:33:43 +0000 (17:33 +0000)]
Merge pull request #828 from masahir0y/fiptool

Fiptool cleanup

7 years agoMigrate to Linaro Release 16.12
David Cunado [Fri, 10 Feb 2017 14:49:23 +0000 (14:49 +0000)]
Migrate to Linaro Release 16.12

This Linaro release updates both the binaries and the toolchain:
Linaro binaries upgraded 16.06 --> 16.12
AArch64 compiler upgraded 15.05 (gcc 4.9) --> 5.3-2015.05 (gcc 5.3)
AArch32 compiler upgraded 15.05 (gcc 4.9) --> 5.3-2015.05 (gcc 5.3)

The ARM TF codebase has been tested against these new binaries. This patch
updates the User Guide to reflect that the 16.12 release is now a supported
Linaro Release.

Change-Id: I6247e820f591df7d05df4f622ee45a3abf2c2d72
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoMerge pull request #826 from dp-arm/dp/psci-stat-abstraction
davidcunado-arm [Mon, 13 Feb 2017 17:21:03 +0000 (17:21 +0000)]
Merge pull request #826 from dp-arm/dp/psci-stat-abstraction

Decouple PSCI stat residency calculation from PMF

7 years agoPSCI: Do stat accounting for retention/standby states
dp-arm [Tue, 31 Jan 2017 13:03:00 +0000 (13:03 +0000)]
PSCI: Do stat accounting for retention/standby states

Perform stat accounting for retention/standby states also when
requested at multiple power levels.

Change-Id: I2c495ea7cdff8619bde323fb641cd84408eb5762
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoPSCI: Decouple PSCI stat residency calculation from PMF
dp-arm [Tue, 31 Jan 2017 13:01:04 +0000 (13:01 +0000)]
PSCI: Decouple PSCI stat residency calculation from PMF

This patch introduces the following three platform interfaces:

* void plat_psci_stat_accounting_start(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting before entering a low power state.  This
  typically involves capturing a timestamp.

* void plat_psci_stat_accounting_stop(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting after exiting from a low power state.  This
  typically involves capturing a timestamp.

* u_register_t plat_psci_stat_get_residency(unsigned int lvl,
const psci_power_state_t *state_info,
unsigned int last_cpu_index)

  This is an optional hook that platforms can implement in order
  to calculate the PSCI stat residency.

If any of these interfaces are overridden by the platform, it is
recommended that all of them are.

By default `ENABLE_PSCI_STAT` is disabled.  If `ENABLE_PSCI_STAT`
is set but `ENABLE_PMF` is not set then an alternative PSCI stat
collection backend must be provided.  If both are set, then default
weak definitions of these functions are provided, using PMF to
calculate the residency.

NOTE: Previously, platforms did not have to explicitly set
`ENABLE_PMF` since this was automatically done by the top-level
Makefile.

Change-Id: I17b47804dea68c77bc284df15ee1ccd66bc4b79b
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoMerge pull request #836 from davidcunado-arm/dc/update_userguide
davidcunado-arm [Mon, 13 Feb 2017 11:15:02 +0000 (11:15 +0000)]
Merge pull request #836 from davidcunado-arm/dc/update_userguide

Update AEM and Cortex Models versions

7 years agofiptool: remove unneeded declarations
Masahiro Yamada [Sat, 11 Feb 2017 04:02:12 +0000 (13:02 +0900)]
fiptool: remove unneeded declarations

These functions are defined above any calls.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: stretch out printf strings for readability and grep'ability
Masahiro Yamada [Thu, 2 Feb 2017 07:37:37 +0000 (16:37 +0900)]
fiptool: stretch out printf strings for readability and grep'ability

We should follow the Linux coding style, which is clearly stated in
the docs/user-guide.mk:

  When making changes to the source for submission to the project,
  the source must be in compliance with the Linux style guide

and Documentation/process/coding-style.rst of Linux Kernel says:

  The limit on the length of lines is 80 columns and this is a
  strongly preferred limit.
     [ snip ]
  However, never break user-visible strings such as printk messages,
  because that breaks the ability to grep for them.

The strings for printf() are user-visible, and can exceed the 80
column limit.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: print new lines of usage to stdout instead of stderr
Masahiro Yamada [Thu, 2 Feb 2017 07:34:14 +0000 (16:34 +0900)]
fiptool: print new lines of usage to stdout instead of stderr

The strings in usage functions are sent to stdout by printf(),
but some new lines are sent to stderr by fputc(..., stderr).

This inconsistency will break the usage format when users re-direct
stdout or stderr.  Just use printf() for consistency.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: remove unneeded initializers
Masahiro Yamada [Mon, 6 Feb 2017 10:47:44 +0000 (19:47 +0900)]
cert_create: remove unneeded initializers

These variables store return values of functions.  Remove all of
meaningless initializers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: merge successive i2d_ASN1_INTEGER() calls
Masahiro Yamada [Mon, 6 Feb 2017 10:00:11 +0000 (19:00 +0900)]
cert_create: merge successive i2d_ASN1_INTEGER() calls

The ext_new_nvcounter() function calls i2d_ASN1_INTEGER() twice;
the first call to get the return value "sz", and the second one
for writing data into the buffer.  This is actually redundant.
We can do both by one function call.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agocert_create: fix memory leak bug caused by key container overwrite
Masahiro Yamada [Mon, 6 Feb 2017 12:15:01 +0000 (21:15 +0900)]
cert_create: fix memory leak bug caused by key container overwrite

In the current code, both key_load() and key_create() call key_new()
to allocate a key container (and they do not free it even if they
fail).  If a specific key is not given by the command option,
key_load() fails, then key_create() is called.  At this point, the
key container that has been allocated in key_load() is still alive,
and it is overwritten by a new key container created by key_create().

Move the key_new() call to the main() function to make sure it is
called just once for each descriptor.

While we are here, let's fix one more bug; the error handling code
  ERROR("Malloc error while loading '%s'\n", keys[i].fn);
is wrong because keys[i].fn is NULL pointer unless a specific key is
given by the command option.  This code could be run in either case.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoUpdate AEM and Cortex Models versions
David Cunado [Thu, 9 Feb 2017 12:20:32 +0000 (12:20 +0000)]
Update AEM and Cortex Models versions

AEMv8-A Model release v8.2 has been made available and Trusted Firmware
has been tested against these versions as part of its CI system. This
patch updates the user guide documentation to reflect the version of AEM
and Cortex Models that Trusted Firmware has been tested against.

Also, the Linaro Release Notes link was broken and this patch updates the
link.

Change-Id: I88729cef909a69fff629036f480fd6168ad7dc9a
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoMerge pull request #831 from masahir0y/zynqmp
danh-arm [Tue, 7 Feb 2017 15:15:03 +0000 (15:15 +0000)]
Merge pull request #831 from masahir0y/zynqmp

zynqmp: remove RESET_TO_BL31=1 from build instruction

7 years agoReplace some memset call by zeromem
Douglas Raillard [Thu, 26 Jan 2017 15:54:44 +0000 (15:54 +0000)]
Replace some memset call by zeromem

Replace all use of memset by zeromem when zeroing moderately-sized
structure by applying the following transformation:
memset(x, 0, sizeof(x)) => zeromem(x, sizeof(x))

As the Trusted Firmware is compiled with -ffreestanding, it forbids the
compiler from using __builtin_memset and forces it to generate calls to
the slow memset implementation. Zeromem is a near drop in replacement
for this use case, with a more efficient implementation on both AArch32
and AArch64.

Change-Id: Ia7f3a90e888b96d056881be09f0b4d65b41aa79e
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoIntroduce unified API to zero memory
Douglas Raillard [Fri, 2 Dec 2016 13:51:54 +0000 (13:51 +0000)]
Introduce unified API to zero memory

Introduce zeromem_dczva function on AArch64 that can handle unaligned
addresses and make use of DC ZVA instruction to zero a whole block at a
time. This zeroing takes place directly in the cache to speed it up
without doing external memory access.

Remove the zeromem16 function on AArch64 and replace it with an alias to
zeromem. This zeromem16 function is now deprecated.

Remove the 16-bytes alignment constraint on __BSS_START__ in
firmware-design.md as it is now not mandatory anymore (it used to comply
with zeromem16 requirements).

Change the 16-bytes alignment constraints in SP min's linker script to a
8-bytes alignment constraint as the AArch32 zeromem implementation is now
more efficient on 8-bytes aligned addresses.

Introduce zero_normalmem and zeromem helpers in platform agnostic header
that are implemented this way:
* AArch32:
* zero_normalmem: zero using usual data access
* zeromem: alias for zero_normalmem
* AArch64:
* zero_normalmem: zero normal memory  using DC ZVA instruction
                  (needs MMU enabled)
* zeromem: zero using usual data access

Usage guidelines: in most cases, zero_normalmem should be preferred.

There are 2 scenarios where zeromem (or memset) must be used instead:
* Code that must run with MMU disabled (which means all memory is
  considered device memory for data accesses).
* Code that fills device memory with null bytes.

Optionally, the following rule can be applied if performance is
important:
* Code zeroing small areas (few bytes) that are not secrets should use
  memset to take advantage of compiler optimizations.

  Note: Code zeroing security-related critical information should use
  zero_normalmem/zeromem instead of memset to avoid removal by
  compilers' optimizations in some cases or misbehaving versions of GCC.

Fixes ARM-software/tf-issues#408

Change-Id: Iafd9663fc1070413c3e1904e54091cf60effaa82
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agoMerge pull request #830 from masahir0y/misc
danh-arm [Mon, 6 Feb 2017 16:13:32 +0000 (16:13 +0000)]
Merge pull request #830 from masahir0y/misc

gitignore: ignore GNU GLOBAL tag files

7 years agoMerge pull request #827 from dp-arm/dp/pmf-constants
danh-arm [Mon, 6 Feb 2017 16:12:13 +0000 (16:12 +0000)]
Merge pull request #827 from dp-arm/dp/pmf-constants

PMF: Fixup PMF constants

7 years agozynqmp: remove RESET_TO_BL31=1 from build instruction
Masahiro Yamada [Mon, 6 Feb 2017 08:59:58 +0000 (17:59 +0900)]
zynqmp: remove RESET_TO_BL31=1 from build instruction

RESET_TO_BL31=1 is specified by plat/xilinx/zynqmp/platform.mk with
"override" directive.  So, RESET_TO_BL31=1 is guaranteed without any
operation on users' side.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agogitignore: ignore GNU GLOBAL tag files
Masahiro Yamada [Fri, 3 Feb 2017 02:07:15 +0000 (11:07 +0900)]
gitignore: ignore GNU GLOBAL tag files

GNU GLOBAL (https://www.gnu.org/software/global/) is source code
tagging system.  It creates 4 tag files (GTAGS, GRTAGS, GSYMS and
GPATH) for the symbol cross-reference.  Ignore them.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoMakefile: use git describe for BUILD_STRING
Masahiro Yamada [Fri, 3 Feb 2017 02:47:27 +0000 (11:47 +0900)]
Makefile: use git describe for BUILD_STRING

Currently, the BUILD_STRING is just 7-digits git hash.  It is true
we can identify which version is running, but we can not get a quick
idea about how new or old it is.

The command "git describe" provides us a bit more useful information
in the format of:
  (tag-name)-(number of commits on top the tag)-g(7 digits hash)

I added some options:
  --always
    Make "git describe" work without any tag in case the upstream
    ATF is cloned, but all the tags are locally dropped.

  --tags
    Use any tag instead of only annotated tags.  In ATF, only some
    tags are annotated, actually the last annotated tag is "v0.2",
    whereas we are on "v1.3" tag now.  This option is needed to get
    something like v1.3-233-gbcc2bf0 instead of v0.2-1713-gbcc2bf0.

  --dirty
    The mark "-dirty" is appended if the source tree is locally
    modified.

With this commit, the welcome string

  NOTICE:  BL1: v1.3(debug):bcc2bf0

will become like follows:

  NOTICE:  BL1: v1.3(debug):v1.3-233-gbcc2bf0-dirty

While we are here, let's add "2> /dev/null" as well to silently
ignore any error message from git.  We should not assume that users
always work in a git repository; the ATF might be released in a
tarball form instead of a git repository.  In such a case, the git
command will fail, then the ugly message "fatal: Not a git ..." will
be displayed during the build:

$ make CROSS_COMPILE=aarch64-linux-gnu-
fatal: Not a git repository (or any of the parent directories): .git
Building fvp
  CC      drivers/io/io_semihosting.c
  CC      lib/semihosting/semihosting.c
     ...

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoPMF: Fixup PMF constants
dp-arm [Wed, 1 Feb 2017 11:38:02 +0000 (11:38 +0000)]
PMF: Fixup PMF constants

`PMF_ARM_TIF_IMPL_ID` should be set to 0x41.  The code already left
shifts it by 24 bit positions so this was overflowing.

This fixes a build error with GCC 6.2 when
`ENABLE_RUNTIME_INSTRUMENTATION` is set.

Change-Id: I4c99d48ea7ce3d76e9edd1325b1979994db2c0fb
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoMerge pull request #821 from jeenu-arm/errata-printing
danh-arm [Tue, 31 Jan 2017 15:40:20 +0000 (15:40 +0000)]
Merge pull request #821 from jeenu-arm/errata-printing

Errata printing infrastructure

7 years agoMerge pull request #799 from masahir0y/fiptool
danh-arm [Tue, 31 Jan 2017 15:39:19 +0000 (15:39 +0000)]
Merge pull request #799 from masahir0y/fiptool

fiptool: Alignment support + misc refactoring

7 years agoMerge pull request #825 from dp-arm/dp/simplify-cond
danh-arm [Tue, 31 Jan 2017 15:38:19 +0000 (15:38 +0000)]
Merge pull request #825 from dp-arm/dp/simplify-cond

tbbr: Simplify conditional

7 years agoMerge pull request #823 from douglas-raillard-arm/dr/add_fno_builtin
danh-arm [Tue, 31 Jan 2017 15:37:26 +0000 (15:37 +0000)]
Merge pull request #823 from douglas-raillard-arm/dr/add_fno_builtin

Add -fno-builtin to CFLAGS

7 years agoMerge pull request #822 from jeenu-arm/fix-fvp-refs
danh-arm [Tue, 31 Jan 2017 11:10:46 +0000 (11:10 +0000)]
Merge pull request #822 from jeenu-arm/fix-fvp-refs

user-guide.md: Fix FVP references

7 years agoMerge pull request #819 from davidcunado-arm/dc/build_with_gcc6.2
danh-arm [Tue, 31 Jan 2017 11:09:27 +0000 (11:09 +0000)]
Merge pull request #819 from davidcunado-arm/dc/build_with_gcc6.2

Resolve build errors flagged by GCC 6.2

7 years agotbbr: Simplify conditional
dp-arm [Tue, 31 Jan 2017 10:54:39 +0000 (10:54 +0000)]
tbbr: Simplify conditional

These are equivalent so use the reduced form.

Change-Id: I40ca097411b9abab69985b8e4dbccf7582eae49e
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
7 years agoReport errata workaround status to console
Jeenu Viswambharan [Tue, 3 Jan 2017 11:01:51 +0000 (11:01 +0000)]
Report errata workaround status to console

The errata reporting policy is as follows:

  - If an errata workaround is enabled:

    - If it applies (i.e. the CPU is affected by the errata), an INFO
      message is printed, confirming that the errata workaround has been
      applied.

    - If it does not apply, a VERBOSE message is printed, confirming
      that the errata workaround has been skipped.

  - If an errata workaround is not enabled, but would have applied had
    it been, a WARN message is printed, alerting that errata workaround
    is missing.

The CPU errata messages are printed by both BL1 (primary CPU only) and
runtime firmware on debug builds, once for each CPU/errata combination.

Relevant output from Juno r1 console when ARM Trusted Firmware is built
with PLAT=juno LOG_LEVEL=50 DEBUG=1:

  VERBOSE: BL1: cortex_a57: errata workaround for 806969 was not applied
  VERBOSE: BL1: cortex_a57: errata workaround for 813420 was not applied
  INFO:    BL1: cortex_a57: errata workaround for disable_ldnp_overread was applied
  WARNING: BL1: cortex_a57: errata workaround for 826974 was missing!
  WARNING: BL1: cortex_a57: errata workaround for 826977 was missing!
  WARNING: BL1: cortex_a57: errata workaround for 828024 was missing!
  WARNING: BL1: cortex_a57: errata workaround for 829520 was missing!
  WARNING: BL1: cortex_a57: errata workaround for 833471 was missing!
  ...
  VERBOSE: BL31: cortex_a57: errata workaround for 806969 was not applied
  VERBOSE: BL31: cortex_a57: errata workaround for 813420 was not applied
  INFO:    BL31: cortex_a57: errata workaround for disable_ldnp_overread was applied
  WARNING: BL31: cortex_a57: errata workaround for 826974 was missing!
  WARNING: BL31: cortex_a57: errata workaround for 826977 was missing!
  WARNING: BL31: cortex_a57: errata workaround for 828024 was missing!
  WARNING: BL31: cortex_a57: errata workaround for 829520 was missing!
  WARNING: BL31: cortex_a57: errata workaround for 833471 was missing!
  ...
  VERBOSE: BL31: cortex_a53: errata workaround for 826319 was not applied
  INFO:    BL31: cortex_a53: errata workaround for disable_non_temporal_hint was applied

Also update documentation.

Change-Id: Iccf059d3348adb876ca121cdf5207bdbbacf2aba
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoAllow spin locks to be defined from assembly
Jeenu Viswambharan [Thu, 19 Jan 2017 14:23:36 +0000 (14:23 +0000)]
Allow spin locks to be defined from assembly

At present, spin locks can only defined from C files. Add some macros
such that they can be defined from assembly files too.

Change-Id: I64f0c214062f5c15b3c8b412c7f25c908e87d970
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoAdd -fno-builtin to CFLAGS
Douglas Raillard [Mon, 16 Jan 2017 11:32:28 +0000 (11:32 +0000)]
Add -fno-builtin to CFLAGS

Disable the automatic substitution of functions with builtins. The
existing -ffreestanding option should already do this but explicitly
adding -fno-builtin reduces the risk of compiler variation. With this
option, GCC is not supposed to be able to make assumptions on what the
function does, which could otherwise lead to security-sensitive code
removal.

This can lead to potentially less efficient code but improves
predictability of what code is actually compiled into the binary.

Change-Id: I06ad151c61318bd1b00d84976f051d2d94314acc
Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
7 years agofiptool: support --align option to add desired alignment to image offset
Masahiro Yamada [Sun, 25 Dec 2016 04:52:22 +0000 (13:52 +0900)]
fiptool: support --align option to add desired alignment to image offset

The current fiptool packs all the images without any padding between
them.  So, the offset to each image has no alignment.  This is not
efficient, for example, when the FIP is read from a block-oriented
device.

For example, (e)MMC is accessed by block-addressing.  The block size
is 512 byte.  So, the best case is each image is aligned by 512 byte
since the DMA engine can transfer the whole of the image to its load
address directly.  The worst case is the offset does not have even
DMA-capable alignment (this is where we stand now).  In this case,
we need to transfer every block to a bounce buffer, then do memcpy()
from the bounce buffer to our final destination.  At least, this
should work with the abstraction by the block I/O layer, but the
CPU-intervention for the whole data transfer makes it really slow.

This commit adds a new option --align to the fiptool.  This option,
if given, requests the tool to align each component in the FIP file
by the specified byte.  Also, add a new Make option FIP_ALIGN for
easier access to this feature; users can give something like
FIP_ALIGN=512 from the command line, or add "FIP_ALIGN := 512" to
their platform.mk file.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: embed fip_toc_entry in struct image
Masahiro Yamada [Thu, 26 Jan 2017 18:56:58 +0000 (03:56 +0900)]
fiptool: embed fip_toc_entry in struct image

The struct image has "uuid" and "size" to memorize the field values
they had in the TOC entry.  So, parse_fip() copies them from struct
fip_toc_entry to struct image, then pack_images() copies them back
to struct fip_toc_entry.

The next commit (support --align option) will require to save the
"offset" field as well.  This makes me realize that struct image
can embed struct fip_toc_entry.

This commit will allow the "flags" field to persevere the "update"
command.  At this moment, the "flags" is not used in a useful way.
(Yet, platforms can save their own parameters in the flags field.)
It makes sense to save it unless users explicitly replace the image.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: add xfwrite() helper
Masahiro Yamada [Thu, 26 Jan 2017 18:54:02 +0000 (03:54 +0900)]
fiptool: add xfwrite() helper

We have same patterns for fwrite().

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: fix the global option in usage
Masahiro Yamada [Thu, 12 Jan 2017 17:13:06 +0000 (02:13 +0900)]
fiptool: fix the global option in usage

The global option --verbose should come after the "fiptool".

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: simplify the top line of command usage
Masahiro Yamada [Sat, 14 Jan 2017 02:04:36 +0000 (11:04 +0900)]
fiptool: simplify the top line of command usage

We need not mention like [--force], [--out <path>] because they are
included in [opts].

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: refactor remove_image()
Masahiro Yamada [Fri, 27 Jan 2017 04:31:40 +0000 (13:31 +0900)]
fiptool: refactor remove_image()

We need not handle the image_head as a special case.  Just use
a double-pointer to simplify the traverse.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: simplify assert() for add_image(_desc)
Masahiro Yamada [Fri, 27 Jan 2017 03:53:13 +0000 (12:53 +0900)]
fiptool: simplify assert() for add_image(_desc)

lookup_image(_desc)_from_uuid() traverses the linked list, so it
is not efficient.  We just want to make sure *p points to NULL here.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: revive replace_image() to keep the image order by update command
Masahiro Yamada [Fri, 27 Jan 2017 02:57:54 +0000 (11:57 +0900)]
fiptool: revive replace_image() to keep the image order by update command

Commit e0f083a09b29 ("fiptool: Prepare ground for expanding the set
of images at runtime") introduced another side effect; the "update"
command now changes the image order in the FIP.

Let's say you have an FIP with BL2, BL31, BL32, BL33.  If you update
for example, BL32 with the "update" command, you will get a new FIP
with BL2, BL31, BL33, BL32, in this order.

It happens like this; remove_image() removes the old image from the
linked list, add_image() adds the new image at the tail of the list,
then images are packed in the new order.  Prior to that commit,
images were updated by replace_image(), but it was deleted by the
re-work.  Revive replace_image() that is re-implemented to work with
the linked list.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: remove always true conditional
Masahiro Yamada [Sun, 15 Jan 2017 14:20:00 +0000 (23:20 +0900)]
fiptool: remove always true conditional

The conditional

  if (desc != NULL)
          ...

is always true here because we assert it 6 lines above:

  assert(desc != NULL);

Remove the if-conditional and concatenate the printf() calls.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agofiptool: fix existence check of FIP input file for update command
Masahiro Yamada [Sun, 25 Dec 2016 03:41:41 +0000 (12:41 +0900)]
fiptool: fix existence check of FIP input file for update command

This line should check the existence of the input file, but it is
actually checking the output file.  When -o option is given to the
"update" command, the outfile is unlikely to exist, then parse_fip()
is skipped and an empty FIP file is output.  This is wrong behavior.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoMerge pull request #814 from freedomtan/patches-for-8173-crbook-osi-0110
danh-arm [Thu, 26 Jan 2017 14:50:34 +0000 (14:50 +0000)]
Merge pull request #814 from freedomtan/patches-for-8173-crbook-osi-0110

Patches for 8173 crbook

7 years agouser-guide.md: Fix FVP references
Jeenu Viswambharan [Thu, 26 Jan 2017 13:08:17 +0000 (13:08 +0000)]
user-guide.md: Fix FVP references

The current user guide mentions that Foundation model doesn't support
debugger interface. Clarify that all FVPs support --cadi-server option
such that a CADI-compliant debugger can connect to and control model
execution.

Also fix broken URL to FVP home page.

Change-Id: Ia14d618a4e0abb4b228eb1616040f9b51fb3f6f9
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoResolve build errors flagged by GCC 6.2
David Cunado [Thu, 19 Jan 2017 10:26:16 +0000 (10:26 +0000)]
Resolve build errors flagged by GCC 6.2

With GCC 6.2 compiler, more C undefined behaviour is being flagged as
warnings, which result in build errors in ARM TF build.

The specific issue that this patch resolves is the use of (1 << 31),
which is predominantly used in case statements, where 1 is represented
as a signed int. When shifted to msb the behaviour is undefined.

The resolution is to specify 1 as an unsigned int using a convenience
macro ULL(). A duplicate macro MAKE_ULL() is replaced.

Fixes ARM-software/tf-issues#438

Change-Id: I08e3053bbcf4c022ee2be33a75bd0056da4073e1
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoMerge pull request #817 from antonio-nino-diaz-arm/an/timingsafe
danh-arm [Tue, 24 Jan 2017 16:30:56 +0000 (16:30 +0000)]
Merge pull request #817 from antonio-nino-diaz-arm/an/timingsafe

Import constant-time bcmp() and use it where necessary

7 years agotbbr: Use constant-time bcmp() to compare hashes
Antonio Nino Diaz [Fri, 13 Jan 2017 13:53:32 +0000 (13:53 +0000)]
tbbr: Use constant-time bcmp() to compare hashes

To avoid timing side-channel attacks, it is needed to use a constant
time memory comparison function when comparing hashes. The affected
code only cheks for equality so it isn't needed to use any variant of
memcmp(), bcmp() is enough.

Also, timingsafe_bcmp() is as fast as memcmp() when the two compared
regions are equal, so this change incurrs no performance hit in said
case. In case they are unequal, the boot sequence wouldn't continue as
normal, so performance is not an issue.

Change-Id: I1c7c70ddfa4438e6031c8814411fef79fd3bb4df
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agostdlib: Import timingsafe_bcmp() from FreeBSD
Antonio Nino Diaz [Mon, 16 Jan 2017 13:25:38 +0000 (13:25 +0000)]
stdlib: Import timingsafe_bcmp() from FreeBSD

Some side-channel attacks involve an attacker inferring something from
the time taken for a memory compare operation to complete, for example
when comparing hashes during image authentication. To mitigate this,
timingsafe_bcmp() must be used for such operations instead of the
standard memcmp().

This function executes in constant time and so doesn't leak any timing
information to the caller.

Change-Id: I470a723dc3626a0ee6d5e3f7fd48d0a57b8aa5fd
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #818 from sandrine-bailleux-arm/sb/strnlen
danh-arm [Tue, 24 Jan 2017 14:28:19 +0000 (14:28 +0000)]
Merge pull request #818 from sandrine-bailleux-arm/sb/strnlen

Add strnlen() to local C library

7 years agoAdd strnlen() to local C library
Sandrine Bailleux [Tue, 24 Jan 2017 10:18:01 +0000 (10:18 +0000)]
Add strnlen() to local C library

This code has been imported and slightly adapted from FreeBSD:
https://github.com/freebsd/freebsd/blob/6253393ad8df55730481bf2aafd76bdd6182e2f5/lib/libc/string/strnlen.c

Change-Id: Ie5ef5f92e6e904adb88f8628077fdf1d27470eb3
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
7 years agoRemove use of all deprecated APIs
Koan-Sin Tan [Mon, 18 Apr 2016 09:20:05 +0000 (17:20 +0800)]
Remove use of all deprecated APIs

Now it's possbile to build BL31 for MT8173 with ERROR_DEPRECATED=1.

Signed-off-by: Koan-Sin Tan <koansin.tan@gmail.com>
7 years agoGet rid of use of old GIC APIs
Koan-Sin Tan [Mon, 18 Apr 2016 07:17:57 +0000 (15:17 +0800)]
Get rid of use of old GIC APIs

Signed-off-by: Koan-Sin Tan <koansin.tan@gmail.com>
7 years agoAdd support of PSCI_EXTENDED_STATE_ID to MT8173
Koan-Sin Tan [Mon, 18 Apr 2016 06:28:03 +0000 (14:28 +0800)]
Add support of PSCI_EXTENDED_STATE_ID to MT8173

Signed-off-by: Koan-Sin Tan <koansin.tan@gmail.com>
7 years agoGet rid of use of compatibility API
Koan-Sin Tan [Thu, 19 Jan 2017 08:43:49 +0000 (16:43 +0800)]
Get rid of use of compatibility API

make 'make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- PLAT=mt8173
ENABLE_PLAT_COMPAT=0' work.

Change-Id: I13f35d8aef23dfa0e65883fa0be43f1513c9fef5
Signed-off-by: Koan-Sin Tan <koansin.tan@gmail.com>
7 years agoMerge pull request #800 from masahir0y/ifdef
danh-arm [Mon, 23 Jan 2017 16:49:43 +0000 (16:49 +0000)]
Merge pull request #800 from masahir0y/ifdef

Correct preprocessor conditionals

7 years agoMerge pull request #815 from hzhuang1/dwmmc_v3.9
danh-arm [Mon, 23 Jan 2017 16:47:55 +0000 (16:47 +0000)]
Merge pull request #815 from hzhuang1/dwmmc_v3.9

drivers: add designware emmc driver

7 years agoUse #ifdef for AARCH32 instead of #if
Masahiro Yamada [Sun, 25 Dec 2016 15:22:47 +0000 (00:22 +0900)]
Use #ifdef for AARCH32 instead of #if

One nasty part of ATF is some of boolean macros are always defined
as 1 or 0, and the rest of them are only defined under certain
conditions.

For the former group, "#if FOO" or "#if !FOO" must be used because
"#ifdef FOO" is always true.  (Options passed by $(call add_define,)
are the cases.)

For the latter, "#ifdef FOO" or "#ifndef FOO" should be used because
checking the value of an undefined macro is strange.

For AARCH32/AARCH64, these macros are defined in the top-level
Makefile as follows:

ifeq (${ARCH},aarch32)
        $(eval $(call add_define,AARCH32))
else
        $(eval $(call add_define,AARCH64))
endif

This means only one of the two is defined.  So, AARCH32/AARCH64
belongs to the latter group where we should use #ifdef or #ifndef.
The conditionals are mostly coded correctly, but I see some mistakes.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoUse #ifdef for IMAGE_BL* instead of #if
Masahiro Yamada [Sun, 25 Dec 2016 14:36:24 +0000 (23:36 +0900)]
Use #ifdef for IMAGE_BL* instead of #if

One nasty part of ATF is some of boolean macros are always defined
as 1 or 0, and the rest of them are only defined under certain
conditions.

For the former group, "#if FOO" or "#if !FOO" must be used because
"#ifdef FOO" is always true.  (Options passed by $(call add_define,)
are the cases.)

For the latter, "#ifdef FOO" or "#ifndef FOO" should be used because
checking the value of an undefined macro is strange.

Here, IMAGE_BL* is handled by make_helpers/build_macro.mk like
follows:

  $(eval IMAGE := IMAGE_BL$(call uppercase,$(3)))

  $(OBJ): $(2)
          @echo "  CC      $$<"
          $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -D$(IMAGE) -c $$< -o $$@

This means, IMAGE_BL* is defined when building the corresponding
image, but *undefined* for the other images.

So, IMAGE_BL* belongs to the latter group where we should use #ifdef
or #ifndef.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoMerge pull request #808 from masahir0y/build_fix
danh-arm [Mon, 23 Jan 2017 14:44:27 +0000 (14:44 +0000)]
Merge pull request #808 from masahir0y/build_fix

Fix parallel building

7 years agodrivers: add designware emmc driver
Haojian Zhuang [Fri, 18 Mar 2016 14:14:16 +0000 (22:14 +0800)]
drivers: add designware emmc driver

Support Designware eMMC driver. It's based on both IO block
and eMMC driver.

Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
7 years agoMerge pull request #810 from masahir0y/fiptool_fix
danh-arm [Mon, 23 Jan 2017 12:00:50 +0000 (12:00 +0000)]
Merge pull request #810 from masahir0y/fiptool_fix

Fix fiptool bug introduced by recent rework

7 years agoMerge pull request #813 from antonio-nino-diaz-arm/an/libfdt
danh-arm [Mon, 23 Jan 2017 11:42:46 +0000 (11:42 +0000)]
Merge pull request #813 from antonio-nino-diaz-arm/an/libfdt

Update libfdt to version 1.4.2

7 years agoMerge pull request #812 from antonio-nino-diaz-arm/an/clear-static-vars
danh-arm [Mon, 23 Jan 2017 11:39:17 +0000 (11:39 +0000)]
Merge pull request #812 from antonio-nino-diaz-arm/an/clear-static-vars

Clear static variables in X509 parser on error

7 years agoBuild: strip trailing slashes from directory paths more simply
Masahiro Yamada [Thu, 19 Jan 2017 10:31:00 +0000 (19:31 +0900)]
Build: strip trailing slashes from directory paths more simply

Append . then strip /. seems clumsy.  Just use $(patsubst %/,%, ).

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agoBuild: Fix parallel building
Masahiro Yamada [Thu, 12 Jan 2017 01:48:22 +0000 (10:48 +0900)]
Build: Fix parallel building

Soren reports build fails if -j option is given:

  $ make -j16 CROSS_COMPILE=aarch64-linux-gnu-
  Building fvp
  make: *** No rule to make target 'build/fvp/release/bl1/',
                    needed by 'build/fvp/release/bl1/bl1.ld'.  Stop.
  make: *** Waiting for unfinished jobs....

The cause of the failure is that $(dir ) leaves a trailing / on the
directory names.   It must be ripped off to let Make create the
directory.

There are some ways to fix the issue.  Here, I chose to make MAKE_LD
look like MAKE_C and MAKE_S because bl*_dirs seems the central place
of making directories.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reported-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
Tested-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
7 years agoClear static variables in X509 parser on error
Antonio Nino Diaz [Fri, 13 Jan 2017 15:03:19 +0000 (15:03 +0000)]
Clear static variables in X509 parser on error

In mbedtls_x509_parser.c there are some static arrays that are filled
during the integrity check and then read whenever an authentication
parameter is requested. However, they aren't cleared in case of an
integrity check failure, which can be problematic from a security
point of view. This patch clears these arrays in the case of failure.

Change-Id: I9d48f5bc71fa13e5a75d6c45b5e34796ef13aaa2
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoFix declarations of cache maintenance functions
Antonio Nino Diaz [Fri, 13 Jan 2017 15:03:07 +0000 (15:03 +0000)]
Fix declarations of cache maintenance functions

Fix the parameter type of the maintenance functions of data cache.

Add missing declarations for AArch32 versions of dcsw_op_louis and
dcsw_op_all to match the AAch64 ones.

Change-Id: I4226e8ea4f8b2b5bc2972992c83de659ee0da52c

7 years agoMerge pull request #801 from masahir0y/cleanup
davidcunado-arm [Wed, 18 Jan 2017 13:47:06 +0000 (13:47 +0000)]
Merge pull request #801 from masahir0y/cleanup

Macro cleanups