Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
5634a493
Unverified
Commit
5634a493
authored
6 years ago
by
Dimitris Papastamos
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1611 from antonio-nino-diaz-arm/an/misra-common
Remove some MISRA defects in common code
parents
68e0fca1
81542c00
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.1
v2.1-rc1
v2.1-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
bl31/aarch64/bl31_entrypoint.S
+2
-2
bl31/aarch64/bl31_entrypoint.S
common/bl_common.c
+18
-15
common/bl_common.c
common/desc_image_load.c
+21
-21
common/desc_image_load.c
common/runtime_svc.c
+17
-17
common/runtime_svc.c
include/common/bl_common.h
+26
-26
include/common/bl_common.h
include/common/fdt_wrappers.h
+1
-1
include/common/fdt_wrappers.h
include/common/runtime_svc.h
+30
-23
include/common/runtime_svc.h
include/lib/aarch32/smccc_helpers.h
+14
-14
include/lib/aarch32/smccc_helpers.h
include/lib/aarch64/smccc_helpers.h
+2
-1
include/lib/aarch64/smccc_helpers.h
include/lib/pmf/pmf_asm_macros.S
+2
-2
include/lib/pmf/pmf_asm_macros.S
include/lib/runtime_instr.h
+10
-8
include/lib/runtime_instr.h
include/plat/common/common_def.h
+5
-4
include/plat/common/common_def.h
with
148 additions
and
134 deletions
+148
-134
bl31/aarch64/bl31_entrypoint.S
View file @
5634a493
...
...
@@ -124,7 +124,7 @@ func bl31_warm_entrypoint
*
timestamp
collection
will
need
to
do
cache
maintenance
prior
*
to
timestamp
update
.
*/
pmf_calc_timestamp_addr
rt_instr_svc
RT_INSTR_EXIT_HW_LOW_PWR
pmf_calc_timestamp_addr
rt_instr_svc
,
RT_INSTR_EXIT_HW_LOW_PWR
mrs
x1
,
cntpct_el0
str
x1
,
[
x0
]
#endif
...
...
@@ -180,7 +180,7 @@ func bl31_warm_entrypoint
bl
psci_warmboot_entrypoint
#if ENABLE_RUNTIME_INSTRUMENTATION
pmf_calc_timestamp_addr
rt_instr_svc
RT_INSTR_EXIT_PSCI
pmf_calc_timestamp_addr
rt_instr_svc
,
RT_INSTR_EXIT_PSCI
mov
x19
,
x0
/
*
...
...
This diff is collapsed.
Click to expand it.
common/bl_common.c
View file @
5634a493
...
...
@@ -48,8 +48,8 @@ static int dyn_is_auth_disabled(void)
uintptr_t
page_align
(
uintptr_t
value
,
unsigned
dir
)
{
/* Round up the limit to the next page boundary */
if
(
value
&
(
PAGE_SIZE
-
1
)
)
{
value
&=
~
(
PAGE_SIZE
-
1
);
if
(
(
value
&
(
PAGE_SIZE
-
1
U
))
!=
0U
)
{
value
&=
~
(
PAGE_SIZE
-
1
U
);
if
(
dir
==
UP
)
value
+=
PAGE_SIZE
;
}
...
...
@@ -106,7 +106,7 @@ size_t get_image_size(unsigned int image_id)
uintptr_t
dev_handle
;
uintptr_t
image_handle
;
uintptr_t
image_spec
;
size_t
image_size
=
0
;
size_t
image_size
=
0
U
;
int
io_result
;
/* Obtain a reference to the image by querying the platform layer */
...
...
@@ -127,7 +127,7 @@ size_t get_image_size(unsigned int image_id)
/* Find the size of the image */
io_result
=
io_size
(
image_handle
,
&
image_size
);
if
((
io_result
!=
0
)
||
(
image_size
==
0
))
{
if
((
io_result
!=
0
)
||
(
image_size
==
0
U
))
{
WARN
(
"Failed to determine the size of the image id=%u (%i)
\n
"
,
image_id
,
io_result
);
}
...
...
@@ -182,12 +182,11 @@ static int load_image(unsigned int image_id, image_info_t *image_data)
return
io_result
;
}
INFO
(
"Loading image id=%u at address %p
\n
"
,
image_id
,
(
void
*
)
image_base
);
INFO
(
"Loading image id=%u at address 0x%lx
\n
"
,
image_id
,
image_base
);
/* Find the size of the image */
io_result
=
io_size
(
image_handle
,
&
image_size
);
if
((
io_result
!=
0
)
||
(
image_size
==
0
))
{
if
((
io_result
!=
0
)
||
(
image_size
==
0
U
))
{
WARN
(
"Failed to determine the size of the image id=%u (%i)
\n
"
,
image_id
,
io_result
);
goto
exit
;
...
...
@@ -200,7 +199,11 @@ static int load_image(unsigned int image_id, image_info_t *image_data)
goto
exit
;
}
image_data
->
image_size
=
image_size
;
/*
* image_data->image_max_size is a uint32_t so image_size will always
* fit in image_data->image_size.
*/
image_data
->
image_size
=
(
uint32_t
)
image_size
;
/* We have enough space so load the image now */
/* TODO: Consider whether to try to recover/retry a partially successful read */
...
...
@@ -210,15 +213,15 @@ static int load_image(unsigned int image_id, image_info_t *image_data)
goto
exit
;
}
INFO
(
"Image id=%u loaded:
%p - %p
\n
"
,
image_id
,
(
void
*
)
image_base
,
(
void
*
)
(
image_base
+
image_size
));
INFO
(
"Image id=%u loaded:
0x%lx - 0x%lx
\n
"
,
image_id
,
image_base
,
(
uintptr_t
)
(
image_base
+
image_size
));
exit:
io_close
(
image_handle
);
(
void
)
io_close
(
image_handle
);
/* Ignore improbable/unrecoverable error in 'close' */
/* TODO: Consider maintaining open device connection from this bootloader stage */
io_dev_close
(
dev_handle
);
(
void
)
io_dev_close
(
dev_handle
);
/* Ignore improbable/unrecoverable error in 'dev_close' */
return
io_result
;
...
...
@@ -274,7 +277,7 @@ static int load_auth_image_internal(unsigned int image_id,
* the file has been successfully loaded and authenticated and flush
* only for child images, not for the parents (certificates).
*/
if
(
!
is_parent_image
)
{
if
(
is_parent_image
==
0
)
{
flush_dcache_range
(
image_data
->
image_base
,
image_data
->
image_size
);
}
...
...
@@ -296,7 +299,7 @@ int load_auth_image(unsigned int image_id, image_info_t *image_data)
do
{
err
=
load_auth_image_internal
(
image_id
,
image_data
,
0
);
}
while
(
err
!=
0
&&
plat_try_next_boot_source
());
}
while
(
(
err
!=
0
)
&&
(
plat_try_next_boot_source
()
!=
0
)
);
return
err
;
}
...
...
@@ -306,7 +309,7 @@ int load_auth_image(unsigned int image_id, image_info_t *image_data)
******************************************************************************/
void
print_entry_point_info
(
const
entry_point_info_t
*
ep_info
)
{
INFO
(
"Entry point address =
%p
\n
"
,
(
void
*
)
ep_info
->
pc
);
INFO
(
"Entry point address =
0x%lx
\n
"
,
ep_info
->
pc
);
INFO
(
"SPSR = 0x%x
\n
"
,
ep_info
->
spsr
);
#define PRINT_IMAGE_ARG(n) \
...
...
This diff is collapsed.
Click to expand it.
common/desc_image_load.c
View file @
5634a493
...
...
@@ -35,12 +35,12 @@ void flush_bl_params_desc(void)
******************************************************************************/
int
get_bl_params_node_index
(
unsigned
int
image_id
)
{
int
index
;
unsigned
int
index
;
assert
(
image_id
!=
INVALID_IMAGE_ID
);
for
(
index
=
0
;
index
<
bl_mem_params_desc_num
;
index
++
)
{
for
(
index
=
0
U
;
index
<
bl_mem_params_desc_num
;
index
++
)
{
if
(
bl_mem_params_desc_ptr
[
index
].
image_id
==
image_id
)
return
index
;
return
(
int
)
index
;
}
return
-
1
;
...
...
@@ -72,17 +72,17 @@ bl_mem_params_node_t *get_bl_mem_params_node(unsigned int image_id)
******************************************************************************/
bl_load_info_t
*
get_bl_load_info_from_mem_params_desc
(
void
)
{
int
index
=
0
;
unsigned
int
index
=
0
;
/* If there is no image to start with, return NULL */
if
(
!
bl_mem_params_desc_num
)
if
(
bl_mem_params_desc_num
==
0U
)
return
NULL
;
/* Assign initial data structures */
bl_load_info_node_t
*
bl_node_info
=
&
bl_mem_params_desc_ptr
[
index
].
load_node_mem
;
bl_load_info
.
head
=
bl_node_info
;
SET_PARAM_HEAD
(
&
bl_load_info
,
PARAM_BL_LOAD_INFO
,
VERSION_2
,
0
);
SET_PARAM_HEAD
(
&
bl_load_info
,
PARAM_BL_LOAD_INFO
,
VERSION_2
,
0
U
);
/* Go through the image descriptor array and create the list */
for
(;
index
<
bl_mem_params_desc_num
;
index
++
)
{
...
...
@@ -92,10 +92,10 @@ bl_load_info_t *get_bl_load_info_from_mem_params_desc(void)
bl_node_info
->
image_info
=
&
bl_mem_params_desc_ptr
[
index
].
image_info
;
/* Link next image if present */
if
((
index
+
1
)
<
bl_mem_params_desc_num
)
{
if
((
index
+
1
U
)
<
bl_mem_params_desc_num
)
{
/* Get the memory and link the next node */
bl_node_info
->
next_load_info
=
&
bl_mem_params_desc_ptr
[
index
+
1
].
load_node_mem
;
&
bl_mem_params_desc_ptr
[
index
+
1
U
].
load_node_mem
;
bl_node_info
=
bl_node_info
->
next_load_info
;
}
}
...
...
@@ -112,19 +112,19 @@ bl_load_info_t *get_bl_load_info_from_mem_params_desc(void)
******************************************************************************/
bl_params_t
*
get_next_bl_params_from_mem_params_desc
(
void
)
{
int
count
;
unsigned
int
img_id
=
0
;
int
link_index
=
0
;
unsigned
int
count
;
unsigned
int
img_id
=
0
U
;
unsigned
int
link_index
=
0
U
;
bl_params_node_t
*
bl_current_exec_node
=
NULL
;
bl_params_node_t
*
bl_last_exec_node
=
NULL
;
bl_mem_params_node_t
*
desc_ptr
;
/* If there is no image to start with, return NULL */
if
(
!
bl_mem_params_desc_num
)
if
(
bl_mem_params_desc_num
==
0U
)
return
NULL
;
/* Get the list HEAD */
for
(
count
=
0
;
count
<
bl_mem_params_desc_num
;
count
++
)
{
for
(
count
=
0
U
;
count
<
bl_mem_params_desc_num
;
count
++
)
{
desc_ptr
=
&
bl_mem_params_desc_ptr
[
count
];
...
...
@@ -140,13 +140,13 @@ bl_params_t *get_next_bl_params_from_mem_params_desc(void)
assert
(
next_bl_params
.
head
!=
NULL
);
/* Populate the HEAD information */
SET_PARAM_HEAD
(
&
next_bl_params
,
PARAM_BL_PARAMS
,
VERSION_2
,
0
);
SET_PARAM_HEAD
(
&
next_bl_params
,
PARAM_BL_PARAMS
,
VERSION_2
,
0
U
);
/*
* Go through the image descriptor array and create the list.
* This bounded loop is to make sure that we are not looping forever.
*/
for
(
count
=
0
;
count
<
bl_mem_params_desc_num
;
count
++
)
{
for
(
count
=
0
U
;
count
<
bl_mem_params_desc_num
;
count
++
)
{
desc_ptr
=
&
bl_mem_params_desc_ptr
[
link_index
];
...
...
@@ -161,7 +161,7 @@ bl_params_t *get_next_bl_params_from_mem_params_desc(void)
bl_current_exec_node
->
image_info
=
&
desc_ptr
->
image_info
;
bl_current_exec_node
->
ep_info
=
&
desc_ptr
->
ep_info
;
if
(
bl_last_exec_node
)
{
if
(
bl_last_exec_node
!=
NULL
)
{
/* Assert if loop detected */
assert
(
bl_last_exec_node
->
next_params_info
==
NULL
);
...
...
@@ -179,7 +179,7 @@ bl_params_t *get_next_bl_params_from_mem_params_desc(void)
/* Get the index for the next hand-off image */
link_index
=
get_bl_params_node_index
(
img_id
);
assert
((
link_index
>
0
)
&&
assert
((
link_index
>
0
U
)
&&
(
link_index
<
bl_mem_params_desc_num
));
}
...
...
@@ -243,17 +243,17 @@ void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
* overwriting the previous initialisations.
*/
if
(
params_node
==
bl2_to_next_bl_params
->
head
)
{
if
(
params_node
->
ep_info
->
args
.
arg1
==
0
)
if
(
params_node
->
ep_info
->
args
.
arg1
==
0
U
)
params_node
->
ep_info
->
args
.
arg1
=
fw_config_base
;
if
(
params_node
->
ep_info
->
args
.
arg2
==
0
)
if
(
params_node
->
ep_info
->
args
.
arg2
==
0
U
)
params_node
->
ep_info
->
args
.
arg2
=
hw_config_base
;
}
else
{
if
(
params_node
->
ep_info
->
args
.
arg0
==
0
)
if
(
params_node
->
ep_info
->
args
.
arg0
==
0
U
)
params_node
->
ep_info
->
args
.
arg0
=
fw_config_base
;
if
(
params_node
->
ep_info
->
args
.
arg1
==
0
)
if
(
params_node
->
ep_info
->
args
.
arg1
==
0
U
)
params_node
->
ep_info
->
args
.
arg1
=
hw_config_base
;
}
...
...
This diff is collapsed.
Click to expand it.
common/runtime_svc.c
View file @
5634a493
...
...
@@ -35,16 +35,16 @@ uintptr_t handle_runtime_svc(uint32_t smc_fid,
unsigned
int
flags
)
{
u_register_t
x1
,
x2
,
x3
,
x4
;
int
index
;
unsigned
int
index
;
unsigned
int
idx
;
const
rt_svc_desc_t
*
rt_svc_descs
;
assert
(
handle
);
assert
(
handle
!=
NULL
);
idx
=
get_unique_oen_from_smc_fid
(
smc_fid
);
assert
(
idx
<
MAX_RT_SVCS
);
index
=
rt_svc_descs_indices
[
idx
];
if
(
index
<
0
||
index
>=
(
int
)
RT_SVC_DECS_NUM
)
if
(
index
>=
RT_SVC_DECS_NUM
)
SMC_RET1
(
handle
,
SMC_UNK
);
rt_svc_descs
=
(
rt_svc_desc_t
*
)
RT_SVC_DESCS_START
;
...
...
@@ -96,7 +96,7 @@ static int32_t validate_rt_svc_desc(const rt_svc_desc_t *desc)
void
__init
runtime_svc_init
(
void
)
{
int
rc
=
0
;
u
nsigned
in
t
index
,
start_idx
,
end_idx
;
u
int8_
t
index
,
start_idx
,
end_idx
;
rt_svc_desc_t
*
rt_svc_descs
;
/* Assert the number of descriptors detected are less than maximum indices */
...
...
@@ -108,10 +108,10 @@ void __init runtime_svc_init(void)
return
;
/* Initialise internal variables to invalid state */
memset
(
rt_svc_descs_indices
,
-
1
,
sizeof
(
rt_svc_descs_indices
));
(
void
)
memset
(
rt_svc_descs_indices
,
-
1
,
sizeof
(
rt_svc_descs_indices
));
rt_svc_descs
=
(
rt_svc_desc_t
*
)
RT_SVC_DESCS_START
;
for
(
index
=
0
;
index
<
RT_SVC_DECS_NUM
;
index
++
)
{
for
(
index
=
0
U
;
index
<
RT_SVC_DECS_NUM
;
index
++
)
{
rt_svc_desc_t
*
service
=
&
rt_svc_descs
[
index
];
/*
...
...
@@ -120,7 +120,7 @@ void __init runtime_svc_init(void)
* of this service.
*/
rc
=
validate_rt_svc_desc
(
service
);
if
(
rc
)
{
if
(
rc
!=
0
)
{
ERROR
(
"Invalid runtime service descriptor %p
\n
"
,
(
void
*
)
service
);
panic
();
...
...
@@ -133,9 +133,9 @@ void __init runtime_svc_init(void)
* an initialisation routine defined. Call the initialisation
* routine for this runtime service, if it is defined.
*/
if
(
service
->
init
)
{
if
(
service
->
init
!=
NULL
)
{
rc
=
service
->
init
();
if
(
rc
)
{
if
(
rc
!=
0
)
{
ERROR
(
"Error initializing runtime service %s
\n
"
,
service
->
name
);
continue
;
...
...
@@ -149,15 +149,15 @@ void __init runtime_svc_init(void)
* entity range.
*/
#if SMCCC_MAJOR_VERSION == 1
start_idx
=
get_unique_oen
(
service
->
start_oen
,
service
->
call_type
);
end_idx
=
get_unique_oen
(
service
->
end_oen
,
service
->
call_type
);
start_idx
=
(
uint8_t
)
get_unique_oen
(
service
->
start_oen
,
service
->
call_type
);
end_idx
=
(
uint8_t
)
get_unique_oen
(
service
->
end_oen
,
service
->
call_type
);
#elif SMCCC_MAJOR_VERSION == 2
start_idx
=
get_rt_desc_idx
(
service
->
start_oen
,
service
->
is_vendor
);
end_idx
=
get_rt_desc_idx
(
service
->
end_oen
,
service
->
is_vendor
);
start_idx
=
(
uint8_t
)
get_rt_desc_idx
(
service
->
start_oen
,
service
->
is_vendor
);
end_idx
=
(
uint8_t
)
get_rt_desc_idx
(
service
->
end_oen
,
service
->
is_vendor
);
#endif
assert
(
start_idx
<=
end_idx
);
assert
(
end_idx
<
MAX_RT_SVCS
);
...
...
This diff is collapsed.
Click to expand it.
include/common/bl_common.h
View file @
5634a493
...
...
@@ -11,26 +11,26 @@
#include <param_header.h>
#include <utils_def.h>
#define UP
1
#define DOWN
0
#define UP
U(1)
#define DOWN
U(0)
/*******************************************************************************
* Constants to identify the location of a memory region in a given memory
* layout.
******************************************************************************/
#define TOP 0x1
#define BOTTOM
!TOP
#define TOP
U(
0x1
)
#define BOTTOM
U(0x0)
/*
* The following are used for image state attributes.
* Image can only be in one of the following state.
*/
#define IMAGE_STATE_RESET
0
#define IMAGE_STATE_COPIED
1
#define IMAGE_STATE_COPYING
2
#define IMAGE_STATE_AUTHENTICATED
3
#define IMAGE_STATE_EXECUTED
4
#define IMAGE_STATE_INTERRUPTED
5
#define IMAGE_STATE_RESET
U(0)
#define IMAGE_STATE_COPIED
U(1)
#define IMAGE_STATE_COPYING
U(2)
#define IMAGE_STATE_AUTHENTICATED
U(3)
#define IMAGE_STATE_EXECUTED
U(4)
#define IMAGE_STATE_INTERRUPTED
U(5)
#define IMAGE_ATTRIB_SKIP_LOADING U(0x02)
#define IMAGE_ATTRIB_PLAT_SETUP U(0x04)
...
...
@@ -40,22 +40,22 @@
/*******************************************************************************
* Constants to indicate type of exception to the common exception handler.
******************************************************************************/
#define SYNC_EXCEPTION_SP_EL0 0x0
#define IRQ_SP_EL0 0x1
#define FIQ_SP_EL0 0x2
#define SERROR_SP_EL0 0x3
#define SYNC_EXCEPTION_SP_ELX 0x4
#define IRQ_SP_ELX 0x5
#define FIQ_SP_ELX 0x6
#define SERROR_SP_ELX 0x7
#define SYNC_EXCEPTION_AARCH64 0x8
#define IRQ_AARCH64 0x9
#define FIQ_AARCH64 0xa
#define SERROR_AARCH64 0xb
#define SYNC_EXCEPTION_AARCH32 0xc
#define IRQ_AARCH32 0xd
#define FIQ_AARCH32 0xe
#define SERROR_AARCH32 0xf
#define SYNC_EXCEPTION_SP_EL0
U(
0x0
)
#define IRQ_SP_EL0
U(
0x1
)
#define FIQ_SP_EL0
U(
0x2
)
#define SERROR_SP_EL0
U(
0x3
)
#define SYNC_EXCEPTION_SP_ELX
U(
0x4
)
#define IRQ_SP_ELX
U(
0x5
)
#define FIQ_SP_ELX
U(
0x6
)
#define SERROR_SP_ELX
U(
0x7
)
#define SYNC_EXCEPTION_AARCH64
U(
0x8
)
#define IRQ_AARCH64
U(
0x9
)
#define FIQ_AARCH64
U(
0xa
)
#define SERROR_AARCH64
U(
0xb
)
#define SYNC_EXCEPTION_AARCH32
U(
0xc
)
#define IRQ_AARCH32
U(
0xd
)
#define FIQ_AARCH32
U(
0xe
)
#define SERROR_AARCH32
U(
0xf
)
#ifndef __ASSEMBLY__
#include <cassert.h>
...
...
This diff is collapsed.
Click to expand it.
include/common/fdt_wrappers.h
View file @
5634a493
...
...
@@ -10,7 +10,7 @@
#define __FDT_WRAPPERS__
/* Number of cells, given total length in bytes. Each cell is 4 bytes long */
#define NCELLS(len) ((len) / 4)
#define NCELLS(len) ((len) / 4
U
)
int
fdtw_read_cells
(
const
void
*
dtb
,
int
node
,
const
char
*
prop
,
unsigned
int
cells
,
void
*
value
);
...
...
This diff is collapsed.
Click to expand it.
include/common/runtime_svc.h
View file @
5634a493
...
...
@@ -21,15 +21,15 @@
* descriptor
*/
#ifdef AARCH32
#define RT_SVC_SIZE_LOG2
4
#define RT_SVC_DESC_INIT
8
#define RT_SVC_DESC_HANDLE 12
#define RT_SVC_SIZE_LOG2
U(4)
#define RT_SVC_DESC_INIT
U(8)
#define RT_SVC_DESC_HANDLE
U(
12
)
#else
#define RT_SVC_SIZE_LOG2
5
#define RT_SVC_DESC_INIT 16
#define RT_SVC_DESC_HANDLE 24
#define RT_SVC_SIZE_LOG2
U(5)
#define RT_SVC_DESC_INIT
U(
16
)
#define RT_SVC_DESC_HANDLE
U(
24
)
#endif
/* AARCH32 */
#define SIZEOF_RT_SVC_DESC (
1
<< RT_SVC_SIZE_LOG2)
#define SIZEOF_RT_SVC_DESC (
U(1)
<< RT_SVC_SIZE_LOG2)
/*
...
...
@@ -43,9 +43,9 @@
* handler and so the total number of runtime services is 32.
*/
#if SMCCC_MAJOR_VERSION == 1
#define MAX_RT_SVCS 128
#define MAX_RT_SVCS
U(
128
)
#elif SMCCC_MAJOR_VERSION == 2
#define MAX_RT_SVCS 32
#define MAX_RT_SVCS
U(
32
)
#endif
#ifndef __ASSEMBLY__
...
...
@@ -146,35 +146,42 @@ CASSERT(RT_SVC_DESC_HANDLE == __builtin_offsetof(rt_svc_desc_t, handle), \
#if SMCCC_MAJOR_VERSION == 1
/*
* This macro combines the call type and the owning entity number corresponding
* to a runtime service to generate a unique owning entity number. This unique
* oen is used to access an entry in the 'rt_svc_descs_indices' array. The entry
* contains the index of the service descriptor in the 'rt_svc_descs' array.
* This function combines the call type and the owning entity number
* corresponding to a runtime service to generate a unique owning entity number.
* This unique oen is used to access an entry in the 'rt_svc_descs_indices'
* array. The entry contains the index of the service descriptor in the
* 'rt_svc_descs' array.
*/
#define get_unique_oen(oen, call_type) \
(((uint32_t)(oen) & FUNCID_OEN_MASK) | \
(((uint32_t)(call_type) & FUNCID_TYPE_MASK) << FUNCID_OEN_WIDTH))
static
inline
uint32_t
get_unique_oen
(
uint32_t
oen
,
uint32_t
call_type
)
{
return
((
call_type
&
FUNCID_TYPE_MASK
)
<<
FUNCID_OEN_WIDTH
)
|
(
oen
&
FUNCID_OEN_MASK
);
}
/*
* This
macro
generates the unique owning entity number from the SMC Function
* This
function
generates the unique owning entity number from the SMC Function
* ID. This unique oen is used to access an entry in the 'rt_svc_descs_indices'
* array to invoke the corresponding runtime service handler during SMC
* handling.
*/
#define get_unique_oen_from_smc_fid(fid) \
get_unique_oen(GET_SMC_OEN(fid), GET_SMC_TYPE(fid))
static
inline
uint32_t
get_unique_oen_from_smc_fid
(
uint32_t
fid
)
{
return
get_unique_oen
(
GET_SMC_OEN
(
fid
),
GET_SMC_TYPE
(
fid
));
}
#elif SMCCC_MAJOR_VERSION == 2
/*
* This
macro
combines the owning entity number corresponding to a runtime
* This
function
combines the owning entity number corresponding to a runtime
* service with one extra bit for the vendor namespace to generate an index into
* the 'rt_svc_descs_indices' array. The entry contains the index of the service
* descriptor in the 'rt_svc_descs' array.
*/
#define get_rt_desc_idx(oen, is_vendor) \
(((uint32_t)(oen) & FUNCID_OEN_MASK) | \
(((uint32_t)(is_vendor) & 1U) << FUNCID_OEN_WIDTH))
static
inline
uint32_t
get_rt_desc_idx
(
uint32_t
oen
,
uint32_t
is_vendor
)
{
return
((
is_vendor
&
1U
)
<<
FUNCID_OEN_WIDTH
)
|
(
oen
&
FUNCID_OEN_MASK
);
}
#endif
...
...
This diff is collapsed.
Click to expand it.
include/lib/aarch32/smccc_helpers.h
View file @
5634a493
...
...
@@ -10,19 +10,19 @@
#include <smccc.h>
/* These are offsets to registers in smc_ctx_t */
#define SMC_CTX_GPREG_R0 0x0
#define SMC_CTX_GPREG_R1 0x4
#define SMC_CTX_GPREG_R2 0x8
#define SMC_CTX_GPREG_R3 0xC
#define SMC_CTX_GPREG_R4 0x10
#define SMC_CTX_GPREG_R5 0x14
#define SMC_CTX_SP_USR 0x34
#define SMC_CTX_SPSR_MON 0x78
#define SMC_CTX_SP_MON 0x7C
#define SMC_CTX_LR_MON 0x80
#define SMC_CTX_SCR 0x84
#define SMC_CTX_PMCR 0x88
#define SMC_CTX_SIZE 0x90
#define SMC_CTX_GPREG_R0
U(
0x0
)
#define SMC_CTX_GPREG_R1
U(
0x4
)
#define SMC_CTX_GPREG_R2
U(
0x8
)
#define SMC_CTX_GPREG_R3
U(
0xC
)
#define SMC_CTX_GPREG_R4
U(
0x10
)
#define SMC_CTX_GPREG_R5
U(
0x14
)
#define SMC_CTX_SP_USR
U(
0x34
)
#define SMC_CTX_SPSR_MON
U(
0x78
)
#define SMC_CTX_SP_MON
U(
0x7C
)
#define SMC_CTX_LR_MON
U(
0x80
)
#define SMC_CTX_SCR
U(
0x84
)
#define SMC_CTX_PMCR
U(
0x88
)
#define SMC_CTX_SIZE
U(
0x90
)
#ifndef __ASSEMBLY__
#include <cassert.h>
...
...
@@ -105,7 +105,7 @@ CASSERT(SMC_CTX_LR_MON == __builtin_offsetof(smc_ctx_t, lr_mon), \
CASSERT
(
SMC_CTX_SPSR_MON
==
__builtin_offsetof
(
smc_ctx_t
,
spsr_mon
),
\
assert_smc_ctx_spsr_mon_offset_mismatch
);
CASSERT
((
sizeof
(
smc_ctx_t
)
&
0x7
)
==
0
,
assert_smc_ctx_not_aligned
);
CASSERT
((
sizeof
(
smc_ctx_t
)
&
0x7
U
)
==
0
U
,
assert_smc_ctx_not_aligned
);
CASSERT
(
SMC_CTX_SIZE
==
sizeof
(
smc_ctx_t
),
assert_smc_ctx_size_mismatch
);
/* Convenience macros to return from SMC handler */
...
...
This diff is collapsed.
Click to expand it.
include/lib/aarch64/smccc_helpers.h
View file @
5634a493
...
...
@@ -11,6 +11,7 @@
#ifndef __ASSEMBLY__
#include <context.h>
#include <stdbool.h>
/* Convenience macros to return from SMC handler */
#define SMC_RET0(_h) { \
...
...
@@ -77,7 +78,7 @@
_x2 = read_ctx_reg(regs, CTX_GPREG_X2); \
_x3 = read_ctx_reg(regs, CTX_GPREG_X3); \
_x4 = read_ctx_reg(regs, CTX_GPREG_X4); \
} while (
0
)
} while (
false
)
#endif
/*__ASSEMBLY__*/
...
...
This diff is collapsed.
Click to expand it.
include/lib/pmf/pmf_asm_macros.S
View file @
5634a493
/*
*
Copyright
(
c
)
2016
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2016
-
2018
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
...
...
@@ -14,7 +14,7 @@
*
for
the
given
service
name
and
local
timestamp
id
.
*
Clobbers
:
x0
-
x9
*/
.
macro
pmf_calc_timestamp_addr
_name
_tid
.
macro
pmf_calc_timestamp_addr
_name
,
_tid
mov
x9
,
x30
bl
plat_my_core_pos
mov
x30
,
x9
...
...
This diff is collapsed.
Click to expand it.
include/lib/runtime_instr.h
View file @
5634a493
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016
-2018
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -7,13 +7,15 @@
#ifndef __RUNTIME_INSTR_H__
#define __RUNTIME_INSTR_H__
#define RT_INSTR_ENTER_PSCI 0
#define RT_INSTR_EXIT_PSCI 1
#define RT_INSTR_ENTER_HW_LOW_PWR 2
#define RT_INSTR_EXIT_HW_LOW_PWR 3
#define RT_INSTR_ENTER_CFLUSH 4
#define RT_INSTR_EXIT_CFLUSH 5
#define RT_INSTR_TOTAL_IDS 6
#include <utils_def.h>
#define RT_INSTR_ENTER_PSCI U(0)
#define RT_INSTR_EXIT_PSCI U(1)
#define RT_INSTR_ENTER_HW_LOW_PWR U(2)
#define RT_INSTR_EXIT_HW_LOW_PWR U(3)
#define RT_INSTR_ENTER_CFLUSH U(4)
#define RT_INSTR_EXIT_CFLUSH U(5)
#define RT_INSTR_TOTAL_IDS U(6)
#ifndef __ASSEMBLY__
PMF_DECLARE_CAPTURE_TIMESTAMP
(
rt_instr_svc
)
...
...
This diff is collapsed.
Click to expand it.
include/plat/common/common_def.h
View file @
5634a493
...
...
@@ -8,6 +8,7 @@
#include <bl_common.h>
#include <platform_def.h>
#include <utils_def.h>
#include <xlat_tables_defs.h>
/******************************************************************************
...
...
@@ -73,12 +74,12 @@
#define BL2_RO_DATA_END round_up(BL2_ROM_END, PAGE_SIZE)
#endif
/* BL2_IN_XIP_MEM */
#else
#define BL_RO_DATA_BASE
0
#define BL_RO_DATA_END
0
#define BL_RO_DATA_BASE
UL(0)
#define BL_RO_DATA_END
UL(0)
#define BL1_CODE_END round_up(BL1_ROM_END, PAGE_SIZE)
#if BL2_IN_XIP_MEM
#define BL2_RO_DATA_BASE
0
#define BL2_RO_DATA_END
0
#define BL2_RO_DATA_BASE
UL(0)
#define BL2_RO_DATA_END
UL(0)
#define BL2_CODE_END round_up(BL2_ROM_END, PAGE_SIZE)
#endif
/* BL2_IN_XIP_MEM */
#endif
/* SEPARATE_CODE_AND_RODATA */
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help