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
a1a44177
Commit
a1a44177
authored
Jul 11, 2014
by
danh-arm
Browse files
Merge pull request #162 from jcastillo-arm/jc/tf-issues/194
Allow FP register context to be optional at build time
parents
ab26147d
0f21c547
Changes
3
Show whitespace changes
Inline
Side-by-side
Makefile
View file @
a1a44177
...
@@ -49,6 +49,8 @@ BASE_COMMIT := origin/master
...
@@ -49,6 +49,8 @@ BASE_COMMIT := origin/master
NS_TIMER_SWITCH
:=
0
NS_TIMER_SWITCH
:=
0
# By default, Bl1 acts as the reset handler, not BL31
# By default, Bl1 acts as the reset handler, not BL31
RESET_TO_BL31
:=
0
RESET_TO_BL31
:=
0
# Include FP registers in cpu context
CTX_INCLUDE_FPREGS
:=
0
# Checkpatch ignores
# Checkpatch ignores
...
@@ -181,6 +183,10 @@ $(eval $(call add_define,NS_TIMER_SWITCH))
...
@@ -181,6 +183,10 @@ $(eval $(call add_define,NS_TIMER_SWITCH))
$(eval
$(call
assert_boolean,RESET_TO_BL31))
$(eval
$(call
assert_boolean,RESET_TO_BL31))
$(eval
$(call
add_define,RESET_TO_BL31))
$(eval
$(call
add_define,RESET_TO_BL31))
# Process CTX_INCLUDE_FPREGS flag
$(eval
$(call
assert_boolean,CTX_INCLUDE_FPREGS))
$(eval
$(call
add_define,CTX_INCLUDE_FPREGS))
ASFLAGS
+=
-nostdinc
-ffreestanding
-Wa
,--fatal-warnings
\
ASFLAGS
+=
-nostdinc
-ffreestanding
-Wa
,--fatal-warnings
\
-Werror
-Wmissing-include-dirs
\
-Werror
-Wmissing-include-dirs
\
-mgeneral-regs-only
-D__ASSEMBLY__
\
-mgeneral-regs-only
-D__ASSEMBLY__
\
...
...
bl31/aarch64/context.S
View file @
a1a44177
...
@@ -293,6 +293,7 @@ func el1_sysregs_context_restore
...
@@ -293,6 +293,7 @@ func el1_sysregs_context_restore
*
TODO
:
Revisit
when
VFP
is
used
in
secure
world
*
TODO
:
Revisit
when
VFP
is
used
in
secure
world
*
-----------------------------------------------------
*
-----------------------------------------------------
*/
*/
#if CTX_INCLUDE_FPREGS
.
global
fpregs_context_save
.
global
fpregs_context_save
func
fpregs_context_save
func
fpregs_context_save
stp
q0
,
q1
,
[
x0
,
#
CTX_FP_Q0
]
stp
q0
,
q1
,
[
x0
,
#
CTX_FP_Q0
]
...
@@ -368,3 +369,4 @@ func fpregs_context_restore
...
@@ -368,3 +369,4 @@ func fpregs_context_restore
*/
*/
ret
ret
#endif /* CTX_INCLUDE_FPREGS */
include/bl31/context.h
View file @
a1a44177
...
@@ -148,6 +148,7 @@
...
@@ -148,6 +148,7 @@
* 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'
* structure at their correct offsets.
* structure at their correct offsets.
******************************************************************************/
******************************************************************************/
#if CTX_INCLUDE_FPREGS
#define CTX_FPREGS_OFFSET (CTX_SYSREGS_OFFSET + CTX_SYSREGS_END)
#define CTX_FPREGS_OFFSET (CTX_SYSREGS_OFFSET + CTX_SYSREGS_END)
#define CTX_FP_Q0 0x0
#define CTX_FP_Q0 0x0
#define CTX_FP_Q1 0x10
#define CTX_FP_Q1 0x10
...
@@ -184,6 +185,7 @@
...
@@ -184,6 +185,7 @@
#define CTX_FP_FPSR 0x200
#define CTX_FP_FPSR 0x200
#define CTX_FP_FPCR 0x208
#define CTX_FP_FPCR 0x208
#define CTX_FPREGS_END 0x210
#define CTX_FPREGS_END 0x210
#endif
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
...
@@ -204,7 +206,9 @@
...
@@ -204,7 +206,9 @@
/* Constants to determine the size of individual context structures */
/* Constants to determine the size of individual context structures */
#define CTX_GPREG_ALL (CTX_GPREGS_END >> DWORD_SHIFT)
#define CTX_GPREG_ALL (CTX_GPREGS_END >> DWORD_SHIFT)
#define CTX_SYSREG_ALL (CTX_SYSREGS_END >> DWORD_SHIFT)
#define CTX_SYSREG_ALL (CTX_SYSREGS_END >> DWORD_SHIFT)
#if CTX_INCLUDE_FPREGS
#define CTX_FPREG_ALL (CTX_FPREGS_END >> DWORD_SHIFT)
#define CTX_FPREG_ALL (CTX_FPREGS_END >> DWORD_SHIFT)
#endif
#define CTX_EL3STATE_ALL (CTX_EL3STATE_END >> DWORD_SHIFT)
#define CTX_EL3STATE_ALL (CTX_EL3STATE_END >> DWORD_SHIFT)
/*
/*
...
@@ -228,7 +232,9 @@ DEFINE_REG_STRUCT(el1_sys_regs, CTX_SYSREG_ALL);
...
@@ -228,7 +232,9 @@ DEFINE_REG_STRUCT(el1_sys_regs, CTX_SYSREG_ALL);
* the floating point state during switches from one security state to
* the floating point state during switches from one security state to
* another.
* another.
*/
*/
#if CTX_INCLUDE_FPREGS
DEFINE_REG_STRUCT
(
fp_regs
,
CTX_FPREG_ALL
);
DEFINE_REG_STRUCT
(
fp_regs
,
CTX_FPREG_ALL
);
#endif
/*
/*
* Miscellaneous registers used by EL3 firmware to maintain its state
* Miscellaneous registers used by EL3 firmware to maintain its state
...
@@ -257,12 +263,16 @@ typedef struct cpu_context {
...
@@ -257,12 +263,16 @@ typedef struct cpu_context {
gp_regs_t
gpregs_ctx
;
gp_regs_t
gpregs_ctx
;
el3_state_t
el3state_ctx
;
el3_state_t
el3state_ctx
;
el1_sys_regs_t
sysregs_ctx
;
el1_sys_regs_t
sysregs_ctx
;
#if CTX_INCLUDE_FPREGS
fp_regs_t
fpregs_ctx
;
fp_regs_t
fpregs_ctx
;
#endif
}
cpu_context_t
;
}
cpu_context_t
;
/* Macros to access members of the 'cpu_context_t' structure */
/* Macros to access members of the 'cpu_context_t' structure */
#define get_el3state_ctx(h) (&((cpu_context_t *) h)->el3state_ctx)
#define get_el3state_ctx(h) (&((cpu_context_t *) h)->el3state_ctx)
#if CTX_INCLUDE_FPREGS
#define get_fpregs_ctx(h) (&((cpu_context_t *) h)->fpregs_ctx)
#define get_fpregs_ctx(h) (&((cpu_context_t *) h)->fpregs_ctx)
#endif
#define get_sysregs_ctx(h) (&((cpu_context_t *) h)->sysregs_ctx)
#define get_sysregs_ctx(h) (&((cpu_context_t *) h)->sysregs_ctx)
#define get_gpregs_ctx(h) (&((cpu_context_t *) h)->gpregs_ctx)
#define get_gpregs_ctx(h) (&((cpu_context_t *) h)->gpregs_ctx)
...
@@ -275,8 +285,10 @@ CASSERT(CTX_GPREGS_OFFSET == __builtin_offsetof(cpu_context_t, gpregs_ctx), \
...
@@ -275,8 +285,10 @@ CASSERT(CTX_GPREGS_OFFSET == __builtin_offsetof(cpu_context_t, gpregs_ctx), \
assert_core_context_gp_offset_mismatch
);
assert_core_context_gp_offset_mismatch
);
CASSERT
(
CTX_SYSREGS_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
sysregs_ctx
),
\
CASSERT
(
CTX_SYSREGS_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
sysregs_ctx
),
\
assert_core_context_sys_offset_mismatch
);
assert_core_context_sys_offset_mismatch
);
#if CTX_INCLUDE_FPREGS
CASSERT
(
CTX_FPREGS_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
fpregs_ctx
),
\
CASSERT
(
CTX_FPREGS_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
fpregs_ctx
),
\
assert_core_context_fp_offset_mismatch
);
assert_core_context_fp_offset_mismatch
);
#endif
CASSERT
(
CTX_EL3STATE_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
el3state_ctx
),
\
CASSERT
(
CTX_EL3STATE_OFFSET
==
__builtin_offsetof
(
cpu_context_t
,
el3state_ctx
),
\
assert_core_context_el3state_offset_mismatch
);
assert_core_context_el3state_offset_mismatch
);
...
@@ -323,12 +335,16 @@ void el3_sysregs_context_save(el3_state_t *regs);
...
@@ -323,12 +335,16 @@ void el3_sysregs_context_save(el3_state_t *regs);
void
el3_sysregs_context_restore
(
el3_state_t
*
regs
);
void
el3_sysregs_context_restore
(
el3_state_t
*
regs
);
void
el1_sysregs_context_save
(
el1_sys_regs_t
*
regs
);
void
el1_sysregs_context_save
(
el1_sys_regs_t
*
regs
);
void
el1_sysregs_context_restore
(
el1_sys_regs_t
*
regs
);
void
el1_sysregs_context_restore
(
el1_sys_regs_t
*
regs
);
#if CTX_INCLUDE_FPREGS
void
fpregs_context_save
(
fp_regs_t
*
regs
);
void
fpregs_context_save
(
fp_regs_t
*
regs
);
void
fpregs_context_restore
(
fp_regs_t
*
regs
);
void
fpregs_context_restore
(
fp_regs_t
*
regs
);
#endif
#undef CTX_SYSREG_ALL
#undef CTX_SYSREG_ALL
#undef CTX_FP_ALL
#if CTX_INCLUDE_FPREGS
#undef CTX_FPREG_ALL
#endif
#undef CTX_GPREG_ALL
#undef CTX_GPREG_ALL
#undef CTX_EL3STATE_ALL
#undef CTX_EL3STATE_ALL
...
...
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