blob: cef42f46cbc3f3e87cc8987a16a737fb8604bdc2 [file] [log] [blame]
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +05301/*
Chandni Cherukuric873efc2023-02-16 20:22:32 +05302 * Copyright (c) 2020-2023, Arm Limited. All rights reserved.
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +05303 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +05307#include <drivers/arm/css/css_mhu_doorbell.h>
8#include <drivers/arm/css/scmi.h>
Chandni Cherukuric873efc2023-02-16 20:22:32 +05309#include <drivers/arm/css/sds.h>
10#include <lib/smccc.h>
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053011#include <plat/arm/common/plat_arm.h>
Chandni Cherukuric873efc2023-02-16 20:22:32 +053012#include <services/arm_arch_svc.h>
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053013
14#include "morello_def.h"
15#include <platform_def.h>
16
Werner Lewisd72ac0d2023-03-22 10:20:53 +000017#ifdef TARGET_PLATFORM_SOC
Chandni Cherukuric873efc2023-02-16 20:22:32 +053018struct morello_plat_info plat_info;
19#endif
20
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053021static scmi_channel_plat_info_t morello_scmi_plat_info = {
22 .scmi_mbx_mem = MORELLO_SCMI_PAYLOAD_BASE,
23 .db_reg_addr = PLAT_CSS_MHU_BASE + CSS_SCMI_MHU_DB_REG_OFF,
24 .db_preserve_mask = 0xfffffffe,
25 .db_modify_mask = 0x1,
26 .ring_doorbell = &mhu_ring_doorbell
27};
28
Tony K Nadackal1b116a82022-12-07 20:44:05 +000029scmi_channel_plat_info_t *plat_css_get_scmi_info(unsigned int channel_id)
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053030{
31 return &morello_scmi_plat_info;
32}
33
34const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops)
35{
36 return css_scmi_override_pm_ops(ops);
37}
38
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053039void bl31_platform_setup(void)
40{
Chandni Cherukuric873efc2023-02-16 20:22:32 +053041#ifdef TARGET_PLATFORM_SOC
42 int ret;
43
44 ret = sds_init();
45 if (ret != SDS_OK) {
46 ERROR("SDS initialization failed. ret:%d\n", ret);
47 panic();
48 }
49
50 ret = sds_struct_read(MORELLO_SDS_PLATFORM_INFO_STRUCT_ID,
51 MORELLO_SDS_PLATFORM_INFO_OFFSET,
52 &plat_info,
53 MORELLO_SDS_PLATFORM_INFO_SIZE,
54 SDS_ACCESS_MODE_NON_CACHED);
55 if (ret != SDS_OK) {
56 ERROR("Error getting platform info from SDS. ret:%d\n", ret);
57 panic();
58 }
59#endif
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053060 arm_bl31_platform_setup();
Chandni Cherukurif3a6cab2020-09-22 18:56:25 +053061}
Chandni Cherukuric873efc2023-02-16 20:22:32 +053062
63#ifdef TARGET_PLATFORM_SOC
64/*****************************************************************************
65 * plat_is_smccc_feature_available() - This function checks whether SMCCC
66 * feature is availabile for platform.
67 * @fid: SMCCC function id
68 *
69 * Return SMC_ARCH_CALL_SUCCESS if SMCCC feature is available and
70 * SMC_ARCH_CALL_NOT_SUPPORTED otherwise.
71 *****************************************************************************/
72int32_t plat_is_smccc_feature_available(u_register_t fid)
73{
74 switch (fid) {
75 case SMCCC_ARCH_SOC_ID:
76 return SMC_ARCH_CALL_SUCCESS;
77 default:
78 return SMC_ARCH_CALL_NOT_SUPPORTED;
79 }
80}
81
82/* Get SOC version */
83int32_t plat_get_soc_version(void)
84{
85 int ssc_version;
86
87 ssc_version = mmio_read_32(SSC_VERSION);
88
89 return (int32_t)
90 (SOC_ID_SET_JEP_106(ARM_SOC_CONTINUATION_CODE,
91 ARM_SOC_IDENTIFICATION_CODE) |
92 (GET_SSC_VERSION_PART_NUM(ssc_version) & SOC_ID_IMPL_DEF_MASK));
93}
94
95/* Get SOC revision */
96int32_t plat_get_soc_revision(void)
97{
98 return (int32_t)plat_info.silicon_revision;
99}
100#endif