Soby Mathew [Mon, 11 May 2015 22:15:06 +0000 (23:15 +0100)]
PSCI: Set ON_PENDING state early during CPU_ON
In the debug build of the function get_power_on_target_afflvl(), there is a
check to ensure that the CPU is emerging from a SUSPEND or ON_PENDING state.
The state is checked without acquiring the lock for the CPU node. The state
could be updated to ON_PENDING in psci_afflvl_on() after the target CPU has
been powered up. This results in a race condition which could cause the
check for the ON_PENDING state in get_power_on_target_afflvl() to fail.
This patch resolves this race condition by setting the state of the target
CPU to ON_PENDING before the platform port attempts to power it on. The
target CPU is thus guaranteed to read the correct the state. In case
the power on operation fails, the state of the CPU is restored to OFF.
Fixes ARM-software/tf-issues#302
Change-Id: I3f2306a78c58d47b1a0fb7e33ab04f917a2d5044
danh-arm [Wed, 29 Apr 2015 16:09:09 +0000 (17:09 +0100)]
Merge pull request #297 from sandrine-bailleux/sb/move-up-deps
Move up dependency versions
danh-arm [Wed, 29 Apr 2015 16:07:40 +0000 (17:07 +0100)]
Merge pull request #296 from danh-arm/sb/scpi-min-changes
Move to the new ARM SCP Messaging Interfaces v2
danh-arm [Wed, 29 Apr 2015 16:04:51 +0000 (17:04 +0100)]
Merge pull request #295 from danh-arm/dh/plat-port-reorg
ARM platform port reorganization
Juan Castillo [Thu, 16 Apr 2015 13:17:49 +0000 (14:17 +0100)]
FVP: update device tree idle state entries
Device tree idle state bindings changed in kernel v3.18. This patch
updates the FVP DT files to use PSCI suspend as idle state.
The patch also updates the 'compatible' property in the PSCI node
and the 'entry-method' property in the idle-states node in the FVP
Foundation GICv2-legacy device tree.
Change-Id: Ie921d497c579f425c03d482f9d7b90e166106e2f
Sandrine Bailleux [Thu, 16 Apr 2015 10:05:47 +0000 (11:05 +0100)]
Move up dependency versions in user guide
Move up the version numbers in the user guide of:
* DS-5 (to v5.21)
* EDK2 (to v3.0)
* Linux Kernel (to 1.6-Juno)
* Linaro file-system (to 15.03)
* Juno SCP binary (to v1.7.0 within board recovery image 0.11.3).
Change-Id: Ieb09e633acc2b33823ddf35f77f44e7da60b99ba
Sandrine Bailleux [Mon, 13 Apr 2015 10:47:48 +0000 (11:47 +0100)]
Detect SCP version incompatibility
There has been a breaking change in the communication protocols used
between the AP cores and the SCP on CSS based platforms like Juno.
This means both the AP Trusted Firmware and SCP firmware must be
updated at the same time.
In case the user forgets to update the SCP ROM firmware, this patch
detects when it still uses the previous version of the communication
protocol. It will then output a comprehensive error message that helps
trouble-shoot the issue.
Change-Id: I7baf8f05ec0b7d8df25e0ee53df61fe7be0207c2
Sandrine Bailleux [Wed, 18 Mar 2015 14:52:53 +0000 (14:52 +0000)]
Move to the new ARM SCP Messaging Interfaces
The communication protocol used between the AP cores and the SCP
in CSS-based platforms like Juno has undergone a number of changes.
This patch makes the required modifications to the SCP Boot Protocol,
SCPI Protocol and MHU driver code in shared CSS platform code so that
the AP cores are still able to communicate with the SCP.
This patch focuses on the mandatory changes to make it work. The
design of this code needs to be improved but this will come in
a subsequent patch.
The main changes are:
- MHU communication protocol
- The command ID and payload size are no longer written into the
MHU registers directly. Instead, they are stored in the payload
area. The MHU registers are now used only as a doorbell to kick
off messages. Same goes for any command result, the AP has to
pick it up from the payload area.
- SCP Boot Protocol
- The BL3-0 image is now expected to embed a checksum. This
checksum must be passed to the SCP, which uses it to check the
integrity of the image it received.
- The BL3-0 image used to be transferred a block (4KB)
at a time. The SCP now supports receiving up to 128KB at a
time, which is more than the size of the BL3-0 image.
Therefore, the image is now sent in one go.
- The command IDs have changed.
- SCPI Protocol
- The size of the SCPI payload has been reduced down from 512
bytes to 256 bytes. This changes the base address of the
AP-to-SCP payload area.
- For commands that have a response, the response is the same SCPI
header that was sent, except for the size and the status, which
both must be updated appropriately. Success/Failure of a command
is determined by looking at the updated status code.
- Some command IDs have changed.
NOTE: THIS PATCH BREAKS COMPATIBILITY WITH FORMER VERSIONS OF THE SCP
FIRMWARE AND THUS REQUIRES AN UPDATE OF THIS BINARY. THE LATEST SCP
BINARY CAN BE OBTAINED FROM THE ARM CONNECTED COMMUNITY WEBSITE.
Change-Id: Ia5f6b95fe32401ee04a3805035748e8ef6718da7
Dan Handley [Thu, 19 Mar 2015 19:24:43 +0000 (19:24 +0000)]
Doc updates following platform port reorganization
Update the User Guide, Porting Guide and Firmware Design documents
to align them with the recent changes made to the FVP and Juno
platform ports.
Also fix some other historical inaccuracies.
Change-Id: I37aba4805f9044b1a047996d3e396c75f4a09176
Dan Handley [Mon, 27 Apr 2015 18:34:53 +0000 (19:34 +0100)]
Move Juno port to plat/arm/board/juno
Move the Juno port from plat/juno to plat/arm/board/juno. Also rename
some of the files so they are consistently prefixed with juno_.
Update the platform makefiles accordingly.
Change-Id: I0af6cb52a5fee7ef209107a1188b76a3c33a2a9f
Dan Handley [Thu, 19 Mar 2015 19:22:44 +0000 (19:22 +0000)]
Migrate Juno port to use common code
Major update to the Juno platform port to use the common platform code
in (include/)plat/arm/* and (include/)plat/common/*. This mainly
consists of removing duplicated code but also introduces some small
behavioural changes where there was unnecessary variation between the
FVP and Juno ports. See earlier commit titled `Add common ARM and CSS
platform code` for details.
Also move the ARM SoC specific security setup (i.e. NIC-400 and PCIe
initialization) from BL1 to `plat_arm_security_setup()` in BL2,
where the other security setup is done.
Change-Id: Ic9fe01bae8ed382bfb04fc5839a4cfff332eb124
Dan Handley [Mon, 27 Apr 2015 18:17:18 +0000 (19:17 +0100)]
Move FVP port to plat/arm/board/fvp
Move the FVP port from plat/fvp to plat/arm/board/fvp. Also rename
some of the files so they are consistently prefixed with fvp_.
Update the platform makefiles accordingly.
Change-Id: I7569affc3127d66405f1548fc81b878a858e61b7
Dan Handley [Thu, 19 Mar 2015 19:17:53 +0000 (19:17 +0000)]
Migrate FVP port to use common code
Major update to the FVP platform port to use the common platform code
in (include/)plat/arm/* and (include/)plat/common/*. This mainly
consists of removing duplicated code but also introduces some small
behavioural changes where there was unnecessary variation between the
FVP and Juno ports. See earlier commit titled `Add common ARM and CSS
platform code` for details.
Also add support for Foundation FVP version 9.1 during FVP config
setup to prevent a warning being emitted in the console.
Change-Id: I254ca854987642ce09d1b924c9fd410a6e13e3bc
Dan Handley [Thu, 19 Mar 2015 18:58:55 +0000 (18:58 +0000)]
Add common ARM and CSS platform code
This major change pulls out the common functionality from the
FVP and Juno platform ports into the following categories:
* (include/)plat/common. Common platform porting functionality that
typically may be used by all platforms.
* (include/)plat/arm/common. Common platform porting functionality
that may be used by all ARM standard platforms. This includes all
ARM development platforms like FVP and Juno but may also include
non-ARM-owned platforms.
* (include/)plat/arm/board/common. Common platform porting
functionality for ARM development platforms at the board
(off SoC) level.
* (include/)plat/arm/css/common. Common platform porting
functionality at the ARM Compute SubSystem (CSS) level. Juno
is an example of a CSS-based platform.
* (include/)plat/arm/soc/common. Common platform porting
functionality at the ARM SoC level, which is not already defined
at the ARM CSS level.
No guarantees are made about the backward compatibility of
functionality provided in (include/)plat/arm.
Also remove any unnecessary variation between the ARM development
platform ports, including:
* Unify the way BL2 passes `bl31_params_t` to BL3-1. Use the
Juno implementation, which copies the information from BL2 memory
instead of expecting it to persist in shared memory.
* Unify the TZC configuration. There is no need to add a region
for SCP in Juno; it's enough to simply not allow any access to
this reserved region. Also set region 0 to provide no access by
default instead of assuming this is the case.
* Unify the number of memory map regions required for ARM
development platforms, although the actual ranges mapped for each
platform may be different. For the FVP port, this reduces the
mapped peripheral address space.
These latter changes will only be observed when the platform ports
are migrated to use the new common platform code in subsequent
patches.
Change-Id: Id9c269dd3dc6e74533d0e5116fdd826d53946dc8
Dan Handley [Mon, 27 Apr 2015 10:49:22 +0000 (11:49 +0100)]
Add linker symbol declarations to bl_common.h
Add extern declarations of linker symbols to bl_common.h. These are
used by platform ports to determine the memory layout of BL images.
Adding the declarations to this file facilitates removal of these
declarations from the platform porting source files in subsequent
patches.
Also remove the linker symbol declarations from common TSP source
code.
Change-Id: I8ed0426bc815317c4536b588e4e78bc15b4fe91c
Dan Handley [Fri, 27 Mar 2015 17:44:35 +0000 (17:44 +0000)]
Allow deeper platform port directory structure
Update the top level makefile to allow platform ports to exist in
subdirectories at any level instead of one level under `plat/`. The
makefile recursively searches for all files called `platform.mk` in
all subdirectories of `plat/`. The directory containing
`platform.mk` is the platform name. Platform names must be unique
across the codebase.
Replace usage of HELP_PLATFORMS in the Makefile with PLATFORMS since
these are both used to report the same information back to the user.
Update the TSP and cert_create tool makefiles in a similar way
to support a deeper platform port directory structure.
Also add PLAT_<plat_name> as a define passed through the top level
makefile to the source files, to allow build time variation in common
platform code.
Change-Id: I213420164808c5ddb99a26144e8e3f141a7417b7
Dan Handley [Wed, 1 Apr 2015 15:51:20 +0000 (16:51 +0100)]
Separate out common console functionality
Separate out the common console functionality in
`drivers/arm/pl011/pl011_console.S` into a new source file
`drivers/console/console.S`. The former includes the latter to
provide backwards compatibility for platform make files.
Also add a skeleton console implementation for platforms that do not
want to use PL011.
Change-Id: I1ff963b2b54a872fbcf1eb0700797b9e9afa2538
Dan Handley [Wed, 1 Apr 2015 16:34:24 +0000 (17:34 +0100)]
Add header guards to asm macro files
Some assembly files containing macros are included like header files
into other assembly files. This will cause assembler errors if they
are included multiple times.
Add header guards to assembly macro files to avoid assembler errors.
Change-Id: Ia632e767ed7df7bf507b294982b8d730a6f8fe69
Dan Handley [Mon, 30 Mar 2015 16:15:16 +0000 (17:15 +0100)]
Remove use of PLATFORM_CACHE_LINE_SIZE
The required platform constant PLATFORM_CACHE_LINE_SIZE is
unnecessary since CACHE_WRITEBACK_GRANULE effectively provides the
same information. CACHE_WRITEBACK_GRANULE is preferred since this
is an architecturally defined term and allows comparison with the
corresponding hardware register value.
Replace all usage of PLATFORM_CACHE_LINE_SIZE with
CACHE_WRITEBACK_GRANULE.
Also, add a runtime assert in BL1 to check that the provided
CACHE_WRITEBACK_GRANULE matches the value provided in CTR_EL0.
Change-Id: If87286be78068424217b9f3689be358356500dcd
Dan Handley [Mon, 23 Mar 2015 18:13:33 +0000 (18:13 +0000)]
Fix type mismatches in verbose logging
Commit
dad2504 adds support for type checking in printf-like
functions. Some of the VERBOSE logging statements were not updated
at that time.
Fix the type mismatches in the verbose logging statements.
Change-Id: Idd9a49e41cc0dc31f7698e220819d934e3d2d10e
Dan Handley [Thu, 19 Mar 2015 19:26:52 +0000 (19:26 +0000)]
Add TZC function to configure region 0
Region 0 is special in TZC-400. It is possible to set the access
permissions for this but not the address range or filters to which
the permissions apply. Add a function for setting the region 0
access permissions.
Also add some VERBOSE logging and allow assembly files to include
the TZC header.
Change-Id: I4389261ba10a6e5e2e43ee93d55318dc507b6648
danh-arm [Fri, 17 Apr 2015 14:42:46 +0000 (15:42 +0100)]
Merge pull request #290 from soby-mathew/sm/AEM_crash_report_fix
Fix recursive crash prints on FVP AEM model
danh-arm [Mon, 13 Apr 2015 16:33:20 +0000 (17:33 +0100)]
Merge pull request #289 from danh-arm/vw/tlkd-args-via-cpu-regs-v4
Pass arguments/results between EL3/S-EL1 via CPU registers (x0-x7) v4
danh-arm [Mon, 13 Apr 2015 16:32:24 +0000 (17:32 +0100)]
Merge pull request #288 from danh-arm/sb/remove-arch-makefile
Remove the ARCH build configuration from the Makefile v2
danh-arm [Mon, 13 Apr 2015 16:31:05 +0000 (17:31 +0100)]
Merge pull request #287 from danh-arm/sb/bl2-loading-errors
Panic if platform specific BL3-0 handling fails v2
Soby Mathew [Mon, 13 Apr 2015 15:57:12 +0000 (16:57 +0100)]
Fix recursive crash prints on FVP AEM model
This patch fixes an issue in the cpu specific register reporting
of FVP AEM model whereby crash reporting itself triggers an exception
thus resulting in recursive crash prints. The input to the
'size_controlled_print' in the crash reporting framework should
be a NULL terminated string. As there were no cpu specific register
to be reported on FVP AEM model, the issue was caused by passing 0
instead of NULL terminated string to the above mentioned function.
Change-Id: I664427b22b89977b389175dfde84c815f02c705a
Varun Wadekar [Thu, 2 Apr 2015 09:27:47 +0000 (14:57 +0530)]
Pass arguments/results between EL3/S-EL1 via CPU registers (x0-x7)
This patch removes the need for a shared buffer between the EL3 and S-EL1
levels. We now use the CPU registers, x0-x7, while passing data between
the two levels. Since TLK is a 32-bit Trusted OS, tlkd has to unpack the
arguments in the x0-x7 registers. TLK in turn gets these values via r0-r7.
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Sandrine Bailleux [Wed, 18 Feb 2015 17:28:07 +0000 (17:28 +0000)]
Remove the ARCH build configuration from the Makefile
The ARCH variable, which defaults to 'aarch64', gives the wrong
impression that the Trusted Firmware can be built for other
architectures. This patch removes it. This doesn't have any
consequence on the rest of the build system because the variable
was unused.
Change-Id: I97130f11f7733a3cbdfc89989587f2ebecaf3294
Sandrine Bailleux [Thu, 26 Mar 2015 11:07:09 +0000 (11:07 +0000)]
Panic if platform specific BL3-0 handling fails
The return value of bl2_plat_handle_bl30() used to be ignored.
This patch modifies the function load_bl30() so that it now
checks this return value and returns it to bl2_main().
This patch also unifies the error handling code across the
load_blx() functions so that they return a status code in all
cases and bl2_main() has the sole responsibility of panicking
if appropriate.
Change-Id: I2b26cdf65afa443b48c7da1fa7da8db956071bfb
danh-arm [Thu, 9 Apr 2015 10:37:01 +0000 (11:37 +0100)]
Merge pull request #284 from kpet/kp/tf-issues-295
Add support to indicate size and end of assembly functions
Kévin Petit [Tue, 24 Mar 2015 14:03:57 +0000 (14:03 +0000)]
Add support to indicate size and end of assembly functions
In order for the symbol table in the ELF file to contain the size of
functions written in assembly, it is necessary to report it to the
assembler using the .size directive.
To fulfil the above requirements, this patch introduces an 'endfunc'
macro which contains the .endfunc and .size directives. It also adds
a .func directive to the 'func' assembler macro.
The .func/.endfunc have been used so the assembler can fail if
endfunc is omitted.
Fixes ARM-Software/tf-issues#295
Change-Id: If8cb331b03d7f38fe7e3694d4de26f1075b278fc
Signed-off-by: Kévin Petit <kevin.petit@arm.com>
danh-arm [Wed, 1 Apr 2015 10:39:56 +0000 (11:39 +0100)]
Merge pull request #277 from soby-mathew/sm/coh_lock_opt
Optimize the bakery lock implementation
danh-arm [Wed, 1 Apr 2015 10:38:01 +0000 (11:38 +0100)]
Merge pull request #279 from sandrine-bailleux/sb/fix-checkpatch
Bug Fix: Fix checkpatch rule in Makefile
danh-arm [Wed, 1 Apr 2015 10:36:08 +0000 (11:36 +0100)]
Merge pull request #280 from vwadekar/tlkd-fixed-v3
TLK dispatcher
Varun Wadekar [Mon, 23 Mar 2015 03:56:40 +0000 (09:26 +0530)]
TLK-D documentation and add NVIDIA to the Acknowledgements file
Include TLK Dispatcher's documentation and add NVIDIA to the
Acknowledgements file. TLK is now a supported Trusted OS with
the Trusted Firmware.
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Varun Wadekar [Fri, 13 Mar 2015 09:48:20 +0000 (15:18 +0530)]
Open/Close TA sessions, send commands/events to TAs
This patch adds support to open/close secure sessions with Trusted
Apps and later send commands/events. Modify TLK_NUM_FID to indicate
the total number of FIDs available to the NS world.
Change-Id: I3f1153dfa5510bd44fc25f1fee85cae475b1abf1
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Varun Wadekar [Fri, 13 Mar 2015 09:40:54 +0000 (15:10 +0530)]
Preempt/Resume standard function ID calls
This patch allows servicing of the non-secure world IRQs when the
CPU is in the secure world. Once the interrupt is handled, the
non-secure world issues the Resume FID to allow the secure payload
complete the preempted standard FID.
Change-Id: Ia52c41adf45014ab51d8447bed6605ca2f935587
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Varun Wadekar [Fri, 13 Mar 2015 09:29:03 +0000 (14:59 +0530)]
Translate secure/non-secure virtual addresses
This patch adds functionality to translate virtual addresses from
secure or non-secure worlds. This functionality helps Trusted Apps
to share virtual addresses directly and allows the NS world to
pass virtual addresses to TLK directly.
Change-Id: I77b0892963e0e839c448b5d0532920fb7e54dc8e
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Varun Wadekar [Fri, 13 Mar 2015 08:49:11 +0000 (14:19 +0530)]
Register NS shared memory for SP's activity logs and TA sessions
This patch registers NS memory buffer with the secure payload using
two different functions IDs - REGISTER_LOGBUF, REGISTER_REQBUF.
a. The SP uses the log-buffer to store its activity logs, in a
pre-decided format. This helps in debugging secure payload's issues.
b. The SP uses the req-buffer to get the parameters required by
sessions with Trusted Applications.
Change-Id: I6b0247cf7790524132ee0da24f1f35b1fccec5d5
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Varun Wadekar [Fri, 13 Mar 2015 08:31:03 +0000 (14:01 +0530)]
Add TLK Dispatcher (tlkd) based on the Test Dispatcher (tspd)
TLK Dispatcher (tlkd) is based on the tspd and is the glue required
to run TLK as a Secure Payload with the Trusted Firmware.
Change-Id: I69e573d26d52342eb049feef773dd7d2a506f4ab
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Soby Mathew [Fri, 20 Feb 2015 16:04:17 +0000 (16:04 +0000)]
Remove the `owner` field in bakery_lock_t data structure
This patch removes the `owner` field in bakery_lock_t structure which
is the data structure used in the bakery lock implementation that uses
coherent memory. The assertions to protect against recursive lock
acquisition were based on the 'owner' field. They are now done based
on the bakery lock ticket number. These assertions are also added
to the bakery lock implementation that uses normal memory as well.
Change-Id: If4850a00dffd3977e218c0f0a8d145808f36b470
Soby Mathew [Thu, 19 Feb 2015 16:23:51 +0000 (16:23 +0000)]
Optimize the bakery lock structure for coherent memory
This patch optimizes the data structure used with the bakery lock
implementation for coherent memory to save memory and minimize memory
accesses. These optimizations were already part of the bakery lock
implementation for normal memory and this patch now implements
it for the coherent memory implementation as well. Also
included in the patch is a cleanup to use the do-while loop while
waiting for other contenders to finish choosing their tickets.
Change-Id: Iedb305473133dc8f12126726d8329b67888b70f1
Sandrine Bailleux [Thu, 26 Mar 2015 15:07:47 +0000 (15:07 +0000)]
Bug Fix: Fix checkpatch rule in Makefile
The shell command used to list all files but the libc's ones
introduced in commit
95d5353c33 was incorrect. It was listing
subdirectories without referencing their parent directories.
This patch fixes it.
Also, the command used to invoke the checkpatch.pl script is now
printed when V=1.
Change-Id: Ie2f1e74f60d77e38c25e717cffa44ca03baec7b2
achingupta [Thu, 26 Mar 2015 15:43:15 +0000 (15:43 +0000)]
Merge pull request #274 from sandrine-bailleux/sb/juno-r1
Add support for Juno r1 in the platform reset handler
achingupta [Thu, 26 Mar 2015 15:42:28 +0000 (15:42 +0000)]
Merge pull request #273 from achingupta/ag/genfw-389
Set group status of PPIs and SGIs correctly on GICv3 systems
Sandrine Bailleux [Wed, 4 Feb 2015 14:06:10 +0000 (14:06 +0000)]
Add support for Juno r1 in the platform reset handler
For Juno r0, the platform reset handler needs to:
- Implement the workaround for defect #831273
- Increase the L2 Data and Tag RAM latencies for Cortex-A57.
Defect #831273 does not affect Juno r1. Also, the default value
for the L2 Tag RAM latency for Cortex-A57 is suitable on Juno r1.
The L2 Data RAM latency for Cortex-A57 still needs to be
increased, though.
This patch modifies the Juno platform reset handler to detect
the board revision and skip the unnecessary steps on Juno r1.
The behaviour on Juno r0 is unchanged.
Change-Id: I27542917223e680ef923ee860900806ffcd0357b
Achin Gupta [Mon, 9 Mar 2015 21:54:40 +0000 (21:54 +0000)]
Set group status of PPIs and SGIs correctly on GICv3 systems
On a GICv2 system, the group status of PPIs and SGIs is set in the GICD_IGROUPR0
register. On a GICv3 system, if affinity routing is enabled for the non-secure
state, then the group status of PPIs and SGIs should be set in the GICR_IGROUPR0
register. ARM Trusted firmware sets the group status using the GICv2
sequence. On a GICv3 system, if the group status of an interrupt is set to Group
1 through a write to the GICD_IGROUPR0, then the GICR_IGROUPR0 is updated as
well.
The current sequence is incorrect since it first marks all PPIs and SGIs as
Group 1. It then clears the bits in GICD_IGROUPR0 corresponding to secure
interrupts to set their group status to Group 0. This operation is a no-op. It
leaves the secure generic timer interrupt (#29) used by the TSP marked as Group
1. This causes the interrupt to interfere with the execution of non-secure
software. Once an interrupt has been marked as Group 1, the GICR_IGROUPR0 should
be programmed to change its group status.
This patch rectifies this issue by setting the group status of only the
non-secure PPI and SGIs to Group 1 in the first place. GICD_IGROUPR0 resets to
0. So secure interrupts are marked as Group 0 by default.
Change-Id: I958b4b15f3e2b2444ce4c17764def36216498d00
danh-arm [Thu, 19 Mar 2015 19:33:06 +0000 (19:33 +0000)]
Merge pull request #270 from vikramkanigiri/vk/a72_cpu_support
Add support for ARM Cortex-A72 processor
Vikram Kanigiri [Tue, 17 Feb 2015 11:50:28 +0000 (11:50 +0000)]
Add support for ARM Cortex-A72 processor
This patch adds support for ARM Cortex-A72 processor in the CPU
specific framework.
Change-Id: I5986855fc1b875aadf3eba8c36e989d8a05e5175
danh-arm [Tue, 17 Mar 2015 14:47:05 +0000 (14:47 +0000)]
Merge pull request #263 from jcastillo-arm/jc/tbb_sha256_int
TBB: remove PolarSSL SHA1 functions from the binary
danh-arm [Tue, 17 Mar 2015 14:28:48 +0000 (14:28 +0000)]
Merge pull request #269 from vikramkanigiri/vk/common-cci
Common driver for ARM cache coherent Interconnects
danh-arm [Tue, 17 Mar 2015 14:23:46 +0000 (14:23 +0000)]
Merge pull request #268 from vikramkanigiri/vk/move_init_cpu_ops
Initialise cpu ops after enabling data cache
danh-arm [Tue, 17 Mar 2015 14:22:15 +0000 (14:22 +0000)]
Merge pull request #267 from sandrine-bailleux/sb/doc-fixes
Documentation fixes in 'make help' message and User Guide
danh-arm [Tue, 17 Mar 2015 14:20:29 +0000 (14:20 +0000)]
Merge pull request #266 from sandrine-bailleux/sb/juno-disable-errata-806969
Juno: Disable workaround for Cortex-A57 erratum #806969
danh-arm [Tue, 17 Mar 2015 14:19:48 +0000 (14:19 +0000)]
Merge pull request #264 from jcastillo-arm/jc/tbb_fip_dep
TBB: fix build target 'all' dependency on certificates
danh-arm [Tue, 17 Mar 2015 14:18:09 +0000 (14:18 +0000)]
Merge pull request #262 from sandrine-bailleux/sb/check-format-printf
Enable type-checking of arguments passed to printf() et al.
danh-arm [Tue, 17 Mar 2015 14:16:11 +0000 (14:16 +0000)]
Merge pull request #265 from jcastillo-arm/jc/git_commit_id
checkpatch: ignore GIT_COMMIT_ID
Vikram Kanigiri [Thu, 26 Feb 2015 15:25:58 +0000 (15:25 +0000)]
Use ARM CCI driver on FVP and Juno platforms
This patch updates the FVP and Juno platform ports to use the common
driver for ARM Cache Coherent Interconnects.
Change-Id: Ib142f456b9b673600592616a2ec99e9b230d6542
Vikram Kanigiri [Tue, 23 Dec 2014 01:00:22 +0000 (01:00 +0000)]
Common driver for ARM Cache Coherent Interconnects
Even though both CCI-400 and CCI-500 IPs have different configurations
with respect to the number and types of supported interfaces, their
register offsets and programming sequences are similar. This patch
creates a common driver for enabling and disabling snoop transactions
and DVMs with both the IPs.
New platform ports which implement one of these IPs should use this
common driver. Existing platform ports which implement CCI-400 should
migrate to the common driver as the standalone CCI-400 will be
deprecated in the future.
Change-Id: I3ccd0eb7b062922d2e4a374ff8c21e79fa357556
Vikram Kanigiri [Wed, 4 Mar 2015 10:34:27 +0000 (10:34 +0000)]
Add macro to calculate number of elements in an array
This patch defines the ARRAY_SIZE macro for calculating number of elements
in an array and uses it where appropriate.
Change-Id: I72746a9229f0b259323972b498b9a3999731bc9b
Vikram Kanigiri [Thu, 29 Jan 2015 18:27:38 +0000 (18:27 +0000)]
Initialise cpu ops after enabling data cache
The cpu-ops pointer was initialized before enabling the data cache in the cold
and warm boot paths. This required a DCIVAC cache maintenance operation to
invalidate any stale cache lines resident in other cpus.
This patch moves this initialization to the bl31_arch_setup() function
which is always called after the data cache and MMU has been enabled.
This change removes the need:
1. for the DCIVAC cache maintenance operation.
2. to initialise the CPU ops upon resumption from a PSCI CPU_SUSPEND
call since memory contents are always preserved in this case.
Change-Id: Ibb2fa2f7460d1a1f1e721242025e382734c204c6
Juan Castillo [Wed, 11 Mar 2015 14:21:53 +0000 (14:21 +0000)]
checkpatch: ignore GIT_COMMIT_ID
By default, the checkpatch script requires that commit references
included in commit messages follow a predefined format. Github
merge commits do not follow this convention, causing the code
style test to fail when a new pull request is created.
This patch adds the ignore GIT_COMMIT_ID option to the checkpatch
parameters. This flag indicates the tool to ignore the commit
message format.
Change-Id: I37133cc5cf803f664b8ff00f62d458b39f06918c
Sandrine Bailleux [Tue, 17 Feb 2015 10:33:41 +0000 (10:33 +0000)]
Juno: Disable workaround for Cortex-A57 erratum #806969
Cortex-A57 erratum #806969 applies to revision r0p0 of the CPU
but does not manifest itself on Juno r0. It is not applicable
to Juno r1 in any case.
This patch modifies the Juno platform Makefile to no longer
compile this erratum workaround in.
Change-Id: I32b16835b2ac897e639e869ab2b78b62a51a0139
Juan Castillo [Tue, 10 Mar 2015 12:17:21 +0000 (12:17 +0000)]
TBB: remove PolarSSL SHA1 functions from the binary
Commit
ea4ec3aad5e1 ("TBB: use SHA256 to generate the certificate
signatures") updated the cert_create tool to generate the
signatures using SHA256 instead of SHA1. Therefore, SHA1 is no
longer required.
This patch removes the SHA1 option from the PolarSSL configuration
file. The source file sha1.c is no longer needed and has been
excluded from the build. The SHA1 functions are no longer included
in the binary, reducing the memory footprint of BL1 and BL2 by
approximately 6 KB.
Change-Id: I72ea2cff03c0964c3eaadce148ec2ad2c6dde2e3
Sandrine Bailleux [Wed, 18 Feb 2015 17:24:53 +0000 (17:24 +0000)]
User guide: Add dependency on libssl-dev for cert_create tool
The 'libssl-dev' package must be installed on the host to build the
certificate generation tool. This patch adds it to the list of
required tools in the User Guide.
Change-Id: I018381fb14b7c2d2bd6f2b7929aaad0571f7eb2e
Sandrine Bailleux [Wed, 18 Feb 2015 16:18:00 +0000 (16:18 +0000)]
Update help message printed by the Makefile
The message printed by 'make help' is incomplete. It doesn't
mention all relevant supported targets. This patch updates it.
The format of the first line of the help message has been changed
so that it no longer lists all supported targets. This eases the
maintenance as we don't need to update the list in 2 places
anymore whenever a new target is added.
Also add a reference to the user guide to get the list of
supported options.
Change-Id: I79d8b815b0ffc0c43b4c05124378fce0e938365c
Sandrine Bailleux [Thu, 5 Feb 2015 15:42:31 +0000 (15:42 +0000)]
Enable type-checking of arguments passed to printf() et al.
This patch modifies the declarations of the functions printf() et al.
and adds the right GCC attribute to request the compiler to check
the type of the arguments passed to these functions against the given
format string. This will ensure that the compiler outputs warning
messages like the following whenever it detects an inconsistency:
file.c:42: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
It also fixes the type mismatch inconsistencies that it revealed
across the code base.
NOTE: THIS PATCH MAY FORCE PLATFORM PORTS OR SP/SPDS THAT USE THE
PRINTF FAMILY OF FUNCTIONS TO FIX ANY TYPE MISMATCH INCONSISTENCIES.
Change-Id: If36bb54ec7d6dd2cb4791d89b02a24ac13fd2df6
danh-arm [Fri, 6 Mar 2015 12:28:59 +0000 (12:28 +0000)]
Merge pull request #260 from jcastillo-arm/jc/tbb_sha256
TBB: use SHA256 to generate the certificate signatures
Juan Castillo [Mon, 16 Feb 2015 10:34:28 +0000 (10:34 +0000)]
TBB: use SHA256 to generate the certificate signatures
This patch replaces SHA1 by SHA256 in the 'cert_create' tool, so
certificate signatures are generated according to the NSA Suite B
cryptographic algorithm requirements.
Documentation updated accordingly.
Change-Id: I7be79e6b2b62dac8dc78a4f4f5006e37686bccf6
Juan Castillo [Mon, 2 Mar 2015 16:16:13 +0000 (16:16 +0000)]
TBB: fix build target 'all' dependency on certificates
Build target 'all' fails when GENERATE_COT=1 and no BL3-3 or
BL3-0 (if required) images are specified. The reason is that,
when GENERATE_COT=1, a dependency on the certificates is added
to the target 'all', and the certificates depend on the BL3-3
and BL3-0 images, causing the build process to fail if the
images are not specified.
This patch moves the dependency on the certificates from 'all' to
'fip'. Target 'all' may be used to build the individual images.
The certificates will be created by calling the target 'fip', where
BL3-3 and BL3-0 (if required) must be specified.
Change-Id: I870beb4e8f9f1bfad1d35b09c850a7ce3c9f4ec6
danh-arm [Thu, 5 Mar 2015 15:02:41 +0000 (15:02 +0000)]
Merge pull request #261 from sandrine-bailleux/sb/coding-style
Ignore C library files when checking coding style
Fix violations to the coding style
Sandrine Bailleux [Thu, 5 Mar 2015 10:54:34 +0000 (10:54 +0000)]
Fix violations to the coding style
All coding style violations have been fixed in a previous patch and
since then, each individual patch has been checked in this regard.
However, the latest version of the checkpatch.pl script from the Linux
kernel is more advanced and it is able to flag new errors in the
Trusted Firmware codebase. This patch fixes them.
Change-Id: I1f332f2440984be85d36b231bb83260368987077
Sandrine Bailleux [Thu, 26 Feb 2015 11:22:40 +0000 (11:22 +0000)]
Ignore C library files when checking coding style
The C library source files embedded into the Trusted Firmware
tree are not required to comply to the Linux Coding Style.
Unfortunately, 'make checkpatch' does take them into account.
This patch modifies the Makefile so that the C library source
and header files are now ignored by 'make checkpatch'.
It also instructs the checkpatch.pl script to not treat the
presence of a 'Change-Id' line in the commit message as an error.
Change-Id: I38196202efe518bae3a57c2affe2ed7758c9f69c
danh-arm [Wed, 25 Feb 2015 17:54:41 +0000 (09:54 -0800)]
Merge pull request #259 from soby-mathew/sm/plat_max_afflvl
Export maximum affinity using PLATFORM_MAX_AFFLVL macro
danh-arm [Wed, 25 Feb 2015 17:54:01 +0000 (09:54 -0800)]
Merge pull request #258 from rmurphy-arm/rm/dma-smmu
Juno: clear DMA-330 SMMU security state
danh-arm [Thu, 19 Feb 2015 11:33:09 +0000 (03:33 -0800)]
Merge pull request #257 from soby-mathew/sm/opt_mmap_reg
Minimize MAX_MMAP_REGIONS for each BL stage
Robin Murphy [Fri, 9 Jan 2015 14:30:58 +0000 (14:30 +0000)]
Juno: clear DMA-330 SMMU security state
By default the SMMU for the DMA-330 is configured to mark some stream IDs
as always belonging to the Secure world. As a result, if EL1 software turns
the SMMU on, certain Non-Secure accesses get rewritten as Secure, making
them bypass translation and access Secure physical addresses directly.
Since the current Juno board firmware configures the DMA-330 hardware as
Non-Secure, rewrite the SMMU's default SSD table as well to prevent any
unexpected behaviour in EL1.
Change-Id: Iaa81d883eecf28d80eb182b9ce475684bf9c718c
Soby Mathew [Thu, 12 Feb 2015 14:45:02 +0000 (14:45 +0000)]
Export maximum affinity using PLATFORM_MAX_AFFLVL macro
This patch removes the plat_get_max_afflvl() platform API
and instead replaces it with a platform macro PLATFORM_MAX_AFFLVL.
This is done because the maximum affinity level for a platform
is a static value and it is more efficient for it to be defined
as a platform macro.
NOTE: PLATFORM PORTS NEED TO BE UPDATED ON MERGE OF THIS COMMIT
Fixes ARM-Software/tf-issues#265
Change-Id: I31d89b30c2ccda30d28271154d869060d50df7bf
Soby Mathew [Thu, 22 Jan 2015 11:22:22 +0000 (11:22 +0000)]
Minimize MAX_MMAP_REGIONS for each BL stage
This patch defines MAX_MMAP_REGIONS separately for each BL stage
as per its requirements. This minimizes the size of the mmap[]
array.
Fixes ARM-Software/tf-issues#201
Change-Id: I19b15e1a91a8365b2ecf24e2cd71937cb73916b2
achingupta [Wed, 4 Feb 2015 16:18:20 +0000 (16:18 +0000)]
Merge pull request #256 from achingupta/ag/v1.1-rc2-fix
Fix model command line for legacy VE memory map
Achin Gupta [Wed, 4 Feb 2015 14:29:32 +0000 (14:29 +0000)]
Fix model command line for legacy VE memory map
The command line options specified in the User Guide to run the AEMv8 Base FVP
with the legacy VE memory map apply only when the model is configured to use GIC
v2.0. This patch adds the 'gicv3.gicv2-only=1' to the command line to ensure
that the right version of GIC is used.
Change-Id: I34c44e19fd42c29818b734ac8f6aa9bf97b4e891
danh-arm [Tue, 3 Feb 2015 13:13:16 +0000 (13:13 +0000)]
Merge pull request #254 from achingupta/ag/v1.1-doc-updates
Documentation for version 1.1
danh-arm [Tue, 3 Feb 2015 13:12:06 +0000 (13:12 +0000)]
Merge pull request #255 from jcastillo-arm/jc/cert_create_gerrit
TBB: Add documentation for Trusted Board Boot
Achin Gupta [Sun, 25 Jan 2015 22:44:23 +0000 (22:44 +0000)]
TBB: Add documentation for Trusted Board Boot
This patch updates the user-guide.md with the various build options related to
Trusted Board Boot and steps to build a FIP image which includes this
support. It also adds a trusted-board-boot.md which describes the scope and
design of this feature.
Change-Id: Ifb421268ebf7e06a135684c8ebb04c94835ce061
Achin Gupta [Mon, 2 Feb 2015 17:31:42 +0000 (17:31 +0000)]
Documentation for version 1.1
Final updates to readme.md and change-log.md for ARM Trusted Firmware version
1.1. Also increment the version in the Makefile.
Change-Id: Ib001a6ec9a9c570985841d06f0ff80ed76c2996b
danh-arm [Mon, 2 Feb 2015 18:33:17 +0000 (18:33 +0000)]
Merge pull request #253 from danh-arm/dh/deps-for-v1.1
Move up dependency versions in user guide
Sandrine Bailleux [Wed, 14 Jan 2015 14:15:19 +0000 (14:15 +0000)]
Move up dependency versions in user guide
Move up the version numbers in the user guide of:
* DS-5 (to v5.20)
* EDK2 (to v2.1-rc0)
* Linux Kernel (to 1.3-Juno)
* Linaro file-system (to 14.12)
* Juno SCP binary (to 1.5.0-rc0 within board recovery image 0.10.1).
Also remove duplicate information that is available from the
ARM Connected Community website.
* Base FVP (to 6.2)
* Foundation FVP (to 9.1). Also update the name of the Foundation
FVP binary since it has changed since version 2.1.
Co-Authored-By: Dan Handley <dan.handley@arm.com>
Change-Id: I1cf2f2b1a3f1b997ac905a4ab440876d265698c0
danh-arm [Mon, 2 Feb 2015 18:05:15 +0000 (18:05 +0000)]
Merge pull request #252 from sandrine-bailleux/v1.1-misc-doc-fixes
Miscellaneous doc fixes for v1.1
Sandrine Bailleux [Wed, 28 Jan 2015 10:11:48 +0000 (10:11 +0000)]
Miscellaneous doc fixes for v1.1
Change-Id: Iaf9d6305edc478d39cf1b37c8a70ccdf723e8ef9
danh-arm [Fri, 30 Jan 2015 15:31:17 +0000 (15:31 +0000)]
Merge pull request #251 from soby-mathew/sm/reset_handler_fix_v2
Fix the Cortex-A57 reset handler register usage v2
Soby Mathew [Thu, 29 Jan 2015 12:00:58 +0000 (12:00 +0000)]
Fix the Cortex-A57 reset handler register usage
The CPU specific reset handlers no longer have the freedom
of using any general purpose register because it is being invoked
by the BL3-1 entry point in addition to BL1. The Cortex-A57 CPU
specific reset handler was overwriting x20 register which was being
used by the BL3-1 entry point to save the entry point information.
This patch fixes this bug by reworking the register allocation in the
Cortex-A57 reset handler to avoid using x20. The patch also
explicitly mentions the register clobber list for each of the
callee functions invoked by the reset handler
Change-Id: I28fcff8e742aeed883eaec8f6c4ee2bd3fce30df
danh-arm [Wed, 28 Jan 2015 18:41:12 +0000 (18:41 +0000)]
Merge pull request #249 from danh-arm/jc/tbb_prototype
Trusted Board Boot Prototype
Juan Castillo [Wed, 28 Jan 2015 16:46:57 +0000 (16:46 +0000)]
TBB: authenticate BL3-x images and certificates
This patch adds support to authenticate the Trusted Key certificate
and the BL3-x certificates and images at BL2.
Change-Id: I69a8c13a14c8da8b75f93097d3a4576aed71c5dd
Juan Castillo [Wed, 28 Jan 2015 16:42:41 +0000 (16:42 +0000)]
FVP: initialize IO framework in bl2_early_platform_setup()
This patch moves fvp_io_setup() to bl2_early_platform_setup() in order
to allow BL2 to use the IO framework before bl2_platform_setup().
Change-Id: I75e1a772ab5f9b4727f6727822a2527c30f3c63d
Juan Castillo [Wed, 7 Jan 2015 13:49:59 +0000 (13:49 +0000)]
TBB: authenticate BL2 image and certificate
This patch adds support to authenticate the BL2 content certificate
and image using the authentication module in BL1.
The FIP driver has been extended to include the BL2 certificate
UUID.
FVP and Juno ports include the BL2 certificate FIP file
definition.
Change-Id: I32680e9bd123c8db4a4193c14448c9b32b0e9325
Juan Castillo [Tue, 13 Jan 2015 10:37:27 +0000 (10:37 +0000)]
TBB: add authentication module interface
This patch provides an API to access the authentication module that
will be used to verify the authenticity of the images loaded into
memory as part of the Trusted Board Boot process.
To include the authentication module as part of the build, set the
boolean build option TRUSTED_BOARD_BOOT. One single authentication
module must be registered at build time by setting the build option
AUTH_MOD=<mod_name>. All authentication modules will be located in
'common/auth/<mod_name>' and must present the <mod_name>.mk file that
will be included by the build system to compile the module sources.
To create an authentication module, an instance of auth_mod_t called
'auth_mod' must be declared in the module sources. The initialization
and verification functions provided by the module will be exported
through the function pointers specified when declaring this instance.
If an authentication module includes third party sources that do not
adhere to the C99 standard, the -pedantic option may be removed from
the build options by setting the flag DISABLE_PEDANTIC in the module
file <mod_name>.mk.
Change-Id: I080bb04bd421029bcdf22ec2c63807afbf061dcd
Juan Castillo [Tue, 13 Jan 2015 12:21:04 +0000 (12:21 +0000)]
TBB: add PolarSSL based authentication module
This patch implements an authentication module based on the
PolarSSL library (v1.3.9) to verify the Chain of Trust when
Trusted Boot is enabled.
PolarSSL sources must be fetched separately. The POLARSSL_DIR
build option may be used to indicate the path to the PolarSSL
main directory (this directory must contain the 'include' and
'library' subdirectories).
To be able to build PolarSSL sources as a part of the Trusted
Firmware build process, the DISABLE_PEDANTIC flag in polarssl.mk
will tell the build system to remove the -pedantic option from
the CFLAGS.
Inclusion of PolarSSL increases the memory requirements of the BL1
and BL2 images. The following are the changes made to the FVP and
Juno platforms to cater for this when TRUSTED_BOARD_BOOT is
defined:
Changes on FVP:
- BL1 and BL2 stacks have been increased to 4 KB
- BL1(rw) section has been increased to 32 KB.
- BL2 memory region has been increased to 112 KB
Changes on Juno:
- BL1 and BL2 stacks have been increased to 4 KB
- BL1(rw) section has been increased to 32 KB.
- Trusted ROM region in Flash has been increased to 128 KB.
- BL2 memory region has been increased to 116 KB
Change-Id: Ie87d80d43408eb6239c4acd0ec5ab2120e4e9e80
Juan Castillo [Mon, 17 Nov 2014 17:27:41 +0000 (17:27 +0000)]
stdlib: add missing features to build PolarSSL
This patch adds the missing features to the C library included
in the Trusted Firmware to build PolarSSL:
- strcasecmp() function
- exit() function
- sscanf()* function
- time.h header file (and its dependencies)
* NOTE: the sscanf() function is not a real implementation. It just
returns the number of expected arguments by counting the number of
'%' characters present in the formar string. This return value is
good enough for PolarSSL because during the certificate parsing
only the return value is checked. The certificate validity period
is ignored.
Change-Id: I43bb3742f26f0bd458272fccc3d72a7f2176ab3d
Juan Castillo [Wed, 7 Jan 2015 10:39:25 +0000 (10:39 +0000)]
TBB: add a platform specific function to validate the ROTPK
This patch adds the function plat_match_rotpk() to the platform
porting layer to provide a Root Of Trust Public key (ROTPK)
verification mechanism. This function is called during the
Trusted Board Boot process and receives a supposed valid copy
of the ROTPK as a parameter, usually obtained from an external
source (for instance, a certificate). It returns 0 (success) if
that key matches the actual ROTPK stored in the system or any
other value otherwise.
The mechanism to access the actual ROTPK stored in the system
is platform specific and should be implemented as part of this
function. The format of the ROTPK is also platform specific
(to save memory, some platforms might store a hash of the key
instead of the whole key).
TRUSTED_BOARD_BOOT build option has been added to allow the user
to enable the Trusted Board Boot features. The implementation of
the plat_match_rotpk() funtion is mandatory when Trusted Board
Boot is enabled.
For development purposes, FVP and Juno ports provide a dummy
function that returns always success (valid key). A safe trusted
boot implementation should provide a proper matching function.
Documentation updated accordingly.
Change-Id: I74ff12bc2b041556c48533375527d9e8c035b8c3
Juan Castillo [Tue, 4 Nov 2014 17:36:40 +0000 (17:36 +0000)]
TBB: add support to include certificates in a FIP image
This patch extends the FIP tool to include the certificates
generated by the 'cert_create' tool.
If GENERATE_COT build option is enabled, the Makefile adds the
certificates as dependencies to create the FIP file. Thus, make
target 'fip' will also build the certificates as part of the
Trusted Firmware build process.
Change-Id: I5eee500da7f7be6cfb6e3df0423599739d260074