mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 02:24:18 +00:00
Merge pull request #78 from jeenuv:tf-issues-148
This commit is contained in:
commit
ec786cbca9
4 changed files with 109 additions and 38 deletions
88
Makefile
88
Makefile
|
@ -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
|
||||||
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 \
|
||||||
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/)
|
||||||
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
|
||||||
.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 \
|
||||||
${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
|
||||||
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
|
||||||
|
|
|
@ -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
|
||||||
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
|
||||||
stp x14, x15, [x0, #CTX_CNTKCTL_EL1]
|
str x15, [x0, #CTX_FP_FPEXC32_EL2]
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -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
|
||||||
msr cntv_ctl_el0, x12
|
msr cntv_ctl_el0, x12
|
||||||
msr cntv_cval_el0, x13
|
msr cntv_cval_el0, x13
|
||||||
|
|
||||||
ldp x14, x15, [x0, #CTX_CNTKCTL_EL1]
|
ldr 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 */
|
||||||
|
|
|
@ -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:
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -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 @@
|
||||||
#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'
|
||||||
|
|
Loading…
Add table
Reference in a new issue