Commit ea32cf50 authored by Manish Pandey's avatar Manish Pandey Committed by TrustedFirmware Code Review
Browse files

Merge "Implement SMCCC_ARCH_SOC_ID SMC call" into integration

parents cfb3f733 0e753437
...@@ -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
--------------------------------------------- ---------------------------------------------
......
...@@ -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 */
...@@ -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 */
/* /*
* 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 */
...@@ -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());
}
...@@ -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)
{ {
......
/* /*
* Copyright (c) 2018-2019, 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
*/ */
...@@ -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 arg1, u_register_t arg2)
{ {
switch (arg) { switch (arg1) {
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:
/* /*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment