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
bb37363b
Commit
bb37363b
authored
Mar 13, 2020
by
Sandrine Bailleux
Committed by
TrustedFirmware Code Review
Mar 13, 2020
Browse files
Merge "SPMD: Add support for SPCI_ID_GET" into integration
parents
6b354cf3
ac03ac5e
Changes
5
Show whitespace changes
Inline
Side-by-side
include/services/spm_core_manifest.h
View file @
bb37363b
...
@@ -43,6 +43,11 @@ typedef struct spm_core_manifest_sect_attribute {
...
@@ -43,6 +43,11 @@ typedef struct spm_core_manifest_sect_attribute {
*/
*/
uint32_t
binary_size
;
uint32_t
binary_size
;
/*
* ID of the SPMD (mandatory)
*/
uint16_t
spmc_id
;
}
spmc_manifest_sect_attribute_t
;
}
spmc_manifest_sect_attribute_t
;
#endif
/* SPMC_MANIFEST_H */
#endif
/* SPMC_MANIFEST_H */
plat/arm/board/fvp/fdts/fvp_spmc_manifest.dts
View file @
bb37363b
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
compatible = "spci-core-manifest-1.0";
compatible = "spci-core-manifest-1.0";
attribute {
attribute {
spmc_id = <0x8000>;
maj_ver = <0x0>;
maj_ver = <0x0>;
min_ver = <0x9>;
min_ver = <0x9>;
exec_state = <0x0>;
exec_state = <0x0>;
...
...
plat/common/plat_spmd_manifest.c
View file @
bb37363b
...
@@ -37,6 +37,12 @@ static int manifest_parse_attribute(spmc_manifest_sect_attribute_t *attr,
...
@@ -37,6 +37,12 @@ static int manifest_parse_attribute(spmc_manifest_sect_attribute_t *attr,
return
-
ENOENT
;
return
-
ENOENT
;
}
}
rc
=
fdtw_read_cells
(
fdt
,
node
,
"spmc_id"
,
1
,
&
attr
->
spmc_id
);
if
(
rc
)
{
ERROR
(
"Missing SPMC ID in manifest.
\n
"
);
return
-
ENOENT
;
}
rc
=
fdtw_read_cells
(
fdt
,
node
,
"exec_state"
,
1
,
&
attr
->
exec_state
);
rc
=
fdtw_read_cells
(
fdt
,
node
,
"exec_state"
,
1
,
&
attr
->
exec_state
);
if
(
rc
)
if
(
rc
)
NOTICE
(
"Execution state not specified in SPM core manifest.
\n
"
);
NOTICE
(
"Execution state not specified in SPM core manifest.
\n
"
);
...
@@ -55,6 +61,7 @@ static int manifest_parse_attribute(spmc_manifest_sect_attribute_t *attr,
...
@@ -55,6 +61,7 @@ static int manifest_parse_attribute(spmc_manifest_sect_attribute_t *attr,
VERBOSE
(
"SPM core manifest attribute section:
\n
"
);
VERBOSE
(
"SPM core manifest attribute section:
\n
"
);
VERBOSE
(
" version: %x.%x
\n
"
,
attr
->
major_version
,
attr
->
minor_version
);
VERBOSE
(
" version: %x.%x
\n
"
,
attr
->
major_version
,
attr
->
minor_version
);
VERBOSE
(
" spmc_id: %x
\n
"
,
attr
->
spmc_id
);
VERBOSE
(
" binary_size: 0x%x
\n
"
,
attr
->
binary_size
);
VERBOSE
(
" binary_size: 0x%x
\n
"
,
attr
->
binary_size
);
VERBOSE
(
" load_address: 0x%llx
\n
"
,
attr
->
load_address
);
VERBOSE
(
" load_address: 0x%llx
\n
"
,
attr
->
load_address
);
VERBOSE
(
" entrypoint: 0x%llx
\n
"
,
attr
->
entrypoint
);
VERBOSE
(
" entrypoint: 0x%llx
\n
"
,
attr
->
entrypoint
);
...
...
services/std_svc/spmd/spmd_main.c
View file @
bb37363b
...
@@ -162,6 +162,16 @@ static int spmd_spmc_init(void *rd_base, size_t rd_size)
...
@@ -162,6 +162,16 @@ static int spmd_spmc_init(void *rd_base, size_t rd_size)
INFO
(
"SPM core run time EL%x.
\n
"
,
INFO
(
"SPM core run time EL%x.
\n
"
,
SPMD_SPM_AT_SEL2
?
MODE_EL2
:
MODE_EL1
);
SPMD_SPM_AT_SEL2
?
MODE_EL2
:
MODE_EL1
);
/* Validate the SPMC ID, Ensure high bit is set */
if
(
!
(
spmc_attrs
.
spmc_id
>>
SPMC_SECURE_ID_SHIFT
)
&
SPMC_SECURE_ID_MASK
)
{
WARN
(
"Invalid ID (0x%x) for SPMC.
\n
"
,
spmc_attrs
.
spmc_id
);
return
1
;
}
INFO
(
"SPMC ID %x.
\n
"
,
spmc_attrs
.
spmc_id
);
/* Validate the SPM core execution state */
/* Validate the SPM core execution state */
if
((
spmc_attrs
.
exec_state
!=
MODE_RW_64
)
&&
if
((
spmc_attrs
.
exec_state
!=
MODE_RW_64
)
&&
(
spmc_attrs
.
exec_state
!=
MODE_RW_32
))
{
(
spmc_attrs
.
exec_state
!=
MODE_RW_32
))
{
...
@@ -436,6 +446,26 @@ uint64_t spmd_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
...
@@ -436,6 +446,26 @@ uint64_t spmd_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
break
;
/* not reached */
break
;
/* not reached */
case
SPCI_ID_GET
:
/*
* Returns the ID of the calling SPCI component.
*/
if
(
!
secure_origin
)
{
SMC_RET8
(
handle
,
SPCI_SUCCESS_SMC32
,
SPCI_TARGET_INFO_MBZ
,
SPCI_NS_ENDPOINT_ID
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
);
}
else
{
SMC_RET8
(
handle
,
SPCI_SUCCESS_SMC32
,
SPCI_TARGET_INFO_MBZ
,
spmc_attrs
.
spmc_id
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
,
SPCI_PARAM_MBZ
);
}
break
;
/* not reached */
case
SPCI_RX_RELEASE
:
case
SPCI_RX_RELEASE
:
case
SPCI_RXTX_MAP_SMC32
:
case
SPCI_RXTX_MAP_SMC32
:
case
SPCI_RXTX_MAP_SMC64
:
case
SPCI_RXTX_MAP_SMC64
:
...
...
services/std_svc/spmd/spmd_private.h
View file @
bb37363b
...
@@ -54,6 +54,15 @@ typedef struct spmd_spm_core_context {
...
@@ -54,6 +54,15 @@ typedef struct spmd_spm_core_context {
spmc_state_t
state
;
spmc_state_t
state
;
}
spmd_spm_core_context_t
;
}
spmd_spm_core_context_t
;
/*
* Reserve ID for NS physical SPCI Endpoint.
*/
#define SPCI_NS_ENDPOINT_ID U(0)
/* Mask and shift to check valid secure SPCI Endpoint ID. */
#define SPMC_SECURE_ID_MASK 0x1
#define SPMC_SECURE_ID_SHIFT 15
/*
/*
* Data structure used by the SPM dispatcher (SPMD) in EL3 to track sequence of
* Data structure used by the SPM dispatcher (SPMD) in EL3 to track sequence of
* SPCI calls from lower ELs.
* SPCI calls from lower ELs.
...
...
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