xref: /arm-trusted-firmware/plat/mediatek/common/mtk_plat_common.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #include <arch_helpers.h>
8*91f16700Schasinglulu #include <common/bl_common.h>
9*91f16700Schasinglulu #include <common/debug.h>
10*91f16700Schasinglulu #include <drivers/arm/cci.h>
11*91f16700Schasinglulu #include <drivers/console.h>
12*91f16700Schasinglulu #include <lib/mmio.h>
13*91f16700Schasinglulu #include <lib/smccc.h>
14*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables.h>
15*91f16700Schasinglulu #include <plat/common/platform.h>
16*91f16700Schasinglulu #include <services/arm_arch_svc.h>
17*91f16700Schasinglulu 
18*91f16700Schasinglulu #include <mtk_plat_common.h>
19*91f16700Schasinglulu #include <mtk_sip_svc.h>
20*91f16700Schasinglulu #include <plat_private.h>
21*91f16700Schasinglulu 
22*91f16700Schasinglulu void clean_top_32b_of_param(uint32_t smc_fid,
23*91f16700Schasinglulu 				u_register_t *px1,
24*91f16700Schasinglulu 				u_register_t *px2,
25*91f16700Schasinglulu 				u_register_t *px3,
26*91f16700Schasinglulu 				u_register_t *px4)
27*91f16700Schasinglulu {
28*91f16700Schasinglulu 	/* if parameters from SMC32. Clean top 32 bits */
29*91f16700Schasinglulu 	if (GET_SMC_CC(smc_fid) == SMC_64) {
30*91f16700Schasinglulu 		*px1 = *px1 & SMC32_PARAM_MASK;
31*91f16700Schasinglulu 		*px2 = *px2 & SMC32_PARAM_MASK;
32*91f16700Schasinglulu 		*px3 = *px3 & SMC32_PARAM_MASK;
33*91f16700Schasinglulu 		*px4 = *px4 & SMC32_PARAM_MASK;
34*91f16700Schasinglulu 	}
35*91f16700Schasinglulu }
36*91f16700Schasinglulu 
37*91f16700Schasinglulu /*****************************************************************************
38*91f16700Schasinglulu  * plat_is_smccc_feature_available() - This function checks whether SMCCC
39*91f16700Schasinglulu  *                                     feature is availabile for platform.
40*91f16700Schasinglulu  * @fid: SMCCC function id
41*91f16700Schasinglulu  *
42*91f16700Schasinglulu  * Return SMC_OK if SMCCC feature is available and SMC_ARCH_CALL_NOT_SUPPORTED
43*91f16700Schasinglulu  * otherwise.
44*91f16700Schasinglulu  *****************************************************************************/
45*91f16700Schasinglulu int32_t plat_is_smccc_feature_available(u_register_t fid)
46*91f16700Schasinglulu {
47*91f16700Schasinglulu 	switch (fid) {
48*91f16700Schasinglulu 	case SMCCC_ARCH_SOC_ID:
49*91f16700Schasinglulu 		return SMC_ARCH_CALL_SUCCESS;
50*91f16700Schasinglulu 	default:
51*91f16700Schasinglulu 		return SMC_ARCH_CALL_NOT_SUPPORTED;
52*91f16700Schasinglulu 	}
53*91f16700Schasinglulu }
54*91f16700Schasinglulu 
55*91f16700Schasinglulu int32_t plat_get_soc_version(void)
56*91f16700Schasinglulu {
57*91f16700Schasinglulu 	uint32_t manfid = SOC_ID_SET_JEP_106(JEDEC_MTK_BKID, JEDEC_MTK_MFID);
58*91f16700Schasinglulu 
59*91f16700Schasinglulu 	return (int32_t)(manfid | (SOC_CHIP_ID & SOC_ID_IMPL_DEF_MASK));
60*91f16700Schasinglulu }
61*91f16700Schasinglulu 
62*91f16700Schasinglulu int32_t plat_get_soc_revision(void)
63*91f16700Schasinglulu {
64*91f16700Schasinglulu 	return 0;
65*91f16700Schasinglulu }
66