project/bcm63xx/atf.git
10 years agoMerge pull request #168 from sandrine-bailleux/sb/set-default-gic-arch
Dan Handley [Fri, 25 Jul 2014 13:56:46 +0000 (14:56 +0100)]
Merge pull request #168 from sandrine-bailleux/sb/set-default-gic-arch

Define ARM_GIC_ARCH default value for all platforms

10 years agoMerge pull request #174 from soby-mathew:sm/lean_printf_v2
Dan Handley [Fri, 25 Jul 2014 13:54:38 +0000 (14:54 +0100)]
Merge pull request #174 from soby-mathew:sm/lean_printf_v2

Implement a leaner printf for Trusted Firmware

10 years agoImplement a leaner printf for Trusted Firmware
Soby Mathew [Thu, 12 Jun 2014 16:23:58 +0000 (17:23 +0100)]
Implement a leaner printf for Trusted Firmware

This patch implements a "tf_printf" which supports only the commonly
used format specifiers in Trusted Firmware, which uses a lot less
stack space than the stdlib printf function.

Fixes ARM-software/tf-issues#116

Change-Id: I7dfa1944f4c1e634b3e2d571f49afe02d109a351

10 years agoDefine ARM_GIC_ARCH default value for all platforms
Sandrine Bailleux [Thu, 17 Jul 2014 16:23:14 +0000 (17:23 +0100)]
Define ARM_GIC_ARCH default value for all platforms

The ARM_GIC_ARCH build option was supposed to default to 2 on all
platforms. However, the default value was set in the FVP makefile
so for all other platforms it wasn't even defined.

This patch moves the default value to the main Makefile. The platform
port can then override it if needed.

Change-Id: I8e2da1cce7ffa3ed18814bbdcbcf2578101f18a6

10 years agoMerge pull request #162 from jcastillo-arm/jc/tf-issues/194
danh-arm [Fri, 11 Jul 2014 13:17:05 +0000 (14:17 +0100)]
Merge pull request #162 from jcastillo-arm/jc/tf-issues/194

Allow FP register context to be optional at build time

10 years agoMerge pull request #164 from sandrine-bailleux/sb/bl30-support-v2
danh-arm [Fri, 11 Jul 2014 13:16:13 +0000 (14:16 +0100)]
Merge pull request #164 from sandrine-bailleux/sb/bl30-support-v2

Add support for BL3-0 image (v2)

10 years agoMerge pull request #163 from sandrine-bailleux/sb/tf-issue-117-v2
danh-arm [Fri, 11 Jul 2014 10:19:27 +0000 (11:19 +0100)]
Merge pull request #163 from sandrine-bailleux/sb/tf-issue-117-v2

fvp: Reuse BL1 and BL2 memory through image overlaying (v2)

10 years agoUpdate the documentation about the memory layout on FVP
Sandrine Bailleux [Mon, 23 Jun 2014 16:00:23 +0000 (17:00 +0100)]
Update the documentation about the memory layout on FVP

Update the "Memory layout on FVP platforms" section in the Firmware
Design document to reflect the overlaying of BL1 and BL2 images
by BL3-1 and BL3-2.

Also update the Porting Guide document to mention the
BL31_PROGBITS_LIMIT and BL32_PROGBITS_LIMIT constants.

Change-Id: I0b23dae5b5b4490a01be7ff7aa80567cff34bda8

10 years agoAdd support for BL3-0 image
Sandrine Bailleux [Tue, 24 Jun 2014 13:19:36 +0000 (14:19 +0100)]
Add support for BL3-0 image

 - Add support for loading a BL3-0 image in BL2. Information about
   memory extents is populated by platform-specific code. Subsequent
   handling of BL3-0 is also platform specific.
   The BL2 main function has been broken down to improve readability.
   The BL3-2 image is now loaded before the BL3-3 image to align with
   the boot flow.

 - Build system: Add support for specifying a BL3-0 image that will be
   included into the FIP image.

 - IO FIP driver: Add support for identifying a BL3-0 image inside a
   FIP image.

 - Update the documentation to reflect the above changes.

Change-Id: I067c184afd52ccaa86569f13664757570c86fc48

10 years agofvp: Reuse BL1 and BL2 memory through image overlaying
Sandrine Bailleux [Mon, 16 Jun 2014 15:12:27 +0000 (16:12 +0100)]
fvp: Reuse BL1 and BL2 memory through image overlaying

This patch re-organizes the memory layout on FVP as to give the
BL3-2 image as much memory as possible.

Considering these two facts:
 - not all images need to live in memory at the same time. Once
   in BL3-1, the memory used by BL1 and BL2 can be reclaimed.
 - when BL2 loads the BL3-1 and BL3-2 images, it only considers the
   PROGBITS sections of those 2 images. The memory occupied by the
   NOBITS sections will be touched only at execution of the BL3-x
   images;
Then it is possible to choose the different base addresses such that
the NOBITS sections of BL3-1 and BL3-2 overlay BL1 and BL2.

On FVP we choose to put:
 - BL1 and BL3-1 at the top of the Trusted RAM, with BL3-1 NOBITS
   sections overlaying BL1;
 - BL3-2 at the bottom of the Trusted RAM, with its NOBITS sections
   overlaying BL2;

This is illustrated by the following diagram:

0x0404_0000 ------------    ------------------
            |   BL1    | <= |  BL3-1 NOBITS  |
            ------------ <= ------------------
            |          | <= | BL3-1 PROGBITS |
            ------------    ------------------
            |   BL2    | <= |  BL3-2 NOBITS  |
            ------------ <= ------------------
            |          | <= | BL3-2 PROGBITS |
0x0400_0000 ------------    ------------------

New platform-specific constants have been introduced to easily check
at link time that BL3-1 and BL3-2 PROGBITS sections don't overwrite
BL1 and BL2. These are optional and the platform code is free to define
them or not. If not defined, the linker won't attempt to check
image overlaying.

Fixes ARM-software/tf-issues#117

Change-Id: I5981d1c3d66ee70eaac8bd052630c9ac6dd8b042

10 years agoMerge pull request #157 from sandrine-bailleux/sb/tf-issue-109
danh-arm [Thu, 10 Jul 2014 13:45:19 +0000 (14:45 +0100)]
Merge pull request #157 from sandrine-bailleux/sb/tf-issue-109

TF issue 109

10 years agoMerge pull request #146 from danh-arm/dh/refactor-fvp-gic
danh-arm [Thu, 10 Jul 2014 13:44:24 +0000 (14:44 +0100)]
Merge pull request #146 from danh-arm/dh/refactor-fvp-gic

Refactor fvp config and gic code

10 years agoMerge pull request #161 from danh-arm/lm/calc-tcr-bits
danh-arm [Thu, 10 Jul 2014 13:43:48 +0000 (14:43 +0100)]
Merge pull request #161 from danh-arm/lm/calc-tcr-bits

Calculate TCR bits based on VA and PA

10 years agoAllow FP register context to be optional at build time
Juan Castillo [Wed, 25 Jun 2014 16:26:36 +0000 (17:26 +0100)]
Allow FP register context to be optional at build time

CTX_INCLUDE_FPREGS make variable allows us to include or exclude FP
registers from context structure, in case FP is not used by TSPD.

Fixes ARM-software/tf-issues#194

Change-Id: Iee41af382d691340c7ae21830ad1bbf95dad1f4b

10 years agoRefactor fvp gic code to be a generic driver
Dan Handley [Fri, 20 Jun 2014 08:43:15 +0000 (09:43 +0100)]
Refactor fvp gic code to be a generic driver

Refactor the FVP gic code in plat/fvp/fvp_gic.c to be a generic ARM
GIC driver in drivers/arm/gic/arm_gic.c. Provide the platform
specific inputs in the arm_gic_setup() function so that the driver
has no explicit dependency on platform code.

Provide weak implementations of the platform interrupt controller
API in a new file, plat/common/plat_gic.c. These simply call through
to the ARM GIC driver.

Move the only remaining FVP GIC function, fvp_gic_init() to
plat/fvp/aarch64/fvp_common.c and remove plat/fvp/fvp_gic.c

Fixes ARM-software/tf-issues#182

Change-Id: Iea82fe095fad62dd33ba9efbddd48c57717edd21

10 years agoRefactor fvp_config into common platform header
Dan Handley [Fri, 20 Jun 2014 11:02:01 +0000 (12:02 +0100)]
Refactor fvp_config into common platform header

Changed the fvp_config array in fvp_common.c into a struct and
moved into a new optional common platform header,
include/plat/common/plat_config.h. Removed the config definitions
in fvp_def.h and updated all references to the platform config.

This makes the interface to the platform config cleaner and uses
a little less RAM.

Fixes ARM-software/tf-issues#180

Change-Id: I58dd7b3c150f24f7ee230a26fd57c827853ba803

10 years agoCalculate TCR bits based on VA and PA
Lin Ma [Fri, 27 Jun 2014 23:56:30 +0000 (16:56 -0700)]
Calculate TCR bits based on VA and PA

Currently the TCR bits are hardcoded in xlat_tables.c. In order to
map higher physical address into low virtual address, the TCR bits
need to be configured accordingly.

This patch is to save the max VA and PA and calculate the TCR.PS/IPS
and t0sz bits in init_xlat_tables function.

Change-Id: Ia7a58e5372b20200153057d457f4be5ddbb7dae4

10 years agofvp: Properly detect the location of BL1 R/W data
Sandrine Bailleux [Fri, 13 Jun 2014 13:48:18 +0000 (14:48 +0100)]
fvp: Properly detect the location of BL1 R/W data

There was already a rudimentary mechanism to detect whether BL1
R/W data was loaded at the top or bottom of memory. Basically,
 - either BL1 was loaded at the very end of the trusted RAM
 - in all other cases BL1 was considered sitting at the bottom of
   the memory and the memory usage structure was updated accordingly,
   potentially resulting in critical memory waste.
For instance, if BL1 R/W base address was set to
(TZRAM_END - 4096 - bl1_size), it would virtually occupy the whole
memory.

This patch improves the mechanism to detect the location of BL1
to avoid such scenarios.

Change-Id: I224a9edf0fe8d34208545d84b28b63f2bb830d03

10 years agoRemove concept of top/bottom image loading
Sandrine Bailleux [Tue, 24 Jun 2014 13:02:34 +0000 (14:02 +0100)]
Remove concept of top/bottom image loading

This concept is no longer required since we now support loading of
images at fixed addresses only.

The image loader now automatically detects the position of the image
inside the current memory layout and updates the layout such that
memory fragmentation is minimised.

The 'attr' field of the meminfo data structure, which used to hold
the bottom/top loading information, has been removed. Also the 'next'
field has been removed as it wasn't used anywhere.

The 'init_bl2_mem_layout()' function has been moved out of common
code and put in BL1-specific code. It has also been renamed into
'bl1_init_bl2_mem_layout'.

Fixes ARM-software/tf-issues#109

Change-Id: I3f54642ce7b763d5ee3b047ad0ab59eabbcf916d

10 years agoMerge pull request #151 from vikramkanigiri/vk/t133-code-readability
Andrew Thoelke [Fri, 27 Jun 2014 13:10:04 +0000 (14:10 +0100)]
Merge pull request #151 from vikramkanigiri/vk/t133-code-readability

Simplify entry point information generation code on FVP

10 years agoMerge pull request #155 from athoelke/at/support-foundation-v2.1
Andrew Thoelke [Fri, 27 Jun 2014 11:53:26 +0000 (12:53 +0100)]
Merge pull request #155 from athoelke/at/support-foundation-v2.1

Support later revisions of the Foundation FVP

10 years agoSupport later revisions of the Foundation FVP
Andrew Thoelke [Thu, 26 Jun 2014 13:27:26 +0000 (14:27 +0100)]
Support later revisions of the Foundation FVP

The code in the FVP port which checks the platform type and
revision information in the SYS_ID register strictly supported
only the first revision of the Base and Foundation FVPs.

The current check also does not reflect the fact that the
board revision field is 'local' to the board type (HBI field).

Support for a new Foundation model is required now, and the
checking code is relaxed to allow execution (with a diagnostic)
on unrecognised revisions of the Base and Foundation FVP.

Change-Id: I7cd3519dfb56954aafe5f52ce1fcea0ee257ba9f

10 years agoMerge pull request #154 from athoelke/at/inline-mmio
Andrew Thoelke [Thu, 26 Jun 2014 22:02:28 +0000 (23:02 +0100)]
Merge pull request #154 from athoelke/at/inline-mmio

Inline the mmio accessor functions

10 years agoMerge pull request #153 from athoelke/at/remove-psci-mpidr
Andrew Thoelke [Thu, 26 Jun 2014 22:01:43 +0000 (23:01 +0100)]
Merge pull request #153 from athoelke/at/remove-psci-mpidr

Remove current CPU mpidr from PSCI common code

10 years agoRemove current CPU mpidr from PSCI common code
Andrew Thoelke [Mon, 9 Jun 2014 11:44:21 +0000 (12:44 +0100)]
Remove current CPU mpidr from PSCI common code

Many of the interfaces internal to PSCI pass the current CPU
MPIDR_EL1 value from function to function. This is not required,
and with inline access to the system registers is less efficient
than requiring the code to read that register whenever required.

This patch remove the mpidr parameter from the affected interfaces
and reduces code in FVP BL3-1 size by 160 bytes.

Change-Id: I16120a7c6944de37232016d7e109976540775602

10 years agoMerge pull request #152 from jcastillo-arm/jc/tf-issues/073-v2
danh-arm [Tue, 24 Jun 2014 15:48:31 +0000 (16:48 +0100)]
Merge pull request #152 from jcastillo-arm/jc/tf-issues/073-v2

Remove all checkpatch errors from codebase

10 years agoMerge pull request #150 from sandrine-bailleux/sb/fix-plat-print-gic-regs
danh-arm [Tue, 24 Jun 2014 15:48:18 +0000 (16:48 +0100)]
Merge pull request #150 from sandrine-bailleux/sb/fix-plat-print-gic-regs

fvp: Fix register name in 'plat_print_gic_regs' macro

10 years agoMerge pull request #149 from sandrine-bailleux/sb/warn-missing-include-dirs
danh-arm [Tue, 24 Jun 2014 15:44:37 +0000 (16:44 +0100)]
Merge pull request #149 from sandrine-bailleux/sb/warn-missing-include-dirs

Compile with '-Wmissing-include-dirs' flag

10 years agoMerge pull request #147 from athoelke/at/remove-bakery-mpidr
danh-arm [Tue, 24 Jun 2014 15:44:12 +0000 (16:44 +0100)]
Merge pull request #147 from athoelke/at/remove-bakery-mpidr

Remove calling CPU mpidr from bakery lock API

10 years agoInline the mmio accessor functions
Andrew Thoelke [Tue, 24 Jun 2014 13:18:35 +0000 (14:18 +0100)]
Inline the mmio accessor functions

Making the simple mmio_read_*() and mmio_write_*() functions inline
saves 360 bytes of code in FVP release build.

Fixes ARM-software/tf-issues#210

Change-Id: I65134f9069f3b2d8821d882daaa5fdfe16355e2f

10 years agoRemove all checkpatch errors from codebase
Juan Castillo [Fri, 13 Jun 2014 16:05:10 +0000 (17:05 +0100)]
Remove all checkpatch errors from codebase

Exclude stdlib files because they do not follow kernel code style.

Fixes ARM-software/tf-issues#73

Change-Id: I4cfafa38ab436f5ab22c277cb38f884346a267ab

10 years agoSimplify entry point information generation code on FVP
Vikram Kanigiri [Mon, 2 Jun 2014 13:59:00 +0000 (14:59 +0100)]
Simplify entry point information generation code on FVP

This patch reworks FVP specific code responsible for determining
the entry point information for BL3-2 and BL3-3 stages when BL3-1
is configured as the reset handler.

Change-Id: Ia661ff0a6a44c7aabb0b6c1684b2e8d3642d11ec

10 years agofvp: Fix register name in 'plat_print_gic_regs' macro
Sandrine Bailleux [Tue, 3 Jun 2014 08:52:26 +0000 (09:52 +0100)]
fvp: Fix register name in 'plat_print_gic_regs' macro

The 'plat_print_gic_regs' macro was accessing the GICC_CTLR register
using the GICD_CTLR offset. This still generates the right code in
the end because GICD_CTLR == GICC_CTLR but this patch fixes it for
the logic of the code.

Change-Id: I7b17af50e587f07bec0e4c933e346088470c96f3

10 years agoRemove calling CPU mpidr from bakery lock API
Andrew Thoelke [Mon, 9 Jun 2014 11:54:15 +0000 (12:54 +0100)]
Remove calling CPU mpidr from bakery lock API

The bakery lock code currently expects the calling code to pass
the MPIDR_EL1 of the current CPU.

This is not always done correctly. Also the change to provide
inline access to system registers makes it more efficient for the
bakery lock code to obtain the MPIDR_EL1 directly.

This change removes the mpidr parameter from the bakery lock
interface, and results in a code reduction of 160 bytes for the
ARM FVP port.

Fixes ARM-software/tf-issues#213

Change-Id: I7ec7bd117bcc9794a0d948990fcf3336a367d543

10 years agoMerge pull request #145 from athoelke/at/psci-memory-optimization-v2
danh-arm [Mon, 23 Jun 2014 17:04:29 +0000 (18:04 +0100)]
Merge pull request #145 from athoelke/at/psci-memory-optimization-v2

PSCI memory optimizations (v2)

10 years agoMerge pull request #144 from athoelke/at/init-context-v2
danh-arm [Mon, 23 Jun 2014 17:02:36 +0000 (18:02 +0100)]
Merge pull request #144 from athoelke/at/init-context-v2

Initialise CPU contexts from entry_point_info (v2)

10 years agoCorrectly dimension the PSCI aff_map_node array
Andrew Thoelke [Thu, 19 Jun 2014 23:36:14 +0000 (00:36 +0100)]
Correctly dimension the PSCI aff_map_node array

The array of affinity nodes is currently allocated for 32 entries
with the PSCI_NUM_AFFS value defined in psci.h. This is not enough
for large systems, and will substantially over allocate the array
for small systems.

This patch introduces an optional platform definition
PLATFORM_NUM_AFFS to platform_def.h. If defined this value is
used for PSCI_NUM_AFFS, otherwise a value of two times the number
of CPU cores is used.

The FVP port defines PLATFORM_NUM_AFFS to be 10 which saves
nearly 1.5KB of memory.

Fixes ARM-software/tf-issues#192

Change-Id: I68e30ac950de88cfbd02982ba882a18fb69c1445

10 years agoEliminate psci_suspend_context array
Andrew Thoelke [Thu, 19 Jun 2014 23:38:03 +0000 (00:38 +0100)]
Eliminate psci_suspend_context array

psci_suspend_context is an array of cache-line aligned structures
containing the single power_state integer per cpu. This array is
the only structure indexed by the aff_map_node.data integer.

This patch saves 2KB of BL3-1 memory by placing the CPU
power_state value directly in the aff_map_node structure. As a
result, this value is now never cached and the cache clean when
writing the value is no longer required.

Fixes ARM-software/tf-issues#195

Change-Id: Ib4c70c8f79eed295ea541e7827977a588a19ef9b

10 years agoInitialise CPU contexts from entry_point_info
Andrew Thoelke [Wed, 4 Jun 2014 20:10:52 +0000 (21:10 +0100)]
Initialise CPU contexts from entry_point_info

Consolidate all BL3-1 CPU context initialization for cold boot, PSCI
and SPDs into two functions:
*  The first uses entry_point_info to initialize the relevant
   cpu_context for first entry into a lower exception level on a CPU
*  The second populates the EL1 and EL2 system registers as needed
   from the cpu_context to ensure correct entry into the lower EL

This patch alters the way that BL3-1 determines which exception level
is used when first entering EL1 or EL2 during cold boot - this is now
fully determined by the SPSR value in the entry_point_info for BL3-3,
as set up by the platform code in BL2 (or otherwise provided to BL3-1).

In the situation that EL1 (or svc mode) is selected for a processor
that supports EL2, the context management code will now configure all
essential EL2 register state to ensure correct execution of EL1. This
allows the platform code to run non-secure EL1 payloads directly
without requiring a small EL2 stub or OS loader.

Change-Id: If9fbb2417e82d2226e47568203d5a369f39d3b0f

10 years agoMerge pull request #143 from athoelke/at/remove-nsram
danh-arm [Mon, 23 Jun 2014 13:41:34 +0000 (14:41 +0100)]
Merge pull request #143 from athoelke/at/remove-nsram

Remove NSRAM from FVP memory map

10 years agoMerge pull request #140 from athoelke/at/psci_smc_handler
danh-arm [Mon, 23 Jun 2014 13:40:20 +0000 (14:40 +0100)]
Merge pull request #140 from athoelke/at/psci_smc_handler

PSCI SMC handler improvements

10 years agoCompile with '-Wmissing-include-dirs' flag
Sandrine Bailleux [Mon, 23 Jun 2014 12:37:53 +0000 (13:37 +0100)]
Compile with '-Wmissing-include-dirs' flag

Add the '-Wmissing-include-dirs' flag to the CFLAGS and ASFLAGS
to make the build fail if the compiler or the assembler is given
a nonexistant directory in the list of directories to be searched
for header files.

Also remove 'include/bl1' and 'include/bl2' directories from the
search path for header files as they don't exist anymore.

Change-Id: I2475b78ba8b7b448b9d0afaa9ad975257f638b89

10 years agoMerge pull request #138 from athoelke/at/cpu-context
danh-arm [Mon, 23 Jun 2014 12:10:00 +0000 (13:10 +0100)]
Merge pull request #138 from athoelke/at/cpu-context

Move CPU context pointers into cpu_data

10 years agoMerge pull request #137 from athoelke/at/no-early-exceptions
danh-arm [Mon, 23 Jun 2014 12:06:05 +0000 (13:06 +0100)]
Merge pull request #137 from athoelke/at/no-early-exceptions

Remove early_exceptions from BL3-1

10 years agoMerge pull request #136 from athoelke/at/cpu-data
danh-arm [Mon, 23 Jun 2014 11:47:47 +0000 (12:47 +0100)]
Merge pull request #136 from athoelke/at/cpu-data

Per-cpu data cache restructuring

10 years agoMerge pull request #142 from athoelke/at/fix-console_putc
danh-arm [Mon, 23 Jun 2014 11:43:58 +0000 (12:43 +0100)]
Merge pull request #142 from athoelke/at/fix-console_putc

Remove broken assertion in console_putc()

10 years agoRemove NSRAM from FVP memory map
Andrew Thoelke [Fri, 20 Jun 2014 11:23:20 +0000 (12:23 +0100)]
Remove NSRAM from FVP memory map

This memory is not used by the FVP port and requires an additional
4KB translation table.

This patch removes the entry from the memory map and reduces the
number of allocated translation tables.

Fixes ARM-software/tf-issues#196

Change-Id: I5b959e4fe92f5f892ed127c40dbe6c85eed3ed72

10 years agoRemove broken assertion in console_putc()
Andrew Thoelke [Fri, 20 Jun 2014 10:12:39 +0000 (11:12 +0100)]
Remove broken assertion in console_putc()

The assertion in console_putc() would trigger a recursion that
exhausts the stack and eventually aborts.

This patch replaces the assertion with an error return if the
console has not been initialized yet.

Fixes ARM-software/tf-issues#208

Change-Id: I95f736ff215d69655eb5ba7ceac70dc1409d986a

10 years agoMerge pull request #135 from soby-mathew/sm/remove-reinit-of-timers
danh-arm [Wed, 18 Jun 2014 17:34:31 +0000 (18:34 +0100)]
Merge pull request #135 from soby-mathew/sm/remove-reinit-of-timers

Remove re-initialisation of system timers after warm boot for FVP

10 years agoRemove re-initialisation of system timers after warm boot for FVP
Soby Mathew [Fri, 6 Jun 2014 09:18:52 +0000 (10:18 +0100)]
Remove re-initialisation of system timers after warm boot for FVP

This patch removes the reinitialisation of memory mapped system timer
registers after a warm boot for the FVP. The system timers in FVP are
in the 'Always ON' power domain which meant the reinitialisation was
redundant and it could have conflicted with the setup the normal
world has done.

The programming of CNTACR(x) and CNTNSAR, the system timer registers,
are removed from the warm boot path with this patch.

Fixes ARM-software/tf-issues#169

Change-Id: Ie982eb03d1836b15ef3cf1568de2ea68a08b443e

10 years agoMerge pull request #134 from jcastillo-arm/jc/tf-issues/179
danh-arm [Tue, 17 Jun 2014 14:12:14 +0000 (15:12 +0100)]
Merge pull request #134 from jcastillo-arm/jc/tf-issues/179

Set correct value for SYS_ID_REV_SHIFT in FVP

10 years agoRemove early_exceptions from BL3-1
Andrew Thoelke [Mon, 2 Jun 2014 11:38:12 +0000 (12:38 +0100)]
Remove early_exceptions from BL3-1

The crash reporting support and early initialisation of the
cpu_data allow the runtime_exception vectors to be used from
the start in BL3-1, removing the need for the additional
early_exception vectors and 2KB of code from BL3-1.

Change-Id: I5f8997dabbaafd8935a7455910b7db174a25d871

10 years agoMove CPU context pointers into cpu_data
Andrew Thoelke [Mon, 2 Jun 2014 09:00:25 +0000 (10:00 +0100)]
Move CPU context pointers into cpu_data

Moving the context pointers for each CPU into the per-cpu data
allows for much more efficient access to the contexts for the
current CPU.

Change-Id: Id784e210d63cbdcddb44ac1591617ce668dbc29f

10 years agoPer-cpu data cache restructuring
Andrew Thoelke [Mon, 2 Jun 2014 10:40:35 +0000 (11:40 +0100)]
Per-cpu data cache restructuring

This patch prepares the per-cpu pointer cache for wider use by:
* renaming the structure to cpu_data and placing in new header
* providing accessors for this CPU, or other CPUs
* splitting the initialization of the TPIDR pointer from the
  initialization of the cpu_data content
* moving the crash stack initialization to a crash stack function
* setting the TPIDR pointer very early during boot

Change-Id: Icef9004ff88f8eb241d48c14be3158087d7e49a3

10 years agoSet correct value for SYS_ID_REV_SHIFT in FVP
Juan Castillo [Fri, 13 Jun 2014 16:10:00 +0000 (17:10 +0100)]
Set correct value for SYS_ID_REV_SHIFT in FVP

According to documentation, the Rev field is located at bit 28 in
the V2M sysid register.

Fixes ARM-software/tf-issues#179

Change-Id: I2abb7bdc092ccd3f41f8962dc8d8d8e44e8dfdc3

10 years agoMerge pull request #133 from athoelke/at/crash-reporting-opt
danh-arm [Mon, 16 Jun 2014 11:45:08 +0000 (12:45 +0100)]
Merge pull request #133 from athoelke/at/crash-reporting-opt

Make the BL3-1 crash reporting optional

10 years agoMerge pull request #131 from athoelke/at/cm_get_context
danh-arm [Mon, 16 Jun 2014 11:41:58 +0000 (12:41 +0100)]
Merge pull request #131 from athoelke/at/cm_get_context

Provide cm_get/set_context() for current CPU

10 years agoMerge pull request #130 from athoelke/at/inline-asm-sysreg-v2
danh-arm [Mon, 16 Jun 2014 11:41:48 +0000 (12:41 +0100)]
Merge pull request #130 from athoelke/at/inline-asm-sysreg-v2

Make system register functions inline assembly v2

10 years agoMerge pull request #128 from sandrine-bailleux/sb/make-load_image-ep-optional
danh-arm [Mon, 16 Jun 2014 10:58:21 +0000 (11:58 +0100)]
Merge pull request #128 from sandrine-bailleux/sb/make-load_image-ep-optional

Make the entry point argument optional in load_image()

10 years agoMerge pull request #127 from sandrine-bailleux/sb/fix-pl011-fifo-polling
achingupta [Thu, 12 Jun 2014 08:15:06 +0000 (09:15 +0100)]
Merge pull request #127 from sandrine-bailleux/sb/fix-pl011-fifo-polling

PL011: Fix a bug in the UART FIFO polling

10 years agoMerge pull request #126 from sandrine-bailleux/sb/include-missing-hfile
achingupta [Thu, 12 Jun 2014 08:14:05 +0000 (09:14 +0100)]
Merge pull request #126 from sandrine-bailleux/sb/include-missing-hfile

Include 'platform_def.h' header file in 'crash_reporting.S'

10 years agoMerge pull request #125 from sandrine-bailleux/sb/remove-bl2_el_change_mem_ptr
achingupta [Thu, 12 Jun 2014 08:12:52 +0000 (09:12 +0100)]
Merge pull request #125 from sandrine-bailleux/sb/remove-bl2_el_change_mem_ptr

fvp: Remove unused 'bl2_el_change_mem_ptr' variable

10 years agoMake the BL3-1 crash reporting optional
Andrew Thoelke [Tue, 3 Jun 2014 10:50:53 +0000 (11:50 +0100)]
Make the BL3-1 crash reporting optional

This patch makes the console crash dump of processor register
state optional based on the CRASH_REPORTING make variable.

This defaults to only being enabled for DEBUG builds. This can
be overridden by setting a different value in the platform
makefile or on the make command line.

Change-Id: Icfa1b2d7ff0145cf0a85e8ad732f9cee7e7e993f

10 years agoProvide cm_get/set_context() for current CPU
Andrew Thoelke [Wed, 14 May 2014 16:09:32 +0000 (17:09 +0100)]
Provide cm_get/set_context() for current CPU

All callers of cm_get_context() pass the calling CPU MPIDR to the
function. Providing a specialised version for the current
CPU results in a reduction in code size and better readability.

The current function has been renamed to cm_get_context_by_mpidr()
and the existing name is now used for the current-CPU version.

The same treatment has been done to cm_set_context(), although
only both forms are used at present in the PSCI and TSPD code.

Change-Id: I91cb0c2f7bfcb950a045dbd9ff7595751c0c0ffb

10 years agoMerge Pull Request #120 (patch 1) from 'linmaonly:lin_patch2'
Andrew Thoelke [Tue, 10 Jun 2014 22:33:07 +0000 (23:33 +0100)]
Merge Pull Request #120 (patch 1) from 'linmaonly:lin_patch2'

10 years agoPSCI SMC handler improvements
Andrew Thoelke [Tue, 10 Jun 2014 15:37:37 +0000 (16:37 +0100)]
PSCI SMC handler improvements

The SMC handler for PSCI was not correctly handling calls from
secure states, or from AArch32.

This patch completes the handler implementation to correctly
detect secure callers and to clear the top bits in parameters from
AArch32 callers.

The patch also reorganises the switch statement to separate SMC64 and
SMC32 function IDs which allows the compiler to generate much smaller
code for the function.

Change-Id: I36b1ac81fb14253d257255d0477771d54fab0d11

10 years agoMake system register functions inline assembly
Andrew Thoelke [Mon, 2 Jun 2014 14:44:43 +0000 (15:44 +0100)]
Make system register functions inline assembly

Replace the current out-of-line assembler implementations of
the system register and system instruction operations with
inline assembler.

This enables better compiler optimisation and code generation
when accessing system registers.

Fixes ARM-software/tf-issues#91

Change-Id: I149af3a94e1e5e5140a3e44b9abfc37ba2324476

10 years agofvp: Remove unused 'bl2_el_change_mem_ptr' variable
Sandrine Bailleux [Thu, 29 May 2014 12:55:51 +0000 (13:55 +0100)]
fvp: Remove unused 'bl2_el_change_mem_ptr' variable

'bl2_el_change_mem_ptr' variable is a left over from the former
BL2/BL3-1 interface.

Change-Id: Ib0979c8e2809e103a41f9c5cc4afec7dd21ac9ab

10 years agoMake the entry point argument optional in load_image()
Sandrine Bailleux [Wed, 28 May 2014 10:31:18 +0000 (11:31 +0100)]
Make the entry point argument optional in load_image()

There are cases where the entry point information is useless to the
caller, e.g. when an image just needs to be loaded in memory but won't
ever be executed.

This patch allows load_image() function to take a NULL pointer as the
entry point argument. In this case, it won't be populated.

Change-Id: Ie9394b054457706c6699926c5e0206e0c3851c56

10 years agoPL011: Fix a bug in the UART FIFO polling
Sandrine Bailleux [Mon, 2 Jun 2014 12:52:38 +0000 (13:52 +0100)]
PL011: Fix a bug in the UART FIFO polling

Before attempting to write a character, the PL011 driver polls
the PL011_UARTFR_TXFF bit to know whether the UART FIFO is full.
However, the comparison with 1 was incorrect because
PL011_UARTFR_TXFF is not at bit 0. This patch fixes it.

Change-Id: If78892345bbdc8a5e4ae4a1b7159753c609681b0

10 years agoInclude 'platform_def.h' header file in 'crash_reporting.S'
Sandrine Bailleux [Tue, 27 May 2014 14:46:07 +0000 (15:46 +0100)]
Include 'platform_def.h' header file in 'crash_reporting.S'

'crash_reporting.S' needs to include 'platform_def.h' to get the
definition of PLATFORM_CORE_COUNT.

Note: On FVP it was compiling because 'platform_def.h' gets included
through 'plat/fvp/include/plat_macros.S' but we don't want to rely on
that for other platforms.

Change-Id: I51e974776dd0f3bda10ad9849f5ef7b30c629833

10 years agoMerge pull request #122 from 'danh-arm:dh/v0.4-docs'
Dan Handley [Tue, 3 Jun 2014 17:50:13 +0000 (18:50 +0100)]
Merge pull request #122 from 'danh-arm:dh/v0.4-docs'

10 years agoMerge pull request #124 from 'danh-arm:sm/imf-documentation'
Dan Handley [Tue, 3 Jun 2014 17:48:27 +0000 (18:48 +0100)]
Merge pull request #124 from 'danh-arm:sm/imf-documentation'

10 years agoDocument design of the Interrupt Mangement Framework
Achin Gupta [Mon, 2 Jun 2014 21:27:36 +0000 (22:27 +0100)]
Document design of the Interrupt Mangement Framework

This patch adds documentation that describes the design of the Interrupt
management framework in the ARM Trusted Firmware. The porting-guide.md has also
been updated to describe the interface that should be implemented by each
platform to support this framework.

Change-Id: I3eda48e5c9456e6a9516956bee16a29e366633b7
Co-Authored-By: Soby Mathew <soby.mathew@arm.com>
10 years agoMerge pull request #119 from 'soby-mathew:sm/doc_crash_reporting'
Dan Handley [Tue, 3 Jun 2014 16:41:41 +0000 (17:41 +0100)]
Merge pull request #119 from 'soby-mathew:sm/doc_crash_reporting'

10 years agoMerge pull request #117 from 'danh-arm:dh/v0.4-user-guide'
Dan Handley [Tue, 3 Jun 2014 16:39:10 +0000 (17:39 +0100)]
Merge pull request #117 from 'danh-arm:dh/v0.4-user-guide'

10 years agoMerge pull request #121 'vikramkanigiri:vk/doc_for_133'
Dan Handley [Tue, 3 Jun 2014 16:38:11 +0000 (17:38 +0100)]
Merge pull request #121 'vikramkanigiri:vk/doc_for_133'

10 years agoDocumentation for BL3-1 hardening and reset vector
Vikram Kanigiri [Fri, 23 May 2014 14:56:12 +0000 (15:56 +0100)]
Documentation for BL3-1 hardening and reset vector

Update documentation with BL3-1 hardening interface
changes and for using BL3-1 as a reset vector feature

Change-Id: Iafdd05e7a8e66503409f2acc934372efef5bc51b

10 years agoTrusted Firmware v0.4 release documentation
Dan Handley [Thu, 29 May 2014 18:07:23 +0000 (19:07 +0100)]
Trusted Firmware v0.4 release documentation

Updates to readme.md and change-log.md to describe the features and changes in
the v0.4 release.

Change-Id: Ice0a7cf7abae349f552e662eac638a46acc5db3f

10 years agoUser guide updates for v0.4 release
Dan Handley [Thu, 29 May 2014 15:58:44 +0000 (16:58 +0100)]
User guide updates for v0.4 release

Update the Linux kernel, Linaro file system, FVP and DS-5 versions used for the
v0.4 release in user-guide.md.

Change-Id: I2265fc17c229d4b8cc52165d6583a4a579cdcee3

10 years agoEnable mapping higher physical address
Lin Ma [Mon, 2 Jun 2014 18:45:36 +0000 (11:45 -0700)]
Enable mapping higher physical address

Current ATF uses a direct physical-to-virtual mapping, that is, a physical
address is mapped to the same address in the virtual space. For example,
physical address 0x8000_0000 is mapped to 0x8000_0000 virtual. This
approach works fine for FVP as all its physical addresses fall into 0 to
4GB range. But for other platform where all I/O addresses are 48-bit long,
If we follow the same direct mapping, we would need virtual address range
from 0 to 0x8fff_ffff_ffff, which is about 144TB. This requires a
significant amount of memory for MMU tables and it is not necessary to use
that much virtual space in ATF.

The patch is to enable mapping a physical address range to an arbitrary
virtual address range (instead of flat mapping)
Changed "base" to "base_va" and added "base_pa" in mmap_region_t and
modified functions such as mmap_add_region and init_xlation_table etc.
Fixes ARM-software/tf-issues#158

10 years agoDocumentation for the new crash reporting implementation
Soby Mathew [Fri, 23 May 2014 16:05:43 +0000 (17:05 +0100)]
Documentation for the new crash reporting implementation

This patch modifies and adds to the existing documentation
for the crash reporting implementation in BL3-1.

Change-Id: I2cfbfeeeb64996ec7d19a9ddf95295482899b4bd

10 years agoMerge pull request #116 from 'danh-arm:dh/refactoring-docs'
Dan Handley [Fri, 30 May 2014 16:33:06 +0000 (17:33 +0100)]
Merge pull request #116 from 'danh-arm:dh/refactoring-docs'

10 years agoFix porting guide references to platform.h
Dan Handley [Thu, 29 May 2014 11:30:24 +0000 (12:30 +0100)]
Fix porting guide references to platform.h

Following recent refactoring changes to platform.h, this commit updates
porting-guide.md to correctly refer to platform.h and platform_def.h where
appropriate.

Change-Id: Idf1e77503c24358696f8f3c14caa0cc1d579deb4

10 years agoMerge pull request #111 'soby-mathew-sm:fix_cookie_to_int_handler'
Dan Handley [Thu, 29 May 2014 16:11:04 +0000 (17:11 +0100)]
Merge pull request #111 'soby-mathew-sm:fix_cookie_to_int_handler'

10 years agoMerge pull request #115 'athoelke-at:fix-bl31-X1-parameter'
Dan Handley [Thu, 29 May 2014 16:09:24 +0000 (17:09 +0100)]
Merge pull request #115 'athoelke-at:fix-bl31-X1-parameter'

10 years agoMerge pull request #114 from 'vikramkanigiri:vk/pass_bl33_args'
Dan Handley [Thu, 29 May 2014 16:05:34 +0000 (17:05 +0100)]
Merge pull request #114 from 'vikramkanigiri:vk/pass_bl33_args'

10 years agoFix compilation issue for IMF_READ_INTERRUPT_ID build flag
Soby Mathew [Wed, 28 May 2014 16:14:36 +0000 (17:14 +0100)]
Fix compilation issue for IMF_READ_INTERRUPT_ID build flag

This patch fixes the compilation issue for trusted firmware when the
IMF_READ_INTERRUPT_ID is enabled.

Change-Id: I94ab613b9bc96a7c1935796c674dc42246aaafee

10 years agoPass 'cookie' parameter to interrupt handler in BL3-1
Soby Mathew [Tue, 27 May 2014 15:54:31 +0000 (16:54 +0100)]
Pass 'cookie' parameter to interrupt handler in BL3-1

The interrupt handling routine in BL3-1 expects a cookie as its last
parameter which was not being passed when invoking the interrupt
handler in BL3-1. This patch fixes that by passing a dummy cookie
parameter in the x3 register.

Fixes ARM-software/tf-issues#171

Change-Id: Ic98abbbd9f849e6f1c55343e865b5e0a4904a1c5

10 years agoAllow platform parameter X1 to be passed to BL3-1
Andrew Thoelke [Wed, 28 May 2014 21:22:55 +0000 (22:22 +0100)]
Allow platform parameter X1 to be passed to BL3-1

bl2_main() was overwriting any platform set X1 parameter for BL3-1
with the value zero.

This patch ensure that any platform set value is correctly passed
to BL3-1. The FVP port adds a check to verify this parameter is
being passed correctly.

Fixes ARM-software/tf-issues#173

Change-Id: Ifbcda73d3d41d2b04a4baf5614e9d2d21f1717c8

10 years agoPass the args to the BL3-3 entrypoint
Vikram Kanigiri [Wed, 28 May 2014 12:41:51 +0000 (13:41 +0100)]
Pass the args to the BL3-3 entrypoint

At present the arguments for BL3-3 in the entry_point_info
structure are not being transferred to X0-X7 before starting
execution of this image

This patch saves the args for BL3-3 into cpu context used
for its entry

Fixes ARM-software/tf-issues#172

Change-Id: I001b4b9bff6a264336f0d01d377619ae719f928b

10 years agoMerge pull request #110 from soby-mathew:sm/support_normal_irq_in_tsp-v4 into for...
Dan Handley [Tue, 27 May 2014 17:46:22 +0000 (18:46 +0100)]
Merge pull request #110 from soby-mathew:sm/support_normal_irq_in_tsp-v4 into for-v0.4

10 years agoMerge pull request #112 from danh-arm:dh/refactor-plat-header-v4 into for-v0.4
Dan Handley [Tue, 27 May 2014 17:34:30 +0000 (18:34 +0100)]
Merge pull request #112 from danh-arm:dh/refactor-plat-header-v4 into for-v0.4

10 years agoFurther renames of platform porting functions
Dan Handley [Tue, 27 May 2014 15:17:21 +0000 (16:17 +0100)]
Further renames of platform porting functions

Rename the ic_* platform porting functions to plat_ic_* to be
consistent with the other functions in platform.h. Also rename
bl31_get_next_image_info() to bl31_plat_get_next_image_ep_info()
and remove the duplicate declaration in bl31.h.

Change-Id: I4851842069d3cff14c0a468daacc0a891a7ede84

10 years agoRemove FVP specific comments in platform.h
Dan Handley [Tue, 27 May 2014 14:39:41 +0000 (15:39 +0100)]
Remove FVP specific comments in platform.h

Remove the FVP specific comments in platform.h since this file
is re-usable across all platforms.

Change-Id: Ifd4a4f72562adb3ecf8b9078b0150f170ef22dba

10 years agoFixup Standard SMC Resume Handling
Soby Mathew [Tue, 27 May 2014 09:20:01 +0000 (10:20 +0100)]
Fixup Standard SMC Resume Handling

This patch fixes a missed return and code alignment issues
in TSP_FID_RESUME handling.

Change-Id: Icf8aeb76dfd6898745653ce039e3bac45e0a9b3a

10 years agoAdd enable mmu platform porting interfaces
Dan Handley [Fri, 16 May 2014 13:08:45 +0000 (14:08 +0100)]
Add enable mmu platform porting interfaces

Previously, the enable_mmu_elX() functions were implicitly part of
the platform porting layer since they were included by generic
code. These functions have been placed behind 2 new platform
functions, bl31_plat_enable_mmu() and bl32_plat_enable_mmu().
These are weakly defined so that they can be optionally overridden
by platform ports.

Also, the enable_mmu_elX() functions have been moved to
lib/aarch64/xlat_tables.c for optional re-use by platform ports.
These functions are tightly coupled with the translation table
initialization code.

Fixes ARM-software/tf-issues#152

Change-Id: I0a2251ce76acfa3c27541f832a9efaa49135cc1c

10 years agoRename FVP specific files and functions
Dan Handley [Thu, 15 May 2014 13:53:30 +0000 (14:53 +0100)]
Rename FVP specific files and functions

FVP specific files and functions containing the word "plat" have been
renamed to use the word "fvp" to distinguish them from the common
platform functionality and porting functions.

Change-Id: I39f9673dab3ee9c74bd18b3e62b7c21027232f7d

10 years agoMove BL porting functions into platform.h
Dan Handley [Thu, 15 May 2014 13:11:36 +0000 (14:11 +0100)]
Move BL porting functions into platform.h

Some platform porting functions were in BL specific header files.
These have been moved to platform.h so that all porting functions
are in the same place. The functions are now grouped by BL.
Obsolete BL headers files have been removed.

Also, the weak declaration of the init_bl2_mem_layout() function
has been moved out the header file and into the source file
(bl_common.c) using the more succinct #pragma syntax. This
mitigates the risk of 2 weak definitions being created and the
wrong one being picked up by the compiler.

Change-Id: Ib19934939fd755f3e5a5a5bceec88da684308a83

10 years agoSplit platform.h into separate headers
Dan Handley [Wed, 14 May 2014 16:44:19 +0000 (17:44 +0100)]
Split platform.h into separate headers

Previously, platform.h contained many declarations and definitions
used for different purposes. This file has been split so that:

* Platform definitions used by common code that must be defined
  by the platform are now in platform_def.h. The exact include
  path is exported through $PLAT_INCLUDES in the platform makefile.

* Platform definitions specific to the FVP platform are now in
  /plat/fvp/fvp_def.h.

* Platform API declarations specific to the FVP platform are now
  in /plat/fvp/fvp_private.h.

* The remaining platform API declarations that must be ported by
  each platform are still in platform.h but this file has been
  moved to /include/plat/common since this can be shared by all
  platforms.

Change-Id: Ieb3bb22fbab3ee8027413c6b39a783534aee474a