Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
4731e8f0
Commit
4731e8f0
authored
Apr 29, 2015
by
danh-arm
Browse files
Merge pull request #295 from danh-arm/dh/plat-port-reorg
ARM platform port reorganization
parents
6403a306
4a75b84a
Changes
101
Expand all
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
4731e8f0
#
# Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
# Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
...
...
@@ -126,9 +126,14 @@ BL_COMMON_SOURCES := common/bl_common.c \
BUILD_BASE
:=
./build
BUILD_PLAT
:=
${BUILD_BASE}
/
${PLAT}
/
${BUILD_TYPE}
PLATFORMS
:=
$(
shell
ls
-I
common plat/
)
PLAT_MAKEFILE
:=
platform.mk
# Generate the platforms list by recursively searching for all directories
# under /plat containing a PLAT_MAKEFILE. Append each platform with a `|`
# char and strip out the final '|'.
PLATFORMS
:=
$(
shell
find plat/
-name
'
${PLAT_MAKEFILE}
'
-print0
|
\
sed
-r
's%[^\x00]*\/([^/]*
)
\/
${PLAT_MAKEFILE}
\x00%\1|%g'
|
\
sed
-r
's/\|$$//'
)
SPDS
:=
$(
shell
ls
-I
none services/spd
)
HELP_PLATFORMS
:=
$(
shell
echo
${PLATFORMS}
|
sed
's/ /|/g'
)
# Convenience function for adding build definitions
# $(eval $(call add_define,FOO)) will have:
...
...
@@ -144,9 +149,10 @@ $(and $(patsubst 0,,$(value $(1))),$(patsubst 1,,$(value $(1))),$(error $(1) mus
endef
ifeq
(${PLAT},)
$(error "Error
:
Unknown platform. Please use PLAT=<platform name> to specify the platform
.
")
$(error "Error
:
Unknown platform. Please use PLAT=<platform name> to specify the platform")
endif
ifeq
($(findstring ${PLAT},${PLATFORMS}),)
PLAT_MAKEFILE_FULL
:=
$(
shell
find plat/
-wholename
'*/
${PLAT}
/
${PLAT_MAKEFILE}
'
)
ifeq
($(PLAT_MAKEFILE_FULL),)
$(error "Error
:
Invalid platform. The following platforms are available: ${PLATFORMS}")
endif
...
...
@@ -155,7 +161,7 @@ all: msg_start
msg_start
:
@
echo
"Building
${PLAT}
"
include
plat/
${PLAT
}/platform.mk
include
${PLAT
_MAKEFILE_FULL}
# Include the CPU specific operations makefile. By default all CPU errata
# workarounds and CPU specifc optimisations are disabled. This can be
...
...
@@ -225,6 +231,9 @@ CFLAGS += -g
ASFLAGS
+=
-g
-Wa
,--gdwarf-2
endif
# Process PLAT flag
$(eval
$(call
add_define,PLAT_${PLAT}))
# Process NS_TIMER_SWITCH flag
$(eval
$(call
assert_boolean,NS_TIMER_SWITCH))
$(eval
$(call
add_define,NS_TIMER_SWITCH))
...
...
@@ -633,7 +642,7 @@ cscope:
${Q}
cscope
-b
-q
-k
help
:
@
echo
"usage:
${MAKE}
PLAT=<
${
HELP_
PLATFORMS}
> [OPTIONS] [TARGET]"
@
echo
"usage:
${MAKE}
PLAT=<
${PLATFORMS}
> [OPTIONS] [TARGET]"
@
echo
""
@
echo
"PLAT is used to specify which platform you wish to build."
@
echo
"If no platform is specified, PLAT defaults to:
${DEFAULT_PLAT}
"
...
...
bl1/bl1_main.c
View file @
4731e8f0
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -114,21 +114,36 @@ void bl1_main(void)
INFO
(
"BL1: RAM 0x%lx - 0x%lx
\n
"
,
BL1_RAM_BASE
,
BL1_RAM_LIMIT
);
#if DEBUG
unsigned
long
sctlr_el3
=
read_sctlr_el3
();
#endif
image_info_t
bl2_image_info
=
{
{
0
}
};
entry_point_info_t
bl2_ep
=
{
{
0
}
};
meminfo_t
*
bl1_tzram_layout
;
meminfo_t
*
bl2_tzram_layout
=
0x0
;
int
err
;
#if DEBUG
unsigned
long
val
;
/*
* Ensure that MMU/Caches and coherency are turned on
*/
assert
(
sctlr_el3
|
SCTLR_M_BIT
);
assert
(
sctlr_el3
|
SCTLR_C_BIT
);
assert
(
sctlr_el3
|
SCTLR_I_BIT
);
val
=
read_sctlr_el3
();
assert
(
val
|
SCTLR_M_BIT
);
assert
(
val
|
SCTLR_C_BIT
);
assert
(
val
|
SCTLR_I_BIT
);
/*
* Check that Cache Writeback Granule (CWG) in CTR_EL0 matches the
* provided platform value
*/
val
=
(
read_ctr_el0
()
>>
CTR_CWG_SHIFT
)
&
CTR_CWG_MASK
;
/*
* If CWG is zero, then no CWG information is available but we can
* at least check the platform value is less than the architectural
* maximum.
*/
if
(
val
!=
0
)
assert
(
CACHE_WRITEBACK_GRANULE
==
SIZE_FROM_LOG2_WORDS
(
val
));
else
assert
(
CACHE_WRITEBACK_GRANULE
<=
MAX_CACHE_LINE_SIZE
);
#endif
/* Perform remaining generic architectural setup from EL3 */
bl1_arch_setup
();
...
...
bl32/tsp/tsp.mk
View file @
4731e8f0
...
...
@@ -52,7 +52,7 @@ $(eval $(call add_define,TSP_INIT_ASYNC))
# Include the platform-specific TSP Makefile
# If no platform-specific TSP Makefile exists, it means TSP is not supported
# on this platform.
TSP_PLAT_MAKEFILE
:=
plat
/
${PLAT}
/tsp/tsp-
${PLAT}
.mk
TSP_PLAT_MAKEFILE
:=
$(
shell
find plat/
-wholename
'*
/
${PLAT}
/tsp/tsp-
${PLAT}
.mk
'
)
ifeq
(,$(wildcard ${TSP_PLAT_MAKEFILE}))
$(error
TSP
is
not
supported
on
platform
${PLAT})
else
...
...
bl32/tsp/tsp_interrupt.c
View file @
4731e8f0
/*
* Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014
-2015
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -58,9 +58,9 @@ void tsp_update_sync_fiq_stats(uint32_t type, uint64_t elr_el3)
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
spin_lock
(
&
console_lock
);
VERBOSE
(
"TSP: cpu 0x%x sync fiq request from 0x%
l
lx
\n
"
,
VERBOSE
(
"TSP: cpu 0x%
l
x sync fiq request from 0x%lx
\n
"
,
mpidr
,
elr_el3
);
VERBOSE
(
"TSP: cpu 0x%x: %d sync fiq requests, %d sync fiq returns
\n
"
,
VERBOSE
(
"TSP: cpu 0x%
l
x: %d sync fiq requests, %d sync fiq returns
\n
"
,
mpidr
,
tsp_stats
[
linear_id
].
sync_fiq_count
,
tsp_stats
[
linear_id
].
sync_fiq_ret_count
);
...
...
@@ -104,9 +104,9 @@ int32_t tsp_fiq_handler(void)
tsp_stats
[
linear_id
].
fiq_count
++
;
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
spin_lock
(
&
console_lock
);
VERBOSE
(
"TSP: cpu 0x%x handled fiq %d
\n
"
,
VERBOSE
(
"TSP: cpu 0x%
l
x handled fiq %d
\n
"
,
mpidr
,
id
);
VERBOSE
(
"TSP: cpu 0x%x: %d fiq requests
\n
"
,
VERBOSE
(
"TSP: cpu 0x%
l
x: %d fiq requests
\n
"
,
mpidr
,
tsp_stats
[
linear_id
].
fiq_count
);
spin_unlock
(
&
console_lock
);
#endif
...
...
@@ -121,8 +121,8 @@ int32_t tsp_irq_received(void)
tsp_stats
[
linear_id
].
irq_count
++
;
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
spin_lock
(
&
console_lock
);
VERBOSE
(
"TSP: cpu 0x%x received irq
\n
"
,
mpidr
);
VERBOSE
(
"TSP: cpu 0x%x: %d irq requests
\n
"
,
VERBOSE
(
"TSP: cpu 0x%
l
x received irq
\n
"
,
mpidr
);
VERBOSE
(
"TSP: cpu 0x%
l
x: %d irq requests
\n
"
,
mpidr
,
tsp_stats
[
linear_id
].
irq_count
);
spin_unlock
(
&
console_lock
);
#endif
...
...
bl32/tsp/tsp_main.c
View file @
4731e8f0
...
...
@@ -38,12 +38,6 @@
#include <tsp.h>
#include "tsp_private.h"
/*******************************************************************************
* Declarations of linker defined symbols which will help us find the layout
* of trusted SRAM
******************************************************************************/
extern
unsigned
long
__RO_START__
;
extern
unsigned
long
__BL32_END__
;
/*******************************************************************************
* Lock to control access to the console
...
...
common/bl_common.c
View file @
4731e8f0
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -137,7 +137,7 @@ void reserve_mem(uint64_t *free_base, size_t *free_size,
if
(
pos
==
BOTTOM
)
*
free_base
=
addr
+
size
;
VERBOSE
(
"Reserved
%u
bytes (discarded
%u
bytes %s)
\n
"
,
VERBOSE
(
"Reserved
0x%lx
bytes (discarded
0x%lx
bytes %s)
\n
"
,
reserved_size
,
discard_size
,
pos
==
TOP
?
"above"
:
"below"
);
}
...
...
docs/firmware-design.md
View file @
4731e8f0
...
...
@@ -88,13 +88,9 @@ This stage begins execution from the platform's reset vector at EL3. The reset
address is platform dependent but it is usually located in a Trusted ROM area.
The BL1 data section is copied to trusted SRAM at runtime.
On the ARM FVP port, BL1 code starts execution from the reset vector at address
`0x00000000`
(trusted ROM). The BL1 data section is copied to the start of
trusted SRAM at address
`0x04000000`
.
On the Juno ARM development platform port, BL1 code starts execution at
`0x0BEC0000`
(FLASH). The BL1 data section is copied to trusted SRAM at address
`0x04001000.
On the ARM development platforms, BL1 code starts execution from the reset
vector defined by the constant
`BL1_RO_BASE`
. The BL1 data section is copied
to the top of trusted SRAM as defined by the constant
`BL1_RW_BASE`
.
The functionality implemented by this stage is as follows.
...
...
@@ -189,9 +185,9 @@ BL1 performs minimal architectural initialization as follows.
#### Platform initialization
BL1 enables issuing of snoop and DVM (Distributed Virtual Memory) requests from
the CCI
-400
slave interface corresponding to the cluster that includes the
primary CPU. BL1 also initializes UART
0
(PL011 console), which enables access
to
the `
printf
` family of functions in BL1.
the CCI slave interface corresponding to the cluster that includes the
primary CPU. BL1 also initializes
a
UART (PL011 console), which enables access
to
the
`printf`
family of functions in BL1.
#### BL2 image load and execution
...
...
@@ -247,7 +243,7 @@ platform-specific mechanism. It calculates the limits of DRAM (main memory)
to determine whether there is enough space to load the BL3-3 image. A platform
defined base address is used to specify the load address for the BL3-1 image.
It also defines the extents of memory available for use by the BL3-2 image.
BL2 also initializes UART
0
(PL011 console), which enables access to the
BL2 also initializes
a
UART (PL011 console), which enables access to the
`printf`
family of functions in BL2. Platform security is initialized to allow
access to controlled components. The storage abstraction layer is initialized
which is used to load further bootloader images.
...
...
@@ -258,8 +254,8 @@ Some systems have a separate System Control Processor (SCP) for power, clock,
reset and system control. BL2 loads the optional BL3-0 image from platform
storage into a platform-specific region of secure memory. The subsequent
handling of BL3-0 is platform specific. For example, on the Juno ARM development
platform port the image is transferred into SCP memory using the
SCPI protocol
after being loaded in the trusted SRAM memory
at address `
0x04009000
`
. The SCP
platform port the image is transferred into SCP
's internal
memory using the
Boot
Over MHU (BOM) protocol
after being loaded in the trusted SRAM memory. The SCP
executes BL3-0 and signals to the Application Processor (AP) for BL2 execution
to continue.
...
...
@@ -338,7 +334,7 @@ the clock frequency of the system counter, which is provided by the platform.
BL3-1 performs detailed platform initialization, which enables normal world
software to function correctly. It also retrieves entrypoint information for
the BL3-3 image loaded by BL2 from the platform defined memory address populated
by BL2. BL3-1 also initializes UART
0
(PL011 console), which enables
by BL2. BL3-1 also initializes
a
UART (PL011 console), which enables
access to the
`printf`
family of functions in BL3-1. It enables the system
level implementation of the generic timer through the memory mapped interface.
...
...
@@ -460,7 +456,8 @@ the CPU caches if it is provided by an earlier boot stage and then accessed by
BL3-1 platform code before the caches are enabled.
ARM Trusted Firmware's BL2 implementation passes a
`bl31_params`
structure in
`
X0
` and the FVP port interprets this in the BL3-1 platform code.
`X0`
and the ARM development platforms interpret this in the BL3-1 platform
code.
##### MMU, Data caches & Coherency
...
...
@@ -490,7 +487,7 @@ BL3-1 to detect which information is present and respond appropriately. The
The structures using this format are
`entry_point_info`
,
`image_info`
and
`bl31_params`
. The code that allocates and populates these structures must set
the header fields appropriately, and the `
SET_PARA_HEAD()
` a macro is defined
the header fields appropriately, and the
`SET_PARA
M
_HEAD()`
a macro is defined
to simplify this action.
#### Required CPU state for BL3-1 Warm boot initialization
...
...
@@ -870,10 +867,10 @@ before returning through EL3 and running the non-trusted firmware (BL3-3):
6. Crash Reporting in BL3-1
----------------------------
The
BL3-1 implements a scheme for reporting the processor state when an unhandled
BL3-1 implements a scheme for reporting the processor state when an unhandled
exception is encountered. The reporting mechanism attempts to preserve all the
register contents and report it via
the default serial output. The general purpose
re
gisters
, EL3, Secure EL1 and some EL2 state registers
are reported
.
register contents and report it via
a dedicated UART (PL011 console). BL3-1
re
ports the general purpose
, EL3, Secure EL1 and some EL2 state registers.
A dedicated per-CPU crash stack is maintained by BL3-1 and this is retrieved via
the per-CPU pointer cache. The implementation attempts to minimise the memory
...
...
@@ -1253,27 +1250,37 @@ on FVP, BL3-1 and TSP need to know the limit address that their PROGBITS
sections must not overstep. The platform code must provide those.
#### Memory layout on ARM FVPs
#### Memory layout on ARM development platforms
The following list describes the memory layout on the ARM development platforms:
The following list describes the memory layout on the FVP:
*
A 4KB page of shared memory is used for communication between Trusted
Firmware and the platform's power controller. This is located at the base of
Trusted SRAM. The amount of Trusted SRAM available to load the bootloader
images is reduced by the size of the shared memory.
* A 4KB page of shared memory is used to store the entrypoint mailboxes
and the parameters passed between bootloaders. The shared memory is located
at the base of the Trusted SRAM. The amount of Trusted SRAM available to
load the bootloader images will be reduced by the size of the shared memory.
The shared memory is used to store the entrypoint mailboxes for each CPU.
On Juno, this is also used for the MHU payload when passing messages to and
from the SCP.
* BL1 is originally sitting in the Trusted ROM at address `
0x0
`. Its
read-write data are relocated at the top of the Trusted SRAM at runtime.
*
On FVP, BL1 is originally sitting in the Trusted ROM at address
`0x0`
. On
Juno, BL1 resides in flash memory at address
`0x0BEC0000`
. BL1 read-write
data are relocated to the top of Trusted SRAM at runtime.
*
BL3-1 is loaded at the top of the Trusted SRAM, such that its NOBITS
sections will overwrite BL1 R/W data.
sections will overwrite BL1 R/W data. This implies that BL1 global variables
remain valid only until execution reaches the BL3-1 entry point during
a cold boot.
*
BL2 is loaded below BL3-1.
*
On Juno, BL3-0 is loaded temporarily into the BL3-1 memory region and
transfered to the SCP before being overwritten by BL3-1.
*
BL3-2 can be loaded in one of the following locations:
* Trusted SRAM
* Trusted DRAM
* Trusted DRAM
(FVP only)
* Secure region of DRAM (top 16MB of DRAM configured by the TrustZone
controller)
...
...
@@ -1282,9 +1289,13 @@ overlay BL2. This memory layout is designed to give the BL3-2 image as much
memory as possible when it is loaded into Trusted SRAM.
The location of the BL3-2 image will result in different memory maps. This is
illustrated in the following diagrams using the TSP as an example.
illustrated for both FVP and Juno in the following diagrams, using the TSP as
an example.
Note: Loading the BL3-2 image in TZC secured DRAM doesn't change the memory
layout of the other images in Trusted SRAM.
**TSP in Trusted SRAM (default option):**
**
FVP with
TSP in Trusted SRAM (default option):**
Trusted SRAM
0x04040000 +----------+ loaded by BL2 ------------------
...
...
@@ -1305,7 +1316,7 @@ illustrated in the following diagrams using the TSP as an example.
0x00000000 +----------+
**TSP in Trusted DRAM:**
**
FVP with
TSP in Trusted DRAM:**
Trusted DRAM
0x08000000 +----------+
...
...
@@ -1330,7 +1341,7 @@ illustrated in the following diagrams using the TSP as an example.
| BL1 (ro) |
0x00000000 +----------+
**TSP in
the
TZC-Secured DRAM:**
**
FVP with
TSP in TZC-Secured DRAM:**
DRAM
0xffffffff +----------+
...
...
@@ -1359,43 +1370,8 @@ illustrated in the following diagrams using the TSP as an example.
| BL1 (ro) |
0x00000000 +----------+
Moving the TSP image out of the Trusted SRAM doesn't change the memory layout
of the other boot loader images in Trusted SRAM.
#### Memory layout on Juno ARM development platform
The following list describes the memory layout on Juno:
* Trusted SRAM at 0x04000000 contains the MHU page, BL1 r/w section, BL2
image, BL3-1 image and, optionally, the BL3-2 image.
* The MHU 4 KB page is used as communication channel between SCP and AP. It
also contains the entrypoint mailboxes for the AP. Mailboxes are stored in
the first 128 bytes of the MHU page.
* BL1 resides in flash memory at address `
0x0BEC0000
`. Its read-write data
section is relocated to the top of the Trusted SRAM at runtime.
* BL3-1 is loaded at the top of the Trusted SRAM, such that its NOBITS
sections will overwrite BL1 R/W data. This implies that BL1 global variables
will remain valid only until execution reaches the BL3-1 entry point during
a cold boot.
* BL2 is loaded below BL3-1.
* BL3-0 is loaded temporarily into the BL3-1 memory region and transfered to
the SCP before being overwritten by BL3-1.
* The BL3-2 image is optional and can be loaded into one of these two
locations: Trusted SRAM (right after the MHU page) or DRAM (14 MB starting
at 0xFF000000 and secured by the TrustZone controller). When loaded into
Trusted SRAM, its NOBITS sections are allowed to overlap BL2.
Depending on the location of the BL3-2 image, it will result in different memory
maps, illustrated by the following diagrams.
**BL3-2 in Trusted SRAM (default option):**
**Juno with BL3-2 in Trusted SRAM (default option):**
Flash0
0x0C000000 +----------+
...
...
@@ -1420,7 +1396,7 @@ maps, illustrated by the following diagrams.
0x04000000 +----------+
**BL3-2 in
the
secure
region of
DRAM:**
**
Juno with
BL3-2 in
TZC-
secure
d
DRAM:**
DRAM
0xFFE00000 +----------+
...
...
@@ -1453,9 +1429,6 @@ maps, illustrated by the following diagrams.
| MHU |
0x04000000 +----------+
Loading the BL3-2 image in DRAM doesn't change the memory layout of the other
images in Trusted SRAM.
10. Firmware Image Package (FIP)
---------------------------------
...
...
@@ -1524,15 +1497,16 @@ The tool can be found in `tools/fip_create`.
### Loading from a Firmware Image Package (FIP)
The Firmware Image Package (FIP) driver can load images from a binary package on
non-volatile platform storage. For the FVPs this is currently NOR FLASH.
non-volatile platform storage. For the ARM development platforms, this is
currently NOR FLASH.
Bootloader images are loaded according to the platform policy as specified
in
`
plat/
<platform>
/plat_io_storage.c
`. For the FVPs this means the
platform
will
attempt to load images from a Firmware Image Package
located at the start of NOR
FLASH0.
Bootloader images are loaded according to the platform policy as specified
by
the function
`plat_get_image_source()`
. For the ARM development
platform
s, this
means the platform will
attempt to load images from a Firmware Image Package
located at the start of NOR
FLASH0.
Currently the FVP's
policy only allow
s
loading of a known set of
images. The
platform policy can be modified to allow additional images.
The ARM development platforms'
policy
is to
only allow loading of a known set of
images. The
platform policy can be modified to allow additional images.
11. Use of coherent memory in Trusted Firmware
...
...
@@ -1743,7 +1717,6 @@ Trusted Firmware code is logically divided between the three boot loader
stages mentioned in the previous sections. The code is also divided into the
following categories (present as directories in the source code):
* **Architecture specific.** This could be AArch32 or AArch64.
*
**Platform specific.**
Choice of architecture specific code depends upon
the platform.
*
**Common code.**
This is platform and architecture agnostic code.
...
...
@@ -1761,7 +1734,6 @@ categories. Based upon the above, the code layout looks like this:
bl1 Yes No No
bl2 No Yes No
bl31 No No Yes
arch Yes Yes Yes
plat Yes Yes Yes
drivers Yes No Yes
common Yes Yes Yes
...
...
@@ -1795,7 +1767,7 @@ kernel at boot time. These can be found in the `fdts` directory.
- - - - - - - - - - - - - - - - - - - - - - - - - -
_Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved._
_Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved._
[
ARM ARM
]:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0487a.e/index.html
"ARMv8-A Reference Manual (ARM DDI0487A.E)"
[
PSCI
]:
http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
"Power State Coordination Interface PDD (ARM DEN 0022C)"
...
...
docs/porting-guide.md
View file @
4731e8f0
This diff is collapsed.
Click to expand it.
docs/user-guide.md
View file @
4731e8f0
...
...
@@ -206,8 +206,8 @@ performed.
wants the timer registers to be saved and restored.
*
`PLAT`
: Choose a platform to build ARM Trusted Firmware for. The chosen
platform name must be
the name of one of the directories
under
the
`plat/`
directory other than
`common
`
.
platform name must be
subdirectory of any depth
under
`plat/`
, and must
contain a platform makefile named
`platform.mk
`
.
*
`SPD`
: Choose a Secure Payload Dispatcher component to be built into the
Trusted Firmware. The value should be the path to the directory containing
...
...
@@ -320,21 +320,16 @@ performed.
*
`BL33_KEY`
: This option is used when
`GENERATE_COT=1`
. It specifies the
file that contains the BL3-3 private key in PEM format.
####
FVP
specific build options
####
ARM development platform
specific build options
*
`
FVP
_TSP_RAM_LOCATION`
: location of the TSP binary. Options:
*
`
ARM
_TSP_RAM_LOCATION
_ID
`
: location of the TSP binary. Options:
-
`tsram`
: Trusted SRAM (default option)
-
`tdram`
: Trusted DRAM
-
`tdram`
: Trusted DRAM
(if available)
-
`dram`
: Secure region in DRAM (configured by the TrustZone controller)
For a better understanding of
FVP
options, the
FVP memory map is explained in
the [Firmware Design].
For a better understanding of
these
options, the
ARM development platform memory
map is explained in
the [Firmware Design].
#### Juno specific build options
*
`PLAT_TSP_LOCATION`
: location of the TSP binary. Options:
-
`tsram`
: Trusted SRAM (default option)
-
`dram`
: Secure region in DRAM (set by the TrustZone controller)
### Creating a Firmware Image Package
...
...
@@ -409,8 +404,8 @@ When debugging logic problems it might also be useful to disable all compiler
optimizations by using
`-O0`
.
NOTE: Using
`-O0`
could cause output images to be larger and base addresses
might need to be recalculated (see the
"
Memory layout o
f BL images" section in
the [Firmware Design]).
might need to be recalculated (see the
**
Memory layout o
n ARM development
platforms
**
section in
the [Firmware Design]).
Extra debug options can be passed to the build system by setting
`CFLAGS`
:
...
...
@@ -461,7 +456,7 @@ FVP_AARCH64_EFI.fd as BL3-3 image:
The
`cert_create`
tool can be built separately through the following commands:
$ cd tools/cert_create
$ make [DEBUG=1] [V=1]
$ make
PLAT=<platform>
[DEBUG=1] [V=1]
`DEBUG=1`
builds the tool in debug mode.
`V=1`
makes the build process more
verbose. The following command should be used to obtain help about the tool:
...
...
drivers/arm/pl011/pl011_console.S
View file @
4731e8f0
/*
*
Copyright
(
c
)
2013
-
201
4
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2013
-
201
5
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
...
...
@@ -31,40 +31,17 @@
#include <asm_macros.S>
#include <pl011.h>
.
globl
console_init
.
globl
console_putc
/*
*
Pull
in
generic
functions
to
provide
backwards
compatibility
for
*
platform
makefiles
*/
#include "../../console/console.S"
.
globl
console_core_init
.
globl
console_core_putc
.
globl
console_getc
.
globl
console_
core_
getc
/
*
*
The
console
base
is
in
the
data
section
and
not
in
.
bss
*
even
though
it
is
zero
-
init
.
In
particular
,
this
allows
*
the
console
functions
to
start
using
this
variable
before
*
the
runtime
memory
is
initialized
for
images
which
do
not
*
need
to
copy
the
.
data
section
from
ROM
to
RAM
.
*/
.
section
.
data.
console_base
; .align 3
console_base
:
.
quad
0x0
/
*
-----------------------------------------------
*
int
console_init
(
unsigned
long
base_addr
,
*
unsigned
int
uart_clk
,
unsigned
int
baud_rate
)
*
Function
to
initialize
the
console
without
a
*
C
Runtime
to
print
debug
information
.
It
saves
*
the
console
base
to
the
data
section
.
*
In
:
x0
-
console
base
address
*
w1
-
Uart
clock
in
Hz
*
w2
-
Baud
rate
*
out
:
return
1
on
success
.
*
Clobber
list
:
x1
-
x3
*
-----------------------------------------------
*/
func
console_init
adrp
x3
,
console_base
str
x0
,
[
x3
,
:
lo12
:
console_base
]
b
console_core_init
endfunc
console_init
/
*
-----------------------------------------------
*
int
console_core_init
(
unsigned
long
base_addr
,
...
...
@@ -76,16 +53,16 @@ endfunc console_init
*
In
:
x0
-
console
base
address
*
w1
-
Uart
clock
in
Hz
*
w2
-
Baud
rate
*
Out
:
return
1
on
success
*
Out
:
return
1
on
success
else
0
on
error
*
Clobber
list
:
x1
,
x2
*
-----------------------------------------------
*/
func
console_core_init
/
*
Check
the
input
base
address
*/
cbz
x0
,
init_fail
cbz
x0
,
core_
init_fail
/
*
Check
baud
rate
and
uart
clock
for
sanity
*/
cbz
w1
,
init_fail
cbz
w2
,
init_fail
cbz
w1
,
core_
init_fail
cbz
w2
,
core_
init_fail
/
*
Program
the
baudrate
*/
/
*
Divisor
=
(
Uart
clock
*
4
)
/
baudrate
*/
lsl
w1
,
w1
,
#
2
...
...
@@ -106,28 +83,14 @@ func console_core_init
mov
w1
,
#(
PL011_UARTCR_RXE
| PL011_UARTCR_TXE |
PL011_UARTCR_UARTEN
)
str
w1
,
[
x0
,
#
UARTCR
]
mov
w0
,
#
1
init_fail
:
ret
core_init_fail
:
mov
w0
,
wzr
ret
endfunc
console_core_init
/
*
---------------------------------------------
*
int
console_putc
(
int
c
)
*
Function
to
output
a
character
over
the
*
console
.
It
returns
the
character
printed
on
*
success
or
-
1
on
error
.
*
In
:
x0
-
character
to
be
printed
*
Out
:
return
-
1
on
error
else
return
character
.
*
Clobber
list
:
x1
,
x2
*
---------------------------------------------
*/
func
console_putc
adrp
x2
,
console_base
ldr
x1
,
[
x2
,
:
lo12
:
console_base
]
b
console_core_putc
endfunc
console_putc
/
*
--------------------------------------------------------
*
int
console_core_putc
(
int
c
,
unsigned
int
base_addr
)
*
int
console_core_putc
(
int
c
,
unsigned
long
base_addr
)
*
Function
to
output
a
character
over
the
console
.
It
*
returns
the
character
printed
on
success
or
-
1
on
error
.
*
In
:
w0
-
character
to
be
printed
...
...
@@ -160,24 +123,24 @@ putc_error:
endfunc
console_core_putc
/
*
---------------------------------------------
*
int
console_
getc
(
void
)
*
int
console_
core_getc
(
unsigned
long
base_addr
)
*
Function
to
get
a
character
from
the
console
.
*
It
returns
the
character
grabbed
on
success
*
or
-
1
on
error
.
*
In
:
x0
-
console
base
address
*
Clobber
list
:
x0
,
x1
*
---------------------------------------------
*/
func
console_getc
adrp
x0
,
console_base
ldr
x1
,
[
x0
,
:
lo12
:
console_base
]
cbz
x1
,
getc_error
func
console_core_getc
cbz
x0
,
getc_error
1
:
/
*
Check
if
the
receive
FIFO
is
empty
*/
ldr
w0
,
[
x1
,
#
UARTFR
]
tbnz
w0
,
#
PL011_UARTFR_RXFE_BIT
,
1
b
ldr
w0
,
[
x1
,
#
UARTDR
]
ldr
w1
,
[
x0
,
#
UARTFR
]
tbnz
w1
,
#
PL011_UARTFR_RXFE_BIT
,
1
b
ldr
w1
,
[
x0
,
#
UARTDR
]
mov
w0
,
w1
ret
getc_error
:
mov
w0
,
#-
1
ret
endfunc
console_getc
endfunc
console_
core_
getc
drivers/arm/tzc400/tzc400.c
View file @
4731e8f0
/*
* Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014
-2015
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -191,15 +191,41 @@ void tzc_init(uint64_t base)
BUILD_CONFIG_NR_MASK
)
+
1
;
}
/*
* `tzc_configure_region0` is used to program region 0 into the TrustZone
* controller. Region 0 covers the whole address space that is not mapped
* to any other region, and is enabled on all filters; this cannot be
* changed. This function only changes the access permissions.
*/
void
tzc_configure_region0
(
tzc_region_attributes_t
sec_attr
,
uint32_t
ns_device_access
)
{
assert
(
tzc
.
base
);
VERBOSE
(
"TZC : Configuring region 0 (sec_attr=0x%x, ns_devs=0x%x)
\n
"
,
sec_attr
,
ns_device_access
);
assert
(
sec_attr
<=
TZC_REGION_S_RDWR
);
/* Set secure attributes on region 0 */
tzc_write_region_attributes
(
tzc
.
base
,
0
,
sec_attr
<<
REG_ATTR_SEC_SHIFT
);
/*
* Specify which non-secure devices have permission to access
* region 0.
*/
tzc_write_region_id_access
(
tzc
.
base
,
0
,
ns_device_access
);
}
/*
* `tzc_configure_region` is used to program regions into the TrustZone
* controller. A region can be associated with more than one filter. The
* associated filters are passed in as a bitmap (bit0 = filter0).
* NOTE:
* The region 0 covers the whole address space and is enabled on all filters,
* this cannot be changed. It is, however, possible to change some region 0
* permissions.
* Region 0 is special; it is preferable to use tzc_configure_region0
* for this region (see comment for that function).
*/
void
tzc_configure_region
(
uint32_t
filters
,
uint8_t
region
,
...
...
@@ -210,6 +236,13 @@ void tzc_configure_region(uint32_t filters,
{
assert
(
tzc
.
base
);
VERBOSE
(
"TZC : Configuring region (filters=0x%x, region=%d, ...
\n
"
,
filters
,
region
);
VERBOSE
(
"TZC : ... base=0x%lx, top=0x%lx, ...
\n
"
,
region_base
,
region_top
);
VERBOSE
(
"TZC : ... sec_attr=0x%x, ns_devs=0x%x)
\n
"
,
sec_attr
,
ns_device_access
);
/* Do range checks on filters and regions. */
assert
(((
filters
>>
tzc
.
num_filters
)
==
0
)
&&
(
region
<
tzc
.
num_regions
));
...
...
drivers/console/console.S
0 → 100644
View file @
4731e8f0
/*
*
Copyright
(
c
)
2015
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
*
*
Redistributions
of
source
code
must
retain
the
above
copyright
notice
,
this
*
list
of
conditions
and
the
following
disclaimer
.
*
*
Redistributions
in
binary
form
must
reproduce
the
above
copyright
notice
,
*
this
list
of
conditions
and
the
following
disclaimer
in
the
documentation
*
and
/
or
other
materials
provided
with
the
distribution
.
*
*
Neither
the
name
of
ARM
nor
the
names
of
its
contributors
may
be
used
*
to
endorse
or
promote
products
derived
from
this
software
without
specific
*
prior
written
permission
.
*
*
THIS
SOFTWARE
IS
PROVIDED
BY
THE
COPYRIGHT
HOLDERS
AND
CONTRIBUTORS
"AS IS"
*
AND
ANY
EXPRESS
OR
IMPLIED
WARRANTIES
,
INCLUDING
,
BUT
NOT
LIMITED
TO
,
THE
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
FOR
A
PARTICULAR
PURPOSE
*
ARE
DISCLAIMED
.
IN
NO
EVENT
SHALL
THE
COPYRIGHT
HOLDER
OR
CONTRIBUTORS
BE
*
LIABLE
FOR
ANY
DIRECT
,
INDIRECT
,
INCIDENTAL
,
SPECIAL
,
EXEMPLARY
,
OR
*
CONSEQUENTIAL
DAMAGES
(
INCLUDING
,
BUT
NOT
LIMITED
TO
,
PROCUREMENT
OF
*
SUBSTITUTE
GOODS
OR
SERVICES
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
*
INTERRUPTION
)
HOWEVER
CAUSED
AND
ON
ANY
THEORY
OF
LIABILITY
,
WHETHER
IN
*
CONTRACT
,
STRICT
LIABILITY
,
OR
TORT
(
INCLUDING
NEGLIGENCE
OR
OTHERWISE
)
*
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
*
POSSIBILITY
OF
SUCH
DAMAGE
.
*/
#include <asm_macros.S>
.
globl
console_init
.
globl
console_putc
.
globl
console_getc
/
*
*
The
console
base
is
in
the
data
section
and
not
in
.
bss
*
even
though
it
is
zero
-
init
.
In
particular
,
this
allows
*
the
console
functions
to
start
using
this
variable
before
*
the
runtime
memory
is
initialized
for
images
which
do
not
*
need
to
copy
the
.
data
section
from
ROM
to
RAM
.
*/
.
section
.
data.
console_base
; .align 3
console_base
:
.
quad
0x0
/
*
-----------------------------------------------
*
int
console_init
(
unsigned
long
base_addr
,
*
unsigned
int
uart_clk
,
unsigned
int
baud_rate
)
*
Function
to
initialize
the
console
without
a
*
C
Runtime
to
print
debug
information
.
It
saves
*
the
console
base
to
the
data
section
.
*
In
:
x0
-
console
base
address
*
w1
-
Uart
clock
in
Hz
*
w2
-
Baud
rate
*
out
:
return
1
on
success
else
0
on
error
*
Clobber
list
:
x1
-
x3
*
-----------------------------------------------
*/
func
console_init
/
*
Check
the
input
base
address
*/
cbz
x0
,
init_fail
adrp
x3
,
console_base
str
x0
,
[
x3
,
:
lo12
:
console_base
]
b
console_core_init
init_fail
:
ret
endfunc
console_init
/
*
---------------------------------------------
*
int
console_putc
(
int
c
)
*
Function
to
output
a
character
over
the
*
console
.
It
returns
the
character
printed
on
*
success
or
-
1
on
error
.
*
In
:
x0
-
character
to
be
printed
*
Out
:
return
-
1
on
error
else
return
character
.
*
Clobber
list
:
x1
,
x2
*
---------------------------------------------
*/
func
console_putc
adrp
x2
,
console_base
ldr
x1
,
[
x2
,
:
lo12
:
console_base
]
b
console_core_putc
endfunc
console_putc
/
*
---------------------------------------------
*
int
console_getc
(
void
)
*
Function
to
get
a
character
from
the
console
.
*
It
returns
the
character
grabbed
on
success
*
or
-
1
on
error
.
*
Clobber
list
:
x0
,
x1
*
---------------------------------------------
*/
func
console_getc
adrp
x1
,
console_base
ldr
x0
,
[
x1
,
:
lo12
:
console_base
]
b
console_core_getc
endfunc
console_getc
drivers/console/skeleton_console.S
0 → 100644
View file @
4731e8f0
/*
*
Copyright
(
c
)
2015
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
*
*
Redistributions
of
source
code
must
retain
the
above
copyright
notice
,
this
*
list
of
conditions
and
the
following
disclaimer
.
*
*
Redistributions
in
binary
form
must
reproduce
the
above
copyright
notice
,
*
this
list
of
conditions
and
the
following
disclaimer
in
the
documentation
*
and
/
or
other
materials
provided
with
the
distribution
.
*
*
Neither
the
name
of
ARM
nor
the
names
of
its
contributors
may
be
used
*
to
endorse
or
promote
products
derived
from
this
software
without
specific
*
prior
written
permission
.
*
*
THIS
SOFTWARE
IS
PROVIDED
BY
THE
COPYRIGHT
HOLDERS
AND
CONTRIBUTORS
"AS IS"
*
AND
ANY
EXPRESS
OR
IMPLIED
WARRANTIES
,
INCLUDING
,
BUT
NOT
LIMITED
TO
,
THE
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
FOR
A
PARTICULAR
PURPOSE
*
ARE
DISCLAIMED
.
IN
NO
EVENT
SHALL
THE
COPYRIGHT
HOLDER
OR
CONTRIBUTORS
BE
*
LIABLE
FOR
ANY
DIRECT
,
INDIRECT
,
INCIDENTAL
,
SPECIAL
,
EXEMPLARY
,
OR
*
CONSEQUENTIAL
DAMAGES
(
INCLUDING
,
BUT
NOT
LIMITED
TO
,
PROCUREMENT
OF
*
SUBSTITUTE
GOODS
OR
SERVICES
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
*
INTERRUPTION
)
HOWEVER
CAUSED
AND
ON
ANY
THEORY
OF
LIABILITY
,
WHETHER
IN
*
CONTRACT
,
STRICT
LIABILITY
,
OR
TORT
(
INCLUDING
NEGLIGENCE
OR
OTHERWISE
)
*
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
*
POSSIBILITY
OF
SUCH
DAMAGE
.
*/
#include <asm_macros.S>
/
*
*
This
file
contains
a
skeleton
console
implementation
that
can
*
be
used
as
basis
for
a
real
console
implementation
by
platforms
*
that
do
not
contain
PL011
hardware
.
*/
.
globl
console_core_init
.
globl
console_core_putc
.
globl
console_core_getc
/
*
-----------------------------------------------
*
int
console_core_init
(
unsigned
long
base_addr
,
*
unsigned
int
uart_clk
,
unsigned
int
baud_rate
)
*
Function
to
initialize
the
console
without
a
*
C
Runtime
to
print
debug
information
.
This
*
function
will
be
accessed
by
console_init
and
*
crash
reporting
.
*
In
:
x0
-
console
base
address
*
w1
-
Uart
clock
in
Hz
*
w2
-
Baud
rate
*
Out
:
return
1
on
success
else
0
on
error
*
Clobber
list
:
x1
,
x2
*
-----------------------------------------------
*/
func
console_core_init
/
*
Check
the
input
base
address
*/
cbz
x0
,
core_init_fail
/
*
Check
baud
rate
and
uart
clock
for
sanity
*/
cbz
w1
,
core_init_fail
cbz
w2
,
core_init_fail
/
*
Insert
implementation
here
*/
mov
w0
,
#
1
ret
core_init_fail
:
mov
w0
,
wzr
ret
endfunc
console_core_init
/
*
--------------------------------------------------------
*
int
console_core_putc
(
int
c
,
unsigned
long
base_addr
)
*
Function
to
output
a
character
over
the
console
.
It
*
returns
the
character
printed
on
success
or
-
1
on
error
.
*
In
:
w0
-
character
to
be
printed
*
x1
-
console
base
address
*
Out
:
return
-
1
on
error
else
return
character
.
*
Clobber
list
:
x2
*
--------------------------------------------------------
*/
func
console_core_putc
/
*
Check
the
input
parameter
*/
cbz
x1
,
putc_error
/
*
Insert
implementation
here
*/
ret
putc_error
:
mov
w0
,
#-
1
ret
endfunc
console_core_putc
/
*
---------------------------------------------
*
int
console_core_getc
(
unsigned
long
base_addr
)
*
Function
to
get
a
character
from
the
console
.
*
It
returns
the
character
grabbed
on
success
*
or
-
1
on
error
.
*
In
:
x0
-
console
base
address
*
Clobber
list
:
x0
,
x1
*
---------------------------------------------
*/
func
console_core_getc
cbz
x0
,
getc_error
/
*
Insert
implementation
here
*/
ret
getc_error
:
mov
w0
,
#-
1
ret
endfunc
console_core_getc
include/common/asm_macros.S
View file @
4731e8f0
/*
*
Copyright
(
c
)
2013
-
201
4
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2013
-
201
5
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
...
...
@@ -27,6 +27,8 @@
*
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
*
POSSIBILITY
OF
SUCH
DAMAGE
.
*/
#ifndef __ASM_MACROS_S__
#define __ASM_MACROS_S__
#include <arch.h>
...
...
@@ -204,3 +206,5 @@ wait_for_entrypoint:
_mov_imm16
\
_reg
,
(
\
_val
),
48
.
endif
.
endm
#endif /* __ASM_MACROS_S__ */
include/common/assert_macros.S
View file @
4731e8f0
/*
*
Copyright
(
c
)
2014
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2014
-
2015
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
...
...
@@ -27,6 +27,8 @@
*
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
*
POSSIBILITY
OF
SUCH
DAMAGE
.
*/
#ifndef __ASSERT_MACROS_S__
#define __ASSERT_MACROS_S__
/
*
*
Assembler
macro
to
enable
asm_assert
.
Use
this
macro
wherever
...
...
@@ -47,3 +49,5 @@
mov
x1
,
__LINE__
;\
b
asm_assert
;\
300
:
#endif /* __ASSERT_MACROS_S__ */
include/common/bl_common.h
View file @
4731e8f0
...
...
@@ -110,6 +110,26 @@
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
/*
* Declarations of linker defined symbols to help determine memory layout of
* BL images
*/
extern
unsigned
long
__RO_START__
;
extern
unsigned
long
__RO_END__
;
#if IMAGE_BL2
extern
unsigned
long
__BL2_END__
;
#elif IMAGE_BL31
extern
unsigned
long
__BL31_END__
;
#elif IMAGE_BL32
extern
unsigned
long
__BL32_END__
;
#endif
/* IMAGE_BLX */
#if USE_COHERENT_MEM
extern
unsigned
long
__COHERENT_RAM_START__
;
extern
unsigned
long
__COHERENT_RAM_END__
;
#endif
/*******************************************************************************
* Structure used for telling the next BL how much of a particular type of
* memory is available for its use and how much is already used.
...
...
include/drivers/arm/tzc400.h
View file @
4731e8f0
/*
* Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014
-2015
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -31,7 +31,6 @@
#ifndef __TZC400_H__
#define __TZC400_H__
#include <stdint.h>
#define BUILD_CONFIG_OFF 0x000
#define ACTION_OFF 0x004
...
...
@@ -148,9 +147,13 @@
#define TZC_REGION_ACCESS_RDWR(id) \
(TZC_REGION_ACCESS_RD(id) | TZC_REGION_ACCESS_WR(id))
/* Filters are bit mapped 0 to 3. */
#define TZC400_COMPONENT_ID 0xb105f00d
#ifndef __ASSEMBLY__
#include <stdint.h>
/*******************************************************************************
* Function & variable prototypes
******************************************************************************/
...
...
@@ -187,6 +190,8 @@ typedef enum {
void
tzc_init
(
uint64_t
base
);
void
tzc_configure_region0
(
tzc_region_attributes_t
sec_attr
,
uint32_t
ns_device_access
);
void
tzc_configure_region
(
uint32_t
filters
,
uint8_t
region
,
uint64_t
region_base
,
...
...
@@ -197,5 +202,6 @@ void tzc_enable_filters(void);
void
tzc_disable_filters
(
void
);
void
tzc_set_action
(
tzc_action_t
action
);
#endif
/* __ASSEMBLY__ */
#endif
/* __TZC400__ */
include/lib/aarch64/arch.h
View file @
4731e8f0
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -302,6 +302,23 @@
((endian) & SPSR_E_MASK) << SPSR_E_SHIFT | \
((aif) & SPSR_AIF_MASK) << SPSR_AIF_SHIFT)
/*
* CTR_EL0 definitions
*/
#define CTR_CWG_SHIFT 24
#define CTR_CWG_MASK 0xf
#define CTR_ERG_SHIFT 20
#define CTR_ERG_MASK 0xf
#define CTR_DMINLINE_SHIFT 16
#define CTR_DMINLINE_MASK 0xf
#define CTR_L1IP_SHIFT 14
#define CTR_L1IP_MASK 0x3
#define CTR_IMINLINE_SHIFT 0
#define CTR_IMINLINE_MASK 0xf
#define MAX_CACHE_LINE_SIZE 0x800
/* 2KB */
#define SIZE_FROM_LOG2_WORDS(n) (4 << (n))
/* Physical timer control register bit fields shifts and masks */
#define CNTP_CTL_ENABLE_SHIFT 0
...
...
include/lib/aarch64/arch_helpers.h
View file @
4731e8f0
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
5
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -281,6 +281,8 @@ DEFINE_SYSREG_RW_FUNCS(vmpidr_el2)
DEFINE_SYSREG_READ_FUNC
(
isr_el1
)
DEFINE_SYSREG_READ_FUNC
(
ctr_el0
)
/* GICv3 System Registers */
DEFINE_RENAME_SYSREG_RW_FUNCS
(
icc_sre_el1
,
ICC_SRE_EL1
)
...
...
include/lib/cpus/aarch64/cpu_macros.S
View file @
4731e8f0
/*
*
Copyright
(
c
)
2014
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2014
-
2015
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
...
...
@@ -27,6 +27,8 @@
*
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
*
POSSIBILITY
OF
SUCH
DAMAGE
.
*/
#ifndef __CPU_MACROS_S__
#define __CPU_MACROS_S__
#include <arch.h>
...
...
@@ -80,3 +82,5 @@ CPU_OPS_SIZE = .
.
quad
\
_name
\
()
_cpu_reg_dump
#endif
.
endm
#endif /* __CPU_MACROS_S__ */
Prev
1
2
3
4
5
6
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment