Commit Graph

135 Commits

Author SHA1 Message Date
Ryan Harkin bbd918c41e juno: plat_io_storage: remove semihosting
Removing semihosting from the plat_io_storage code copied from FVP.

Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
2014-06-04 15:37:35 +01:00
Ryan Harkin 8276d53e4b juno: BL1: default to building bypass rom
Juno has a "taped out" BL1.

To run your own BL1 on the board, you have to place it in a "ROM bypass"
address and configure the platform to boot from there.

The agreed bypass address is an offset of 0x03EC0000 from the start of
NOR flash (0x08000000), which equates to 0x0BEC0000.

To run the model using a BL1 in bypass mode, you should use a parameter
set something like this:

	<path to>/FVP_CSS_Juno3 \
		-C css.aon.scp.ROMloader.fname=<SCP ROM filename> \
		--data css.cluster1.cpu0=bl1.bin@0x0BEC0000 \
		-C soc.scc.apps_alt_boot=0x0BEC0000

To build BL1 as a ROM located at address zero, you can over-ride the
default value for TZROM_BASE by passing parameters to make, eg:

	ASFLAGS="-D TZROM_BASE=0x00000000" \
	CFLAGS="-D TZROM_BASE=0x00000000" \
	CROSS_COMPILE=aarch64-linux-gnu- \
	make PLAT=juno DEBUG=1 all

Then you can launch the model using a command such as:

	<path to>/FVP_CSS_Juno3 \
		-C css.aon.scp.ROMloader.fname=<SCP ROM filename> \
		-C css.trustedBootROMloader.fname=<path to>/bl1.bin \

Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 1b0ad016bd juno: Add a handler for 'ARM Architecture' SMC calls
Currently UEFI and Linux are using SMC calls in the 'ARM Architecture'
Owning Entity range so lets implement these to get things working.

UEFI probably doesn't actually need to issue the ID_PRESENCE and ID_UID
calls it does, and the device-tree used by Linux could specify the PSCI
identifiers instead. After those changes, this patch isn't required.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 53677b935a Workaround: Setup register context for BL3-3
This is a temporary solution for issue #20

Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst fc73ee91bf juno: Implement PM ops to power down CPUs
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst b44e1f562e juno: Implement PM ops to power on CPUs
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 49fd6d0775 juno: Implement SCPI Set CSS Power State command
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 378d73fb61 juno: Add bootloader for SCP image
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 5951bc1f65 juno: Add SCPI interface and implement the SCP Ready command
The SCP Ready command is sent by the SCP to indicate that the BL3-0 RAM
Firmware image is successfully up and running.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 3928b593bd juno: Add MHU interface
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 96b8dd2b56 juno: Initialise PCIe
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst f91ec7dc0a juno: Initialise TZC-400
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:35 +01:00
Jon Medhurst 4d958dbf70 juno: Initialise NIC-400
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 8e69da328e juno: Initialise GIC
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 82195441d0 juno: Port plat_topology.c
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 521b4ebaa8 juno: Update GIC addresses
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 5c77ec4b58 juno: Port mailbox initialisation
Note, on Juno mailboxes are 16 bytes because any bigger and they would
overlap the memory used for MHU payload data for SCP->AP transfers.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 6ba5c70dd0 juno: Port CCI
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 7d571f3ac7 juno: Override platform_get_core_pos and platform_is_primary_cpu
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 548cc933c7 juno: Update memory map and use generic MMU code
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Sandrine Bailleux ea250b2010 juno: Various tidyups 2014-06-04 15:37:34 +01:00
Sandrine Bailleux d392330d9d juno: Improve compliance to Linux coding style 2014-06-04 15:37:34 +01:00
Sandrine Bailleux 1649a5aecf juno: Use the correct firmware image names in comments and messages 2014-06-04 15:37:34 +01:00
Jon Medhurst 772b6e27eb juno: Use static declaration of bl31_args
Juno doesn't have TZDRAM as FVP does, and there is real reason why we
need a special memory region for bl31_args anyway, assuming we take care
to copy it in BL31 before BL2's memory is reused.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Jon Medhurst 7ec0b59086 juno: Initialise architected timer in BL3-1 2014-06-04 15:37:34 +01:00
Jon Medhurst 068d9170a3 juno: Create as a trimmed copy of plat/fvp
Signed-off-by: Jon Medhurst <tixy@linaro.org>
2014-06-04 15:37:34 +01:00
Andrew Thoelke 0346267194 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
2014-05-29 11:33:34 +01:00
Dan Handley 9865ac1576 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
2014-05-27 16:17:21 +01:00
Dan Handley dff8e47a4b 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
2014-05-23 18:02:01 +01:00
Dan Handley 17a387ad5a 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
2014-05-23 18:01:41 +01:00
Dan Handley dec5e0d1da 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
2014-05-23 17:18:54 +01:00
Dan Handley 5f0cdb059d 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
2014-05-23 15:52:29 +01:00
Dan Handley 7a9a5f2d22 Remove unused data declarations
Some data variables were declared but not used. These have been
removed.

Change-Id: I038632af3c32d88984cd25b886c43ff763269bf9
2014-05-23 12:15:54 +01:00
Dan Handley c6bc071020 Remove extern keyword from function declarations
Function declarations implicitly have external linkage so do not
need the extern keyword.

Change-Id: Ia0549786796d8bf5956487e8996450a0b3d79f32
2014-05-23 12:15:54 +01:00
Andrew Thoelke f53d0fce3f Merge pull request #101 from sandrine-bailleux:sb/tf-issue-81-v2 2014-05-23 12:14:37 +01:00
Sandrine Bailleux a37255a205 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
2014-05-23 11:05:44 +01:00
Sandrine Bailleux 4f59d8359f 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
2014-05-23 11:05:44 +01:00
Andrew Thoelke 8957fc76aa Merge pull request #104 from athoelke:at/tsp-entrypoints-v2 2014-05-23 11:00:04 +01:00
Andrew Thoelke 8545a8744b Merge pull request #102 from achingupta:ag/tf-issues#104-v2 2014-05-23 11:00:04 +01:00
Andrew Thoelke 9253530279 Merge pull request #100 from jcastillo-arm:jc/tf-issues/149-v4 2014-05-23 11:00:04 +01:00
Andrew Thoelke 445fe84f98 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
2014-05-23 08:53:03 +01:00
Achin Gupta 6cf8902131 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
2014-05-22 17:48:36 +01:00
Achin Gupta dcc1816c91 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
2014-05-22 17:47:19 +01:00
Achin Gupta e1333f753f 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
2014-05-22 17:46:56 +01:00
Sandrine Bailleux 53514b2909 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
2014-05-22 17:30:58 +01:00
Sandrine Bailleux 2467f70fde 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
2014-05-22 17:30:58 +01:00
Juan Castillo 364daf9320 Reserve some DDR DRAM for secure use on FVP platforms
TZC-400 is configured to set the last 16MB of DRAM1 as secure memory and
the rest of DRAM as non-secure. Non-secure software must not attempt to
access the 16MB secure area.

Device tree files (sources and binaries) have been updated to match this
configuration, removing that memory from the Linux physical memory map.

To use UEFI and Linux with this patch, the latest version of UEFI and
the updated device tree files are required. Check the user guide in the
documentation for more details.

Replaced magic numbers with #define for memory region definition in the
platform security initialization function.

Fixes ARM-software/tf-issues#149

Change-Id: Ia5d070244aae6c5288ea0e6c8e89d92859522bfe
2014-05-22 17:27:28 +01:00
Vikram Kanigiri dbad1bacba Add support for BL3-1 as a reset vector
This change adds optional reset vector support to BL3-1
which means BL3-1 entry point can detect cold/warm boot,
initialise primary cpu, set up cci and mail box.

When using BL3-1 as a reset vector it is assumed that
the BL3-1 platform code can determine the location of
the BL3-2 images, or load them as there are no parameters
that can be passed to BL3-1 at reset.

It also fixes the incorrect initialisation of mailbox
registers on the FVP platform

This feature can be enabled by building the code with
make variable RESET_TO_BL31 set as 1

Fixes ARM-software/TF-issues#133
Fixes ARM-software/TF-issues#20

Change-Id: I4e23939b1c518614b899f549f1e8d412538ee570
2014-05-22 16:25:09 +01:00
Vikram Kanigiri 6871c5d3a2 Rework memory information passing to BL3-x images
The issues addressed in this patch are:

1. Remove meminfo_t from the common interfaces in BL3-x,
expecting that platform code will find a suitable mechanism
to determine the memory extents in these images and provide
it to the BL3-x images.

2. Remove meminfo_t and bl31_plat_params_t from all FVP BL3-x
code as the images use link-time information to determine
memory extents.

meminfo_t is still used by common interface in BL1/BL2 for
loading images

Change-Id: I4e825ebf6f515b59d84dc2bdddf6edbf15e2d60f
2014-05-22 16:19:32 +01:00
Vikram Kanigiri 4112bfa0c2 Populate BL31 input parameters as per new spec
This patch is based on spec published at
https://github.com/ARM-software/tf-issues/issues/133

It rearranges the bl31_args struct into
bl31_params and bl31_plat_params which provide the
information needed for Trusted firmware and platform
specific data via x0 and x1

On the FVP platform BL3-1 params and BL3-1 plat params
and its constituents are stored at the start of TZDRAM.

The information about memory availability and size for
BL3-1, BL3-2 and BL3-3 is moved into platform specific data.

Change-Id: I8b32057a3d0dd3968ea26c2541a0714177820da9
2014-05-22 16:14:19 +01:00