project/bcm63xx/atf.git
6 years agoSPM: Fix MM_COMMUNICATE_AARCH32/64 parameters
Sandrine Bailleux [Thu, 7 Dec 2017 09:48:56 +0000 (09:48 +0000)]
SPM: Fix MM_COMMUNICATE_AARCH32/64 parameters

This partially reverts commit d6b532b50f8, keeping only the fixes to
the assertions. The changes related to the order of arguments passed
to the secure partition were not correct and violated the
specification of the SP_EVENT_COMPLETE SMC.

This patch also improves the MM_COMMUNICATE argument validation.  The
cookie argument, as it comes from normal world, can't be trusted and thus
needs to always be validated at run time rather than using an assertion.

Also validate the communication buffer address and return
INVALID_PARAMETER if it is zero, as per the MM specification.

Fix a few typos in comments and use the "secure partition" terminology
rather than "secure payload".

Change-Id: Ice6b7b5494b729dd44611f9a93d362c55ab244f7
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
6 years agoMerge pull request #1178 from davidcunado-arm/dc/enable_sve
davidcunado-arm [Mon, 11 Dec 2017 12:29:47 +0000 (12:29 +0000)]
Merge pull request #1178 from davidcunado-arm/dc/enable_sve

Enable SVE for Non-secure world

6 years agoMerge pull request #1187 from antonio-nino-diaz-arm/an/spm-xlat-dram
davidcunado-arm [Sun, 10 Dec 2017 14:01:37 +0000 (14:01 +0000)]
Merge pull request #1187 from antonio-nino-diaz-arm/an/spm-xlat-dram

SPM: Move S-EL1/S-EL0 xlat tables to TZC DRAM

6 years agoMerge pull request #1184 from antonio-nino-diaz-arm/an/bl31-in-dram
davidcunado-arm [Sat, 9 Dec 2017 23:10:24 +0000 (23:10 +0000)]
Merge pull request #1184 from antonio-nino-diaz-arm/an/bl31-in-dram

fvp: Disable SYSTEM_SUSPEND when ARM_BL31_IN_DRAM

6 years agoMerge pull request #1183 from jeenu-arm/sdei-reset-fix
davidcunado-arm [Sat, 9 Dec 2017 20:42:25 +0000 (20:42 +0000)]
Merge pull request #1183 from jeenu-arm/sdei-reset-fix

SDEI: Fix return value of reset calls

6 years agoMerge pull request #1186 from antonio-nino-diaz-arm/an/poplar-doc
davidcunado-arm [Sat, 9 Dec 2017 15:22:48 +0000 (15:22 +0000)]
Merge pull request #1186 from antonio-nino-diaz-arm/an/poplar-doc

poplar: Fix format of documentation

6 years agoMerge pull request #1182 from soby-mathew/sm/opt_tbbr_flush
davidcunado-arm [Sat, 9 Dec 2017 15:16:00 +0000 (15:16 +0000)]
Merge pull request #1182 from soby-mathew/sm/opt_tbbr_flush

Unify cache flush code path after image load

6 years agoMerge pull request #1181 from soby-mathew/sm/el3_payload_tzc_permissions
davidcunado-arm [Sat, 9 Dec 2017 10:13:11 +0000 (10:13 +0000)]
Merge pull request #1181 from soby-mathew/sm/el3_payload_tzc_permissions

ARM Platforms: Change the TZC access permissions for EL3 payload

6 years agoMerge pull request #1180 from sandrine-bailleux-arm/sb/spm-rename
davidcunado-arm [Sat, 9 Dec 2017 09:36:09 +0000 (09:36 +0000)]
Merge pull request #1180 from sandrine-bailleux-arm/sb/spm-rename

Rename some macros in SPM code

6 years agoMerge pull request #1179 from paulkocialkowski/integration
davidcunado-arm [Sat, 9 Dec 2017 08:43:02 +0000 (08:43 +0000)]
Merge pull request #1179 from paulkocialkowski/integration

rockchip: Include stdint header in plat_sip_calls.c

6 years agoMerge pull request #1174 from antonio-nino-diaz-arm/an/page-size
davidcunado-arm [Fri, 8 Dec 2017 16:29:19 +0000 (16:29 +0000)]
Merge pull request #1174 from antonio-nino-diaz-arm/an/page-size

Replace magic numbers in linkerscripts by PAGE_SIZE

6 years agoMerge pull request #1171 from Leo-Yan/hikey960-change-use-recommend-state-id
davidcunado-arm [Wed, 6 Dec 2017 22:20:05 +0000 (22:20 +0000)]
Merge pull request #1171 from Leo-Yan/hikey960-change-use-recommend-state-id

Hikey960: Change to use recommended power state id format

6 years agoMerge pull request #1185 from danh-arm/dh/rk-maint
davidcunado-arm [Wed, 6 Dec 2017 21:08:48 +0000 (21:08 +0000)]
Merge pull request #1185 from danh-arm/dh/rk-maint

 Miscellaneous fixes to maintainers.rst

6 years agoMiscellaneous fixes to maintainers.rst
Dan Handley [Wed, 6 Dec 2017 10:13:17 +0000 (10:13 +0000)]
Miscellaneous fixes to maintainers.rst

* Update the RockChip sub-maintainer from rkchrome to rockchip-linux
in maintainers.rst.

* Add missing documentation files and change extensions from `md` to `rst`.

* Add sub-maintainer for Socionext UniPhier platform.

Change-Id: I7f498316acb0f7947c6432dbe14988e61a8903fe
Co-Authored-By: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Signed-off-by: Dan Handley <dan.handley@arm.com>
6 years agoSPM: Move S-EL1/S-EL0 xlat tables to TZC DRAM
Antonio Nino Diaz [Fri, 17 Nov 2017 11:48:55 +0000 (11:48 +0000)]
SPM: Move S-EL1/S-EL0 xlat tables to TZC DRAM

A new platform define, `PLAT_SP_IMAGE_XLAT_SECTION_NAME`, has been
introduced to select the section where the translation tables used by
the S-EL1/S-EL0 are placed.

This define has been used to move the translation tables to DRAM secured
by TrustZone.

Most of the extra needed space in BL31 when SPM is enabled is due to the
large size of the translation tables. By moving them to this memory
region we can save 44 KiB.

A new argument has been added to REGISTER_XLAT_CONTEXT2() to specify the
region where the translation tables have to be placed by the linker.

Change-Id: Ia81709b4227cb8c92601f0caf258f624c0467719
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoMerge pull request #1177 from sivadur/master
davidcunado-arm [Wed, 6 Dec 2017 13:59:58 +0000 (13:59 +0000)]
Merge pull request #1177 from sivadur/master

Update Xilinx maintainer details

6 years agopoplar: Fix format of documentation
Antonio Nino Diaz [Wed, 6 Dec 2017 10:33:15 +0000 (10:33 +0000)]
poplar: Fix format of documentation

The document was being rendered incorrectly.

Change-Id: I6e243d17d7cb6247f91698bc195eb0f6efeb7d17
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agofvp: Disable SYSTEM_SUSPEND when ARM_BL31_IN_DRAM
Antonio Nino Diaz [Wed, 22 Nov 2017 12:00:44 +0000 (12:00 +0000)]
fvp: Disable SYSTEM_SUSPEND when ARM_BL31_IN_DRAM

After returning from SYSTEM_SUSPEND state, BL31 reconfigures the
TrustZone Controller during the boot sequence. If BL31 is placed in
TZC-secured DRAM, it will try to change the permissions of the memory it
is being executed from, causing an exception.

The solution is to disable SYSTEM_SUSPEND when the Trusted Firmware has
been compiled with ``ARM_BL31_IN_DRAM=1``.

Change-Id: I96dc50decaacd469327c6b591d07964726e58db4
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoSPM: Remove ARM platforms header from SPM common code
Antonio Nino Diaz [Fri, 24 Nov 2017 16:43:15 +0000 (16:43 +0000)]
SPM: Remove ARM platforms header from SPM common code

Common code mustn't include ARM platforms headers.

Change-Id: Ib6e4f5a77c2d095e6e8c3ad89c89cb1959cd3043
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoSDEI: Fix return value of reset calls
Jeenu Viswambharan [Thu, 30 Nov 2017 10:25:10 +0000 (10:25 +0000)]
SDEI: Fix return value of reset calls

At present, both SDEI_PRIVATE_RESET and SDEI_SHARED_RESET returns
SDEI_PENDING if they fail to unregister an event. The SDEI specification
however requires that the APIs return SDEI_EDENY in these cases. This
patch fixes the return codes for the reset APIs.

Change-Id: Ic14484c91fa8396910387196c256d1ff13d03afd
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
6 years agoHikey960: Change to use recommended power state id format
Leo Yan [Fri, 24 Nov 2017 06:19:51 +0000 (14:19 +0800)]
Hikey960: Change to use recommended power state id format

ARM Power State Coordination Interface (ARM DEN 0022D) chapter
6.5 "Recommended StateID Encoding" defines the state ID which can be
used by platforms. The recommended power states can be presented by
below values; and it divides into three fields, every field has 4 bits
to present power states corresponding to core level, cluster level and
system level.

  0: Run
  1: Standby
  2: Retention
  3: Powerdown

This commit changes to use upper recommended power states definition on
Hikey960; and changes the power state validate function to check the
power state passed from kernel side.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
6 years agoMerge pull request #1157 from antonio-nino-diaz-arm/an/rpi3
davidcunado-arm [Tue, 5 Dec 2017 23:26:40 +0000 (23:26 +0000)]
Merge pull request #1157 from antonio-nino-diaz-arm/an/rpi3

Introduce AArch64 Raspberry Pi 3 port

6 years agoUnify cache flush code path after image load
Soby Mathew [Fri, 10 Nov 2017 13:14:40 +0000 (13:14 +0000)]
Unify cache flush code path after image load

Previously the cache flush happened in 2 different places in code
depending on whether TRUSTED_BOARD_BOOT is enabled or not. This
patch unifies this code path for both the cases. The `load_image()`
function is now made an internal static function.

Change-Id: I96a1da29d29236bbc34b1c95053e6a9a7fc98a54
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
6 years agoARM Platforms: Change the TZC access permissions for EL3 payload
Soby Mathew [Mon, 13 Nov 2017 08:29:45 +0000 (08:29 +0000)]
ARM Platforms: Change the TZC access permissions for EL3 payload

This patch allows non-secure bus masters to access TZC region0 as well
as the EL3 Payload itself.

Change-Id: I7e44f2673a2992920d41503fb4c57bd7fb30747a
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
6 years agoSPM: Rename SP_COMMUNICATE macros
Sandrine Bailleux [Fri, 1 Dec 2017 09:44:21 +0000 (09:44 +0000)]
SPM: Rename SP_COMMUNICATE macros

Rename SP_COMMUNICATE_AARCH32/AARCH64 into MM_COMMUNICATE_AARCH32/AARCH64
to align with the MM specification [1].

[1] http://infocenter.arm.com/help/topic/com.arm.doc.den0060a/DEN0060A_ARM_MM_Interface_Specification.pdf

Change-Id: I478aa4024ace7507d14a5d366aa8e20681075b03
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
6 years agoSPM: Rename SP_MEM_ATTR*** defines
Antonio Nino Diaz [Fri, 1 Dec 2017 14:12:43 +0000 (14:12 +0000)]
SPM: Rename SP_MEM_ATTR*** defines

The defines have been renamed to match the names used in the
documentation.

Change-Id: I2f18b65112d2db040a89d5a8522e9790c3e21628
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoMerge pull request #1168 from matt2048/master
davidcunado-arm [Mon, 4 Dec 2017 22:39:40 +0000 (22:39 +0000)]
Merge pull request #1168 from matt2048/master

Replace macro ASM_ASSERTION with macro ENABLE_ASSERTIONS

6 years agorockchip: Include stdint header in plat_sip_calls.c
Paul Kocialkowski [Sat, 2 Dec 2017 15:41:38 +0000 (16:41 +0100)]
rockchip: Include stdint header in plat_sip_calls.c

This includes the stdint header to declare the various types used within
the file, preventing build errors with recent GCC versions.

Change-Id: I9e7e92bb31deb58d4ff2732067dd88b53124bcc9
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
6 years agorpi3: Add documentation of Raspberry Pi 3 port
Antonio Nino Diaz [Fri, 1 Dec 2017 11:11:26 +0000 (11:11 +0000)]
rpi3: Add documentation of Raspberry Pi 3 port

Added design documentation and usage guide for the AArch64 port of the
Arm Trusted Firmware to the Raspberry Pi 3.

Change-Id: I1be60fbbd54c797b48a1bcebfb944d332616a0de
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agorpi3: Introduce AArch64 Raspberry Pi 3 port
Antonio Nino Diaz [Mon, 6 Nov 2017 14:49:04 +0000 (14:49 +0000)]
rpi3: Introduce AArch64 Raspberry Pi 3 port

This port can be compiled to boot an AArch64 or AArch32 payload with the
build option `RPI3_BL33_AARCH32`.

Note: This is not a secure port of the Trusted Firmware. This port is
only meant to be a reference implementation to experiment with an
inexpensive board in real hardware.

Change-Id: Ide58114299289bf765ef1366199eb05c46f81903
Co-authored-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoMerge pull request #1175 from soby-mathew/sm/juno-a32-bl32-changes
davidcunado-arm [Fri, 1 Dec 2017 00:31:09 +0000 (00:31 +0000)]
Merge pull request #1175 from soby-mathew/sm/juno-a32-bl32-changes

Fix issues for AArch32 builds on ARM platforms

6 years agoDo not enable SVE on pre-v8.2 platforms
David Cunado [Tue, 31 Oct 2017 23:19:21 +0000 (23:19 +0000)]
Do not enable SVE on pre-v8.2 platforms

Pre-v8.2 platforms such as the Juno platform does not have
the Scalable Vector Extensions implemented and so the build
option ENABLE_SVE is set to zero.

This has a minor performance improvement with no functional
impact.

Change-Id: Ib072735db7a0247406f8b60e325b7e28b1e04ad1
Signed-off-by: David Cunado <david.cunado@arm.com>
6 years agoEnable SVE for Non-secure world
David Cunado [Fri, 20 Oct 2017 10:30:57 +0000 (11:30 +0100)]
Enable SVE for Non-secure world

This patch adds a new build option, ENABLE_SVE_FOR_NS, which when set
to one EL3 will check to see if the Scalable Vector Extension (SVE) is
implemented when entering and exiting the Non-secure world.

If SVE is implemented, EL3 will do the following:

- Entry to Non-secure world: SIMD, FP and SVE functionality is enabled.

- Exit from Non-secure world: SIMD, FP and SVE functionality is
  disabled. As SIMD and FP registers are part of the SVE Z-registers
  then any use of SIMD / FP functionality would corrupt the SVE
  registers.

The build option default is 1. The SVE functionality is only supported
on AArch64 and so the build option is set to zero when the target
archiecture is AArch32.

This build option is not compatible with the CTX_INCLUDE_FPREGS - an
assert will be raised on platforms where SVE is implemented and both
ENABLE_SVE_FOR_NS and CTX_INCLUDE_FPREGS are set to 1.

Also note this change prevents secure world use of FP&SIMD registers on
SVE-enabled platforms. Existing Secure-EL1 Payloads will not work on
such platforms unless ENABLE_SVE_FOR_NS is set to 0.

Additionally, on the first entry into the Non-secure world the SVE
functionality is enabled and the SVE Z-register length is set to the
maximum size allowed by the architecture. This includes the use case
where EL2 is implemented but not used.

Change-Id: Ie2d733ddaba0b9bef1d7c9765503155188fe7dae
Signed-off-by: David Cunado <david.cunado@arm.com>
6 years agoUpdate Xilinx maintainer details
Siva Durga Prasad Paladugu [Thu, 30 Nov 2017 04:51:20 +0000 (10:21 +0530)]
Update Xilinx maintainer details

This patch updates Xilinx maintainers details
as sorenb is no more the maintainer for xilinx
and the email id is invalid now.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
6 years agoJuno AArch32: Remove duplicate definition of bl2 platform API
Soby Mathew [Wed, 15 Nov 2017 12:05:28 +0000 (12:05 +0000)]
Juno AArch32: Remove duplicate definition of bl2 platform API

The bl2_early_platform_setup() and bl2_platform_setup() were
redefined for Juno AArch32 eventhough CSS platform layer had
same definition for them. The CSS definitions definitions were
previously restricted to EL3_PAYLOAD_BASE builds and this is now
modified to include the Juno AArch32 builds as well thus
allowing us to remove the duplicate definitions in Juno platform
layer.

Change-Id: Ibd1d8c1428cc1d51ac0ba90f19f5208ff3278ab5
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
6 years agoARM platforms: Fixup AArch32 builds
Soby Mathew [Tue, 14 Nov 2017 14:10:10 +0000 (14:10 +0000)]
ARM platforms: Fixup AArch32 builds

This patch fixes a couple of issues for AArch32 builds on ARM reference
platforms :

1. The arm_def.h previously defined the same BL32_BASE value for AArch64 and
   AArch32 build. Since BL31 is not present in AArch32 mode, this meant that
   the BL31 memory is empty when built for AArch32. Hence this patch allocates
   BL32 to the memory region occupied by BL31 for AArch32 builds.

   As a side-effect of this change, the ARM_TSP_RAM_LOCATION macro cannot
   be used to control the load address of BL32 in AArch32 mode which was
   never the intention of the macro anyway.

2. A static assert is added to sp_min linker script to check that the progbits
   are within the bounds expected when overlaid with other images.

3. Fix specifying `SPD` when building Juno for AArch32 mode. Due to the quirks
   involved when building Juno for AArch32 mode, the build option SPD needed to
   specifed. This patch corrects this and also updates the documentation in the
   user-guide.

4. Exclude BL31 from the build and FIP when building Juno for AArch32 mode. As
   a result the previous assumption that BL31 must be always present is removed
   and the certificates for BL31 is only generated if `NEED_BL31` is defined.

Change-Id: I1c39bbc0abd2be8fbe9f2dea2e9cb4e3e3e436a8
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
6 years agoReplace magic numbers in linkerscripts by PAGE_SIZE
Antonio Nino Diaz [Wed, 15 Nov 2017 11:45:35 +0000 (11:45 +0000)]
Replace magic numbers in linkerscripts by PAGE_SIZE

When defining different sections in linker scripts it is needed to align
them to multiples of the page size. In most linker scripts this is done
by aligning to the hardcoded value 4096 instead of PAGE_SIZE.

This may be confusing when taking a look at all the codebase, as 4096
is used in some parts that aren't meant to be a multiple of the page
size.

Change-Id: I36c6f461c7782437a58d13d37ec8b822a1663ec1
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
6 years agoMerge pull request #1170 from dp-arm/dp/amu
davidcunado-arm [Wed, 29 Nov 2017 10:41:33 +0000 (10:41 +0000)]
Merge pull request #1170 from dp-arm/dp/amu

Add support for Activity Monitors

6 years agoAMU: Implement support for aarch32
Dimitris Papastamos [Tue, 17 Oct 2017 13:03:14 +0000 (14:03 +0100)]
AMU: Implement support for aarch32

The `ENABLE_AMU` build option can be used to enable the
architecturally defined AMU counters.  At present, there is no support
for the auxiliary counter group.

Change-Id: Ifc7532ef836f83e629f2a146739ab61e75c4abc8
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
6 years agoAMU: Implement support for aarch64
Dimitris Papastamos [Thu, 12 Oct 2017 12:02:29 +0000 (13:02 +0100)]
AMU: Implement support for aarch64

The `ENABLE_AMU` build option can be used to enable the
architecturally defined AMU counters.  At present, there is no support
for the auxiliary counter group.

Change-Id: I7ea0c0a00327f463199d1b0a481f01dadb09d312
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
6 years agofvp: Enable the Activity Monitor Unit extensions by default
Dimitris Papastamos [Tue, 14 Nov 2017 13:27:41 +0000 (13:27 +0000)]
fvp: Enable the Activity Monitor Unit extensions by default

Change-Id: I96de88f44c36681ad8a70430af8e01016394bd14
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
6 years agoImplement support for the Activity Monitor Unit on Cortex A75
Dimitris Papastamos [Mon, 16 Oct 2017 10:40:10 +0000 (11:40 +0100)]
Implement support for the Activity Monitor Unit on Cortex A75

The Cortex A75 has 5 AMU counters.  The first three counters are fixed
and the remaining two are programmable.

A new build option is introduced, `ENABLE_AMU`.  When set, the fixed
counters will be enabled for use by lower ELs.  The programmable
counters are currently disabled.

Change-Id: I4bd5208799bb9ed7d2596e8b0bfc87abbbe18740
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
7 years agoMerge pull request #1172 from sandrine-bailleux-arm/sb/fix-makefile-aarch32
davidcunado-arm [Fri, 24 Nov 2017 13:27:50 +0000 (13:27 +0000)]
Merge pull request #1172 from sandrine-bailleux-arm/sb/fix-makefile-aarch32

Fix Makefile for ARMv8-A AArch32 builds

7 years agoFix Makefile for ARMv8-A AArch32 build
Sandrine Bailleux [Fri, 24 Nov 2017 08:43:40 +0000 (08:43 +0000)]
Fix Makefile for ARMv8-A AArch32 build

Commit 26e63c4450 broke the Makefile for ARMv8-A AArch32 platforms.
This patch fixes it.

Change-Id: I49b8eb5b88f3a131aa4c8642ef970e92d90b6dd2
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
7 years agoMerge pull request #1169 from antonio-nino-diaz-arm/an/spm-fixes
davidcunado-arm [Thu, 23 Nov 2017 23:50:06 +0000 (23:50 +0000)]
Merge pull request #1169 from antonio-nino-diaz-arm/an/spm-fixes

SPM fixes

7 years agoMerge pull request #1145 from etienne-lms/rfc-armv7-2
davidcunado-arm [Thu, 23 Nov 2017 23:41:24 +0000 (23:41 +0000)]
Merge pull request #1145 from etienne-lms/rfc-armv7-2

Support ARMv7 architectures

7 years agoMerge pull request #1164 from robertovargas-arm/psci-affinity
davidcunado-arm [Thu, 23 Nov 2017 10:18:06 +0000 (10:18 +0000)]
Merge pull request #1164 from robertovargas-arm/psci-affinity

Flush the affinity data in psci_affinity_info

7 years agoReplace macro ASM_ASSERTION with macro ENABLE_ASSERTIONS
Matt Ma [Wed, 22 Nov 2017 11:31:28 +0000 (19:31 +0800)]
Replace macro ASM_ASSERTION with macro ENABLE_ASSERTIONS

This patch replaces the macro ASM_ASSERTION with the macro
ENABLE_ASSERTIONS in ARM Cortex-A53/57/72 MPCore Processor
related files. There is build error when ASM_ASSERTION is set
to 1 and ENABLE_ASSERTIONS is set to 0 because function
asm_assert in common/aarch32/debug.S is defined in the macro
ENABLE_ASSERTIONS but is called with the macro ASM_ASSERTION.

There is also the indication to use ENABLE_ASSERTIONS but not
ASM_ASSERTION in the Makefile.

Signed-off-by: Matt Ma <matt.ma@spreadtrum.com>
7 years agoMerge pull request #1163 from antonio-nino-diaz-arm/an/parange
davidcunado-arm [Thu, 23 Nov 2017 00:39:55 +0000 (00:39 +0000)]
Merge pull request #1163 from antonio-nino-diaz-arm/an/parange

Add ARMv8.2 ID_AA64MMFR0_EL1.PARange value

7 years agoMerge pull request #1165 from geesun/qx/support-sha512
davidcunado-arm [Wed, 22 Nov 2017 22:42:12 +0000 (22:42 +0000)]
Merge pull request #1165 from geesun/qx/support-sha512

Add support sha512 for hash algorithm

7 years agoMerge pull request #1161 from jeenu-arm/sdei-fixes
davidcunado-arm [Wed, 22 Nov 2017 13:57:03 +0000 (13:57 +0000)]
Merge pull request #1161 from jeenu-arm/sdei-fixes

SDEI fixes

7 years agoMerge pull request #1162 from dp-arm/spe-rework
davidcunado-arm [Wed, 22 Nov 2017 11:51:29 +0000 (11:51 +0000)]
Merge pull request #1162 from dp-arm/spe-rework

Move SPE code to lib/extensions

7 years agotbbr: Add build flag HASH_ALG to let the user to select the SHA
Qixiang Xu [Thu, 9 Nov 2017 05:56:29 +0000 (13:56 +0800)]
tbbr: Add build flag HASH_ALG to let the user to select the SHA

The flag support the following values:
    - sha256 (default)
    - sha384
    - sha512

Change-Id: I7a49d858c361e993949cf6ada0a86575c3291066
Signed-off-by: Qixiang Xu <qixiang.xu@arm.com>
7 years agotools: add an option -hash-alg for cert_create
Qixiang Xu [Thu, 9 Nov 2017 05:51:58 +0000 (13:51 +0800)]
tools: add an option -hash-alg for cert_create

This option enables the user to select the secure hash algorithm
to be used for generating the hash. It supports the following
options:
    - sha256 (default)
    - sha384
    - sha512

Change-Id: Icb093cec1b5715e248c3d1c3749a2479a7ab4b89
Signed-off-by: Qixiang Xu <qixiang.xu@arm.com>
7 years agoFlush the affinity data in psci_affinity_info
Roberto Vargas [Mon, 13 Nov 2017 08:24:07 +0000 (08:24 +0000)]
Flush the affinity data in psci_affinity_info

There is an edge case where the cache maintaince done in
psci_do_cpu_off may not seen by some cores. This case is handled in
psci_cpu_on_start but it hasn't handled in psci_affinity_info.

Change-Id: I4d64f3d1ca9528e364aea8d04e2d254f201e1702
Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
7 years agoRefactor Statistical Profiling Extensions implementation
Dimitris Papastamos [Fri, 13 Oct 2017 11:06:06 +0000 (12:06 +0100)]
Refactor Statistical Profiling Extensions implementation

Factor out SPE operations in a separate file.  Use the publish
subscribe framework to drain the SPE buffers before entering secure
world.  Additionally, enable SPE before entering normal world.

A side effect of this change is that the profiling buffers are now
only drained when a transition from normal world to secure world
happens.  Previously they were drained also on return from secure
world, which is unnecessary as SPE is not supported in S-EL1.

Change-Id: I17582c689b4b525770dbb6db098b3a0b5777b70a
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
7 years agoChange Statistical Profiling Extensions build option handling
Dimitris Papastamos [Fri, 13 Oct 2017 14:07:45 +0000 (15:07 +0100)]
Change Statistical Profiling Extensions build option handling

It is not possible to detect at compile-time whether support for an
optional extension such as SPE should be enabled based on the
ARM_ARCH_MINOR build option value.  Therefore SPE is now enabled by
default.

Change-Id: I670db164366aa78a7095de70a0962f7c0328ab7c
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
7 years agoFactor out extension enabling to a separate function
Dimitris Papastamos [Tue, 7 Nov 2017 09:55:29 +0000 (09:55 +0000)]
Factor out extension enabling to a separate function

Factor out extension enabling to a separate function that is called
before exiting from EL3 for first entry into Non-secure world.

Change-Id: Ic21401ebba531134d08643c0a1ca9de0fc590a1b
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
7 years agoSDEI: Update doc to clarify delegation
Jeenu Viswambharan [Thu, 16 Nov 2017 12:34:15 +0000 (12:34 +0000)]
SDEI: Update doc to clarify delegation

The explicit event dispatch sequence currently depicts handling done in
Secure EL1, although further error handling is typically done inside a
Secure Partition. Clarify the sequence diagram to that effect.

Change-Id: I53deedc6d5ee0706626890067950c2c541a62c78
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoSDEI: Assert that dynamic events have Normal priority
Jeenu Viswambharan [Thu, 16 Nov 2017 12:06:34 +0000 (12:06 +0000)]
SDEI: Assert that dynamic events have Normal priority

The SDEI specification requires that binding a client interrupt
dispatches SDEI Normal priority event. This means that dynamic events
can't have Critical priority. Add asserts for this.

Change-Id: I0bdd9e0e642fb2b61810cb9f4cbfbd35bba521d1
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoSDEI: Fix type of register count
Jeenu Viswambharan [Tue, 14 Nov 2017 15:35:41 +0000 (15:35 +0000)]
SDEI: Fix type of register count

Register count is currently declared as unsigned, where as there are
asserts in place to check it being negative during unregister. These are
flagged as never being true.

Change-Id: I34f00f0ac5bf88205791e9c1298a175dababe7c8
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoSDEI: Fix security state check for explicit dispatch
Jeenu Viswambharan [Tue, 14 Nov 2017 10:52:20 +0000 (10:52 +0000)]
SDEI: Fix security state check for explicit dispatch

Change-Id: Ic381ab5d03ec68c7f6e8d357ac2e2cbf0cc6b2e8
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoMerge pull request #1160 from davidcunado-arm/dc/fp_regs
davidcunado-arm [Fri, 17 Nov 2017 12:18:22 +0000 (12:18 +0000)]
Merge pull request #1160 from davidcunado-arm/dc/fp_regs

Move FPEXC32_EL2 to FP Context

7 years agoAdd ARMv8.2 ID_AA64MMFR0_EL1.PARange value
Antonio Nino Diaz [Fri, 17 Nov 2017 09:52:53 +0000 (09:52 +0000)]
Add ARMv8.2 ID_AA64MMFR0_EL1.PARange value

If an implementation of ARMv8.2 includes ARMv8.2-LPA, the value 0b0110
is permitted in ID_AA64MMFR0_EL1.PARange, which means that the Physical
Address range supported is 52 bits (4 PiB). It is a reserved value
otherwise.

Change-Id: Ie0147218e9650aa09f0034a9ee03c1cca8db908a
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMove FPEXC32_EL2 to FP Context
David Cunado [Fri, 20 Oct 2017 10:30:57 +0000 (11:30 +0100)]
Move FPEXC32_EL2 to FP Context

The FPEXC32_EL2 register controls SIMD and FP functionality when the
lower ELs are executing in AArch32 mode. It is architecturally mapped
to AArch32 system register FPEXC.

This patch removes FPEXC32_EL2 register from the System Register context
and adds it to the floating-point context. EL3 only saves / restores the
floating-point context if the build option CTX_INCLUDE_FPREGS is set to 1.

The rationale for this change is that if the Secure world is using FP
functionality and EL3 is not managing the FP context, then the Secure
world will save / restore the appropriate FP registers.

NOTE - this is a break in behaviour in the unlikely case that
CTX_INCLUDE_FPREGS is set to 0 and the platform contains an AArch32
Secure Payload that modifies FPEXC, but does not save and restore
this register

Change-Id: Iab80abcbfe302752d52b323b4abcc334b585c184
Signed-off-by: David Cunado <david.cunado@arm.com>
7 years agoSPM: Fix SP_COMMUNICATE_AARCH32/64 parameters
Antonio Nino Diaz [Wed, 15 Nov 2017 10:36:21 +0000 (10:36 +0000)]
SPM: Fix SP_COMMUNICATE_AARCH32/64 parameters

The parameters passed to the Secure world from the Secure Partition
Manager when invoking SP_COMMUNICATE_AARCH32/64 were incorrect, as well
as the checks done on them.

Change-Id: I26e8c80cad0b83437db7aaada3d0d9add1c53a78
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoSPM: Fix calculation of max page granularity
Antonio Nino Diaz [Tue, 14 Nov 2017 13:41:27 +0000 (13:41 +0000)]
SPM: Fix calculation of max page granularity

The code was incorrectly reading from ID_AA64PRF0_EL1 instead of
ID_AA64MMFR0_EL1 causing the supported granularity sizes returned by the
code to be wrong.

This wasn't causing any problem because it's just used to check the
alignment of the base of the buffer shared between Non-secure and Secure
worlds, and it was aligned to more than 64 KiB, which is the maximum
granularity supported by the architecture.

Change-Id: Icc0d949d9521cc0ef13afb753825c475ea62d462
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #1159 from jeenu-arm/sdei-fix
davidcunado-arm [Tue, 14 Nov 2017 09:25:50 +0000 (09:25 +0000)]
Merge pull request #1159 from jeenu-arm/sdei-fix

SDEI: Fix build error with logging enabled

7 years agoSDEI: Fix build error with logging enabled
Jeenu Viswambharan [Mon, 13 Nov 2017 12:30:45 +0000 (12:30 +0000)]
SDEI: Fix build error with logging enabled

Change-Id: Iee617a3528225349b6eede2f8abb26da96640678
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoMerge pull request #1152 from jeenu-arm/ehf-and-sdei
davidcunado-arm [Mon, 13 Nov 2017 10:58:40 +0000 (10:58 +0000)]
Merge pull request #1152 from jeenu-arm/ehf-and-sdei

EHF and SDEI

7 years agodocs: Add SDEI dispatcher documentation
Jeenu Viswambharan [Wed, 18 Oct 2017 13:35:20 +0000 (14:35 +0100)]
docs: Add SDEI dispatcher documentation

The document includes SDEI sequence diagrams that are generated using
PlantUML [1].

A shell script is introduced to generate SVG files from PlantUML files
supplied in arguments.

[1] http://plantuml.com/PlantUML_Language_Reference_Guide.pdf

Change-Id: I433897856810bf1927f2800a7b2b1d81827c69b2
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoSDEI: Add API for explicit dispatch
Jeenu Viswambharan [Mon, 2 Oct 2017 11:10:54 +0000 (12:10 +0100)]
SDEI: Add API for explicit dispatch

This allows for other EL3 components to schedule an SDEI event dispatch
to Normal world upon the next ERET. The API usage constrains are set out
in the SDEI dispatcher documentation.

Documentation to follow.

Change-Id: Id534bae0fd85afc94523490098c81f85c4e8f019
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoARM platforms: Enable SDEI
Jeenu Viswambharan [Fri, 22 Sep 2017 07:32:10 +0000 (08:32 +0100)]
ARM platforms: Enable SDEI

Support SDEI on ARM platforms using frameworks implemented in earlier
patches by defining and exporting SDEI events: this patch defines the
standard event 0, and a handful of shared and private dynamic events.

Change-Id: I9d3d92a92cff646b8cc55eabda78e140deaa24e1
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoARM platforms: Define exception macros
Jeenu Viswambharan [Tue, 24 Oct 2017 10:47:13 +0000 (11:47 +0100)]
ARM platforms: Define exception macros

Define number of priority bits, and allocate priority levels for SDEI.

Change-Id: Ib6bb6c5c09397f7caef950c4caed5a737b3d4112
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoARM platforms: Provide SDEI entry point validation
Jeenu Viswambharan [Thu, 19 Oct 2017 08:15:15 +0000 (09:15 +0100)]
ARM platforms: Provide SDEI entry point validation

Provide a strong definition for plat_sdei_validate_sdei_entrypoint()
which translates client address to Physical Address, and then validating
the address to be present in DRAM.

Change-Id: Ib93eb66b413d638aa5524d1b3de36aa16d38ea11
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoARM platforms: Make arm_validate_ns_entrypoint() common
Jeenu Viswambharan [Tue, 19 Sep 2017 08:27:18 +0000 (09:27 +0100)]
ARM platforms: Make arm_validate_ns_entrypoint() common

The function arm_validate_ns_entrypoint() validates a given non-secure
physical address. This function however specifically returns PSCI error
codes.

Non-secure physical address validation is potentially useful across ARM
platforms, even for non-PSCI use cases. Therefore make this function
common by returning 0 for success or -1 otherwise.

Having made the function common, make arm_validate_psci_entrypoint() a
wrapper around arm_validate_ns_entrypoint() which only translates return
value into PSCI error codes. This wrapper is now used where
arm_validate_ns_entrypoint() was currently used for PSCI entry point
validation.

Change-Id: Ic781fc3105d6d199fd8f53f01aba5baea0ebc310
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoBL31: Add SDEI dispatcher
Jeenu Viswambharan [Mon, 16 Oct 2017 07:43:14 +0000 (08:43 +0100)]
BL31: Add SDEI dispatcher

The implementation currently supports only interrupt-based SDEI events,
and supports all interfaces as defined by SDEI specification version
1.0 [1].

Introduce the build option SDEI_SUPPORT to include SDEI dispatcher in
BL31.

Update user guide and porting guide. SDEI documentation to follow.

[1] http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf

Change-Id: I758b733084e4ea3b27ac77d0259705565842241a
Co-authored-by: Yousuf A <yousuf.sait@arm.com>
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoBL31: Program Priority Mask for SMC handling
Jeenu Viswambharan [Wed, 4 Oct 2017 11:21:34 +0000 (12:21 +0100)]
BL31: Program Priority Mask for SMC handling

On GICv3 systems, as a side effect of adding provision to handle EL3
interrupts (unconditionally routing FIQs to EL3), pending Non-secure
interrupts (signalled as FIQs) may preempt execution in lower Secure ELs
[1]. This will inadvertently disrupt the semantics of Fast SMC
(previously called Atomic SMC) calls.

To retain semantics of Fast SMCs, the GIC PMR must be programmed to
prevent Non-secure interrupts from preempting Secure execution. To that
effect, two new functions in the Exception Handling Framework subscribe
to events introduced in an earlier commit:

  - Upon 'cm_exited_normal_world', the Non-secure PMR is stashed, and
    the PMR is programmed to the highest Non-secure interrupt priority.

  - Upon 'cm_entering_normal_world', the previously stashed Non-secure
    PMR is restored.

The above sequence however prevents Yielding SMCs from being preempted
by Non-secure interrupts as intended. To facilitate this, the public API
exc_allow_ns_preemption() is introduced that programs the PMR to the
original Non-secure PMR value. Another API
exc_is_ns_preemption_allowed() is also introduced to check if
exc_allow_ns_preemption() had been called previously.

API documentation to follow.

[1] On GICv2 systems, this isn't a problem as, unlike GICv3, pending NS
    IRQs during Secure execution are signalled as IRQs, which aren't
    routed to EL3.

Change-Id: Ief96b162b0067179b1012332cd991ee1b3051dd0
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoBL31: Introduce Exception Handling Framework
Jeenu Viswambharan [Fri, 22 Sep 2017 07:32:10 +0000 (08:32 +0100)]
BL31: Introduce Exception Handling Framework

EHF is a framework that allows dispatching of EL3 interrupts to their
respective handlers in EL3.

This framework facilitates the firmware-first error handling policy in
which asynchronous exceptions may be routed to EL3. Such exceptions may
be handed over to respective exception handlers. Individual handlers
might further delegate exception handling to lower ELs.

The framework associates the delegated execution to lower ELs with a
priority value. For interrupts, this corresponds to the priorities
programmed in GIC; for other types of exceptions, viz. SErrors or
Synchronous External Aborts, individual dispatchers shall explicitly
associate delegation to a secure priority. In order to prevent lower
priority interrupts from preempting higher priority execution, the
framework provides helpers to control preemption by virtue of
programming Priority Mask register in the interrupt controller.

This commit allows for handling interrupts targeted at EL3. Exception
handlers own interrupts by assigning them a range of secure priorities,
and registering handlers for each priority range it owns.

Support for exception handling in BL31 image is enabled by setting the
build option EL3_EXCEPTION_HANDLING=1.

Documentation to follow.

NOTE: The framework assumes the priority scheme supported by platform
interrupt controller is compliant with that of ARM GIC architecture (v2
or later).

Change-Id: I7224337e4cea47c6ca7d7a4ca22a3716939f7e42
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoGIC: Introduce API to get interrupt ID
Jeenu Viswambharan [Tue, 24 Oct 2017 14:13:59 +0000 (15:13 +0100)]
GIC: Introduce API to get interrupt ID

Acknowledging interrupt shall return a raw value from the interrupt
controller in which the actual interrupt ID may be encoded. Add a
platform API to extract the actual interrupt ID from the raw value
obtained from interrupt controller.

Document the new function. Also clarify the semantics of interrupt
acknowledge.

Change-Id: I818dad7be47661658b16f9807877d259eb127405
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoGIC: Fix Group 0 enabling
Jeenu Viswambharan [Tue, 7 Nov 2017 08:38:23 +0000 (08:38 +0000)]
GIC: Fix Group 0 enabling

At present, the GIC drivers enable Group 0 interrupts only if there are
Secure SPIs listed in the interrupt properties/list. This means that,
even if there are Group 0 SGIs/PPIs configured, the group remained
disabled in the absence of a Group 0 SPI.

Modify both GICv2 and GICv3 SGI/PPI configuration to enable Group 0 when
corresponding SGIs/PPIs are present.

Change-Id: Id123e8aaee0c22b476eebe3800340906d83bbc6d
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoGICv2: Fix populating PE target data
Jeenu Viswambharan [Tue, 7 Nov 2017 16:10:19 +0000 (16:10 +0000)]
GICv2: Fix populating PE target data

This patch brings in the following fixes:

  - The per-PE target data initialized during power up needs to be
    flushed so as to be visible to other PEs.

  - Setup per-PE target data for the primary PE as well. At present,
    this was only setup for secondary PEs when they were powered on.

Change-Id: Ibe3a57c14864e37b2326dd7ab321a5c7bf80e8af
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years agoMerge pull request #1158 from antonio-nino-diaz-arm/an/spm-fix
davidcunado-arm [Fri, 10 Nov 2017 16:11:32 +0000 (16:11 +0000)]
Merge pull request #1158 from antonio-nino-diaz-arm/an/spm-fix

SPM: Fix pointer to MP info in boot info struct

7 years agoSPM: Fix pointer to MP info in boot info struct
Antonio Nino Diaz [Fri, 10 Nov 2017 12:25:49 +0000 (12:25 +0000)]
SPM: Fix pointer to MP info in boot info struct

The MP info struct is placed right after the boot info struct. However,
when calculating the address of the MP info, the size of the boot info
struct was being multiplied by the size of the MP boot info. This left
a big gap of empty space between the structs.

This didn't break any code because the boot info struct has a pointer to
the MP info struct. It was just wasting space.

Change-Id: I1668e3540d9173261968f6740623549000bd48db
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #1148 from antonio-nino-diaz-arm/an/spm
davidcunado-arm [Thu, 9 Nov 2017 22:38:37 +0000 (22:38 +0000)]
Merge pull request #1148 from antonio-nino-diaz-arm/an/spm

Introduce Secure Partition Manager

7 years agoSPM: FVP: Introduce port of SPM
Antonio Nino Diaz [Thu, 9 Nov 2017 11:34:09 +0000 (11:34 +0000)]
SPM: FVP: Introduce port of SPM

This initial port of the Secure Partitions Manager to FVP supports BL31
in both SRAM and Trusted DRAM.

A document with instructions to build the SPM has been added.

Change-Id: I4ea83ff0a659be77f2cd72eaf2302cdf8ba98b32
Co-authored-by: Douglas Raillard <douglas.raillard@arm.com>
Co-authored-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Co-authored-by: Achin Gupta <achin.gupta@arm.com>
Co-authored-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoSPM: Introduce Secure Partition Manager
Antonio Nino Diaz [Tue, 24 Oct 2017 09:07:35 +0000 (10:07 +0100)]
SPM: Introduce Secure Partition Manager

A Secure Partition is a software execution environment instantiated in
S-EL0 that can be used to implement simple management and security
services. Since S-EL0 is an unprivileged exception level, a Secure
Partition relies on privileged firmware e.g. ARM Trusted Firmware to be
granted access to system and processor resources. Essentially, it is a
software sandbox that runs under the control of privileged software in
the Secure World and accesses the following system resources:

- Memory and device regions in the system address map.
- PE system registers.
- A range of asynchronous exceptions e.g. interrupts.
- A range of synchronous exceptions e.g. SMC function identifiers.

A Secure Partition enables privileged firmware to implement only the
absolutely essential secure services in EL3 and instantiate the rest in
a partition. Since the partition executes in S-EL0, its implementation
cannot be overly complex.

The component in ARM Trusted Firmware responsible for managing a Secure
Partition is called the Secure Partition Manager (SPM). The SPM is
responsible for the following:

- Validating and allocating resources requested by a Secure Partition.
- Implementing a well defined interface that is used for initialising a
  Secure Partition.
- Implementing a well defined interface that is used by the normal world
  and other secure services for accessing the services exported by a
  Secure Partition.
- Implementing a well defined interface that is used by a Secure
  Partition to fulfil service requests.
- Instantiating the software execution environment required by a Secure
  Partition to fulfil a service request.

Change-Id: I6f7862d6bba8732db5b73f54e789d717a35e802f
Co-authored-by: Douglas Raillard <douglas.raillard@arm.com>
Co-authored-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Co-authored-by: Achin Gupta <achin.gupta@arm.com>
Co-authored-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoxlat: Make function to calculate TCR PA bits public
Antonio Nino Diaz [Wed, 25 Oct 2017 10:53:25 +0000 (11:53 +0100)]
xlat: Make function to calculate TCR PA bits public

This function can be useful to setup TCR_ELx by callers that don't use
the translation tables library to setup the system registers related
to them. By making it common, it can be reused whenever it is needed
without duplicating code.

Change-Id: Ibfada9e846d2a6cd113b1925ac911bb27327d375
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agospd: Use `ENABLE_ASSERTIONS` instead of `DEBUG`
Antonio Nino Diaz [Thu, 19 Oct 2017 15:55:48 +0000 (16:55 +0100)]
spd: Use `ENABLE_ASSERTIONS` instead of `DEBUG`

A line in the upstream SPDs is only compiled in in `DEBUG` builds. This
line is used to help with assertions and so assertion failures can
happen in release builds with assertions enabled. Use
`ENABLE_ASSERTIONS` instead of `DEBUG`.

This bug was introduced in commit aa61368eb5, which introduced the build
option `ENABLE_ASSERTIONS`.

Change-Id: I7977df9c89c68677b00099b2a1926fa3cb0937c6
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
7 years agoMerge pull request #1154 from soby-mathew/sm/fix_psci_stat
davidcunado-arm [Wed, 8 Nov 2017 14:17:01 +0000 (14:17 +0000)]
Merge pull request #1154 from soby-mathew/sm/fix_psci_stat

Fix PSCI STAT time stamp collection

7 years agoARMv7: division support for missing __aeabi_*divmod
Etienne Carriere [Sun, 5 Nov 2017 21:57:56 +0000 (22:57 +0100)]
ARMv7: division support for missing __aeabi_*divmod

ARMv7-A architectures that do not support the Virtualization extensions
do not support instructions for the 32bit division. This change provides
a software implementation for 32bit division.

The division implementation is dumped from the OP-TEE project
http://github.com/OP-TEE/optee_os. The code was slightly modified
to pass trusted firmware checkpatch requirements and copyright is
given to the ARM trusted firmware initiative and its contributors.

Change-Id: Idae0c7b80a0d75eac9bd41ae121921d4c5af3fa3
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7: GICv2 driver can manage GICv1 with security extension
Etienne Carriere [Sun, 5 Nov 2017 21:57:38 +0000 (22:57 +0100)]
ARMv7: GICv2 driver can manage GICv1 with security extension

Some SoCs integrate a GIC in version 1 that is currently not supported
by the trusted firmware. This change hijacks GICv2 driver to handle the
GICv1 as GICv1 is compatible enough with GICv2 as far as the platform
does not attempt to play with virtualization support or some GICv2
specific power features.

Note that current trusted firmware does not use these GICv2 features
that are not available in GICv1 Security Extension.

Change-Id: Ic2cb3055f1319a83455571d6d918661da583f179
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoaarch32: add missing dmb() macro
Etienne Carriere [Sun, 5 Nov 2017 21:57:29 +0000 (22:57 +0100)]
aarch32: add missing dmb() macro

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoaarch32: add few missing weak platform specific function
Etienne Carriere [Sun, 5 Nov 2017 21:57:20 +0000 (22:57 +0100)]
aarch32: add few missing weak platform specific function

Adds weak functions for plat_report_exception, bl1_plat_prepare_exit
and plat_error_handler in AArch32 mode.

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7 may not support Generic Timer Extension
Etienne Carriere [Wed, 8 Nov 2017 13:41:47 +0000 (14:41 +0100)]
ARMv7 may not support Generic Timer Extension

If ARMv7 based platform does not set ARM_CORTEX_Ax=yes, platform
shall define ARMV7_SUPPORTS_GENERIC_TIMER to enable generic timer
support.

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7 may not support Virtualization Extensions
Etienne Carriere [Wed, 8 Nov 2017 13:38:33 +0000 (14:38 +0100)]
ARMv7 may not support Virtualization Extensions

ARMv7-A Virtualization extensions brings new instructions and resources
that were supported by later architectures. Reference ARM ARM Issue C.c
[DDI0406C_C].

ERET and extended MSR/MRS instructions, as specified in [DDI0406C_C] in
ID_PFR1 description of bits[15:12] (Virtualization Extensions):
 A value of 0b0001 implies implementation of the HVC, ERET, MRS
 (Banked register), and MSR (Banked register) instructions. The ID_ISARs
 do not identify whether these instructions are implemented.

UDIV/SDIV were introduced with the Virtualization extensions, even if
not strictly related to the virtualization extensions.

If ARMv7 based platform does not set ARM_CORTEX_Ax=yes, platform
shall define ARMV7_SUPPORTS_VIRTUALIZATION to enable virtualization
extension related resources.

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7 may not support large page addressing
Etienne Carriere [Wed, 8 Nov 2017 12:53:47 +0000 (13:53 +0100)]
ARMv7 may not support large page addressing

ARCH_SUPPORTS_LARGE_PAGE_ADDRESSING allows build environment to
handle specific case when target ARMv7 core only supports 32bit MMU
descriptor mode.

If ARMv7 based platform does not set ARM_CORTEX_Ax=yes, platform
shall define ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING to enable
large page addressing support.

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7: introduce Cortex-A12
Etienne Carriere [Sun, 5 Nov 2017 21:56:50 +0000 (22:56 +0100)]
ARMv7: introduce Cortex-A12

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7: introduce Cortex-A17
Etienne Carriere [Sun, 5 Nov 2017 21:56:41 +0000 (22:56 +0100)]
ARMv7: introduce Cortex-A17

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
7 years agoARMv7: introduce Cortex-A7
Etienne Carriere [Sun, 5 Nov 2017 21:56:34 +0000 (22:56 +0100)]
ARMv7: introduce Cortex-A7

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>