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
d9b1128b
Commit
d9b1128b
authored
Jul 28, 2014
by
danh-arm
Browse files
Merge pull request #169 from achingupta/ag/tf-issues#198
Ag/tf issues#198
parents
592dd7cb
539a7b38
Changes
26
Hide whitespace changes
Inline
Side-by-side
bl1/aarch64/bl1_entrypoint.S
View file @
d9b1128b
...
...
@@ -130,14 +130,16 @@ func bl1_entrypoint
ldr
x2
,
=
__DATA_SIZE__
bl
memcpy16
/
*
---------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
*
ease
the
pain
of
initializing
the
MMU
and
*
CCI
in
assembler
*
---------------------------------------------
/
*
--------------------------------------------
*
Allocate
a
stack
whose
memory
will
be
marked
*
as
Normal
-
IS
-
WBWA
when
the
MMU
is
enabled
.
*
There
is
no
risk
of
reading
stale
stack
*
memory
after
enabling
the
MMU
as
only
the
*
primary
cpu
is
running
at
the
moment
.
*
--------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_
coherent_
stack
bl
platform_set_stack
/
*
---------------------------------------------
*
Architectural
init
.
can
be
generic
e
.
g
.
...
...
@@ -150,14 +152,6 @@ func bl1_entrypoint
bl
bl1_early_platform_setup
bl
bl1_plat_arch_setup
/
*
---------------------------------------------
*
Give
ourselves
a
stack
allocated
in
Normal
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
--------------------------------------------------
*
Initialize
platform
and
jump
to
our
c
-
entry
point
*
for
this
type
of
reset
.
Panic
if
it
returns
...
...
bl2/aarch64/bl2_entrypoint.S
View file @
d9b1128b
...
...
@@ -96,12 +96,15 @@ func bl2_entrypoint
bl
zeromem16
/
*
--------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
*
ease
the
pain
of
initializing
the
MMU
*
Allocate
a
stack
whose
memory
will
be
marked
*
as
Normal
-
IS
-
WBWA
when
the
MMU
is
enabled
.
*
There
is
no
risk
of
reading
stale
stack
*
memory
after
enabling
the
MMU
as
only
the
*
primary
cpu
is
running
at
the
moment
.
*
--------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_
coherent_
stack
bl
platform_set_stack
/
*
---------------------------------------------
*
Perform
early
platform
setup
&
platform
...
...
@@ -112,14 +115,6 @@ func bl2_entrypoint
bl
bl2_early_platform_setup
bl
bl2_plat_arch_setup
/
*
---------------------------------------------
*
Give
ourselves
a
stack
allocated
in
Normal
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
*
Jump
to
main
function
.
*
---------------------------------------------
...
...
bl31/aarch64/bl31_entrypoint.S
View file @
d9b1128b
...
...
@@ -152,12 +152,15 @@ func bl31_entrypoint
msr
spsel
,
#
0
/
*
--------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
*
ease
the
pain
of
initializing
the
MMU
*
Allocate
a
stack
whose
memory
will
be
marked
*
as
Normal
-
IS
-
WBWA
when
the
MMU
is
enabled
.
*
There
is
no
risk
of
reading
stale
stack
*
memory
after
enabling
the
MMU
as
only
the
*
primary
cpu
is
running
at
the
moment
.
*
--------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_
coherent_
stack
bl
platform_set_stack
/
*
---------------------------------------------
*
Perform
platform
specific
early
arch
.
setup
...
...
@@ -174,14 +177,6 @@ func bl31_entrypoint
bl
bl31_early_platform_setup
bl
bl31_plat_arch_setup
/
*
---------------------------------------------
*
Give
ourselves
a
stack
allocated
in
Normal
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
*
Jump
to
main
function
.
*
---------------------------------------------
...
...
bl31/aarch64/context.S
View file @
d9b1128b
...
...
@@ -43,23 +43,9 @@
.
global
el3_sysregs_context_save
func
el3_sysregs_context_save
mrs
x10
,
sctlr_el3
str
x10
,
[
x0
,
#
CTX_SCTLR_EL3
]
mrs
x11
,
cptr_el3
stp
x11
,
xzr
,
[
x0
,
#
CTX_CPTR_EL3
]
mrs
x13
,
cntfrq_el0
mrs
x14
,
mair_el3
stp
x13
,
x14
,
[
x0
,
#
CTX_CNTFRQ_EL0
]
mrs
x15
,
tcr_el3
mrs
x16
,
ttbr0_el3
stp
x15
,
x16
,
[
x0
,
#
CTX_TCR_EL3
]
mrs
x17
,
daif
and
x17
,
x17
,
#(
DAIF_ABT_BIT
|
DAIF_DBG_BIT
)
stp
x17
,
xzr
,
[
x0
,
#
CTX_DAIF_EL3
]
mrs
x10
,
cptr_el3
mrs
x11
,
cntfrq_el0
stp
x10
,
x11
,
[
x0
,
#
CTX_CPTR_EL3
]
ret
...
...
@@ -78,27 +64,9 @@ func el3_sysregs_context_save
.
global
el3_sysregs_context_restore
func
el3_sysregs_context_restore
ldp
x11
,
xzr
,
[
x0
,
#
CTX_CPTR_EL3
]
msr
cptr_el3
,
x11
ldp
x13
,
x14
,
[
x0
,
#
CTX_CNTFRQ_EL0
]
msr
cntfrq_el0
,
x13
msr
mair_el3
,
x14
ldp
x15
,
x16
,
[
x0
,
#
CTX_TCR_EL3
]
msr
tcr_el3
,
x15
msr
ttbr0_el3
,
x16
ldp
x17
,
xzr
,
[
x0
,
#
CTX_DAIF_EL3
]
mrs
x11
,
daif
orr
x17
,
x17
,
x11
msr
daif
,
x17
/
*
Make
sure
all
the
above
changes
are
observed
*/
isb
ldr
x10
,
[
x0
,
#
CTX_SCTLR_EL3
]
msr
sctlr_el3
,
x10
ldp
x13
,
x14
,
[
x0
,
#
CTX_CPTR_EL3
]
msr
cptr_el3
,
x13
msr
cntfrq_el0
,
x14
isb
ret
...
...
bl31/aarch64/runtime_exceptions.S
View file @
d9b1128b
...
...
@@ -403,7 +403,7 @@ smc_handler64:
mrs
x17
,
elr_el3
mrs
x18
,
scr_el3
stp
x16
,
x17
,
[
x6
,
#
CTX_EL3STATE_OFFSET
+
CTX_SPSR_EL3
]
st
p
x18
,
xzr
,
[
x6
,
#
CTX_EL3STATE_OFFSET
+
CTX_SCR_EL3
]
st
r
x18
,
[
x6
,
#
CTX_EL3STATE_OFFSET
+
CTX_SCR_EL3
]
/
*
Copy
SCR_EL3
.
NS
bit
to
the
flag
to
indicate
caller
's security */
bfi
x7
,
x18
,
#
0
,
#
1
...
...
@@ -446,7 +446,7 @@ el3_exit: ; .type el3_exit, %function
*
Restore
SPSR_EL3
,
ELR_EL3
and
SCR_EL3
prior
to
ERET
*
-----------------------------------------------------
*/
ld
p
x18
,
xzr
,
[
sp
,
#
CTX_EL3STATE_OFFSET
+
CTX_SCR_EL3
]
ld
r
x18
,
[
sp
,
#
CTX_EL3STATE_OFFSET
+
CTX_SCR_EL3
]
ldp
x16
,
x17
,
[
sp
,
#
CTX_EL3STATE_OFFSET
+
CTX_SPSR_EL3
]
msr
scr_el3
,
x18
msr
spsr_el3
,
x16
...
...
bl31/bl31.mk
View file @
d9b1128b
...
...
@@ -48,6 +48,7 @@ BL31_SOURCES += bl31/bl31_main.c \
services/std_svc/psci/psci_afflvl_suspend.c
\
services/std_svc/psci/psci_common.c
\
services/std_svc/psci/psci_entry.S
\
services/std_svc/psci/psci_helpers.S
\
services/std_svc/psci/psci_main.c
\
services/std_svc/psci/psci_setup.c
...
...
bl32/tsp/aarch64/tsp_entrypoint.S
View file @
d9b1128b
...
...
@@ -31,6 +31,7 @@
#include <arch.h>
#include <asm_macros.S>
#include <tsp.h>
#include <xlat_tables.h>
.
globl
tsp_entrypoint
...
...
@@ -111,12 +112,15 @@ func tsp_entrypoint
bl
zeromem16
/
*
--------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
*
ease
the
pain
of
initializing
the
MMU
*
Allocate
a
stack
whose
memory
will
be
marked
*
as
Normal
-
IS
-
WBWA
when
the
MMU
is
enabled
.
*
There
is
no
risk
of
reading
stale
stack
*
memory
after
enabling
the
MMU
as
only
the
*
primary
cpu
is
running
at
the
moment
.
*
--------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_
coherent_
stack
bl
platform_set_stack
/
*
---------------------------------------------
*
Perform
early
platform
setup
&
platform
...
...
@@ -126,14 +130,6 @@ func tsp_entrypoint
bl
bl32_early_platform_setup
bl
bl32_plat_arch_setup
/
*
---------------------------------------------
*
Give
ourselves
a
stack
allocated
in
Normal
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
*
Jump
to
main
function
.
*
---------------------------------------------
...
...
@@ -209,26 +205,48 @@ func tsp_cpu_on_entry
isb
/
*
--------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
*
ease
the
pain
of
initializing
the
MMU
*
Give
ourselves
a
stack
whose
memory
will
be
*
marked
as
Normal
-
IS
-
WBWA
when
the
MMU
is
*
enabled
.
*
--------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_
coherent_
stack
bl
platform_set_stack
/
*
---------------------------------------------
*
Initialise
the
MMU
*
---------------------------------------------
/
*
--------------------------------------------
*
Enable
the
MMU
with
the
DCache
disabled
.
It
*
is
safe
to
use
stacks
allocated
in
normal
*
memory
as
a
result
.
All
memory
accesses
are
*
marked
nGnRnE
when
the
MMU
is
disabled
.
So
*
all
the
stack
writes
will
make
it
to
memory
.
*
All
memory
accesses
are
marked
Non
-
cacheable
*
when
the
MMU
is
enabled
but
D
$
is
disabled
.
*
So
used
stack
memory
is
guaranteed
to
be
*
visible
immediately
after
the
MMU
is
enabled
*
Enabling
the
DCache
at
the
same
time
as
the
*
MMU
can
lead
to
speculatively
fetched
and
*
possibly
stale
stack
memory
being
read
from
*
other
caches
.
This
can
lead
to
coherency
*
issues
.
*
--------------------------------------------
*/
mov
x0
,
#
DISABLE_DCACHE
bl
bl32_plat_enable_mmu
/
*
---------------------------------------------
*
Give
ourselves
a
stack
allocated
in
Normal
*
-
IS
-
WBWA
memory
*
Enable
the
Data
cache
now
that
the
MMU
has
*
been
enabled
.
The
stack
has
been
unwound
.
It
*
will
be
written
first
before
being
read
.
This
*
will
invalidate
any
stale
cache
lines
resi
-
*
-
dent
in
other
caches
.
We
assume
that
*
interconnect
coherency
has
been
enabled
for
*
this
cluster
by
EL3
firmware
.
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_stack
mrs
x0
,
sctlr_el1
orr
x0
,
x0
,
#
SCTLR_C_BIT
msr
sctlr_el1
,
x0
isb
/
*
---------------------------------------------
*
Enter
C
runtime
to
perform
any
remaining
...
...
docs/porting-guide.md
View file @
d9b1128b
...
...
@@ -104,12 +104,6 @@ file is found in [plat/fvp/include/platform_def.h].
by [plat/common/aarch64/platform_mp_stack.S] and
[plat/common/aarch64/platform_up_stack.S].
*
**#define : PCPU_DV_MEM_STACK_SIZE**
Defines the coherent stack memory available to each CPU. This constant is used
by [plat/common/aarch64/platform_mp_stack.S] and
[plat/common/aarch64/platform_up_stack.S].
*
**#define : FIRMWARE_WELCOME_STR**
Defines the character string printed by BL1 upon entry into the `bl1_main()`
...
...
@@ -395,31 +389,6 @@ maximum of 4 CPUs:
cluster_id = 8-bit value in MPIDR at affinity level 1
### Function : platform_set_coherent_stack()
Argument : unsigned long
Return : void
A platform may need stack memory that is coherent with main memory to perform
certain operations like:
*
Turning the MMU on, or
*
Flushing caches prior to powering down a CPU or cluster.
Each BL stage allocates this coherent stack memory for each CPU in the
`tzfw_coherent_mem`
section.
This function sets the current stack pointer to the coherent stack that
has been allocated for the CPU specified by MPIDR. For BL images that only
require a stack for the primary CPU the parameter is ignored. The size of
the stack allocated to each CPU is specified by the platform defined constant
`PCPU_DV_MEM_STACK_SIZE`
.
Common implementations of this function for the UP and MP BL images are
provided in [plat/common/aarch64/platform_up_stack.S] and
[plat/common/aarch64/platform_mp_stack.S]
### Function : platform_is_primary_cpu()
Argument : unsigned long
...
...
@@ -1116,11 +1085,6 @@ the calling CPU is the last powered on CPU in the cluster, after powering down
affinity level 0 (CPU), the platform port should power down affinity level 1
(the cluster) as well.
This function is called with coherent stacks. This allows the PSCI
implementation to flush caches at a given affinity level without running into
stale stack state after turning off the caches. On ARMv8-A cache hits do not
occur after the cache has been turned off.
#### plat_pm_ops.affinst_suspend()
Perform the platform specific setup to power off an affinity instance in the
...
...
@@ -1143,11 +1107,6 @@ case, the affinity instance is expected to save enough state so that it can
resume execution by restoring this state when its powered on (see
`affinst_suspend_finish()`
).
This function is called with coherent stacks. This allows the PSCI
implementation to flush caches at a given affinity level without running into
stale stack state after turning off the caches. On ARMv8-A cache hits do not
occur after the cache has been turned off.
#### plat_pm_ops.affinst_on_finish()
This function is called by the PSCI implementation after the calling CPU is
...
...
@@ -1159,11 +1118,6 @@ services.
The
`MPIDR`
(first argument),
`affinity level`
(second argument) and
`state`
(third argument) have a similar meaning as described in the previous operations.
This function is called with coherent stacks. This allows the PSCI
implementation to flush caches at a given affinity level without running into
stale stack state after turning off the caches. On ARMv8-A cache hits do not
occur after the cache has been turned off.
#### plat_pm_ops.affinst_on_suspend()
This function is called by the PSCI implementation after the calling CPU is
...
...
@@ -1176,11 +1130,6 @@ and also provide secure runtime firmware services.
The
`MPIDR`
(first argument),
`affinity level`
(second argument) and
`state`
(third argument) have a similar meaning as described in the previous operations.
This function is called with coherent stacks. This allows the PSCI
implementation to flush caches at a given affinity level without running into
stale stack state after turning off the caches. On ARMv8-A cache hits do not
occur after the cache has been turned off.
BL3-1 platform initialization code must also detect the system topology and
the state of each affinity instance in the topology. This information is
critical for the PSCI runtime service to function correctly. More details are
...
...
include/bl31/context.h
View file @
d9b1128b
...
...
@@ -76,21 +76,13 @@
* 32-bits wide but are stored as 64-bit values for convenience
******************************************************************************/
#define CTX_EL3STATE_OFFSET (CTX_GPREGS_OFFSET + CTX_GPREGS_END)
#define CTX_
VBA
R_EL3 0x0
/* Currently unused */
#define CTX_
SC
R_EL3
0x0
#define CTX_RUNTIME_SP 0x8
#define CTX_SPSR_EL3 0x10
#define CTX_ELR_EL3 0x18
#define CTX_SCR_EL3 0x20
#define CTX_SCTLR_EL3 0x28
#define CTX_CPTR_EL3 0x30
/* Unused space to allow registers to be stored as pairs */
#define CTX_CNTFRQ_EL0 0x40
#define CTX_MAIR_EL3 0x48
#define CTX_TCR_EL3 0x50
#define CTX_TTBR0_EL3 0x58
#define CTX_DAIF_EL3 0x60
/* Unused space to honour alignment requirements */
#define CTX_EL3STATE_END 0x70
#define CTX_CPTR_EL3 0x20
#define CTX_CNTFRQ_EL0 0x28
#define CTX_EL3STATE_END 0x30
/*******************************************************************************
* Constants that allow assembler code to access members of and the
...
...
include/lib/aarch64/xlat_tables.h
View file @
d9b1128b
...
...
@@ -31,6 +31,14 @@
#ifndef __XLAT_TABLES_H__
#define __XLAT_TABLES_H__
/*
* Flags to override default values used to program system registers while
* enabling the MMU.
*/
#define DISABLE_DCACHE (1 << 0)
#ifndef __ASSEMBLY__
#include <stdint.h>
/*
...
...
@@ -67,7 +75,8 @@ void mmap_add(const mmap_region_t *mm);
void
init_xlat_tables
(
void
);
void
enable_mmu_el1
(
void
);
void
enable_mmu_el3
(
void
);
void
enable_mmu_el1
(
uint32_t
flags
);
void
enable_mmu_el3
(
uint32_t
flags
);
#endif
/*__ASSEMBLY__*/
#endif
/* __XLAT_TABLES_H__ */
include/plat/common/platform.h
View file @
d9b1128b
...
...
@@ -180,7 +180,7 @@ unsigned int plat_get_aff_state(unsigned int, unsigned long);
/*******************************************************************************
* Optional BL3-1 functions (may be overridden)
******************************************************************************/
void
bl31_plat_enable_mmu
(
void
);
void
bl31_plat_enable_mmu
(
uint32_t
flags
);
/*******************************************************************************
* Mandatory BL3-2 functions (only if platform contains a BL3-2)
...
...
@@ -190,6 +190,6 @@ void bl32_platform_setup(void);
/*******************************************************************************
* Optional BL3-2 functions (may be overridden)
******************************************************************************/
void
bl32_plat_enable_mmu
(
void
);
void
bl32_plat_enable_mmu
(
uint32_t
flags
);
#endif
/* __PLATFORM_H__ */
lib/aarch64/xlat_tables.c
View file @
d9b1128b
...
...
@@ -292,7 +292,7 @@ void init_xlat_tables(void)
* exception level
******************************************************************************/
#define DEFINE_ENABLE_MMU_EL(_el, _tcr_extra, _tlbi_fct) \
void enable_mmu_el##_el(
void)
\
void enable_mmu_el##_el(
uint32_t flags)
\
{ \
uint64_t mair, tcr, ttbr; \
uint32_t sctlr; \
...
...
@@ -330,7 +330,13 @@ void init_xlat_tables(void)
\
sctlr = read_sctlr_el##_el(); \
sctlr |= SCTLR_WXN_BIT | SCTLR_M_BIT | SCTLR_I_BIT; \
sctlr |= SCTLR_A_BIT | SCTLR_C_BIT; \
sctlr |= SCTLR_A_BIT; \
\
if (flags & DISABLE_DCACHE) \
sctlr &= ~SCTLR_C_BIT; \
else \
sctlr |= SCTLR_C_BIT; \
\
write_sctlr_el##_el(sctlr); \
\
/* Ensure the MMU enable takes effect immediately */
\
...
...
plat/common/aarch64/plat_common.c
View file @
d9b1128b
...
...
@@ -38,12 +38,12 @@
#pragma weak bl31_plat_enable_mmu
#pragma weak bl32_plat_enable_mmu
void
bl31_plat_enable_mmu
(
void
)
void
bl31_plat_enable_mmu
(
uint32_t
flags
)
{
enable_mmu_el3
();
enable_mmu_el3
(
flags
);
}
void
bl32_plat_enable_mmu
(
void
)
void
bl32_plat_enable_mmu
(
uint32_t
flags
)
{
enable_mmu_el1
();
enable_mmu_el1
(
flags
);
}
plat/common/aarch64/platform_mp_stack.S
View file @
d9b1128b
...
...
@@ -33,28 +33,11 @@
#include <platform_def.h>
.
local
pcpu_dv_mem_stack
.
local
platform_normal_stacks
.
weak
platform_set_stack
.
weak
platform_get_stack
.
weak
platform_set_coherent_stack
/
*
-----------------------------------------------------
*
void
platform_set_coherent_stack
(
unsigned
long
mpidr
)
*
*
For
a
given
CPU
,
this
function
sets
the
stack
pointer
*
to
a
stack
allocated
in
device
memory
.
This
stack
can
*
be
used
by
C
code
which
enables
/
disables
the
SCTLR
.
M
*
SCTLR
.
C
bit
e
.
g
.
while
powering
down
a
cpu
*
-----------------------------------------------------
*/
func
platform_set_coherent_stack
mov
x5
,
x30
//
lr
get_mp_stack
pcpu_dv_mem_stack
,
PCPU_DV_MEM_STACK_SIZE
mov
sp
,
x0
ret
x5
/
*
-----------------------------------------------------
*
unsigned
long
platform_get_stack
(
unsigned
long
mpidr
)
*
...
...
@@ -81,22 +64,9 @@ func platform_set_stack
ret
x9
/
*
-----------------------------------------------------
*
Per
-
cpu
stacks
in
normal
memory
.
*
Used
for
C
code
during
runtime
execution
(
when
coherent
*
stacks
are
not
required
)
.
*
Each
cpu
gets
a
stack
of
PLATFORM_STACK_SIZE
bytes
.
*
Per
-
cpu
stacks
in
normal
memory
.
Each
cpu
gets
a
*
stack
of
PLATFORM_STACK_SIZE
bytes
.
*
-----------------------------------------------------
*/
declare_stack
platform_normal_stacks
,
tzfw_normal_stacks
,
\
PLATFORM_STACK_SIZE
,
PLATFORM_CORE_COUNT
/
*
-----------------------------------------------------
*
Per
-
cpu
stacks
in
device
memory
.
*
Used
for
C
code
just
before
power
down
or
right
after
*
power
up
when
the
MMU
or
caches
need
to
be
turned
on
*
or
off
.
*
Each
cpu
gets
a
stack
of
PCPU_DV_MEM_STACK_SIZE
bytes
.
*
-----------------------------------------------------
*/
declare_stack
pcpu_dv_mem_stack
,
tzfw_coherent_mem
,
\
PCPU_DV_MEM_STACK_SIZE
,
PLATFORM_CORE_COUNT
plat/common/aarch64/platform_up_stack.S
View file @
d9b1128b
...
...
@@ -33,26 +33,9 @@
#include <platform_def.h>
.
local
pcpu_dv_mem_stack
.
local
platform_normal_stacks
.
globl
platform_set_stack
.
globl
platform_get_stack
.
globl
platform_set_coherent_stack
/
*
-----------------------------------------------------
*
void
platform_set_coherent_stack
(
unsigned
long
)
*
*
For
cold
-
boot
BL
images
,
only
the
primary
CPU
needs
a
*
stack
.
This
function
sets
the
stack
pointer
to
a
stack
*
allocated
in
device
memory
.
*
-----------------------------------------------------
*/
func
platform_set_coherent_stack
get_up_stack
pcpu_dv_mem_stack
,
PCPU_DV_MEM_STACK_SIZE
mov
sp
,
x0
ret
/
*
-----------------------------------------------------
*
unsigned
long
platform_get_stack
(
unsigned
long
)
...
...
@@ -87,11 +70,3 @@ func platform_set_stack
*/
declare_stack
platform_normal_stacks
,
tzfw_normal_stacks
,
\
PLATFORM_STACK_SIZE
,
1
/
*
-----------------------------------------------------
*
Single
cpu
stack
in
device
/
coherent
memory
.
*
PCPU_DV_MEM_STACK_SIZE
bytes
are
allocated
.
*
-----------------------------------------------------
*/
declare_stack
pcpu_dv_mem_stack
,
tzfw_coherent_mem
,
\
PCPU_DV_MEM_STACK_SIZE
,
1
plat/fvp/aarch64/fvp_common.c
View file @
d9b1128b
...
...
@@ -119,7 +119,7 @@ const unsigned int num_sec_irqs = sizeof(irq_sec_array) /
mmap_add(fvp_mmap); \
init_xlat_tables(); \
\
enable_mmu_el##_el(); \
enable_mmu_el##_el(
0
); \
}
/* Define EL1 and EL3 variants of the function initialising the MMU */
...
...
plat/fvp/fvp_pm.c
View file @
d9b1128b
...
...
@@ -120,11 +120,10 @@ exit:
* platform to decide whether the cluster is being turned off and take apt
* actions.
*
* CAUTION: This function is called with coherent stacks so that caches can be
* turned off, flushed and coherency disabled. There is no guarantee that caches
* will remain turned on across calls to this function as each affinity level is
* dealt with. So do not write & read global variables across calls. It will be
* wise to do flush a write to the global to prevent unpredictable results.
* CAUTION: There is no guarantee that caches will remain turned on across calls
* to this function as each affinity level is dealt with. So do not write & read
* global variables across calls. It will be wise to do flush a write to the
* global to prevent unpredictable results.
******************************************************************************/
int
fvp_affinst_off
(
unsigned
long
mpidr
,
unsigned
int
afflvl
,
...
...
@@ -192,11 +191,10 @@ int fvp_affinst_off(unsigned long mpidr,
* platform to decide whether the cluster is being turned off and take apt
* actions.
*
* CAUTION: This function is called with coherent stacks so that caches can be
* turned off, flushed and coherency disabled. There is no guarantee that caches
* will remain turned on across calls to this function as each affinity level is
* dealt with. So do not write & read global variables across calls. It will be
* wise to do flush a write to the global to prevent unpredictable results.
* CAUTION: There is no guarantee that caches will remain turned on across calls
* to this function as each affinity level is dealt with. So do not write & read
* global variables across calls. It will be wise to do flush a write to the
* global to prevent unpredictable results.
******************************************************************************/
int
fvp_affinst_suspend
(
unsigned
long
mpidr
,
unsigned
long
sec_entrypoint
,
...
...
plat/fvp/include/platform_def.h
View file @
d9b1128b
...
...
@@ -47,13 +47,6 @@
/* Size of cacheable stacks */
#define PLATFORM_STACK_SIZE 0x800
/* Size of coherent stacks for debug and release builds */
#if DEBUG
#define PCPU_DV_MEM_STACK_SIZE 0x400
#else
#define PCPU_DV_MEM_STACK_SIZE 0x300
#endif
#define FIRMWARE_WELCOME_STR "Booting trusted firmware boot loader stage 1\n\r"
/* Trusted Boot Firmware BL2 */
...
...
services/std_svc/psci/psci_afflvl_off.c
View file @
d9b1128b
...
...
@@ -44,7 +44,6 @@ static int psci_afflvl0_off(aff_map_node_t *cpu_node)
{
unsigned
int
plat_state
;
int
rc
;
unsigned
long
sctlr
;
assert
(
cpu_node
->
level
==
MPIDR_AFFLVL0
);
...
...
@@ -70,24 +69,8 @@ static int psci_afflvl0_off(aff_map_node_t *cpu_node)
/*
* Arch. management. Perform the necessary steps to flush all
* cpu caches.
*
* TODO: This power down sequence varies across cpus so it needs to be
* abstracted out on the basis of the MIDR like in cpu_reset_handler().
* Do the bare minimal for the time being. Fix this before porting to
* Cortex models.
*/
sctlr
=
read_sctlr_el3
();
sctlr
&=
~
SCTLR_C_BIT
;
write_sctlr_el3
(
sctlr
);
isb
();
/* ensure MMU disable takes immediate effect */
/*
* CAUTION: This flush to the level of unification makes an assumption
* about the cache hierarchy at affinity level 0 (cpu) in the platform.
* Ideally the platform should tell psci which levels to flush to exit
* coherency.
*/
dcsw_op_louis
(
DCCISW
);
psci_do_pwrdown_cache_maintenance
(
MPIDR_AFFLVL0
);
/*
* Plat. management: Perform platform specific actions to turn this
...
...
@@ -227,9 +210,6 @@ static int psci_call_off_handlers(mpidr_aff_map_nodes_t mpidr_nodes,
* the lowest to the highest affinity level implemented by the platform because
* to turn off affinity level X it is neccesary to turn off affinity level X - 1
* first.
*
* CAUTION: This function is called with coherent stacks so that coherency can
* be turned off and caches can be flushed safely.
******************************************************************************/
int
psci_afflvl_off
(
int
start_afflvl
,
int
end_afflvl
)
...
...
services/std_svc/psci/psci_afflvl_on.c
View file @
d9b1128b
...
...
@@ -359,9 +359,9 @@ static unsigned int psci_afflvl0_on_finish(aff_map_node_t *cpu_node)
}
/*
* Arch. management:
Turn on mmu & restore architectural state
* Arch. management:
Enable data cache and manage stack memory
*/
bl31_plat_enable_mmu
();
psci_do_pwrup_cache_maintenance
();
/*
* All the platform specific actions for turning this cpu
...
...
Prev
1
2
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