project/bcm63xx/atf.git
10 years agoUpdate contributing.md with new integration process
Dan Handley [Fri, 28 Mar 2014 10:49:39 +0000 (10:49 +0000)]
Update contributing.md with new integration process

Contributions will now be merged into an ARM Trusted Firmware
integration branch on GitHub instead of via an ARM internal
branch.

10 years agoFix build failure due to a typo in TSPD code
Achin Gupta [Wed, 26 Mar 2014 18:44:15 +0000 (18:44 +0000)]
Fix build failure due to a typo in TSPD code

This patch fixes a build failure when TSPD support is included. The failure was
due to a missing semi-colon at the end of a C statement in tspd_common.c

Change-Id: I8fbd0d500bd9145b15f862b8686e570b80fcce8c

10 years agoBuild system: Trigger dependency checking only for build targets
Sandrine Bailleux [Fri, 21 Mar 2014 14:17:51 +0000 (14:17 +0000)]
Build system: Trigger dependency checking only for build targets

The Makefile used to specify a blacklist of rules for which
dependency checking must not be triggered.  This list included
cleaning rules only, whereas all other non-build targets (e.g.
help, checkpatch, etc.) should also be included.

This approach seems a bit fragile because it is easy to forget
some non-building rules in the blacklist, as the experience
showed us.  It is more robust to specify a whitelist of rules
for which dependency checking is required.

Fixes ARM-software/tf-issues#112

Change-Id: I030c405abb35972a726a5200396430316d18f963

10 years agoInitialise UART console in all bootloader stages
Vikram Kanigiri [Tue, 25 Mar 2014 17:35:26 +0000 (17:35 +0000)]
Initialise UART console in all bootloader stages

This patch reworks the console driver to ensure that each bootloader stage
initializes it independently. As a result, both BL3-1 and BL2 platform code
now calls console_init() instead of relying on BL1 to perform console setup

Fixes ARM-software/tf-issues#120

Change-Id: Ic4d66e0375e40a2fc7434afcabc8bbb4715c14ab

10 years agoMove console functions out of pl011.c
Soby Mathew [Wed, 12 Mar 2014 14:52:51 +0000 (14:52 +0000)]
Move console functions out of pl011.c

This commit isolates the accessor functions in pl011.c and builds
a wrapper layer for console functions.

This also modifies the console driver to use the pl011 FIFO.

Fixes ARM-software/tf-issues#63

Change-Id: I3b402171cd14a927831bf5e5d4bb310b6da0e9a8

10 years agoBuild system: Remove last traces of 'PLAT=all'
Sandrine Bailleux [Fri, 21 Mar 2014 13:16:35 +0000 (13:16 +0000)]
Build system: Remove last traces of 'PLAT=all'

It used to be possible to build all bootloader binaries for all platforms
using 'PLAT=all'. This feature has been removed but there are still some
traces of its existence. This patch removes them.

Change-Id: Ic671a5c20c5b64acbd0a912d2e4db8f9d9574610

10 years agoFix build by correcting asm helper function usage in TSPD
Vikram Kanigiri [Mon, 24 Mar 2014 11:21:35 +0000 (11:21 +0000)]
Fix build by correcting asm helper function usage in TSPD

This patch fixes a regression failure due to the use of functions by the
TSPD code which access system registers with partially qualified names.
These functions had been removed in an earlier patch. The relevant code
has been updated to access these registers with their fully qualified
names.

Fixes ARM-software/tf-issues#119

Change-Id: Ide1bc5036e1b8164a42f7b7fe86186ad860e0ef9

10 years agoSeparate out BL2, BL3-1 and BL3-2 early exception vectors from BL1
Sandrine Bailleux [Mon, 24 Mar 2014 10:24:08 +0000 (10:24 +0000)]
Separate out BL2, BL3-1 and BL3-2 early exception vectors from BL1

bl1/aarch64/early_exceptions.S used to be re-used by BL2, BL3-1 and
BL3-2.  There was some early SMC handling code in there that was not
required by the other bootloader stages.  Therefore this patch
introduces an even simpler exception vector source file for BL2,
BL3-1 and BL3-2.

Fixes ARM-software/tf-issues#38

Change-Id: I0244b80e9930b0f8035156a0bf91cc3e9a8f995d

10 years agoMove per cpu exception stack in BL31 to tzfw_normal_stacks
Vikram Kanigiri [Thu, 20 Mar 2014 16:27:01 +0000 (16:27 +0000)]
Move per cpu exception stack in BL31 to tzfw_normal_stacks

Fixes ARM-software/tf-issues#70

Change-Id: I7f024f173fbdecd315076f528b05d6295aff7276

10 years agoAdd standby state support in PSCI cpu_suspend api
Vikram Kanigiri [Fri, 21 Mar 2014 11:57:10 +0000 (11:57 +0000)]
Add standby state support in PSCI cpu_suspend api

This patch adds support in the generic PSCI implementation to call a
platform specific function to enter a standby state using an example
implementation in ARM FVP port

Fixes ARM-software/tf-issues#94
Change-Id: Ic1263fcf25f28e09162ad29dca954125f9aa8cc9

10 years agoSemihosting: Fix file mode to load binaries on Windows
Sandrine Bailleux [Thu, 20 Mar 2014 15:51:02 +0000 (15:51 +0000)]
Semihosting: Fix file mode to load binaries on Windows

Trusted firmware binaries loaded via semihosting used to be
opened using 'r' mode (i.e. read mode).  This is fine on POSIX
conforming systems (including Linux) but for Windows it also means
that the file should be opened in text mode. 'rb' mode must be
specified instead for binary mode.  On POSIX conforming systems,
'rb' mode is equivalent to 'r' mode so it does no harm.

Fixes ARM-software/tf-issues#69

Change-Id: Ifa53f2ecfd765f572dea5dd73191f9fe2b2c2011

10 years agoRemove partially qualified asm helper functions
Vikram Kanigiri [Tue, 11 Mar 2014 17:41:00 +0000 (17:41 +0000)]
Remove partially qualified asm helper functions

Each ARM Trusted Firmware image should know in which EL it is running
and it should use the corresponding register directly instead of reading
currentEL and knowing which asm register to read/write

Change-Id: Ief35630190b6f07c8fbb7ba6cb20db308f002945

10 years agoFix the disable_mmu code
Vikram Kanigiri [Thu, 20 Mar 2014 12:23:21 +0000 (12:23 +0000)]
Fix the disable_mmu code

Remove the hard coding of all the MMU related registers with 0 and disable MMU
by clearing the M and C bit in SCTLR_ELx

Change-Id: I4a0b1bb14a604734b74c32eb31315d8504a7b8d8

10 years agoTSP: Make the platform-specific makefile mandatory
Sandrine Bailleux [Thu, 13 Mar 2014 14:48:31 +0000 (14:48 +0000)]
TSP: Make the platform-specific makefile mandatory

The Test Secure-EL1 Payload implementation should always have a
platform-specific component.  Therefore, there should always
be a platform-specific sub-makefile for the TSP.  If there is
none then assume TSP is not supported on this specific platform
and throw an error at build time if the user tries to compile it.

Change-Id: Ibfbe6e4861cc7786a29f2fc0341035b852925193

10 years agoFix file_to_uuid() function
Sandrine Bailleux [Wed, 19 Mar 2014 16:03:48 +0000 (16:03 +0000)]
Fix file_to_uuid() function

This patch fixes a bug in the 'file_to_uuid()' function: it used
to cause an exception by dereferencing a null pointer when
a given UUID was not found in the UUID array. The fix is to delete
the final null entry in the UUID array, which is not needed because
the array is statically declared so its size is known at build time.

Fixes ARM-software/tf-issues#43

Change-Id: I0a003485b88134564c0d36f57c274215d9e16532

10 years agoFIP tool: Fix error message for missing FIP filename
Sandrine Bailleux [Wed, 19 Mar 2014 13:39:52 +0000 (13:39 +0000)]
FIP tool: Fix error message for missing FIP filename

Previously to this path, the FIP tool used to print the following,
misleading error message when called without any argument or with
'--help' option:

  ERROR: Too many arguments

This patch fixes this behavior by printing the following error
message instead:

  ERROR: Missing FIP filename

If called with '--help', no error message is printed and only the
help message is displayed.

Change-Id: Ib281b056f5cd3bc2f66d98be0b0cb2a0aed7c6a8

10 years agoFIP tool: Add support for '--help' option.
Sandrine Bailleux [Wed, 19 Mar 2014 13:21:42 +0000 (13:21 +0000)]
FIP tool: Add support for '--help' option.

Also improve the help message printed by the FIP tool.

Change-Id: If0f802f1083458182ca8ce57e8c104d40eee0dbe

10 years agoFIP tool: Small optimisation for option parsing
Sandrine Bailleux [Wed, 19 Mar 2014 13:09:54 +0000 (13:09 +0000)]
FIP tool: Small optimisation for option parsing

This patch makes use of different values for '--dump' and other
command-line options. This makes the code simpler and also
optimises it a bit (because it avoids a string comparison).

Change-Id: I1c8345f210074fc5f962ea0282fd3625775dec69

10 years agoRework bakery lock with WFE/SEV sequence
Jeenu Viswambharan [Thu, 13 Mar 2014 11:16:25 +0000 (11:16 +0000)]
Rework bakery lock with WFE/SEV sequence

Current implementation of Bakery Lock does tight-loop waiting upon lock
contention.

This commit reworks the implementation to use WFE instruction for
waiting, and SEV to signal lock availability. It also adds the rationale
for choosing Bakery Locks instead of exclusion primitives, and more
comments for the lock algorithm.

Fixes ARM-software/tf-issue#67

Change-Id: Ie351d3dbb27ec8e64dbc9507c84af07bd385a7df
Co-authored-by: Vikram Kanigiri <vikram.kanigiri@arm.com>
10 years agoSpecify image entry in linker script
Jeenu Viswambharan [Tue, 11 Mar 2014 11:06:45 +0000 (11:06 +0000)]
Specify image entry in linker script

At present, the entry point for each BL image is specified via the
Makefiles and provided on the command line to the linker. When using a
link script the entry point should rather be specified via the ENTRY()
directive in the link script.

This patch updates linker scripts of all BL images to specify the entry
point using the ENTRY() directive. It also removes the --entry flag
passed to the linker through Makefile.

Fixes issue ARM-software/tf-issues#66

Change-Id: I1369493ebbacea31885b51185441f6b628cf8da0

10 years agoImplement standard calls for TSP
Jeenu Viswambharan [Fri, 28 Feb 2014 11:23:35 +0000 (11:23 +0000)]
Implement standard calls for TSP

This patch adds call count, UID and version information SMC calls for
the Trusted OS, as specified by the SMC calling convention.

Change-Id: I9a3e84ac1bb046051db975d853dcbe9612aba6a9

10 years agoImplement ARM Standard Service
Jeenu Viswambharan [Fri, 28 Feb 2014 10:08:33 +0000 (10:08 +0000)]
Implement ARM Standard Service

This patch implements ARM Standard Service as a runtime service and adds
support for call count, UID and revision information SMCs. The existing
PSCI implementation is subsumed by the Standard Service calls and all
PSCI calls are therefore dispatched by the Standard Service to the PSCI
handler.

At present, PSCI is the only specification under Standard Service. Thus
call count returns the number of PSCI calls implemented. As this is the
initial implementation, a revision number of 0.1 is returned for call
revision.

Fixes ARM-software/tf-issues#62

Change-Id: I6d4273f72ad6502636efa0f872e288b191a64bc1

10 years agoMove architecture timer setup to platform-specific code
Jeenu Viswambharan [Tue, 7 Jan 2014 10:21:18 +0000 (10:21 +0000)]
Move architecture timer setup to platform-specific code

At present, bl1_arch_setup() and bl31_arch_setup() program the counter
frequency using a value from the memory mapped generic timer. The
generic timer however is not necessarily present on all ARM systems
(although it is architected to be present on all server systems).

This patch moves the timer setup to platform-specific code and updates
the relevant documentation. Also, CNTR.FCREQ is set as the specification
requires the bit corresponding to the counter's frequency to be set when
enabling. Since we intend to use the base frequency, set bit 8.

Fixes ARM-software/tf-issues#24

Change-Id: I32c52cf882253e01f49056f47c58c23e6f422652

10 years agoRemove unused 'CPU present' flag
Jeenu Viswambharan [Tue, 7 Jan 2014 10:20:48 +0000 (10:20 +0000)]
Remove unused 'CPU present' flag

This patch removes the 'CPU present' flag that's being set but not
referred or used anywhere else.

Change-Id: Iaf82bdb354134e0b33af16c7ba88eb2259b2682a

10 years agoRemove change log instructions from contribution.md
Dan Handley [Tue, 4 Mar 2014 11:51:32 +0000 (11:51 +0000)]
Remove change log instructions from contribution.md

Remove the instructions to update the change log from
contribution.md. The change log no longer contains a
"Detailed changes since last release" section.

Also, update the documentation links following recent
documentation changes.

Change-Id: Id9df43d666f7f9a60dcc6f663a8a85cdd2ff7cc4

10 years agobl_common: add image_size()
Ryan Harkin [Tue, 4 Feb 2014 11:43:57 +0000 (11:43 +0000)]
bl_common: add image_size()

Fixes ARM-software/tf-issues#42

Some callers of load_image() may need to get the size of the image
before/after loading it.

Change-Id: I8dc067b69fc711433651a560ba5a8c3519445857
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agofvp: plat_io_storage: remove duplicated code
Ryan Harkin [Tue, 18 Feb 2014 17:40:24 +0000 (17:40 +0000)]
fvp: plat_io_storage: remove duplicated code

Fixes ARM-software/tf-issues#41

The policy functions for each file to be loaded were implemented by
copy/pasting one method and then varying the data checked.

This patch creates a generic function to check the policy based on the
data stored in a table.

This removes the amount of duplicated code but also makes the code
simpler and more efficient.

Change-Id: I1c52eacf6f18a1442dabbb33edd03d4bb8bbeae0
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoEnable platforms to omit some bootloaders
Jon Medhurst [Thu, 13 Feb 2014 15:19:28 +0000 (15:19 +0000)]
Enable platforms to omit some bootloaders

If a platform doesn't specify a BLx_SOURCE variable, then building
of the corresponding bootloader isn't attempted. Also allow BL3-3 to
be omitted from the FIP.

Note, this change also removes support for PLAT=all and the 'fip' target
from the 'all' recipe.

Fixes ARM-software/tf-issues#30

Change-Id: Ibdfead0440256eaf364617ecff65290ca6fe6240
Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoGenerate build time and date message at link time.
Jon Medhurst [Mon, 17 Feb 2014 12:18:24 +0000 (12:18 +0000)]
Generate build time and date message at link time.

So it updates each time a bootloader changes, not just when bl*_main.c
files are recompiled.

Fixes ARM-software/tf-issues#33

Change-Id: Ie8e1a7bd7e1913d2e96ac268606284f76af8c5ab
Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agofvp: Make use of the generic MMU translation table setup code
Jon Medhurst [Wed, 26 Feb 2014 16:27:53 +0000 (16:27 +0000)]
fvp: Make use of the generic MMU translation table setup code

Change-Id: I559c5a4d86cad55ce3f6ad71285b538d3cfd76dc
Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoAdd generic functions for setting up aarch64 MMU translation tables
Jon Medhurst [Fri, 24 Jan 2014 15:41:33 +0000 (15:41 +0000)]
Add generic functions for setting up aarch64 MMU translation tables

Change-Id: I5b8d040ebc6672e40e4f13925e2fd5bc124103f4
Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoUpdate Makefiles to get proper dependency checking working.
Jon Medhurst [Wed, 12 Feb 2014 15:54:48 +0000 (15:54 +0000)]
Update Makefiles to get proper dependency checking working.

This change requires all platforms to now specify a list of source files
rather than object files.

New source files should preferably be specified by using the path as
well and we should add this in the future for all files so we can remove
use of vpath. This is desirable because vpath hides issues like the fact
that BL2 currently pulls in a BL1 file bl1/aarch64/early_exceptions.S
and if in the future we added bl2/aarch64/early_exceptions.S then it's
likely only one of the two version would be used for both bootloaders.

This change also removes the 'dump' build target and simply gets
bootloaders to always generate a dump file. At the same time the -x
option is added so the section headers and symbols table are listed.

Fixes ARM-software/tf-issues#11

Change-Id: Ie38f7be76fed95756c8576cf3f3ea3b7015a18dc
Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoFix implementation and users of gicd_set_ipriorityr()
Jon Medhurst [Tue, 11 Feb 2014 14:48:56 +0000 (14:48 +0000)]
Fix implementation and users of gicd_set_ipriorityr()

Make gicd_set_ipriorityr() actually write to the priority register.

Also correct callers of this function which want the highest priority
to use the value zero as this is the highest priority value according
to the ARM Generic Interrupt Controller Architecture Specification.

To make this easier to get right, we introduce defines for the lowest
and highest priorities for secure and non-secure interrupts.

Fixes ARM-software/tf-issues#21

Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoFix assert in bakery_lock_release()
Jon Medhurst [Thu, 6 Feb 2014 14:13:16 +0000 (14:13 +0000)]
Fix assert in bakery_lock_release()

bakery_lock_release() expects an mpidr as the first argument however
bakery_lock_release() is calling it with the 'entry' argument it has
calculated. Rather than fixing this to pass the mpidr value it would be
much more efficient to just replace the call with

   assert(bakery->owner == entry)

As this leaves no remaining users of bakery_lock_held(), we might as
well delete it.

Fixes ARM-software/tf-issues#27

Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoAdd v0.3 release documentation
Dan Handley [Wed, 26 Feb 2014 17:20:40 +0000 (17:20 +0000)]
Add v0.3 release documentation

Update the readme.md and change-log.md with release information.

Also, remove the "Detailed changes since last release" section of
the change-log.md since the same information can be found in the
GIT commit messages. Fixes ARM-software/tf-issues#22.

Change-Id: I968cc8aaf588aa5c34ba8f1c12a5b797a46e04f5

10 years agoConsolidate design and porting documentation
Dan Handley [Thu, 27 Feb 2014 19:46:37 +0000 (19:46 +0000)]
Consolidate design and porting documentation

Consolidate firmware-design.md and porting-guide.pm so
that recently added sections fit better with
pre-existing sections. Make the documentation more
consistent in use of terminology.

Change-Id: Id87050b096122fbd845189dc2fe1cd17c3003468

10 years agoAdd EL3 runtime services and SPD documentation
Dan Handley [Tue, 25 Feb 2014 19:09:48 +0000 (19:09 +0000)]
Add EL3 runtime services and SPD documentation

1. Add design information on EL3 runtime services and
Secure-EL1 Payload Dispatchers (SPD) to
firmware-design.md.

2. Create new EL3 runtime service writer's guide
(rt-svc-writers-guide.md) to ease creation of new
runtime services.

Change-Id: I670aeb5fc246e25c6e599a15139aac886a0074fd

10 years agoSeparate firmware design out of user-guide.md
Dan Handley [Tue, 25 Feb 2014 13:28:04 +0000 (13:28 +0000)]
Separate firmware design out of user-guide.md

Move the firmware design documentation out of user-guide.md
and into a new file - firmware-design.md. Reformat the
section headers.

Change-Id: I664815dd47011c7c1cf2202aa4472a8fd78ebb92

10 years agoUpdate versions of dependencies in user-guide.md
Dan Handley [Wed, 19 Feb 2014 16:30:22 +0000 (16:30 +0000)]
Update versions of dependencies in user-guide.md

1. Update user-guide.md with the latest versions of dependent
components required by the tested configurations of ARM Trusted
Firmware. This includes the tested versions of Fixed Virtual
Platforms (FVPs), toolchain, EFI Development Kit 2(EDK2),
Linux kernel and Linux file system.

2. Remove the instructions to configure the Cortex Base FVP
with the legacy GICv2 memory map as this is no longer supported
since version 5.3 of the Base FVPs.

3. General tidyup of "Using the software" section.

Change-Id: If8264cd29036b59dc5ff435b5f8b1d072dd36ef0

10 years agoRemove duplicate xlat_table descriptions
Jeenu Viswambharan [Mon, 24 Feb 2014 15:20:28 +0000 (15:20 +0000)]
Remove duplicate xlat_table descriptions

The BL31 and BL2 linker scripts ended up having duplicate descriptions
for xlat_tables section. This patch removes those duplicate
descriptions.

Change-Id: Ibbdda0902c57fca5ea4e91e0baefa6df8f0a9bb1

10 years agofvp: Initialise UART earlier
Sandrine Bailleux [Fri, 21 Feb 2014 14:16:16 +0000 (14:16 +0000)]
fvp: Initialise UART earlier

The UART used to be initialised in bl1_platform_setup(). This is too
late because there are some calls to the assert() macro, which needs
to print some messages on the console, before that.

This patch moves the UART initialisation code to
bl1_early_platform_setup().

Fixes ARM-software/tf-issues#49

Change-Id: I98c83a803866372806d2a9c2e1ed80f2ef5b3bcc

10 years agoTolerate runtime service initialization failure
Jeenu Viswambharan [Thu, 20 Feb 2014 17:19:39 +0000 (17:19 +0000)]
Tolerate runtime service initialization failure

At present, the firmware panics if a runtime service fails to
initialize. An earlier patch had implemented late binding for all
runtime service handlers.

With that in place, this patch allows the firmware to proceed even when
a service fails to initialize.

Change-Id: I6cf4de2cecea9719f4cd48272a77cf459b080d4e

10 years agoImplement late binding for runtime hooks
Jeenu Viswambharan [Thu, 20 Feb 2014 17:11:00 +0000 (17:11 +0000)]
Implement late binding for runtime hooks

At present SPD power management hooks and BL3-2 entry are implemented
using weak references. This would have the handlers bound and registered
with the core framework at build time, but leaves them dangling if a
service fails to initialize at runtime.

This patch replaces implementation by requiring runtime handlers to
register power management and deferred initialization hooks with the
core framework at runtime. The runtime services are to register the
hooks only as the last step, after having all states successfully
initialized.

Change-Id: Ibe788a2a381ef39aec1d4af5ba02376e67269782

10 years agoUpdate contributing.md to new CLA location
Dan Handley [Mon, 24 Feb 2014 12:17:36 +0000 (12:17 +0000)]
Update contributing.md to new CLA location

This commit updates contributing.md to point to the ARM website
for downloading copies of the Contribution License Agreement (CLA).
It is no longer necessary to email ARM for these.

Change-Id: Iaf58680631a626f26827577709ac5471e3b84566

10 years agoReduce GICv3 debug output
Harry Liebel [Mon, 24 Feb 2014 12:01:27 +0000 (12:01 +0000)]
Reduce GICv3 debug output

Change-Id: Ia8502f8d0566025d8bad150029f49cb63815261d

10 years agoRevert accidental removal of BL2 from help message
Jeenu Viswambharan [Fri, 21 Feb 2014 11:42:08 +0000 (11:42 +0000)]
Revert accidental removal of BL2 from help message

Commit 375f538a7 in Github accidentally removed the BL2 targets from the
Makefile help message. This patch reverts that change.

Change-Id: I825a9abe5b4ba0f15d02879dda1056912e2ad60c

10 years agoUpdate .gitignore
Jeenu Viswambharan [Tue, 18 Feb 2014 12:57:55 +0000 (12:57 +0000)]
Update .gitignore

This patch updates .gitignore file to ignore potential build products,
tool object files and binaries

Also fixes issue ARM-software/tf-issues#35

Change-Id: I053dfba4ec8fecbcca081cad5b4bf94f8abfb15c

10 years agoFix semihosting with latest toolchain
Ryan Harkin [Mon, 10 Feb 2014 17:17:04 +0000 (17:17 +0000)]
Fix semihosting with latest toolchain

Fixes issues #10:

https://github.com/ARM-software/tf-issues/issues/10

This patch changes all/most variables of type int to be size_t or long
to fix the sizing and alignment problems found when building with the
newer toolchains such as Linaro GCC 13.12 or later.

Change-Id: Idc9d48eb2ff9b8c5bbd5b227e6907263d1ea188b
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoCleanup FIP build targets and messages
Jeenu Viswambharan [Wed, 19 Feb 2014 09:38:18 +0000 (09:38 +0000)]
Cleanup FIP build targets and messages

At present the fip.bin depends on phony targets for BL images, resulting
in unconditional remake of fip.bin. Also the build messages doesn't
match with the rest of build system.

This patch modifies the fip.bin dependencies to the actual BL binary
images so that fip.bin is remade only when the component images are
rebuilt/modified. The build messages and FIP Makefile are modified to
match the style of rest of the build system.

Change-Id: I8dd08666ff766d106820a5b4b037c2161bcf140f

10 years agoReport recoverable errors as warnings
Jeenu Viswambharan [Thu, 20 Feb 2014 12:03:31 +0000 (12:03 +0000)]
Report recoverable errors as warnings

At present many recoverable failures are reported as errors. This patch
modifies all such failures to be reported as warnings instead.

Change-Id: I5141653c82498defcada9b90fdf7498ba496b2f2

10 years agoRework arithmetic operations in Test Secure Payload
Achin Gupta [Sun, 9 Feb 2014 23:11:46 +0000 (23:11 +0000)]
Rework arithmetic operations in Test Secure Payload

This patch reworks the service provided by the TSP to perform common
arithmetic operations on a set of arguments provided by the non-secure
world. For a addition, division, subtraction & multiplication operation
requested on two arguments in x0 and x1 the steps are:

1. TSPD saves the non-secure context and passes the operation and its
   arguments to the TSP.

2. TSP asks the TSPD to return the same arguments once again. This
   exercises an additional SMC path.

3. TSP now has two copies of both x0 and x1. It performs the operation
   on the corresponding copies i.e. in case of addition it returns x0+x0
   and x1+x1.

4. TSPD receives the result, saves the secure context, restores the
   non-secure context and passes the result back to the non-secure
   client.

Change-Id: I6eebfa2ae0a6f28b1d2e11a31f575c7a4b96724b
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
10 years agoAdd power management support in the SPD
Achin Gupta [Sun, 9 Feb 2014 18:24:19 +0000 (18:24 +0000)]
Add power management support in the SPD

This patch implements a set of handlers in the SPD which are called by
the PSCI runtime service upon receiving a power management
operation. These handlers in turn pass control to the Secure Payload
image if required before returning control to PSCI. This ensures that
the Secure Payload has complete visibility of all power transitions in
the system and can prepare accordingly.

Change-Id: I2d1dba5629b7cf2d53999d39fe807dfcf3f62fe2

10 years agoAdd Test Secure Payload Dispatcher (TSPD) service
Achin Gupta [Tue, 18 Feb 2014 18:12:48 +0000 (18:12 +0000)]
Add Test Secure Payload Dispatcher (TSPD) service

This patch adds the TSPD service which is responsible for managing
communication between the non-secure state and the Test Secure Payload
(TSP) executing in S-EL1.

The TSPD does the following:

1. Determines the location of the TSP (BL3-2) image and passes control
   to it for initialization. This is done by exporting the 'bl32_init()'
   function.

2. Receives a structure containing the various entry points into the TSP
   image as a response to being initialized. The TSPD uses this
   information to determine how the TSP should be entered depending on
   the type of operation.

3. Implements a synchronous mechanism for entering into and returning
   from the TSP image. This mechanism saves the current C runtime
   context on top of the current stack and jumps to the TSP through an
   ERET instruction. The TSP issues an SMC to indicate completion of the
   previous request. The TSPD restores the saved C runtime context and
   resumes TSP execution.

This patch also introduces a Make variable 'SPD' to choose the specific
SPD to include in the build. By default, no SPDs are included in the
build.

Change-Id: I124da5695cdc510999b859a1bf007f4d049e04f3
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
10 years agoFix FIP offset address when file not found
Jeenu Viswambharan [Thu, 20 Feb 2014 11:51:00 +0000 (11:51 +0000)]
Fix FIP offset address when file not found

If there is a request to open a file from FIP, and that file is not
found, the driver fails to reset the offset address. This causes
subsequent file loads to fail.

This patch resets the offset address to zero if a file is not found so
that subsequent file loads are unaffected.

Change-Id: I16418e35f92fb7c85fb12e2acc071990520cdef8

10 years agoAdd Test Secure Payload (BL3-2) image
Achin Gupta [Tue, 18 Feb 2014 18:09:12 +0000 (18:09 +0000)]
Add Test Secure Payload (BL3-2) image

This patch adds a simple TSP as the BL3-2 image. The secure payload
executes in S-EL1. It paves the way for the addition of the TSP
dispatcher runtime service to BL3-1. The TSP and the dispatcher service
will serve as an example of the runtime firmware's ability to toggle
execution between the non-secure and secure states in response to SMC
request from the non-secure state.  The TSP will be replaced by a
Trusted OS in a real system.

The TSP also exports a set of handlers which should be called in
response to a PSCI power management event e.g a cpu being suspended or
turned off. For now it runs out of Secure DRAM on the ARM FVP port and
will be moved to Secure SRAM later. The default translation table setup
code assumes that the caller is executing out of secure SRAM. Hence the
TSP exports its own translation table setup function.

The TSP only services Fast SMCs, is non-reentrant and non-interruptible.
It does arithmetic operations on two sets of four operands, one set
supplied by the non-secure client, and the other supplied by the TSP
dispatcher in EL3. It returns the result according to the Secure Monitor
Calling convention standard.

This TSP has two functional entry points:

- An initial, one-time entry point through which the TSP is initialized
  and prepares for receiving further requests from secure
  monitor/dispatcher

- A fast SMC service entry point through which the TSP dispatcher
  requests secure services on behalf of the non-secure client

Change-Id: I24377df53399307e2560a025eb2c82ce98ab3931
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
10 years agoMove PSCI to runtime services directory
Achin Gupta [Sun, 9 Feb 2014 17:48:12 +0000 (17:48 +0000)]
Move PSCI to runtime services directory

This patch creates a 'services' directory and moves the PSCI under
it. Other runtime services e.g. the Secure Payload Dispatcher service
will be placed under the same directory in the future.

Also fixes issue ARM-software/tf-issues#12

Change-Id: I187f83dcb660b728f82155d91882e961d2255068

10 years agoSpecify address of UART device to use as a console
Achin Gupta [Sun, 9 Feb 2014 13:47:08 +0000 (13:47 +0000)]
Specify address of UART device to use as a console

This patch adds the ability to specify the base address of a UART
device for initialising the console. This allows a boot loader stage
to use a different UART device from UART0 (default) for the console.

Change-Id: Ie60b927389ae26085cfc90d22a564ff83ba62955

10 years agoFactor out translation table setup in ARM FVP port
Achin Gupta [Sun, 9 Feb 2014 13:30:38 +0000 (13:30 +0000)]
Factor out translation table setup in ARM FVP port

This patch factors out the ARM FVP specific code to create MMU
translation tables so that it is possible for a boot loader stage to
create a different set of tables instead of using the default ones.
The default translation tables are created with the assumption that
the calling boot loader stage executes out of secure SRAM. This might
not be true for the BL3_2 stage in the future.

A boot loader stage can define the `fill_xlation_tables()` function as
per its requirements. It returns a reference to the level 1
translation table which is used by the common platform code to setup
the TTBR_EL3.

This patch is a temporary solution before a larger rework of
translation table creation logic is introduced.

Change-Id: I09a075d5da16822ee32a411a9dbe284718fb4ff6

10 years agoAdd support for BL3-2 in BL3-1
Achin Gupta [Wed, 19 Feb 2014 17:58:33 +0000 (17:58 +0000)]
Add support for BL3-2 in BL3-1

This patch adds the following support to the BL3-1 stage:

1. BL3-1 allows runtime services to specify and determine the security
   state of the next image after BL3-1. This has been done by adding
   the `bl31_set_next_image_type()` & `bl31_get_next_image_type()`
   apis. The default security state is non-secure. The platform api
   `bl31_get_next_image_info()` has been modified to let the platform
   decide which is the next image in the desired security state.

2. BL3-1 exports the `bl31_prepare_next_image_entry()` function to
   program entry into the target security state. It uses the apis
   introduced in 1. to do so.

3. BL3-1 reads the information populated by BL2 about the BL3-2 image
   into its internal data structures.

4. BL3-1 introduces a weakly defined reference `bl32_init()` to allow
   initialisation of a BL3-2 image. A runtime service like the Secure
   payload dispatcher will define this function if present.

Change-Id: Icc46dcdb9e475ce6575dd3f9a5dc7a48a83d21d1

10 years agoAdd support for BL3-2 in BL2
Achin Gupta [Wed, 19 Feb 2014 17:52:35 +0000 (17:52 +0000)]
Add support for BL3-2 in BL2

This patch adds support for loading a BL3-2 image in BL2. In case a
BL3-2 image is found, it also passes information to BL3-1 about where it
is located and the extents of memory available to it. Information about
memory extents is populated by platform specific code.

The documentation has also been updated to reflect the above changes.

Change-Id: I526b2efb80babebab1318f2b02e319a86d6758b0
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
10 years agoRework BL2 to BL3-1 hand over interface
Achin Gupta [Wed, 19 Feb 2014 17:18:23 +0000 (17:18 +0000)]
Rework BL2 to BL3-1 hand over interface

This patch reworks BL2 to BL3-1 hand over interface by introducing a
composite structure (bl31_args) that holds the superset of information
that needs to be passed from BL2 to BL3-1.

  - The extents of secure memory available to BL3-1
  - The extents of memory available to BL3-2 (not yet implemented) and
    BL3-3
  - Information to execute BL3-2 (not yet implemented) and BL3-3 images

This patch also introduces a new platform API (bl2_get_bl31_args_ptr)
that needs to be implemented by the platform code to export reference to
bl31_args structure which has been allocated in platform-defined memory.

The platform will initialize the extents of memory available to BL3-3
during early platform setup in bl31_args structure. This obviates the
need for bl2_get_ns_mem_layout platform API.

BL2 calls the bl2_get_bl31_args_ptr function to get a reference to
bl31_args structure. It uses the 'bl33_meminfo' field of this structure
to load the BL3-3 image. It sets the entry point information for the
BL3-3 image in the 'bl33_image_info' field of this structure. The
reference to this structure is passed to the BL3-1 image.

Also fixes issue ARM-software/tf-issues#25

Change-Id: Ic36426196dd5ebf89e60ff42643bed01b3500517

10 years agoAdd exception vector guards
Jeenu Viswambharan [Fri, 7 Feb 2014 15:53:18 +0000 (15:53 +0000)]
Add exception vector guards

This patch adds guards so that an exception vector exceeding 32
instructions will generate a compile-time error. This keeps the
exception handlers in check from spilling over.

Change-Id: I7aa56dd0071a333664e2814c656d3896032046fe

10 years agoIncrease coherent stack sizes
Achin Gupta [Sun, 2 Feb 2014 13:04:00 +0000 (13:04 +0000)]
Increase coherent stack sizes

This patch increases coherent stack size for both debug and release
builds in order to accommodate stack-heavy printf() and extended EL3
functionality

Change-Id: I30ef30530a01517a97e63d703873374828c09f20

10 years agoAdd support for handling runtime service requests
Jeenu Viswambharan [Thu, 6 Feb 2014 10:36:15 +0000 (10:36 +0000)]
Add support for handling runtime service requests

This patch uses the reworked exception handling support to handle
runtime service requests through SMCs following the SMC calling
convention. This is a giant commit since all the changes are
inter-related. It does the following:

1. Replace the old exception handling mechanism with the new one
2. Enforce that SP_EL0 is used C runtime stacks.
3. Ensures that the cold and warm boot paths use the 'cpu_context'
   structure to program an ERET into the next lower EL.
4. Ensures that SP_EL3 always points to the next 'cpu_context'
   structure prior to an ERET into the next lower EL
5. Introduces a PSCI SMC handler which completes the use of PSCI as a
   runtime service

Change-Id: I661797f834c0803d2c674d20f504df1b04c2b852
Co-authored-by: Achin Gupta <achin.gupta@arm.com>
10 years agoIntroduce new exception handling framework
Achin Gupta [Sun, 2 Feb 2014 12:02:23 +0000 (12:02 +0000)]
Introduce new exception handling framework

This patch introduces the reworked exception handling logic which lays
the foundation for accessing runtime services in later patches. The
type of an exception has a greater say in the way it is
handled. SP_EL3 is used as the stack pointer for:

1. Determining the type of exception and handling the unexpected ones
   on the exception stack

2. Saving and restoring the essential general purpose and system
   register state after exception entry and prior to exception exit.

SP_EL0 is used as the stack pointer for handling runtime service
requests e.g. SMCs. A new structure for preserving general purpose
register state has been added to the 'cpu_context' structure. All
assembler ensures that it does not use callee saved registers
(x19-x29). The C runtime preserves them across functions calls. Hence
EL3 code does not have to save and restore them explicitly.

Since the exception handling framework has undergone substantial change,
the changes have been kept in separate files to aid readability. These
files will replace the existing ones in subsequent patches.

Change-Id: Ice418686592990ff7a4260771e8d6676e6c8c5ef

10 years agoAdd runtime services framework
Achin Gupta [Sat, 1 Feb 2014 18:53:26 +0000 (18:53 +0000)]
Add runtime services framework

This patch introduces the framework to enable registration and
initialisation of runtime services. PSCI is registered and initialised
as a runtime service. Handling of runtime service requests will be
implemented in subsequent patches.

Change-Id: Id21e7ddc5a33d42b7d6e455b41155fc5441a9547

10 years agopsci: Use context library for preserving EL3 state
Achin Gupta [Sat, 1 Feb 2014 08:59:56 +0000 (08:59 +0000)]
psci: Use context library for preserving EL3 state

This patch uses the context library to save and restore EL3 state on
the 'cpu_context' data structures allocated by PSCI for managing
non-secure state context on each cpu.

Change-Id: I19c1f26578204a7cd9e0a6c582ced0d97ee4cf80

10 years agoAdd context management library
Achin Gupta [Sat, 1 Feb 2014 07:51:28 +0000 (07:51 +0000)]
Add context management library

This patch adds support for a cpu context management library. This
library will be used to:

1. Share pointers to secure and non-secure state cpu contexts between
   runtime services e.g. PSCI and Secure Payload Dispatcher services
2. Set SP_EL3 to a context structure which will be used for
   programming an ERET into a lower EL
3. Provide wrapper functions to save and restore EL3 & EL1
   state. These functions will in turn use the helper functions in
   context.S

Change-Id: I655eeef83dcd2a0c6f2eb2ac23efab866ac83ca0

10 years agoAdd helper library for cpu context management
Achin Gupta [Thu, 16 Jan 2014 12:08:03 +0000 (12:08 +0000)]
Add helper library for cpu context management

This patch introduces functions for saving and restoring shared system
registers between secure and non-secure EL1 exception levels, VFP
registers and essential EL3 system register and other state. It also
defines the 'cpu_context' data structure which will used for saving and
restoring execution context for a given security state. These functions
will allow runtime services like PSCI and Secure payload dispatcher to
implement logic for switching between the secure and non-secure states.

The save and restore functions follow AArch64 PCS and only use
caller-saved temporary registers.

Change-Id: I8ee3aaa061d3caaedb28ae2c5becb9a206b6fd74

10 years agoSetup VBAR_EL3 incrementally
Achin Gupta [Sat, 18 Jan 2014 16:50:09 +0000 (16:50 +0000)]
Setup VBAR_EL3 incrementally

This patch ensures that VBAR_EL3 points to the simple stack-less
'early_exceptions' when the C runtime stack is not correctly setup to
use the more complex 'runtime_exceptions'. It is initialised to
'runtime_exceptions' once this is done.

This patch also moves all exception vectors into a '.vectors' section
and modifies linker scripts to place all such sections together. This
will minimize space wastage from alignment restrictions.

Change-Id: I8c3e596ea3412c8bd582af9e8d622bb1cb2e049d

10 years agoFix spilled-over BL1 exception vector
Jeenu Viswambharan [Fri, 7 Feb 2014 15:50:57 +0000 (15:50 +0000)]
Fix spilled-over BL1 exception vector

The SynchronousExceptionA64 vector has gone beyond the 32-instruction
limit for individual exception vector. This patch splits and relocates
the exception handler so that it fits into the 32-instruction window.

Change-Id: Ic60c4fc3f09a1cb071d63ff0e58353ecaecbb62f

10 years agoMove translation tables into separate section
Jeenu Viswambharan [Mon, 17 Feb 2014 17:26:51 +0000 (17:26 +0000)]
Move translation tables into separate section

This patch moves the translation tables into their own section. This
saves space that would otherwise have been lost in padding due to page
table alignment constraints. The BL31 and BL32 bases have been
consequently adjusted.

Change-Id: Ibd65ae8a5ce4c4ea9a71a794c95bbff40dc63e65

10 years agoAdd Firmware Image Package (FIP) documentation
Harry Liebel [Fri, 31 Jan 2014 19:04:10 +0000 (19:04 +0000)]
Add Firmware Image Package (FIP) documentation

This fixes ARM-software/tf-issues#9

Change-Id: Id57037115b8762efc9eaf5ff41887b71d6494c5d

10 years agoAdd Firmware Image Package (FIP) driver
Harry Liebel [Fri, 14 Feb 2014 14:42:48 +0000 (14:42 +0000)]
Add Firmware Image Package (FIP) driver

The Firmware Image Package (FIP) driver allows for data to be loaded
from a FIP on platform storage. The FVP supports loading bootloader
images from a FIP located in NOR FLASH.

The implemented FVP policy states that bootloader images will be
loaded from a FIP in NOR FLASH if available and fall back to loading
individual images from semi-hosting.

NOTE:
- BL3-3(e.g. UEFI) is loaded into DRAM and needs to be configured
  to run from the BL33_BASE address. This is currently set to
  DRAM_BASE+128MB for the FVP.

Change-Id: I2e4821748e3376b5f9e467cf3ec09509e43579a0

10 years agoAdd Firmware Image Package creation tool
Harry Liebel [Fri, 10 Jan 2014 18:00:33 +0000 (18:00 +0000)]
Add Firmware Image Package creation tool

This tool can be used to create a Firmware Image Packages (FIP). These
FIPs store a combined set of firmware images with a Table of Contents
(ToC) that can be loaded by the firmware from platform storage.

- Add uuid.h from FreeBSD.
- Use symbolic links to shared headers otherwise unwanted headers and
  definitions are pulled in.
- A FIP is created as part of the default FVP build.
- A BL3-3 image(e.g. UEFI) must be provided.

Change-Id: Ib73feee181df2dba68bf6abec115a83cfa5e26cb

10 years agoImplement load_image in terms of IO abstraction
James Morrissey [Mon, 10 Feb 2014 17:04:32 +0000 (17:04 +0000)]
Implement load_image in terms of IO abstraction

The modified implementation uses the IO abstraction rather than
making direct semi-hosting calls.  The semi-hosting driver is now
registered for the FVP platform during initialisation of each boot
stage where it is used.  Additionally, the FVP platform includes a
straightforward implementation of 'plat_get_image_source' which
provides a generic means for the 'load_image' function to determine
how to access the image data.

Change-Id: Ia34457b471dbee990c7b3c79de7aee4ceea51aa6

10 years agoAdd IO abstraction framework
James Morrissey [Mon, 10 Feb 2014 16:18:59 +0000 (16:18 +0000)]
Add IO abstraction framework

This is intended primarily for use as a storage abstraction.
It allows operations such as image-loading to be implemented
in a platform-independent fashion.  Each platform registers
a set of IO drivers during initialisation.  The platform must
also provide a function that will return a device and a specifier
that can be used to access specified content.

Clients of the API will primarily use device and entity handles.
The term "entity" is deliberately vague, to allow for different
representations of content accessed using different types of
specifier, but will often be interpreted as a "file" where the
specifier will normally be its path.

This commit builds, but is intended to be paired with a sample
implementation of "load_image" using a semi-hosting driver on FVP.

Change-Id: Id3b52f1c0eb9ce76b44b99fc6b6460803668cc86

10 years agoFix asserts appearing in release builds
James Morrissey [Mon, 10 Feb 2014 14:24:36 +0000 (14:24 +0000)]
Fix asserts appearing in release builds

Also fix warnings generated in release builds when assert code
is absent.

Change-Id: I45b9173d3888f9e93e98eb5b4fdc06727ba5cbf4

10 years agoCompile assembly files with -DDEBUG flag
Sandrine Bailleux [Tue, 11 Feb 2014 13:31:33 +0000 (13:31 +0000)]
Compile assembly files with -DDEBUG flag

Change-Id: Ic6cf19402a0936161baf6b91bf75d64d95269a3c

10 years agoFix memmove and memcpy
Jon Medhurst [Wed, 15 Jan 2014 18:22:34 +0000 (18:22 +0000)]
Fix memmove and memcpy

memmove needs to allow for overlapping memory regions and, together
with memcpy, should return the input destination pointer, not the
address after the end of the copied data.

fixes ARM-software/tf-issues#18

Signed-off-by: Jon Medhurst <tixy@linaro.org>
10 years agoAllow style checking of tree and local changes
Ian Spray [Thu, 30 Jan 2014 17:25:28 +0000 (17:25 +0000)]
Allow style checking of tree and local changes

New phony Makefile targets have been added:

 * checkcodebase
 * checkpatch

The checkcodebase target will run a Linux style compliance check over the
entire codebase, and honours the V=1 Makefile verbose setting and so will
show more information when this is enabled.

If the local directory is a git checkout then the output of git ls-files is
used to decide which files to test for compliance.  If the local directory
is not under git control then a 'best attempt' is made, but in this case it
should be noted that it is possible for additional non-codebase files to be
tested, so care should be taken when parsing the output.

The checkpatch target will compare local changes against the git origin/master
to allow issues with the last set of changes to be identified.  To override
the change comparision location, set the BASE_COMMIT variable to your
desired git branch.

Both targets rely on the Linux source tree script checkpatch.pl to do the
syntax checking, and expects that the CHECKPATCH environment variable points
to the location of this file.

Notes on the usage of these targets have been added to the contributing.md
and docs/user-guide.md text files.

Change-Id: I6d73c97af578e24a34226d972afadab9d30f1d8d

10 years agoBuild system: Add cscope target to the Makefile
Joakim Bech [Thu, 23 Jan 2014 13:51:49 +0000 (14:51 +0100)]
Build system: Add cscope target to the Makefile

Fixes arm-software/tf-issues#15

Signed-off-by: Joakim Bech <joakim.bech@linaro.org>
10 years agofvp: clear a pending cluster power off request
Achin Gupta [Fri, 17 Jan 2014 16:52:29 +0000 (16:52 +0000)]
fvp: clear a pending cluster power off request

The last CPU in a cluster is responsible for issuing the cluster power
down request to the FVP power controller. If another CPU in this
cluster wakes up before the last CPU enters WFI then the cluster power
down request remains pending. If this request is not cancelled and the
newly woken up CPU enters a simple WFI later, the power controller
powers the cluster down. This leads to unpredictable behaviour.

This patch fixes this issue by ensuring that the first CPU to wake up
in a cluster writes its MPIDR to the power controller's PPONR. This
cancels any pending cluster power down request.

Change-Id: I7e787adfd6c9a0bd7308390e3309d46f35c01086

10 years agopsci: fix affinity level upgrade issue
Achin Gupta [Thu, 5 Dec 2013 16:33:10 +0000 (16:33 +0000)]
psci: fix affinity level upgrade issue

The psci implementation does not track target affinity level requests
specified during cpu_suspend calls correctly as per the following
example.

1. cpu0.cluster0 calls cpu_suspend with the target affinity level as 0
2. Only the cpu0.cluster0 is powered down while cluster0 remains
   powered up
3. cpu1.cluster0 calls cpu_off to power itself down to highest
   possible affinity level
4. cluster0 will be powered off even though cpu0.cluster0 does not
   allow cluster shutdown

This patch introduces reference counts at affinity levels > 0 to track
the number of cpus which want an affinity instance at level X to
remain powered up. This instance can be turned off only if its
reference count is 0. Cpus still undergo the normal state transitions
(ON, OFF, ON_PENDING, SUSPEND) but the higher levels can only be
either ON or OFF depending upon their reference count.

The above issue is thus fixed as follows:

1. cluster0's reference count is incremented by two when cpu0 and cpu1
   are initially powered on.

2. cpu0.cluster0 calls cpu_suspend with the target affinity level as
   0. This does not affect the cluster0 reference count.

3. Only the cpu0.cluster0 is powered down while cluster0 remains
   powered up as it has a non-zero reference count.

4. cpu1.cluster0 call cpu_off to power itself down to highest possible
   affinity level. This decrements the cluster0 reference count.

5. cluster0 is still not powered off since its reference count will at
   least be 1 due to the restriction placed by cpu0.

Change-Id: I433dfe82b946f5f6985b1602c2de87800504f7a9

10 years agopsci: preserve target affinity level during suspend
Achin Gupta [Thu, 5 Dec 2013 15:10:48 +0000 (15:10 +0000)]
psci: preserve target affinity level during suspend

This patch adds support to save and restore the target affinity level
specified during a cpu_suspend psci call. This ensures that we
traverse only through the affinity levels that we originally intended
to after resuming from suspend.

Change-Id: I0900ae49a50b496da137cfec8f158da0397ec56c

10 years agopsci: replace secure context with suspend context
Achin Gupta [Thu, 5 Dec 2013 14:21:04 +0000 (14:21 +0000)]
psci: replace secure context with suspend context

The secure context saved and restored across a cpu_suspend operation
can be more than just the state of the secure system registers e.g. we
also need to save the affinity level till which the cpu is being
powered down. This patch creates a suspend_context data structure
which includes the system register context. This will allow other bits
to be saved and restored as well in subsequent patches.

Change-Id: I1c1f7d25497388b54b7d6ee4fab77e8c6a9992c4

10 years agofvp: rename fvp_* files to plat_*
Ryan Harkin [Wed, 15 Jan 2014 17:37:25 +0000 (17:37 +0000)]
fvp: rename fvp_* files to plat_*

The FVP platform has a few filenames that begin with fvp_.  These are
renamed to plat_ to make it easier to use the FVP port as a template.

Change-Id: I601e6256d5ef3bae81a2e1f5df6de56db5b27069
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoBuild system: add 'make help' option
Ryan Harkin [Wed, 15 Jan 2014 16:55:07 +0000 (16:55 +0000)]
Build system: add 'make help' option

Add the 'help' target to the Makefile to present a brief guide to the
various build options available.

Change-Id: Ic3a3489860b6362eb236470ea6b43a16a1b2fe3a
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoBuild system: minor spacing tidyup
Ryan Harkin [Mon, 13 Jan 2014 14:40:13 +0000 (14:40 +0000)]
Build system: minor spacing tidyup

Tidy up the spacing of variable definitions within the makefiles to make
them more consistent, easier to read and amend.

Change-Id: Ic6d7c8489ca4330824abb5cd1ead8f1d449d1a85
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoBuild system: Fixes #2: Add multi-platform support
Ryan Harkin [Mon, 13 Jan 2014 12:37:03 +0000 (12:37 +0000)]
Build system: Fixes #2: Add multi-platform support

Move all explicit platform or architecture specific references
into a new platform.mk file that is defined for each platform.

Change-Id: I9d6320d1ba957e0cc8d9b316b3578132331fa428
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
10 years agoremove empty definition of display_boot_progress()
Achin Gupta [Sat, 18 Jan 2014 16:26:30 +0000 (16:26 +0000)]
remove empty definition of display_boot_progress()

This patch replaces the empty definition of display_boot_progress() in
bl2_main.c with a weak definition. The former allowed bl2 to use the
early_exceptions(). It is possible to do that with a simple weak
definition as well.

Change-Id: Idb3f425a5e265f3579b638e3d26bd8c9bb78f80d

10 years agoChange comments in assembler files to help ctags
Jeenu Viswambharan [Thu, 16 Jan 2014 17:30:39 +0000 (17:30 +0000)]
Change comments in assembler files to help ctags

Ctags seem to have a problem with generating tags for assembler symbols
when a comment immediately follows an assembly label.

This patch inserts a single space character between the label
definition and the following comments to help ctags.

The patch is generated by the command:

  git ls-files -- \*.S | xargs sed -i 's/^\([^:]\+\):;/\1: ;/1'

Change-Id: If7a3c9d0f51207ea033cc8b8e1b34acaa0926475

10 years agoProbe for GICv3 re-distributors on core bring-up
Harry Liebel [Thu, 12 Dec 2013 13:00:29 +0000 (13:00 +0000)]
Probe for GICv3 re-distributors on core bring-up

The GICv3 distributor can have more ports than CPUs are available in
the system. Probe all re-distributors and use the matching affinity
levels as specified by each core and re-distributor to decide which
re-distributor to use with which CPU core.

If a core cannot be matched with a re-distributor, the core panics and
is placed in an endless loop.

Change-Id: Ie393cfe07c7449a2383959e3c968664882e18afc

10 years agoDo not trap access to floating point registers
Harry Liebel [Tue, 14 Jan 2014 18:11:48 +0000 (18:11 +0000)]
Do not trap access to floating point registers

Traps when accessing architectural features are disabled by clearing bits
in CPTR_EL3 during early boot, including accesses to floating point
registers. The value of this register was previously undetermined, causing
unwanted traps to EL3. Future EL3 code (for example, context save/restore
code) may use floating point registers, although they are not used by current
code.

Also, the '-mgeneral-regs-only' flag is enabled in the GCC settings to
prevent generation of code that uses floating point registers.

Change-Id: I9a03675f6387bbbee81a6f2c9ccf81150db03747

10 years agoUpdate year in copyright text to 2014
Dan Handley [Tue, 14 Jan 2014 18:17:09 +0000 (18:17 +0000)]
Update year in copyright text to 2014

Change-Id: Ic7fb61aabae1d515b9e6baf3dd003807ff42da60

10 years agoRefer to separate issue tracking repository
Dan Handley [Tue, 14 Jan 2014 13:20:12 +0000 (13:20 +0000)]
Refer to separate issue tracking repository

Update documentation to refer to separate issue tracking
repository, https://github.com/ARM-software/tf-issues/issues.

Change-Id: Ib1cef65b0da420bec58290d8743eb069b1226c96

10 years agoMove GIC setup to a separate file
Ian Spray [Thu, 2 Jan 2014 16:57:12 +0000 (16:57 +0000)]
Move GIC setup to a separate file

GIC setup code which used to be in bl31_plat_setup.c is now in fvp_gic.c
to simplify future changes to other bootloader stages.  This patch moves
code from bl31_plat_setup.c to fvp_gic.c, simplifies the include file
list for bl31_plat_setup.c, moves GIC declarations from the bl31.h header
file into the platform.h, and reworks files according to coding style
guide.

Change-Id: I48d82a4ba33e7114dcc88f9ca98767a06cf8f417

10 years agoBuild project with 'pedantic'
Harry Liebel [Fri, 3 Jan 2014 14:18:15 +0000 (14:18 +0000)]
Build project with 'pedantic'

Tighten up ISO C standard checking. Fix 'CASSERT' implementation to
conform to C99 as opposed to GNU99 standard.

Change-Id: I58ddc61913617b66f11da5b6e3f7363136d5cf7d

10 years agoDo not let GCC use built-in functions
Harry Liebel [Fri, 20 Dec 2013 18:51:12 +0000 (18:51 +0000)]
Do not let GCC use built-in functions

In order to reduce the software dependency on the compiler, the project
is now compiled with the '-ffreestanding' flag. This is to prevent GCC
from replacing functions with more optimised versions. An example is
where GCC replaces a simple printf() with a puts().

Change-Id: I1973fe6957cd708e8432a0039af9d50e037bd884

10 years agoFix SPSR register size in gp_regs structure
Sandrine Bailleux [Tue, 17 Dec 2013 13:47:14 +0000 (13:47 +0000)]
Fix SPSR register size in gp_regs structure

SPSR is a 32-bit register and so its size should be reflected in
the gp_regs structure.  This patch fixes the type of gp_regs.spsr
to use a 32-bit variable.  It also makes the size of the other
register fields more explicit.

Change-Id: I27e0367df1a91cc501d5217c1b3856d4097c60ba