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
0f22bef3
Commit
0f22bef3
authored
Apr 29, 2017
by
Scott Branden
Committed by
GitHub
Apr 29, 2017
Browse files
Merge branch 'integration' into tf_issue_461
parents
53d9c9c8
dd454b40
Changes
132
Show whitespace changes
Inline
Side-by-side
lib/psci/psci_suspend.c
View file @
0f22bef3
...
@@ -302,7 +302,7 @@ void psci_cpu_suspend_finish(unsigned int cpu_idx,
...
@@ -302,7 +302,7 @@ void psci_cpu_suspend_finish(unsigned int cpu_idx,
*/
*/
psci_plat_pm_ops
->
pwr_domain_suspend_finish
(
state_info
);
psci_plat_pm_ops
->
pwr_domain_suspend_finish
(
state_info
);
#if !HW_ASSISTED_COHERENCY
#if !
(
HW_ASSISTED_COHERENCY
|| WARMBOOT_ENABLE_DCACHE_EARLY)
/* Arch. management: Enable the data cache, stack memory maintenance. */
/* Arch. management: Enable the data cache, stack memory maintenance. */
psci_do_pwrup_cache_maintenance
();
psci_do_pwrup_cache_maintenance
();
#endif
#endif
...
...
lib/psci/psci_system_off.c
View file @
0f22bef3
/*
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#include <stddef.h>
#include <stddef.h>
#include <arch_helpers.h>
#include <arch_helpers.h>
#include <assert.h>
#include <assert.h>
#include <console.h>
#include <debug.h>
#include <debug.h>
#include <platform.h>
#include <platform.h>
#include "psci_private.h"
#include "psci_private.h"
...
@@ -46,6 +47,8 @@ void psci_system_off(void)
...
@@ -46,6 +47,8 @@ void psci_system_off(void)
psci_spd_pm
->
svc_system_off
();
psci_spd_pm
->
svc_system_off
();
}
}
console_flush
();
/* Call the platform specific hook */
/* Call the platform specific hook */
psci_plat_pm_ops
->
system_off
();
psci_plat_pm_ops
->
system_off
();
...
@@ -63,6 +66,8 @@ void psci_system_reset(void)
...
@@ -63,6 +66,8 @@ void psci_system_reset(void)
psci_spd_pm
->
svc_system_reset
();
psci_spd_pm
->
svc_system_reset
();
}
}
console_flush
();
/* Call the platform specific hook */
/* Call the platform specific hook */
psci_plat_pm_ops
->
system_reset
();
psci_plat_pm_ops
->
system_reset
();
...
...
lib/stdlib/assert.c
View file @
0f22bef3
/*
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
7
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -28,14 +28,22 @@
...
@@ -28,14 +28,22 @@
* POSSIBILITY OF SUCH DAMAGE.
* POSSIBILITY OF SUCH DAMAGE.
*/
*/
#include <console.h>
#include <debug.h>
#include <debug.h>
#include <platform.h>
/*
void
__assert
(
const
char
*
function
,
const
char
*
file
,
unsigned
int
line
,
* This is a basic implementation. This could be improved.
*/
void
__assert
(
const
char
*
function
,
const
char
*
file
,
unsigned
int
line
,
const
char
*
assertion
)
const
char
*
assertion
)
{
{
#if LOG_LEVEL >= LOG_LEVEL_INFO
/*
* Only print the output if LOG_LEVEL is higher or equal to
* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1.
*/
tf_printf
(
"ASSERT: %s <%d> : %s
\n
"
,
function
,
line
,
assertion
);
tf_printf
(
"ASSERT: %s <%d> : %s
\n
"
,
function
,
line
,
assertion
);
while
(
1
);
console_flush
();
#endif
plat_panic_handler
();
}
}
lib/xlat_tables/aarch32/xlat_tables.c
View file @
0f22bef3
/*
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016
-2017
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -85,13 +85,13 @@
...
@@ -85,13 +85,13 @@
static
uint64_t
base_xlation_table
[
NUM_BASE_LEVEL_ENTRIES
]
static
uint64_t
base_xlation_table
[
NUM_BASE_LEVEL_ENTRIES
]
__aligned
(
NUM_BASE_LEVEL_ENTRIES
*
sizeof
(
uint64_t
));
__aligned
(
NUM_BASE_LEVEL_ENTRIES
*
sizeof
(
uint64_t
));
#if
DEBUG
#if
ENABLE_ASSERTIONS
static
unsigned
long
long
get_max_supported_pa
(
void
)
static
unsigned
long
long
get_max_supported_pa
(
void
)
{
{
/* Physical address space size for long descriptor format. */
/* Physical address space size for long descriptor format. */
return
(
1ULL
<<
40
)
-
1ULL
;
return
(
1ULL
<<
40
)
-
1ULL
;
}
}
#endif
#endif
/* ENABLE_ASSERTIONS */
void
init_xlat_tables
(
void
)
void
init_xlat_tables
(
void
)
{
{
...
...
lib/xlat_tables/aarch64/xlat_tables.c
View file @
0f22bef3
...
@@ -127,7 +127,7 @@ static unsigned long long calc_physical_addr_size_bits(
...
@@ -127,7 +127,7 @@ static unsigned long long calc_physical_addr_size_bits(
return
TCR_PS_BITS_4GB
;
return
TCR_PS_BITS_4GB
;
}
}
#if
DEBUG
#if
ENABLE_ASSERTIONS
/* Physical Address ranges supported in the AArch64 Memory Model */
/* Physical Address ranges supported in the AArch64 Memory Model */
static
const
unsigned
int
pa_range_bits_arr
[]
=
{
static
const
unsigned
int
pa_range_bits_arr
[]
=
{
PARANGE_0000
,
PARANGE_0001
,
PARANGE_0010
,
PARANGE_0011
,
PARANGE_0100
,
PARANGE_0000
,
PARANGE_0001
,
PARANGE_0010
,
PARANGE_0011
,
PARANGE_0100
,
...
@@ -144,7 +144,7 @@ static unsigned long long get_max_supported_pa(void)
...
@@ -144,7 +144,7 @@ static unsigned long long get_max_supported_pa(void)
return
(
1ULL
<<
pa_range_bits_arr
[
pa_range
])
-
1ULL
;
return
(
1ULL
<<
pa_range_bits_arr
[
pa_range
])
-
1ULL
;
}
}
#endif
#endif
/* ENABLE_ASSERTIONS */
void
init_xlat_tables
(
void
)
void
init_xlat_tables
(
void
)
{
{
...
...
lib/xlat_tables/xlat_tables_common.c
View file @
0f22bef3
/*
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016
-2017
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -87,7 +87,7 @@ void print_mmap(void)
...
@@ -87,7 +87,7 @@ void print_mmap(void)
}
}
void
mmap_add_region
(
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
void
mmap_add_region
(
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
size_t
size
,
unsigned
in
t
attr
)
size_t
size
,
mmap_attr_
t
attr
)
{
{
mmap_region_t
*
mm
=
mmap
;
mmap_region_t
*
mm
=
mmap
;
mmap_region_t
*
mm_last
=
mm
+
ARRAY_SIZE
(
mmap
)
-
1
;
mmap_region_t
*
mm_last
=
mm
+
ARRAY_SIZE
(
mmap
)
-
1
;
...
@@ -109,7 +109,7 @@ void mmap_add_region(unsigned long long base_pa, uintptr_t base_va,
...
@@ -109,7 +109,7 @@ void mmap_add_region(unsigned long long base_pa, uintptr_t base_va,
assert
((
base_pa
+
(
unsigned
long
long
)
size
-
1ULL
)
<=
assert
((
base_pa
+
(
unsigned
long
long
)
size
-
1ULL
)
<=
(
PLAT_PHY_ADDR_SPACE_SIZE
-
1
));
(
PLAT_PHY_ADDR_SPACE_SIZE
-
1
));
#if
DEBUG
#if
ENABLE_ASSERTIONS
/* Check for PAs and VAs overlaps with all other regions */
/* Check for PAs and VAs overlaps with all other regions */
for
(
mm
=
mmap
;
mm
->
size
;
++
mm
)
{
for
(
mm
=
mmap
;
mm
->
size
;
++
mm
)
{
...
@@ -154,7 +154,7 @@ void mmap_add_region(unsigned long long base_pa, uintptr_t base_va,
...
@@ -154,7 +154,7 @@ void mmap_add_region(unsigned long long base_pa, uintptr_t base_va,
mm
=
mmap
;
/* Restore pointer to the start of the array */
mm
=
mmap
;
/* Restore pointer to the start of the array */
#endif
/*
DEBUG
*/
#endif
/*
ENABLE_ASSERTIONS
*/
/* Find correct place in mmap to insert new region */
/* Find correct place in mmap to insert new region */
while
(
mm
->
base_va
<
base_va
&&
mm
->
size
)
while
(
mm
->
base_va
<
base_va
&&
mm
->
size
)
...
@@ -199,7 +199,7 @@ void mmap_add(const mmap_region_t *mm)
...
@@ -199,7 +199,7 @@ void mmap_add(const mmap_region_t *mm)
}
}
}
}
static
uint64_t
mmap_desc
(
unsigned
attr
,
unsigned
long
long
addr_pa
,
static
uint64_t
mmap_desc
(
mmap_attr_t
attr
,
unsigned
long
long
addr_pa
,
int
level
)
int
level
)
{
{
uint64_t
desc
;
uint64_t
desc
;
...
@@ -277,11 +277,11 @@ static uint64_t mmap_desc(unsigned attr, unsigned long long addr_pa,
...
@@ -277,11 +277,11 @@ static uint64_t mmap_desc(unsigned attr, unsigned long long addr_pa,
* attributes of the innermost region that contains it. If there are partial
* attributes of the innermost region that contains it. If there are partial
* overlaps, it returns -1, as a smaller size is needed.
* overlaps, it returns -1, as a smaller size is needed.
*/
*/
static
in
t
mmap_region_attr
(
mmap_region_t
*
mm
,
uintptr_t
base_va
,
static
mmap_attr_
t
mmap_region_attr
(
mmap_region_t
*
mm
,
uintptr_t
base_va
,
size_t
size
)
size_t
size
)
{
{
/* Don't assume that the area is contained in the first region */
/* Don't assume that the area is contained in the first region */
in
t
attr
=
-
1
;
mmap_attr_
t
attr
=
-
1
;
/*
/*
* Get attributes from last (innermost) region that contains the
* Get attributes from last (innermost) region that contains the
...
@@ -360,7 +360,8 @@ static mmap_region_t *init_xlation_table_inner(mmap_region_t *mm,
...
@@ -360,7 +360,8 @@ static mmap_region_t *init_xlation_table_inner(mmap_region_t *mm,
* there are partially overlapping regions. On success,
* there are partially overlapping regions. On success,
* it will return the innermost region's attributes.
* it will return the innermost region's attributes.
*/
*/
int
attr
=
mmap_region_attr
(
mm
,
base_va
,
level_size
);
mmap_attr_t
attr
=
mmap_region_attr
(
mm
,
base_va
,
level_size
);
if
(
attr
>=
0
)
{
if
(
attr
>=
0
)
{
desc
=
mmap_desc
(
attr
,
desc
=
mmap_desc
(
attr
,
base_va
-
mm
->
base_va
+
mm
->
base_pa
,
base_va
-
mm
->
base_va
+
mm
->
base_pa
,
...
...
lib/xlat_tables_v2/aarch32/xlat_tables_arch.c
View file @
0f22bef3
...
@@ -37,13 +37,13 @@
...
@@ -37,13 +37,13 @@
#include <xlat_tables_v2.h>
#include <xlat_tables_v2.h>
#include "../xlat_tables_private.h"
#include "../xlat_tables_private.h"
#if
DEBUG
#if
ENABLE_ASSERTIONS
static
unsigned
long
long
xlat_arch_get_max_supported_pa
(
void
)
static
unsigned
long
long
xlat_arch_get_max_supported_pa
(
void
)
{
{
/* Physical address space size for long descriptor format. */
/* Physical address space size for long descriptor format. */
return
(
1ull
<<
40
)
-
1ull
;
return
(
1ull
<<
40
)
-
1ull
;
}
}
#endif
/*
DEBUG
*/
#endif
/*
ENABLE_ASSERTIONS
*/
int
is_mmu_enabled
(
void
)
int
is_mmu_enabled
(
void
)
{
{
...
...
lib/xlat_tables_v2/aarch64/xlat_tables_arch.c
View file @
0f22bef3
...
@@ -77,7 +77,7 @@ static unsigned long long calc_physical_addr_size_bits(
...
@@ -77,7 +77,7 @@ static unsigned long long calc_physical_addr_size_bits(
return
TCR_PS_BITS_4GB
;
return
TCR_PS_BITS_4GB
;
}
}
#if
DEBUG
#if
ENABLE_ASSERTIONS
/* Physical Address ranges supported in the AArch64 Memory Model */
/* Physical Address ranges supported in the AArch64 Memory Model */
static
const
unsigned
int
pa_range_bits_arr
[]
=
{
static
const
unsigned
int
pa_range_bits_arr
[]
=
{
PARANGE_0000
,
PARANGE_0001
,
PARANGE_0010
,
PARANGE_0011
,
PARANGE_0100
,
PARANGE_0000
,
PARANGE_0001
,
PARANGE_0010
,
PARANGE_0011
,
PARANGE_0100
,
...
@@ -94,7 +94,7 @@ unsigned long long xlat_arch_get_max_supported_pa(void)
...
@@ -94,7 +94,7 @@ unsigned long long xlat_arch_get_max_supported_pa(void)
return
(
1ull
<<
pa_range_bits_arr
[
pa_range
])
-
1ull
;
return
(
1ull
<<
pa_range_bits_arr
[
pa_range
])
-
1ull
;
}
}
#endif
/*
DEBUG
*/
#endif
/*
ENABLE_ASSERTIONS
*/
int
is_mmu_enabled
(
void
)
int
is_mmu_enabled
(
void
)
{
{
...
...
lib/xlat_tables_v2/xlat_tables_common.c
View file @
0f22bef3
...
@@ -92,7 +92,7 @@ xlat_ctx_t tf_xlat_ctx = {
...
@@ -92,7 +92,7 @@ xlat_ctx_t tf_xlat_ctx = {
};
};
void
mmap_add_region
(
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
void
mmap_add_region
(
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
size_t
size
,
unsigned
in
t
attr
)
size_t
size
,
mmap_attr_
t
attr
)
{
{
mmap_region_t
mm
=
{
mmap_region_t
mm
=
{
.
base_va
=
base_va
,
.
base_va
=
base_va
,
...
@@ -114,7 +114,7 @@ void mmap_add(const mmap_region_t *mm)
...
@@ -114,7 +114,7 @@ void mmap_add(const mmap_region_t *mm)
#if PLAT_XLAT_TABLES_DYNAMIC
#if PLAT_XLAT_TABLES_DYNAMIC
int
mmap_add_dynamic_region
(
unsigned
long
long
base_pa
,
int
mmap_add_dynamic_region
(
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
size_t
size
,
unsigned
in
t
attr
)
uintptr_t
base_va
,
size_t
size
,
mmap_attr_
t
attr
)
{
{
mmap_region_t
mm
=
{
mmap_region_t
mm
=
{
.
base_va
=
base_va
,
.
base_va
=
base_va
,
...
...
lib/xlat_tables_v2/xlat_tables_internal.c
View file @
0f22bef3
...
@@ -115,7 +115,7 @@ static uint64_t *xlat_table_get_empty(xlat_ctx_t *ctx)
...
@@ -115,7 +115,7 @@ static uint64_t *xlat_table_get_empty(xlat_ctx_t *ctx)
#endif
/* PLAT_XLAT_TABLES_DYNAMIC */
#endif
/* PLAT_XLAT_TABLES_DYNAMIC */
/* Returns a block/page table descriptor for the given level and attributes. */
/* Returns a block/page table descriptor for the given level and attributes. */
static
uint64_t
xlat_desc
(
unsigned
in
t
attr
,
unsigned
long
long
addr_pa
,
static
uint64_t
xlat_desc
(
mmap_attr_
t
attr
,
unsigned
long
long
addr_pa
,
int
level
)
int
level
)
{
{
uint64_t
desc
;
uint64_t
desc
;
...
@@ -609,7 +609,7 @@ void print_mmap(mmap_region_t *const mmap)
...
@@ -609,7 +609,7 @@ void print_mmap(mmap_region_t *const mmap)
*/
*/
static
int
mmap_add_region_check
(
xlat_ctx_t
*
ctx
,
unsigned
long
long
base_pa
,
static
int
mmap_add_region_check
(
xlat_ctx_t
*
ctx
,
unsigned
long
long
base_pa
,
uintptr_t
base_va
,
size_t
size
,
uintptr_t
base_va
,
size_t
size
,
unsigned
in
t
attr
)
mmap_attr_
t
attr
)
{
{
mmap_region_t
*
mm
=
ctx
->
mmap
;
mmap_region_t
*
mm
=
ctx
->
mmap
;
unsigned
long
long
end_pa
=
base_pa
+
size
-
1
;
unsigned
long
long
end_pa
=
base_pa
+
size
-
1
;
...
...
make_helpers/defaults.mk
View file @
0f22bef3
...
@@ -154,3 +154,9 @@ USE_COHERENT_MEM := 1
...
@@ -154,3 +154,9 @@ USE_COHERENT_MEM := 1
# Build verbosity
# Build verbosity
V
:=
0
V
:=
0
# Whether to enable D-Cache early during warm boot. This is usually
# applicable for platforms wherein interconnect programming is not
# required to enable cache coherency after warm reset (eg: single cluster
# platforms).
WARMBOOT_ENABLE_DCACHE_EARLY
:=
0
plat/arm/board/common/board_css_common.c
View file @
0f22bef3
...
@@ -79,6 +79,9 @@ const mmap_region_t plat_arm_mmap[] = {
...
@@ -79,6 +79,9 @@ const mmap_region_t plat_arm_mmap[] = {
#endif
#endif
#ifdef IMAGE_BL32
#ifdef IMAGE_BL32
const
mmap_region_t
plat_arm_mmap
[]
=
{
const
mmap_region_t
plat_arm_mmap
[]
=
{
#ifdef AARCH32
ARM_MAP_SHARED_RAM
,
#endif
V2M_MAP_IOFPGA
,
V2M_MAP_IOFPGA
,
CSS_MAP_DEVICE
,
CSS_MAP_DEVICE
,
SOC_CSS_MAP_DEVICE
,
SOC_CSS_MAP_DEVICE
,
...
...
plat/arm/board/juno/aarch32/juno_helpers.S
0 → 100644
View file @
0f22bef3
/*
*
Copyright
(
c
)
2016
,
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 <arch.h>
#include <asm_macros.S>
#include <bl_common.h>
#include <cortex_a53.h>
#include <cortex_a57.h>
#include <cortex_a72.h>
#include <v2m_def.h>
#include "../juno_def.h"
.
globl
plat_reset_handler
.
globl
plat_arm_calc_core_pos
#define JUNO_REVISION(rev) REV_JUNO_R##rev
#define JUNO_HANDLER(rev) plat_reset_handler_juno_r##rev
#define JUMP_TO_HANDLER_IF_JUNO_R(revision) \
jump_to_handler
JUNO_REVISION
(
revision
),
JUNO_HANDLER
(
revision
)
/
*
--------------------------------------------------------------------
*
Helper
macro
to
jump
to
the
given
handler
if
the
board
revision
*
matches
.
*
Expects
the
Juno
board
revision
in
x0
.
*
--------------------------------------------------------------------
*/
.
macro
jump_to_handler
_revision
,
_handler
cmp
r0
,
#
\
_revision
beq
\
_handler
.
endm
/
*
--------------------------------------------------------------------
*
Helper
macro
that
reads
the
part
number
of
the
current
CPU
and
jumps
*
to
the
given
label
if
it
matches
the
CPU
MIDR
provided
.
*
*
Clobbers
r0
.
*
--------------------------------------------------------------------
*/
.
macro
jump_if_cpu_midr
_cpu_midr
,
_label
ldcopr
r0
,
MIDR
ubfx
r0
,
r0
,
#
MIDR_PN_SHIFT
,
#
12
ldr
r1
,
=((
\
_cpu_midr
>>
MIDR_PN_SHIFT
)
&
MIDR_PN_MASK
)
cmp
r0
,
r1
beq
\
_label
.
endm
/
*
--------------------------------------------------------------------
*
Platform
reset
handler
for
Juno
R0
.
*
*
Juno
R0
has
the
following
topology
:
*
-
Quad
core
Cortex
-
A53
processor
cluster
;
*
-
Dual
core
Cortex
-
A57
processor
cluster
.
*
*
This
handler
does
the
following
:
*
-
Implement
workaround
for
defect
id
831273
by
enabling
an
event
*
stream
every
65536
cycles
.
*
-
Set
the
L2
Data
RAM
latency
to
2
(
i
.
e
.
3
cycles
)
for
Cortex
-
A57
*
-
Set
the
L2
Tag
RAM
latency
to
2
(
i
.
e
.
3
cycles
)
for
Cortex
-
A57
*
--------------------------------------------------------------------
*/
func
JUNO_HANDLER
(0)
/
*
--------------------------------------------------------------------
*
Enable
the
event
stream
every
65536
cycles
*
--------------------------------------------------------------------
*/
mov
r0
,
#(
0xf
<<
EVNTI_SHIFT
)
orr
r0
,
r0
,
#
EVNTEN_BIT
stcopr
r0
,
CNTKCTL
/
*
--------------------------------------------------------------------
*
Nothing
else
to
do
on
Cortex
-
A53
.
*
--------------------------------------------------------------------
*/
jump_if_cpu_midr
CORTEX_A53_MIDR
,
1
f
/
*
--------------------------------------------------------------------
*
Cortex
-
A57
specific
settings
*
--------------------------------------------------------------------
*/
mov
r0
,
#((
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
(
L2_TAG_RAM_LATENCY_3_CYCLES
<<
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
stcopr
r0
,
L2CTLR
1
:
isb
bx
lr
endfunc
JUNO_HANDLER
(0)
/
*
--------------------------------------------------------------------
*
Platform
reset
handler
for
Juno
R1
.
*
*
Juno
R1
has
the
following
topology
:
*
-
Quad
core
Cortex
-
A53
processor
cluster
;
*
-
Dual
core
Cortex
-
A57
processor
cluster
.
*
*
This
handler
does
the
following
:
*
-
Set
the
L2
Data
RAM
latency
to
2
(
i
.
e
.
3
cycles
)
for
Cortex
-
A57
*
*
Note
that
:
*
-
The
default
value
for
the
L2
Tag
RAM
latency
for
Cortex
-
A57
is
*
suitable
.
*
-
Defect
#
831273
doesn
't affect Juno R1.
*
--------------------------------------------------------------------
*/
func
JUNO_HANDLER
(1)
/
*
--------------------------------------------------------------------
*
Nothing
to
do
on
Cortex
-
A53
.
*
--------------------------------------------------------------------
*/
jump_if_cpu_midr
CORTEX_A57_MIDR
,
A57
bx
lr
A57
:
/
*
--------------------------------------------------------------------
*
Cortex
-
A57
specific
settings
*
--------------------------------------------------------------------
*/
mov
r0
,
#(
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
stcopr
r0
,
L2CTLR
isb
bx
lr
endfunc
JUNO_HANDLER
(1)
/
*
--------------------------------------------------------------------
*
Platform
reset
handler
for
Juno
R2
.
*
*
Juno
R2
has
the
following
topology
:
*
-
Quad
core
Cortex
-
A53
processor
cluster
;
*
-
Dual
core
Cortex
-
A72
processor
cluster
.
*
*
This
handler
does
the
following
:
*
-
Set
the
L2
Data
RAM
latency
to
2
(
i
.
e
.
3
cycles
)
for
Cortex
-
A72
*
-
Set
the
L2
Tag
RAM
latency
to
1
(
i
.
e
.
2
cycles
)
for
Cortex
-
A72
*
*
Note
that
:
*
-
Defect
#
831273
doesn
't affect Juno R2.
*
--------------------------------------------------------------------
*/
func
JUNO_HANDLER
(2)
/
*
--------------------------------------------------------------------
*
Nothing
to
do
on
Cortex
-
A53
.
*
--------------------------------------------------------------------
*/
jump_if_cpu_midr
CORTEX_A72_MIDR
,
A72
bx
lr
A72
:
/
*
--------------------------------------------------------------------
*
Cortex
-
A72
specific
settings
*
--------------------------------------------------------------------
*/
mov
r0
,
#((
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
(
L2_TAG_RAM_LATENCY_2_CYCLES
<<
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
stcopr
r0
,
L2CTLR
isb
bx
lr
endfunc
JUNO_HANDLER
(2)
/
*
--------------------------------------------------------------------
*
void
plat_reset_handler
(
void
)
;
*
*
Determine
the
Juno
board
revision
and
call
the
appropriate
reset
*
handler
.
*
--------------------------------------------------------------------
*/
func
plat_reset_handler
/
*
Read
the
V2M
SYS_ID
register
*/
ldr
r0
,
=(
V2M_SYSREGS_BASE
+
V2M_SYS_ID
)
ldr
r1
,
[
r0
]
/
*
Extract
board
revision
from
the
SYS_ID
*/
ubfx
r0
,
r1
,
#
V2M_SYS_ID_REV_SHIFT
,
#
4
JUMP_TO_HANDLER_IF_JUNO_R
(0)
JUMP_TO_HANDLER_IF_JUNO_R
(1)
JUMP_TO_HANDLER_IF_JUNO_R
(2)
/
*
Board
revision
is
not
supported
*/
no_ret
plat_panic_handler
endfunc
plat_reset_handler
/
*
-----------------------------------------------------
*
unsigned
int
plat_arm_calc_core_pos
(
u_register_t
mpidr
)
*
Helper
function
to
calculate
the
core
position
.
*
-----------------------------------------------------
*/
func
plat_arm_calc_core_pos
b
css_calc_core_pos_swap_cluster
endfunc
plat_arm_calc_core_pos
plat/arm/board/juno/aarch64/juno_helpers.S
View file @
0f22bef3
...
@@ -34,12 +34,18 @@
...
@@ -34,12 +34,18 @@
#include <cortex_a53.h>
#include <cortex_a53.h>
#include <cortex_a57.h>
#include <cortex_a57.h>
#include <cortex_a72.h>
#include <cortex_a72.h>
#include <cpu_macros.S>
#include <css_def.h>
#include <v2m_def.h>
#include <v2m_def.h>
#include "../juno_def.h"
#include "../juno_def.h"
.
globl
plat_reset_handler
.
globl
plat_reset_handler
.
globl
plat_arm_calc_core_pos
.
globl
plat_arm_calc_core_pos
#if JUNO_AARCH32_EL3_RUNTIME
.
globl
plat_get_my_entrypoint
.
globl
juno_reset_to_aarch32_state
#endif
#define JUNO_REVISION(rev) REV_JUNO_R##rev
#define JUNO_REVISION(rev) REV_JUNO_R##rev
#define JUNO_HANDLER(rev) plat_reset_handler_juno_r##rev
#define JUNO_HANDLER(rev) plat_reset_handler_juno_r##rev
...
@@ -205,6 +211,20 @@ func plat_reset_handler
...
@@ -205,6 +211,20 @@ func plat_reset_handler
endfunc
plat_reset_handler
endfunc
plat_reset_handler
/
*
-----------------------------------------------------
*
void
juno_do_reset_to_aarch32_state
(
void
)
;
*
*
Request
warm
reset
to
AArch32
mode
.
*
-----------------------------------------------------
*/
func
juno_do_reset_to_aarch32_state
mov
x0
,
#
RMR_EL3_RR_BIT
dsb
sy
msr
rmr_el3
,
x0
isb
wfi
endfunc
juno_do_reset_to_aarch32_state
/
*
-----------------------------------------------------
/
*
-----------------------------------------------------
*
unsigned
int
plat_arm_calc_core_pos
(
u_register_t
mpidr
)
*
unsigned
int
plat_arm_calc_core_pos
(
u_register_t
mpidr
)
*
Helper
function
to
calculate
the
core
position
.
*
Helper
function
to
calculate
the
core
position
.
...
@@ -213,3 +233,77 @@ endfunc plat_reset_handler
...
@@ -213,3 +233,77 @@ endfunc plat_reset_handler
func
plat_arm_calc_core_pos
func
plat_arm_calc_core_pos
b
css_calc_core_pos_swap_cluster
b
css_calc_core_pos_swap_cluster
endfunc
plat_arm_calc_core_pos
endfunc
plat_arm_calc_core_pos
#if JUNO_AARCH32_EL3_RUNTIME
/
*
---------------------------------------------------------------------
*
uintptr_t
plat_get_my_entrypoint
(
void
)
;
*
*
Main
job
of
this
routine
is
to
distinguish
between
a
cold
and
a
warm
*
boot
.
On
JUNO
platform
,
this
distinction
is
based
on
the
contents
of
*
the
Trusted
Mailbox
.
It
is
initialised
to
zero
by
the
SCP
before
the
*
AP
cores
are
released
from
reset
.
Therefore
,
a
zero
mailbox
means
*
it
's a cold reset. If it is a warm boot then a request to reset to
*
AArch32
state
is
issued
.
This
is
the
only
way
to
reset
to
AArch32
*
in
EL3
on
Juno
.
A
trampoline
located
at
the
high
vector
address
*
has
already
been
prepared
by
BL1
.
*
*
This
functions
returns
the
contents
of
the
mailbox
,
i
.
e
.
:
*
-
0
for
a
cold
boot
;
*
-
request
warm
reset
in
AArch32
state
for
warm
boot
case
;
*
---------------------------------------------------------------------
*/
func
plat_get_my_entrypoint
mov_imm
x0
,
PLAT_ARM_TRUSTED_MAILBOX_BASE
ldr
x0
,
[
x0
]
cbz
x0
,
return
b
juno_do_reset_to_aarch32_state
1
:
b
1
b
return
:
ret
endfunc
plat_get_my_entrypoint
/*
*
Emit
a
"movw r0, #imm16"
which
moves
the
lower
*
16
bits
of
`
_val
`
into
r0
.
*/
.
macro
emit_movw
_reg_d
,
_val
mov_imm
\
_reg_d
,
(
0xe3000000
|
\
((\
_val
&
0xfff
)
|
\
((\
_val
&
0xf000
)
<<
4
)))
.
endm
/*
*
Emit
a
"movt r0, #imm16"
which
moves
the
upper
*
16
bits
of
`
_val
`
into
r0
.
*/
.
macro
emit_movt
_reg_d
,
_val
mov_imm
\
_reg_d
,
(
0xe3400000
|
\
(((\
_val
&
0x0fff0000
)
>>
16
)
|
\
((\
_val
&
0xf0000000
)
>>
12
)))
.
endm
/*
*
This
function
writes
the
trampoline
code
at
HI
-
VEC
(
0xFFFF0000
)
*
address
which
loads
r0
with
the
entrypoint
address
for
*
BL32
(
a
.
k
.
a
SP_MIN
)
when
EL3
is
in
AArch32
mode
.
A
warm
reset
*
to
AArch32
mode
is
then
requested
by
writing
into
RMR_EL3
.
*/
func
juno_reset_to_aarch32_state
emit_movw
w0
,
BL32_BASE
emit_movt
w1
,
BL32_BASE
/
*
opcode
"bx r0"
to
branch
using
r0
in
AArch32
mode
*/
mov_imm
w2
,
0xe12fff10
/
*
Write
the
above
opcodes
at
HI
-
VECTOR
location
*/
mov_imm
x3
,
HI_VECTOR_BASE
str
w0
,
[
x3
],
#
4
str
w1
,
[
x3
],
#
4
str
w2
,
[
x3
]
bl
juno_do_reset_to_aarch32_state
1
:
b
1
b
endfunc
juno_reset_to_aarch32_state
#endif /* JUNO_AARCH32_EL3_RUNTIME */
plat/arm/board/juno/include/platform_def.h
View file @
0f22bef3
...
@@ -103,8 +103,8 @@
...
@@ -103,8 +103,8 @@
#endif
#endif
#ifdef IMAGE_BL32
#ifdef IMAGE_BL32
# define PLAT_ARM_MMAP_ENTRIES
4
# define PLAT_ARM_MMAP_ENTRIES
5
# define MAX_XLAT_TABLES
3
# define MAX_XLAT_TABLES
4
#endif
#endif
/*
/*
...
...
plat/arm/board/juno/juno_bl1_setup.c
View file @
0f22bef3
/*
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -32,11 +32,15 @@
...
@@ -32,11 +32,15 @@
#include <errno.h>
#include <errno.h>
#include <platform.h>
#include <platform.h>
#include <plat_arm.h>
#include <plat_arm.h>
#include <sp805.h>
#include <tbbr_img_def.h>
#include <tbbr_img_def.h>
#include <v2m_def.h>
#include <v2m_def.h>
#define RESET_REASON_WDOG_RESET (0x2)
#define RESET_REASON_WDOG_RESET (0x2)
void
juno_reset_to_aarch32_state
(
void
);
/*******************************************************************************
/*******************************************************************************
* The following function checks if Firmware update is needed,
* The following function checks if Firmware update is needed,
* by checking if TOC in FIP image is valid or watchdog reset happened.
* by checking if TOC in FIP image is valid or watchdog reset happened.
...
@@ -85,3 +89,15 @@ __dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved)
...
@@ -85,3 +89,15 @@ __dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved)
while
(
1
)
while
(
1
)
wfi
();
wfi
();
}
}
#if JUNO_AARCH32_EL3_RUNTIME
void
bl1_plat_prepare_exit
(
entry_point_info_t
*
ep_info
)
{
#if !ARM_DISABLE_TRUSTED_WDOG
/* Disable watchdog before leaving BL1 */
sp805_stop
(
ARM_SP805_TWDG_BASE
);
#endif
juno_reset_to_aarch32_state
();
}
#endif
/* JUNO_AARCH32_EL3_RUNTIME */
plat/arm/board/juno/juno_p
m
.c
→
plat/arm/board/juno/juno_
bl2_setu
p.c
View file @
0f22bef3
/*
/*
* Copyright (c)
2015-
2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* modification, are permitted provided that the following conditions are met:
...
@@ -27,67 +27,30 @@
...
@@ -27,67 +27,30 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* POSSIBILITY OF SUCH DAMAGE.
*/
*/
#include <css_pm.h>
#include <assert.h>
#include <bl_common.h>
#include <desc_image_load.h>
#include <plat_arm.h>
#include <plat_arm.h>
/*
#if JUNO_AARCH32_EL3_RUNTIME
* Custom `validate_power_state` handler for Juno. According to PSCI
/*******************************************************************************
* Specification, interrupts targeted to cores in PSCI CPU SUSPEND should
* This function changes the spsr for BL32 image to bypass
* be able to resume it. On Juno, when the system power domain is suspended,
* the check in BL1 AArch64 exception handler. This is needed in the aarch32
* the GIC is also powered down. The SCP resumes the final core to be suspend
* boot flow as the core comes up in aarch64 and to enter the BL32 image a warm
* when an external wake-up event is received. But the other cores cannot be
* reset in aarch32 state is required.
* woken up by a targeted interrupt, because GIC doesn't forward these
******************************************************************************/
* interrupts to the SCP. Due to this hardware limitation, we down-grade PSCI
int
bl2_plat_handle_post_image_load
(
unsigned
int
image_id
)
* CPU SUSPEND requests targeted to the system power domain level
* to cluster power domain level.
*
* The system power domain suspend on Juno is only supported only via
* PSCI SYSTEM SUSPEND API.
*/
static
int
juno_validate_power_state
(
unsigned
int
power_state
,
psci_power_state_t
*
req_state
)
{
{
int
rc
;
int
err
=
arm_bl2_handle_post_image_load
(
image_id
);
rc
=
arm_validate_power_state
(
power_state
,
req_state
);
/*
if
(
!
err
&&
(
image_id
==
BL32_IMAGE_ID
))
{
* Ensure that the system power domain level is never suspended
bl_mem_params_node_t
*
bl_mem_params
=
get_bl_mem_params_node
(
image_id
);
* via PSCI CPU SUSPEND API. Currently system suspend is only
assert
(
bl_mem_params
);
* supported via PSCI SYSTEM SUSPEND API.
bl_mem_params
->
ep_info
.
spsr
=
SPSR_64
(
MODE_EL3
,
MODE_SP_ELX
,
*/
DISABLE_ALL_EXCEPTIONS
);
req_state
->
pwr_domain_state
[
ARM_PWR_LVL2
]
=
ARM_LOCAL_STATE_RUN
;
}
return
rc
;
}
/*
return
err
;
* Custom `translate_power_state_by_mpidr` handler for Juno. Unlike in the
* `juno_validate_power_state`, we do not down-grade the system power
* domain level request in `power_state` as it will be used to query the
* PSCI_STAT_COUNT/RESIDENCY at the system power domain level.
*/
static
int
juno_translate_power_state_by_mpidr
(
u_register_t
mpidr
,
unsigned
int
power_state
,
psci_power_state_t
*
output_state
)
{
return
arm_validate_power_state
(
power_state
,
output_state
);
}
}
#endif
/* JUNO_AARCH32_EL3_RUNTIME */
/*******************************************************************************
* Export the platform handlers via plat_arm_psci_pm_ops. The ARM Standard
* platform will take care of registering the handlers with PSCI.
******************************************************************************/
plat_psci_ops_t
plat_arm_psci_pm_ops
=
{
.
pwr_domain_on
=
css_pwr_domain_on
,
.
pwr_domain_on_finish
=
css_pwr_domain_on_finish
,
.
pwr_domain_off
=
css_pwr_domain_off
,
.
cpu_standby
=
css_cpu_standby
,
.
pwr_domain_suspend
=
css_pwr_domain_suspend
,
.
pwr_domain_suspend_finish
=
css_pwr_domain_suspend_finish
,
.
system_off
=
css_system_off
,
.
system_reset
=
css_system_reset
,
.
validate_power_state
=
juno_validate_power_state
,
.
validate_ns_entrypoint
=
arm_validate_ns_entrypoint
,
.
get_sys_suspend_power_state
=
css_get_sys_suspend_power_state
,
.
translate_power_state_by_mpidr
=
juno_translate_power_state_by_mpidr
,
.
get_node_hw_state
=
css_node_hw_state
};
plat/arm/board/juno/platform.mk
View file @
0f22bef3
...
@@ -48,8 +48,14 @@ endif
...
@@ -48,8 +48,14 @@ endif
PLAT_INCLUDES
:=
-Iplat
/arm/board/juno/include
PLAT_INCLUDES
:=
-Iplat
/arm/board/juno/include
PLAT_BL_COMMON_SOURCES
:=
plat/arm/board/juno/
aarch64
/juno_helpers.S
PLAT_BL_COMMON_SOURCES
:=
plat/arm/board/juno/
${ARCH}
/juno_helpers.S
# Flag to enable support for AArch32 state on JUNO
JUNO_AARCH32_EL3_RUNTIME
:=
0
$(eval
$(call
assert_boolean,JUNO_AARCH32_EL3_RUNTIME))
$(eval
$(call
add_define,JUNO_AARCH32_EL3_RUNTIME))
ifeq
(${ARCH},aarch64)
BL1_SOURCES
+=
lib/cpus/aarch64/cortex_a53.S
\
BL1_SOURCES
+=
lib/cpus/aarch64/cortex_a53.S
\
lib/cpus/aarch64/cortex_a57.S
\
lib/cpus/aarch64/cortex_a57.S
\
lib/cpus/aarch64/cortex_a72.S
\
lib/cpus/aarch64/cortex_a72.S
\
...
@@ -59,6 +65,7 @@ BL1_SOURCES += lib/cpus/aarch64/cortex_a53.S \
...
@@ -59,6 +65,7 @@ BL1_SOURCES += lib/cpus/aarch64/cortex_a53.S \
${JUNO_SECURITY_SOURCES}
${JUNO_SECURITY_SOURCES}
BL2_SOURCES
+=
plat/arm/board/juno/juno_err.c
\
BL2_SOURCES
+=
plat/arm/board/juno/juno_err.c
\
plat/arm/board/juno/juno_bl2_setup.c
\
${JUNO_SECURITY_SOURCES}
${JUNO_SECURITY_SOURCES}
BL2U_SOURCES
+=
${JUNO_SECURITY_SOURCES}
BL2U_SOURCES
+=
${JUNO_SECURITY_SOURCES}
...
@@ -66,11 +73,11 @@ BL2U_SOURCES += ${JUNO_SECURITY_SOURCES}
...
@@ -66,11 +73,11 @@ BL2U_SOURCES += ${JUNO_SECURITY_SOURCES}
BL31_SOURCES
+=
lib/cpus/aarch64/cortex_a53.S
\
BL31_SOURCES
+=
lib/cpus/aarch64/cortex_a53.S
\
lib/cpus/aarch64/cortex_a57.S
\
lib/cpus/aarch64/cortex_a57.S
\
lib/cpus/aarch64/cortex_a72.S
\
lib/cpus/aarch64/cortex_a72.S
\
plat/arm/board/juno/juno_pm.c
\
plat/arm/board/juno/juno_topology.c
\
plat/arm/board/juno/juno_topology.c
\
${JUNO_GIC_SOURCES}
\
${JUNO_GIC_SOURCES}
\
${JUNO_INTERCONNECT_SOURCES}
\
${JUNO_INTERCONNECT_SOURCES}
\
${JUNO_SECURITY_SOURCES}
${JUNO_SECURITY_SOURCES}
endif
# Enable workarounds for selected Cortex-A53 and A57 errata.
# Enable workarounds for selected Cortex-A53 and A57 errata.
ERRATA_A53_855873
:=
1
ERRATA_A53_855873
:=
1
...
...
plat/arm/board/juno/sp_min/sp_min-juno.mk
0 → 100644
View file @
0f22bef3
#
# Copyright (c) 2016, 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.
#
# SP_MIN source files specific to JUNO platform
BL32_SOURCES
+=
lib/cpus/aarch32/cortex_a53.S
\
lib/cpus/aarch32/cortex_a57.S
\
lib/cpus/aarch32/cortex_a72.S
\
plat/arm/board/juno/juno_pm.c
\
plat/arm/board/juno/juno_topology.c
\
plat/arm/css/common/css_pm.c
\
plat/arm/css/common/css_topology.c
\
plat/arm/soc/common/soc_css_security.c
\
plat/arm/css/drivers/scp/css_pm_scpi.c
\
plat/arm/css/drivers/scpi/css_mhu.c
\
plat/arm/css/drivers/scpi/css_scpi.c
\
${JUNO_GIC_SOURCES}
\
${JUNO_INTERCONNECT_SOURCES}
\
${JUNO_SECURITY_SOURCES}
include
plat/arm/common/sp_min/arm_sp_min.mk
plat/arm/common/aarch32/arm_helpers.S
View file @
0f22bef3
/*
/*
*
Copyright
(
c
)
2016
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2016
-
2017
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
*
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
...
@@ -31,9 +31,10 @@
...
@@ -31,9 +31,10 @@
#include <platform_def.h>
#include <platform_def.h>
.
weak
plat_arm_calc_core_pos
.
weak
plat_arm_calc_core_pos
.
weak
plat_crash_console_init
.
weak
plat_crash_console_putc
.
weak
plat_my_core_pos
.
weak
plat_my_core_pos
.
globl
plat_crash_console_init
.
globl
plat_crash_console_putc
.
globl
plat_crash_console_flush
/
*
-----------------------------------------------------
/
*
-----------------------------------------------------
*
unsigned
int
plat_my_core_pos
(
void
)
*
unsigned
int
plat_my_core_pos
(
void
)
...
@@ -85,3 +86,16 @@ func plat_crash_console_putc
...
@@ -85,3 +86,16 @@ func plat_crash_console_putc
ldr
r1
,
=
PLAT_ARM_CRASH_UART_BASE
ldr
r1
,
=
PLAT_ARM_CRASH_UART_BASE
b
console_core_putc
b
console_core_putc
endfunc
plat_crash_console_putc
endfunc
plat_crash_console_putc
/
*
---------------------------------------------
*
int
plat_crash_console_flush
()
*
Function
to
force
a
write
of
all
buffered
*
data
that
hasn
't been output.
*
Out
:
return
-
1
on
error
else
return
0
.
*
Clobber
list
:
r0
-
r1
*
---------------------------------------------
*/
func
plat_crash_console_flush
ldr
r1
,
=
PLAT_ARM_CRASH_UART_BASE
b
console_core_flush
endfunc
plat_crash_console_flush
Prev
1
2
3
4
5
6
7
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