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
ec786cbc
Commit
ec786cbc
authored
May 19, 2014
by
Andrew Thoelke
Browse files
Merge pull request #78 from jeenuv:tf-issues-148
parents
a43d431b
2da8d8bf
Changes
4
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
ec786cbc
...
@@ -28,13 +28,26 @@
...
@@ -28,13 +28,26 @@
# POSSIBILITY OF SUCH DAMAGE.
# POSSIBILITY OF SUCH DAMAGE.
#
#
# Decrease the verbosity of the make script
#
# can be made verbose by passing V=1 at the make command line
# Default values for build configurations
ifdef
V
#
KBUILD_VERBOSE
=
${V}
else
# Build verbosity
KBUILD_VERBOSE
=
0
V
:=
0
endif
# Debug build
DEBUG
:=
0
# Build architecture
ARCH
:=
aarch64
# Build platform
DEFAULT_PLAT
:=
fvp
PLAT
:=
${DEFAULT_PLAT}
# SPD choice
SPD
:=
none
# Base commit to perform code check on
BASE_COMMIT
:=
origin/master
# NS timer register save and restore
NS_TIMER_SWITCH
:=
0
# Checkpatch ignores
# Checkpatch ignores
CHECK_IGNORE
=
--ignore
COMPLEX_MACRO
CHECK_IGNORE
=
--ignore
COMPLEX_MACRO
...
@@ -42,17 +55,14 @@ CHECK_IGNORE = --ignore COMPLEX_MACRO
...
@@ -42,17 +55,14 @@ CHECK_IGNORE = --ignore COMPLEX_MACRO
CHECKPATCH_ARGS
=
--no-tree
--no-signoff
${CHECK_IGNORE}
CHECKPATCH_ARGS
=
--no-tree
--no-signoff
${CHECK_IGNORE}
CHECKCODE_ARGS
=
--no-patch
--no-tree
--no-signoff
${CHECK_IGNORE}
CHECKCODE_ARGS
=
--no-patch
--no-tree
--no-signoff
${CHECK_IGNORE}
ifeq
"
${
KBUILD_VERBOSE}" "0"
ifeq
(
${
V},0)
Q
=
@
Q
=
@
CHECKCODE_ARGS
+=
--no-summary
--terse
CHECKCODE_ARGS
+=
--no-summary
--terse
else
else
Q
=
Q
=
endif
endif
export
Q
export
Q
DEBUG
?=
0
ifneq
(${DEBUG}, 0)
ifneq
(${DEBUG}, 0)
BUILD_TYPE
:=
debug
BUILD_TYPE
:=
debug
else
else
...
@@ -69,14 +79,6 @@ BL_COMMON_SOURCES := common/bl_common.c \
...
@@ -69,14 +79,6 @@ BL_COMMON_SOURCES := common/bl_common.c \
lib/io_storage.c
\
lib/io_storage.c
\
plat/common/aarch64/platform_helpers.S
plat/common/aarch64/platform_helpers.S
ARCH
?=
aarch64
# By default, build fvp platform
DEFAULT_PLAT
:=
fvp
PLAT
?=
${DEFAULT_PLAT}
# By default, build no SPD component
SPD
?=
none
BUILD_BASE
:=
./build
BUILD_BASE
:=
./build
BUILD_PLAT
:=
${BUILD_BASE}
/
${PLAT}
/
${BUILD_TYPE}
BUILD_PLAT
:=
${BUILD_BASE}
/
${PLAT}
/
${BUILD_TYPE}
...
@@ -84,6 +86,19 @@ PLATFORMS := $(shell ls -I common plat/)
...
@@ -84,6 +86,19 @@ PLATFORMS := $(shell ls -I common plat/)
SPDS
:=
$(
shell
ls
-I
none services/spd
)
SPDS
:=
$(
shell
ls
-I
none services/spd
)
HELP_PLATFORMS
:=
$(
shell
echo
${PLATFORMS}
|
sed
's/ /|/g'
)
HELP_PLATFORMS
:=
$(
shell
echo
${PLATFORMS}
|
sed
's/ /|/g'
)
# Convenience function for adding build definitions
# $(eval $(call add_define,FOO)) will have:
# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise
define
add_define
DEFINES
+=
-D
$(1)
$(
if
$(
value
$(1)
)
,
=
$(
value
$(1)
)
,
)
endef
# Convenience function for verifying option has a boolean value
# $(eval $(call assert_boolean,FOO)) will assert FOO is 0 or 1
define
assert_boolean
$(and
$(patsubst
0,,$(value
$(1))),$(patsubst
1,,$(value
$(1))),$(error
$(1)
must
be
boolean))
endef
ifeq
(${PLAT},)
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
endif
...
@@ -132,7 +147,6 @@ endif
...
@@ -132,7 +147,6 @@ endif
.PHONY
:
all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip
.PHONY
:
all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip
.SUFFIXES
:
.SUFFIXES
:
INCLUDES
+=
-Iinclude
/bl1
\
INCLUDES
+=
-Iinclude
/bl1
\
-Iinclude
/bl2
\
-Iinclude
/bl2
\
-Iinclude
/bl31
\
-Iinclude
/bl31
\
...
@@ -150,28 +164,32 @@ INCLUDES += -Iinclude/bl1 \
...
@@ -150,28 +164,32 @@ INCLUDES += -Iinclude/bl1 \
${PLAT_INCLUDES}
\
${PLAT_INCLUDES}
\
${SPD_INCLUDES}
${SPD_INCLUDES}
# Process DEBUG flag
$(eval
$(call
assert_boolean,DEBUG))
$(eval
$(call
add_define,DEBUG))
ifeq
(${DEBUG},0)
$(eval
$(call
add_define,NDEBUG))
else
CFLAGS
+=
-g
ASFLAGS
+=
-g
-Wa
,--gdwarf-2
endif
# Process NS_TIMER_SWITCH flag
$(eval
$(call
assert_boolean,NS_TIMER_SWITCH))
$(eval
$(call
add_define,NS_TIMER_SWITCH))
ASFLAGS
+=
-nostdinc
-ffreestanding
-Wa
,--fatal-warnings
\
ASFLAGS
+=
-nostdinc
-ffreestanding
-Wa
,--fatal-warnings
\
-mgeneral-regs-only
-D__ASSEMBLY__
${INCLUDES}
\
-mgeneral-regs-only
-D__ASSEMBLY__
\
-DDEBUG
=
${DEBUG
}
${DEFINES}
${INCLUDES
}
CFLAGS
:
=
-nostdinc
-pedantic
-ffreestanding
-Wall
\
CFLAGS
+
=
-nostdinc
-pedantic
-ffreestanding
-Wall
\
-Werror
-mgeneral-regs-only
-std
=
c99
-c
-Os
\
-Werror
-mgeneral-regs-only
-std
=
c99
-c
-Os
\
-DDEBUG
=
${DEBUG
}
${INCLUDES}
${CFLAGS}
${DEFINES
}
${INCLUDES}
CFLAGS
+=
-ffunction-sections
-fdata-sections
CFLAGS
+=
-ffunction-sections
-fdata-sections
LDFLAGS
+=
--fatal-warnings
-O1
LDFLAGS
+=
--fatal-warnings
-O1
LDFLAGS
+=
--gc-sections
LDFLAGS
+=
--gc-sections
ifneq
(${DEBUG}, 0)
#CFLAGS += -g -O0
CFLAGS
+=
-g
# -save-temps -fverbose-asm
ASFLAGS
+=
-g
-Wa
,--gdwarf-2
else
CFLAGS
+=
-DNDEBUG
=
1
endif
CC
:=
${CROSS_COMPILE}
gcc
CC
:=
${CROSS_COMPILE}
gcc
CPP
:=
${CROSS_COMPILE}
cpp
CPP
:=
${CROSS_COMPILE}
cpp
AS
:=
${CROSS_COMPILE}
gcc
AS
:=
${CROSS_COMPILE}
gcc
...
@@ -182,8 +200,6 @@ OD := ${CROSS_COMPILE}objdump
...
@@ -182,8 +200,6 @@ OD := ${CROSS_COMPILE}objdump
NM
:=
${CROSS_COMPILE}
nm
NM
:=
${CROSS_COMPILE}
nm
PP
:=
${CROSS_COMPILE}
gcc
-E
${CFLAGS}
PP
:=
${CROSS_COMPILE}
gcc
-E
${CFLAGS}
BASE_COMMIT
?=
origin/master
# Variables for use with Firmware Image Package
# Variables for use with Firmware Image Package
FIPTOOLPATH
?=
tools/fip_create
FIPTOOLPATH
?=
tools/fip_create
FIPTOOL
?=
${FIPTOOLPATH}
/fip_create
FIPTOOL
?=
${FIPTOOLPATH}
/fip_create
...
...
bl31/aarch64/context.S
View file @
ec786cbc
...
@@ -172,6 +172,8 @@ func el1_sysregs_context_save
...
@@ -172,6 +172,8 @@ func el1_sysregs_context_save
mrs
x9
,
vbar_el1
mrs
x9
,
vbar_el1
stp
x17
,
x9
,
[
x0
,
#
CTX_CONTEXTIDR_EL1
]
stp
x17
,
x9
,
[
x0
,
#
CTX_CONTEXTIDR_EL1
]
/
*
Save
NS
timer
registers
if
the
build
has
instructed
so
*/
#if NS_TIMER_SWITCH
mrs
x10
,
cntp_ctl_el0
mrs
x10
,
cntp_ctl_el0
mrs
x11
,
cntp_cval_el0
mrs
x11
,
cntp_cval_el0
stp
x10
,
x11
,
[
x0
,
#
CTX_CNTP_CTL_EL0
]
stp
x10
,
x11
,
[
x0
,
#
CTX_CNTP_CTL_EL0
]
...
@@ -181,8 +183,11 @@ func el1_sysregs_context_save
...
@@ -181,8 +183,11 @@ func el1_sysregs_context_save
stp
x12
,
x13
,
[
x0
,
#
CTX_CNTV_CTL_EL0
]
stp
x12
,
x13
,
[
x0
,
#
CTX_CNTV_CTL_EL0
]
mrs
x14
,
cntkctl_el1
mrs
x14
,
cntkctl_el1
str
x14
,
[
x0
,
#
CTX_CNTKCTL_EL1
]
#endif
mrs
x15
,
fpexc32_el2
mrs
x15
,
fpexc32_el2
st
p
x14
,
x15
,
[
x0
,
#
CTX_
CNTKCTL
_EL
1
]
st
r
x15
,
[
x0
,
#
CTX_
FP_FPEXC32
_EL
2
]
ret
ret
...
@@ -253,6 +258,8 @@ func el1_sysregs_context_restore
...
@@ -253,6 +258,8 @@ func el1_sysregs_context_restore
msr
contextidr_el1
,
x17
msr
contextidr_el1
,
x17
msr
vbar_el1
,
x9
msr
vbar_el1
,
x9
/
*
Restore
NS
timer
registers
if
the
build
has
instructed
so
*/
#if NS_TIMER_SWITCH
ldp
x10
,
x11
,
[
x0
,
#
CTX_CNTP_CTL_EL0
]
ldp
x10
,
x11
,
[
x0
,
#
CTX_CNTP_CTL_EL0
]
msr
cntp_ctl_el0
,
x10
msr
cntp_ctl_el0
,
x10
msr
cntp_cval_el0
,
x11
msr
cntp_cval_el0
,
x11
...
@@ -261,8 +268,11 @@ func el1_sysregs_context_restore
...
@@ -261,8 +268,11 @@ func el1_sysregs_context_restore
msr
cntv_ctl_el0
,
x12
msr
cntv_ctl_el0
,
x12
msr
cntv_cval_el0
,
x13
msr
cntv_cval_el0
,
x13
ld
p
x14
,
x15
,
[
x0
,
#
CTX_CNTKCTL_EL1
]
ld
r
x14
,
[
x0
,
#
CTX_CNTKCTL_EL1
]
msr
cntkctl_el1
,
x14
msr
cntkctl_el1
,
x14
#endif
ldr
x15
,
[
x0
,
#
CTX_FP_FPEXC32_EL2
]
msr
fpexc32_el2
,
x15
msr
fpexc32_el2
,
x15
/
*
No
explict
ISB
required
here
as
ERET
covers
it
*/
/
*
No
explict
ISB
required
here
as
ERET
covers
it
*/
...
...
docs/user-guide.md
View file @
ec786cbc
...
@@ -83,6 +83,9 @@ To build the software for the FVPs, follow these steps:
...
@@ -83,6 +83,9 @@ To build the software for the FVPs, follow these steps:
BL33=<path-to>/<bl33_image> \
BL33=<path-to>/<bl33_image> \
make PLAT=fvp all fip
make PLAT=fvp all fip
See the "Summary of build options" for information on available build
options.
By default this produces a release version of the build. To produce a debug
By default this produces a release version of the build. To produce a debug
version instead, refer to the "Debugging options" section below. UEFI can be
version instead, refer to the "Debugging options" section below. UEFI can be
used as the BL3-3 image, refer to the "Obtaining the normal world software"
used as the BL3-3 image, refer to the "Obtaining the normal world software"
...
@@ -120,6 +123,39 @@ To build the software for the FVPs, follow these steps:
...
@@ -120,6 +123,39 @@ To build the software for the FVPs, follow these steps:
make realclean
make realclean
### Summary of build options
ARM Trusted Firmware build system supports the following build options. Unless
mentioned otherwise, these options are expected to be specified at the build
command line and are not to be modified in any component makefiles. Note that
the build system doesn't track dependency for build options. Therefore, if any
of the build options are changed from a previous build, a clean build must be
performed.
*
`BL33`
: Path to BL33 image in the host file system. This is mandatory for
`fip`
target
*
`CROSS_COMPILE`
: Prefix to tool chain binaries. Please refer to examples in
this document for usage
*
`DEBUG`
: Chooses between a debug and release build. It can take either 0
(release) or 1 (debug) as values. 0 is the default
*
`NS_TIMER_SWITCH`
: Enable save and restore for non-secure timer register
contents upon world switch. It can take either 0 (don't save and restore) or
1 (do save and restore). 0 is the default. An SPD could set this to 1 if it
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`
*
`SPD`
: Choose a Secure Payload Dispatcher component to be built into the
Trusted Firmware. The value should be the path to the directory containing
SPD source; the directory is expected to contain
`spd.mk`
makefile
*
`V`
: Verbose build. If assigned anything other than 0, the build commands
are printed. Default is 0
### Creating a Firmware Image Package
### Creating a Firmware Image Package
...
...
include/bl31/context.h
View file @
ec786cbc
...
@@ -127,6 +127,11 @@
...
@@ -127,6 +127,11 @@
#define CTX_AFSR1_EL1 0xc8
#define CTX_AFSR1_EL1 0xc8
#define CTX_CONTEXTIDR_EL1 0xd0
#define CTX_CONTEXTIDR_EL1 0xd0
#define CTX_VBAR_EL1 0xd8
#define CTX_VBAR_EL1 0xd8
/*
* If the timer registers aren't saved and restored, we don't have to reserve
* space for them in the context
*/
#if NS_TIMER_SWITCH
#define CTX_CNTP_CTL_EL0 0xe0
#define CTX_CNTP_CTL_EL0 0xe0
#define CTX_CNTP_CVAL_EL0 0xe8
#define CTX_CNTP_CVAL_EL0 0xe8
#define CTX_CNTV_CTL_EL0 0xf0
#define CTX_CNTV_CTL_EL0 0xf0
...
@@ -134,6 +139,10 @@
...
@@ -134,6 +139,10 @@
#define CTX_CNTKCTL_EL1 0x100
#define CTX_CNTKCTL_EL1 0x100
#define CTX_FP_FPEXC32_EL2 0x108
#define CTX_FP_FPEXC32_EL2 0x108
#define CTX_SYSREGS_END 0x110
#define CTX_SYSREGS_END 0x110
#else
#define CTX_FP_FPEXC32_EL2 0xe0
#define CTX_SYSREGS_END 0xf0
#endif
/*******************************************************************************
/*******************************************************************************
* Constants that allow assembler code to access members of and the 'fp_regs'
* Constants that allow assembler code to access members of and the 'fp_regs'
...
...
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