1*079c6e24SAkshay Belsare /* 2*079c6e24SAkshay Belsare * Copyright (c) 2023, Advanced Micro Devices, Inc. All rights reserved. 3*079c6e24SAkshay Belsare * 4*079c6e24SAkshay Belsare * SPDX-License-Identifier: BSD-3-Clause 5*079c6e24SAkshay Belsare */ 6*079c6e24SAkshay Belsare 7*079c6e24SAkshay Belsare #include <common/debug.h> 8*079c6e24SAkshay Belsare #include <lib/mmio.h> 9*079c6e24SAkshay Belsare #include <lib/smccc.h> 10*079c6e24SAkshay Belsare #include <services/arm_arch_svc.h> 11*079c6e24SAkshay Belsare 12*079c6e24SAkshay Belsare #include <plat_private.h> 13*079c6e24SAkshay Belsare #include <plat_startup.h> 14*079c6e24SAkshay Belsare #include <pm_api_sys.h> 15*079c6e24SAkshay Belsare 16*079c6e24SAkshay Belsare /** 17*079c6e24SAkshay Belsare * plat_is_smccc_feature_available() - This function checks whether SMCCC 18*079c6e24SAkshay Belsare * feature is availabile for platform. 19*079c6e24SAkshay Belsare * @fid: SMCCC function id 20*079c6e24SAkshay Belsare * 21*079c6e24SAkshay Belsare * Return: 22*079c6e24SAkshay Belsare * * SMC_ARCH_CALL_SUCCESS - if SMCCC feature is available 23*079c6e24SAkshay Belsare * * SMC_ARCH_CALL_NOT_SUPPORTED - Otherwise 24*079c6e24SAkshay Belsare */ 25*079c6e24SAkshay Belsare int32_t plat_is_smccc_feature_available(u_register_t fid) 26*079c6e24SAkshay Belsare { 27*079c6e24SAkshay Belsare switch (fid) { 28*079c6e24SAkshay Belsare case SMCCC_ARCH_SOC_ID: 29*079c6e24SAkshay Belsare return SMC_ARCH_CALL_SUCCESS; 30*079c6e24SAkshay Belsare default: 31*079c6e24SAkshay Belsare return SMC_ARCH_CALL_NOT_SUPPORTED; 32*079c6e24SAkshay Belsare } 33*079c6e24SAkshay Belsare } 34*079c6e24SAkshay Belsare 35*079c6e24SAkshay Belsare /** 36*079c6e24SAkshay Belsare * plat_get_soc_version() - Get the SOC version of the platform 37*079c6e24SAkshay Belsare * 38*079c6e24SAkshay Belsare * This function is called when the SoC_ID_type == 0. 39*079c6e24SAkshay Belsare * For further details please refer to section 7.4 of SMC Calling Convention 40*079c6e24SAkshay Belsare * 41*079c6e24SAkshay Belsare * Return: SiP defined SoC version in JEP-106 42*079c6e24SAkshay Belsare */ 43*079c6e24SAkshay Belsare int32_t plat_get_soc_version(void) 44*079c6e24SAkshay Belsare { 45*079c6e24SAkshay Belsare uint32_t manfid; 46*079c6e24SAkshay Belsare 47*079c6e24SAkshay Belsare manfid = SOC_ID_SET_JEP_106(JEDEC_XILINX_BKID, JEDEC_XILINX_MFID); 48*079c6e24SAkshay Belsare 49*079c6e24SAkshay Belsare return (int32_t)(manfid | (platform_version & SOC_ID_IMPL_DEF_MASK)); 50*079c6e24SAkshay Belsare } 51*079c6e24SAkshay Belsare 52*079c6e24SAkshay Belsare /** 53*079c6e24SAkshay Belsare * plat_get_soc_revision() - Get the SOC revision for the platform 54*079c6e24SAkshay Belsare * 55*079c6e24SAkshay Belsare * This function is called when the SoC_ID_type == 1 56*079c6e24SAkshay Belsare * For further details please refer to section 7.4 of SMC Calling Convention 57*079c6e24SAkshay Belsare * 58*079c6e24SAkshay Belsare * Return: SiP defined SoC revision 59*079c6e24SAkshay Belsare */ 60*079c6e24SAkshay Belsare int32_t plat_get_soc_revision(void) 61*079c6e24SAkshay Belsare { 62*079c6e24SAkshay Belsare return (platform_id & SOC_ID_REV_MASK); 63*079c6e24SAkshay Belsare } 64