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
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
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
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)
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)
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
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
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
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
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
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
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
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
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
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()
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
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
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
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
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
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
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
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
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
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
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
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
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()
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
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'
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
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
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
Andrew Thoelke [Tue, 10 Jun 2014 22:33:07 +0000 (23:33 +0100)]
Merge Pull Request #120 (patch 1) from 'linmaonly:lin_patch2'
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
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
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
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
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
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
Dan Handley [Tue, 3 Jun 2014 17:50:13 +0000 (18:50 +0100)]
Merge pull request #122 from 'danh-arm:dh/v0.4-docs'
Dan Handley [Tue, 3 Jun 2014 17:48:27 +0000 (18:48 +0100)]
Merge pull request #124 from 'danh-arm:sm/imf-documentation'
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>
Dan Handley [Tue, 3 Jun 2014 16:41:41 +0000 (17:41 +0100)]
Merge pull request #119 from 'soby-mathew:sm/doc_crash_reporting'
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'
Dan Handley [Tue, 3 Jun 2014 16:38:11 +0000 (17:38 +0100)]
Merge pull request #121 'vikramkanigiri:vk/doc_for_133'
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
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
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
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
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
Dan Handley [Fri, 30 May 2014 16:33:06 +0000 (17:33 +0100)]
Merge pull request #116 from 'danh-arm:dh/refactoring-docs'
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
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'
Dan Handley [Thu, 29 May 2014 16:09:24 +0000 (17:09 +0100)]
Merge pull request #115 'athoelke-at:fix-bl31-X1-parameter'
Dan Handley [Thu, 29 May 2014 16:05:34 +0000 (17:05 +0100)]
Merge pull request #114 from 'vikramkanigiri:vk/pass_bl33_args'
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
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
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
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
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
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
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
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
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
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
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
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
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
Dan Handley [Wed, 14 May 2014 14:13:16 +0000 (15:13 +0100)]
Remove unused data declarations
Some data variables were declared but not used. These have been
removed.
Change-Id: I038632af3c32d88984cd25b886c43ff763269bf9
Dan Handley [Wed, 14 May 2014 11:38:32 +0000 (12:38 +0100)]
Remove extern keyword from function declarations
Function declarations implicitly have external linkage so do not
need the extern keyword.
Change-Id: Ia0549786796d8bf5956487e8996450a0b3d79f32
Andrew Thoelke [Fri, 23 May 2014 11:14:37 +0000 (12:14 +0100)]
Merge pull request #101 from sandrine-bailleux:sb/tf-issue-81-v2
Sandrine Bailleux [Wed, 21 May 2014 16:08:26 +0000 (17:08 +0100)]
doc: Update information about the memory layout
Rework the "Memory layout on FVP platforms" section in the Firmware
Design document. Add information about where the TSP image fits
in the memory layout when present.
Add documentation for the base addresses of each bootloader image
in the porting guide.
Change-Id: I4afb2605e008a1cb28c44a697804f2cb6bb4c9aa
Sandrine Bailleux [Thu, 22 May 2014 14:28:26 +0000 (15:28 +0100)]
Make the memory layout more flexible
Currently the platform code gets to define the base address of each
boot loader image. However, the linker scripts couteract this
flexibility by enforcing a fixed overall layout of the different
images. For example, they require that the BL3-1 image sits below
the BL2 image. Choosing BL3-1 and BL2 base addresses in such a way
that it violates this constraint makes the build fail at link-time.
This patch requires the platform code to now define a limit address
for each image. The linker scripts check that the image fits within
these bounds so they don't rely anymore on the position of a given
image in regard to the others.
Fixes ARM-software/tf-issues#163
Change-Id: I8c108646825da19a6a8dfb091b613e1dd4ae133c
Sandrine Bailleux [Thu, 22 May 2014 14:21:35 +0000 (15:21 +0100)]
Make BL1 RO and RW base addresses configurable
BL1 RO and RW base address used to be fixed, respectively to the first
address of the Trusted ROM and the first address of the Trusted RAM.
Introduce new platform defines to configure the BL1 RO and RW base
addresses.
Change-Id: If26616513a47798593a4bb845a4b0fb37c867cd6
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #104 from athoelke:at/tsp-entrypoints-v2
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #105 from athoelke:sm/support_normal_irq_in_tsp-v2
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #102 from achingupta:ag/tf-issues#104-v2
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #100 from jcastillo-arm:jc/tf-issues/149-v4
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #101 from sandrine-bailleux:sb/tf-issue-81-v2
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #103 from athoelke:dh/tf-issues#68-v3
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #99 from vikramkanigiri:vk/tf-issues-133_V3
Andrew Thoelke [Fri, 23 May 2014 10:00:04 +0000 (11:00 +0100)]
Merge pull request #67 from achingupta:ag/psci_standby_bug_fix
Andrew Thoelke [Thu, 22 May 2014 12:44:47 +0000 (13:44 +0100)]
Limit BL3-1 read/write access to SRAM
At present BL3-1 has access to all of the SRAM, including
regions that are mapped as read-only and non-cacheable by other
firmware images.
This patch restricts BL3-1 to only be able to read/write from
memory used for its own data sections
Change-Id: I26cda1b9ba803d91a9eacda768f3ce7032c6db94
Conflicts:
plat/fvp/bl31_plat_setup.c
Andrew Thoelke [Tue, 20 May 2014 20:43:27 +0000 (21:43 +0100)]
Use a vector table for TSP entrypoints
The TSP has a number of entrypoints used by the TSP on different
occasions. These were provided to the TSPD as a table of function
pointers, and required the TSPD to read the entry in the table,
which is in TSP memory, in order to program the exception return
address.
Ideally, the TSPD has no access to the TSP memory.
This patch changes the table of function pointers into a vector
table of single instruction entrypoints. This allows the TSPD to
calculate the entrypoint address instead of read it.
Fixes ARM-software/tf-issues#160
Change-Id: Iec6e055d537ade78a45799fbc6f43765a4725ad3
Soby Mathew [Fri, 9 May 2014 19:49:17 +0000 (20:49 +0100)]
Non-Secure Interrupt support during Standard SMC processing in TSP
Implements support for Non Secure Interrupts preempting the
Standard SMC call in EL1. Whenever an IRQ is trapped in the
Secure world we securely handover to the Normal world
to process the interrupt. The normal world then issues
"resume" smc call to resume the previous interrupted SMC call.
Fixes ARM-software/tf-issues#105
Change-Id: I72b760617dee27438754cdfc9fe9bcf4cc024858
Dan Handley [Tue, 15 Apr 2014 10:38:38 +0000 (11:38 +0100)]
Allow BL3-2 platform definitions to be optional
The generic image loading and IO FIP code no longer forces the
platform to create BL3-2 (Secure-EL1 Payload) specific
definitions. The BL3-2 loading code in bl2/bl2main.c is wrapped
by a #ifdef BL32_BASE blocks, allowing the BL3-2 definitions to
be optional. Similarly for the name_uuid array defintion in
drivers/io/io_fip.c.
Also update the porting guide to reflect this change.
The BL3-2 platform definitions remain non-configurably present
in the FVP port.
Fixes ARM-software/tf-issues#68
Change-Id: Iea28b4e94d87a31f5522f271e290919a8a955460
Achin Gupta [Fri, 9 May 2014 12:33:42 +0000 (13:33 +0100)]
Enable secure timer to generate S-EL1 interrupts
This patch enables secure physical timer during TSP initialisation and
maintains it across power management operations so that a timer
interrupt is generated every half second.
Fixes ARM-software/tf-issues#104
Fixes ARM-software/tf-issues#134
Change-Id: I66c6cfd24bd5e6035ba75ebf0f047e568770a369
Achin Gupta [Fri, 9 May 2014 12:21:31 +0000 (13:21 +0100)]
Add S-EL1 interrupt handling support in the TSPD
This patch adds support in the TSPD for registering a handler for
S-EL1 interrupts. This handler ferries the interrupts generated in the
non-secure state to the TSP at 'tsp_fiq_entry'. Support has been added
to the smc handler to resume execution in the non-secure state once
interrupt handling has been completed by the TSP.
There is also support for resuming execution in the normal world if
the TSP receives a EL3 interrupt. This code is currently unused.
Change-Id: I816732595a2635e299572965179f11aa0bf93b69
Achin Gupta [Fri, 9 May 2014 11:17:56 +0000 (12:17 +0100)]
Add support for asynchronous FIQ handling in TSP
This patch adds support in the TSP to handle FIQ interrupts that are
generated when execution is in the TSP. S-EL1 interrupt are handled
normally and execution resumes at the instruction where the exception
was originally taken. S-EL3 interrupts i.e. any interrupt not
recognized by the TSP are handed to the TSPD. Execution resumes
normally once such an interrupt has been handled at EL3.
Change-Id: Ia3ada9a4fb15670afcc12538a6456f21efe58a8f
Achin Gupta [Fri, 9 May 2014 10:42:56 +0000 (11:42 +0100)]
Add support for synchronous FIQ handling in TSP
This patch adds support in the TSP for handling S-EL1 interrupts
handed over by the TSPD. It includes GIC support in its platform port,
updates various statistics related to FIQ handling, exports an entry
point that the TSPD can use to hand over interrupts and defines the
handover protocol w.r.t what context is the TSP expected to preserve
and the state in which the entry point is invoked by the TSPD.
Change-Id: I93b22e5a8133400e4da366f5fc862f871038df39
Achin Gupta [Fri, 9 May 2014 11:00:17 +0000 (12:00 +0100)]
Use secure timer to generate S-EL1 interrupts
This patch adds support in the TSP to program the secure physical
generic timer to generate a EL-1 interrupt every half second. It also
adds support for maintaining the timer state across power management
operations. The TSPD ensures that S-EL1 can access the timer by
programming the SCR_EL3.ST bit.
This patch does not actually enable the timer. This will be done in a
subsequent patch once the complete framework for handling S-EL1
interrupts is in place.
Change-Id: I1b3985cfb50262f60824be3a51c6314ce90571bc
Achin Gupta [Fri, 9 May 2014 10:07:09 +0000 (11:07 +0100)]
Introduce interrupt handling framework in BL3-1
This patch adds a common handler for FIQ and IRQ exceptions in the
BL3-1 runtime exception vector table. This function determines the
interrupt type and calls its handler. A crash is reported if an
inconsistency in the interrupt management framework is detected. In
the event of a spurious interrupt, execution resumes from the
instruction where the interrupt was generated.
This patch also removes 'cm_macros.S' as its contents have been moved
to 'runtime_exceptions.S'
Change-Id: I3c85ecf8eaf43a3fac429b119ed0bd706d2e2093
Achin Gupta [Sun, 4 May 2014 18:02:52 +0000 (19:02 +0100)]
Introduce platform api to access an ARM GIC
This patch introduces a set of functions which allow generic firmware
code e.g. the interrupt management framework to access the platform
interrupt controller. APIs for finding the type and id of the highest
pending interrupt, acknowledging and EOIing an interrupt and finding
the security state of an interrupt have been added. It is assumed that
the platform interrupt controller implements the v2.0 of the ARM GIC
architecture specification. Support for v3.0 of the specification for
managing interrupts in EL3 and the platform port will be added in the
future.
Change-Id: Ib3a01c2cf3e3ab27806930f1be79db2b29f91bcf
Achin Gupta [Fri, 9 May 2014 09:03:15 +0000 (10:03 +0100)]
Introduce interrupt registration framework in BL3-1
This patch introduces a framework for registering interrupts routed to
EL3. The interrupt routing model is governed by the SCR_EL3.IRQ and
FIQ bits and the security state an interrupt is generated in. The
framework recognizes three type of interrupts depending upon which
exception level and security state they should be handled in
i.e. Secure EL1 interrupts, Non-secure interrupts and EL3
interrupts. It provides an API and macros that allow a runtime service
to register an handler for a type of interrupt and specify the routing
model. The framework validates the routing model and uses the context
management framework to ensure that it is applied to the SCR_EL3 prior
to entry into the target security state. It saves the handler in
internal data structures. An API is provided to retrieve the handler
when an interrupt of a particular type is asserted. Registration is
expected to be done once by the primary CPU. The same handler and
routing model is used for all CPUs.
Support for EL3 interrupts will be added to the framework in the
future. A makefile flag has been added to allow the FVP port choose
between ARM GIC v2 and v3 support in EL3. The latter version is
currently unsupported.
A framework for handling interrupts in BL3-1 will be introduced in
subsequent patches. The default routing model in the absence of any
handlers expects no interrupts to be routed to EL3.
Change-Id: Idf7c023b34fcd4800a5980f2bef85e4b5c29e649
Achin Gupta [Sun, 4 May 2014 17:38:28 +0000 (18:38 +0100)]
Add context library API to change a bit in SCR_EL3
This patch adds an API to write to any bit in the SCR_EL3 member of
the 'cpu_context' structure of the current CPU for a specified
security state. This API will be used in subsequent patches which
introduce interrupt management in EL3 to specify the interrupt routing
model when execution is not in EL3.
It also renames the cm_set_el3_elr() function to cm_set_elr_el3()
which is more in line with the system register name being targeted by
the API.
Change-Id: I310fa7d8f827ad3f350325eca2fb28cb350a85ed
Achin Gupta [Sun, 4 May 2014 17:23:26 +0000 (18:23 +0100)]
Rework 'state' field usage in per-cpu TSP context
This patch lays the foundation for using the per-cpu 'state' field in
the 'tsp_context' structure for other flags apart from the power state
of the TSP.
It allocates 2 bits for the power state, introduces the necessary
macros to manipulate the power state in the 'state' field and
accordingly reworks all use of the TSP_STATE_* states.
It also allocates a flag bit to determine if the TSP is handling a
standard SMC. If this flag is set then the TSP was interrupted due to
non-secure or EL3 interupt depending upon the chosen routing
model. Macros to get, set and clear this flag have been added as
well. This flag will be used by subsequent patches.
Change-Id: Ic6ee80bd5895812c83b35189cf2c3be70a9024a6
Sandrine Bailleux [Wed, 14 May 2014 15:45:27 +0000 (16:45 +0100)]
Doc: Add the "Building the Test Secure Payload" section
Add a section in the user guide explaining how to compile the TSP
image and include it into the FIP. This includes instructions to make
the TSP run from Trusted DRAM (rather than Trusted SRAM) on FVP.
Change-Id: I04780757a149eeb5482a12a61e821be947b882c0
Sandrine Bailleux [Tue, 20 May 2014 16:28:25 +0000 (17:28 +0100)]
fvp: Move TSP from Secure DRAM to Secure SRAM
The TSP used to execute from secure DRAM on the FVPs because there was
not enough space in Trusted SRAM to fit it in. Thanks to recent RAM
usage enhancements being implemented, we have made enough savings for
the TSP to execute in SRAM.
However, there is no contiguous free chunk of SRAM big enough to hold
the TSP. Therefore, the different bootloader images need to be moved
around to reduce memory fragmentation. This patch keeps the overall
memory layout (i.e. keeping BL1 R/W at the bottom, BL2 at the top and
BL3-1 in between) but moves the base addresses of all the bootloader
images in such a way that:
- memory fragmentation is reduced enough to fit BL3-2 in;
- new base addresses are suitable for release builds as well as debug
ones;
- each image has a few extra kilobytes for future growth.
BL3-1 and BL3-2 are the images which received the biggest slice
of the cake since they will most probably grow the most.
A few useful numbers for reference (valid at the time of this patch):
|-----------------------|-------------------------------
| image size (debug) | extra space for the future
--------|-----------------------|-------------------------------
BL1 R/W | 20 KB | 4 KB
BL2 | 44 KB | 4 KB
BL3-1 | 108 KB | 12 KB
BL3-2 | 56 KB | 8 KB
--------|-----------------------|-------------------------------
Total | 228 KB | 28 KB = 256 KB
--------|-----------------------|-------------------------------
Although on FVPs the TSP now executes from Trusted SRAM by default,
this patch keeps the option to execute it from Trusted DRAM. This is
controlled by the build configuration 'TSP_RAM_LOCATION'.
Fixes ARM-Software/tf-issues#81
Change-Id: Ifb9ef2befa9a2d5ac0813f7f79834df7af992b94
Sandrine Bailleux [Tue, 20 May 2014 16:22:24 +0000 (17:22 +0100)]
TSP: Let the platform decide which secure memory to use
The TSP's linker script used to assume that the TSP would
execute from secure DRAM. Although it is currently the case
on FVPs, platforms are free to use any secure memory they wish.
This patch introduces the flexibility to load the TSP into any
secure memory. The platform code gets to specify the extents of
this memory in the platform header file, as well as the BL3-2 image
limit address. The latter definition allows to check in a generic way
that the BL3-2 image fits in its bounds.
Change-Id: I9450f2d8b32d74bd00b6ce57a0a1542716ab449c