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
ea32cf50
Commit
ea32cf50
authored
Mar 18, 2020
by
Manish Pandey
Committed by
TrustedFirmware Code Review
Mar 18, 2020
Browse files
Merge "Implement SMCCC_ARCH_SOC_ID SMC call" into integration
parents
cfb3f733
0e753437
Changes
7
Show whitespace changes
Inline
Side-by-side
docs/getting_started/porting-guide.rst
View file @
ea32cf50
...
@@ -1116,6 +1116,35 @@ can override the common implementation to define a different prefix string for
...
@@ -1116,6 +1116,35 @@ can override the common implementation to define a different prefix string for
the log output. The implementation should be robust to future changes that
the log output. The implementation should be robust to future changes that
increase the number of log levels.
increase the number of log levels.
Function : plat_get_soc_version()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
Argument : void
Return : int32_t
This function returns soc version which mainly consist of below fields
::
soc_version[30:24] = JEP-106 continuation code for the SiP
soc_version[23:16] = JEP-106 identification code with parity bit for the SiP
Function : plat_get_soc_revision()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
Argument : void
Return : int32_t
This function returns soc revision in below format
::
soc_revision[0:30] = SOC revision of specific SOC
Modifications specific to a Boot Loader stage
Modifications specific to a Boot Loader stage
---------------------------------------------
---------------------------------------------
...
...
include/plat/arm/common/plat_arm.h
View file @
ea32cf50
...
@@ -148,6 +148,12 @@ void arm_setup_romlib(void);
...
@@ -148,6 +148,12 @@ void arm_setup_romlib(void);
#define ARM_ROTPK_DEVEL_RSA_ID 2
#define ARM_ROTPK_DEVEL_RSA_ID 2
#define ARM_ROTPK_DEVEL_ECDSA_ID 3
#define ARM_ROTPK_DEVEL_ECDSA_ID 3
/* Defines used to retrieve ARM SOC revision */
#define ARM_SOC_CONTINUATION_CODE U(0x4)
#define ARM_SOC_IDENTIFICATION_CODE U(0x3B)
#define ARM_SOC_CONTINUATION_SHIFT U(24)
#define ARM_SOC_IDENTIFICATION_SHIFT U(16)
/* IO storage utility functions */
/* IO storage utility functions */
int
arm_io_setup
(
void
);
int
arm_io_setup
(
void
);
...
@@ -323,4 +329,7 @@ extern const unsigned int arm_pm_idle_states[];
...
@@ -323,4 +329,7 @@ extern const unsigned int arm_pm_idle_states[];
void
plat_arm_secure_wdt_start
(
void
);
void
plat_arm_secure_wdt_start
(
void
);
void
plat_arm_secure_wdt_stop
(
void
);
void
plat_arm_secure_wdt_stop
(
void
);
/* Get SOC-ID of ARM platform */
uint32_t
plat_arm_get_soc_id
(
void
);
#endif
/* PLAT_ARM_H */
#endif
/* PLAT_ARM_H */
include/plat/common/platform.h
View file @
ea32cf50
...
@@ -322,4 +322,14 @@ void plat_flush_next_bl_params(void);
...
@@ -322,4 +322,14 @@ void plat_flush_next_bl_params(void);
*/
*/
unsigned
int
platform_core_pos_helper
(
unsigned
long
mpidr
);
unsigned
int
platform_core_pos_helper
(
unsigned
long
mpidr
);
/*
* Optional function to get SOC version
*/
int32_t
plat_get_soc_version
(
void
);
/*
* Optional function to get SOC revision
*/
int32_t
plat_get_soc_revision
(
void
);
#endif
/* PLATFORM_H */
#endif
/* PLATFORM_H */
include/services/arm_arch_svc.h
View file @
ea32cf50
/*
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2018
-2020
, ARM Limited and Contributors. All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: BSD-3-Clause
*/
*/
...
@@ -9,7 +9,11 @@
...
@@ -9,7 +9,11 @@
#define SMCCC_VERSION U(0x80000000)
#define SMCCC_VERSION U(0x80000000)
#define SMCCC_ARCH_FEATURES U(0x80000001)
#define SMCCC_ARCH_FEATURES U(0x80000001)
#define SMCCC_ARCH_SOC_ID U(0x80000002)
#define SMCCC_ARCH_WORKAROUND_1 U(0x80008000)
#define SMCCC_ARCH_WORKAROUND_1 U(0x80008000)
#define SMCCC_ARCH_WORKAROUND_2 U(0x80007FFF)
#define SMCCC_ARCH_WORKAROUND_2 U(0x80007FFF)
#define SMCCC_GET_SOC_VERSION U(0)
#define SMCCC_GET_SOC_REVISION U(1)
#endif
/* ARM_ARCH_SVC_H */
#endif
/* ARM_ARCH_SVC_H */
plat/arm/common/arm_common.c
View file @
ea32cf50
...
@@ -25,6 +25,9 @@
...
@@ -25,6 +25,9 @@
* conflicts with the definition in plat/common. */
* conflicts with the definition in plat/common. */
#pragma weak plat_get_syscnt_freq2
#pragma weak plat_get_syscnt_freq2
/* Get ARM SOC-ID */
#pragma weak plat_arm_get_soc_id
/*******************************************************************************
/*******************************************************************************
* Changes the memory attributes for the region of mapped memory where the BL
* Changes the memory attributes for the region of mapped memory where the BL
* image's translation tables are located such that the tables will have
* image's translation tables are located such that the tables will have
...
@@ -231,3 +234,22 @@ int plat_sdei_validate_entry_point(uintptr_t ep, unsigned int client_mode)
...
@@ -231,3 +234,22 @@ int plat_sdei_validate_entry_point(uintptr_t ep, unsigned int client_mode)
return
arm_validate_ns_entrypoint
(
pa
);
return
arm_validate_ns_entrypoint
(
pa
);
}
}
#endif
#endif
/*
* Weak function to get ARM platform SOC-ID, Always return SOC-ID=0
* ToDo: Get proper SOC-ID for every ARM platform and define this
* function separately for every ARM platform.
*/
uint32_t
plat_arm_get_soc_id
(
void
)
{
return
0U
;
}
/* Get SOC version */
int32_t
plat_get_soc_version
(
void
)
{
return
(
int32_t
)
((
ARM_SOC_IDENTIFICATION_CODE
<<
ARM_SOC_IDENTIFICATION_SHIFT
)
|
(
ARM_SOC_CONTINUATION_CODE
<<
ARM_SOC_CONTINUATION_SHIFT
)
|
plat_arm_get_soc_id
());
}
plat/common/plat_bl_common.c
View file @
ea32cf50
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
#include <common/debug.h>
#include <common/debug.h>
#include <lib/xlat_tables/xlat_tables_compat.h>
#include <lib/xlat_tables/xlat_tables_compat.h>
#include <plat/common/platform.h>
#include <plat/common/platform.h>
#include <smccc_helpers.h>
#include <tools_share/firmware_encrypted.h>
#include <tools_share/firmware_encrypted.h>
/*
/*
...
@@ -24,6 +25,18 @@
...
@@ -24,6 +25,18 @@
#pragma weak bl2_plat_handle_post_image_load
#pragma weak bl2_plat_handle_post_image_load
#pragma weak plat_try_next_boot_source
#pragma weak plat_try_next_boot_source
#pragma weak plat_get_enc_key_info
#pragma weak plat_get_enc_key_info
#pragma weak plat_get_soc_version
#pragma weak plat_get_soc_revision
int32_t
plat_get_soc_version
(
void
)
{
return
SMC_ARCH_CALL_NOT_SUPPORTED
;
}
int32_t
plat_get_soc_revision
(
void
)
{
return
SMC_ARCH_CALL_NOT_SUPPORTED
;
}
void
bl2_el3_plat_prepare_exit
(
void
)
void
bl2_el3_plat_prepare_exit
(
void
)
{
{
...
...
services/arm_arch_svc/arm_arch_svc_setup.c
View file @
ea32cf50
/*
/*
* Copyright (c) 2018-20
19
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2018-20
20
, ARM Limited and Contributors. All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: BSD-3-Clause
*/
*/
...
@@ -12,18 +12,27 @@
...
@@ -12,18 +12,27 @@
#include <lib/smccc.h>
#include <lib/smccc.h>
#include <services/arm_arch_svc.h>
#include <services/arm_arch_svc.h>
#include <smccc_helpers.h>
#include <smccc_helpers.h>
#include <plat/common/platform.h>
static
int32_t
smccc_version
(
void
)
static
int32_t
smccc_version
(
void
)
{
{
return
MAKE_SMCCC_VERSION
(
SMCCC_MAJOR_VERSION
,
SMCCC_MINOR_VERSION
);
return
MAKE_SMCCC_VERSION
(
SMCCC_MAJOR_VERSION
,
SMCCC_MINOR_VERSION
);
}
}
static
int32_t
smccc_arch_features
(
u_register_t
arg
)
static
int32_t
smccc_arch_features
(
u_register_t
arg
1
,
u_register_t
arg2
)
{
{
switch
(
arg
)
{
switch
(
arg
1
)
{
case
SMCCC_VERSION
:
case
SMCCC_VERSION
:
case
SMCCC_ARCH_FEATURES
:
case
SMCCC_ARCH_FEATURES
:
return
SMC_OK
;
return
SMC_OK
;
case
SMCCC_ARCH_SOC_ID
:
if
(
arg2
==
SMCCC_GET_SOC_REVISION
)
{
return
plat_get_soc_revision
();
}
if
(
arg2
==
SMCCC_GET_SOC_VERSION
)
{
return
plat_get_soc_version
();
}
return
SMC_ARCH_CALL_INVAL_PARAM
;
#if WORKAROUND_CVE_2017_5715
#if WORKAROUND_CVE_2017_5715
case
SMCCC_ARCH_WORKAROUND_1
:
case
SMCCC_ARCH_WORKAROUND_1
:
if
(
check_wa_cve_2017_5715
()
==
ERRATA_NOT_APPLIES
)
if
(
check_wa_cve_2017_5715
()
==
ERRATA_NOT_APPLIES
)
...
@@ -94,7 +103,7 @@ static uintptr_t arm_arch_svc_smc_handler(uint32_t smc_fid,
...
@@ -94,7 +103,7 @@ static uintptr_t arm_arch_svc_smc_handler(uint32_t smc_fid,
case
SMCCC_VERSION
:
case
SMCCC_VERSION
:
SMC_RET1
(
handle
,
smccc_version
());
SMC_RET1
(
handle
,
smccc_version
());
case
SMCCC_ARCH_FEATURES
:
case
SMCCC_ARCH_FEATURES
:
SMC_RET1
(
handle
,
smccc_arch_features
(
x1
));
SMC_RET1
(
handle
,
smccc_arch_features
(
x1
,
x2
));
#if WORKAROUND_CVE_2017_5715
#if WORKAROUND_CVE_2017_5715
case
SMCCC_ARCH_WORKAROUND_1
:
case
SMCCC_ARCH_WORKAROUND_1
:
/*
/*
...
...
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