blob: b1aa089b45783fb30f38d97b57cb3a30154680b9 [file] [log] [blame]
Nariman Poushin0ece80f2018-02-26 06:52:04 +00001/*
2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Chandni Cherukuric8ef0452018-10-04 16:32:03 +05307#include <assert.h>
Nariman Poushin0ece80f2018-02-26 06:52:04 +00008#include <bl_common.h>
9#include <debug.h>
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053010#include <libfdt.h>
Nariman Poushin0ece80f2018-02-26 06:52:04 +000011#include <plat_arm.h>
Sughosh Ganu18f513d2018-05-16 17:22:35 +053012#include <sgi_ras.h>
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053013#include <sgi_variant.h>
Chandni Cherukuri61f3a7c2018-10-11 14:08:08 +053014#include "../../css/drivers/scmi/scmi.h"
15#include "../../css/drivers/mhu/css_mhu_doorbell.h"
16
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053017sgi_platform_info_t sgi_plat_info;
18
Chandni Cherukuri61f3a7c2018-10-11 14:08:08 +053019static scmi_channel_plat_info_t sgi575_scmi_plat_info = {
20 .scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE,
21 .db_reg_addr = PLAT_CSS_MHU_BASE + CSS_SCMI_MHU_DB_REG_OFF,
22 .db_preserve_mask = 0xfffffffe,
23 .db_modify_mask = 0x1,
24 .ring_doorbell = &mhu_ring_doorbell,
25};
26
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053027static scmi_channel_plat_info_t sgi_clark_scmi_plat_info = {
28 .scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE,
29 .db_reg_addr = PLAT_CSS_MHU_BASE + SENDER_REG_SET(0),
30 .db_preserve_mask = 0xfffffffe,
31 .db_modify_mask = 0x1,
32 .ring_doorbell = &mhuv2_ring_doorbell,
33};
34
Chandni Cherukuri61f3a7c2018-10-11 14:08:08 +053035scmi_channel_plat_info_t *plat_css_get_scmi_info()
36{
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053037 if (sgi_plat_info.platform_id == SGI_CLARK_SID_VER_PART_NUM)
38 return &sgi_clark_scmi_plat_info;
39 else if (sgi_plat_info.platform_id == SGI575_SSC_VER_PART_NUM)
40 return &sgi575_scmi_plat_info;
41 else
42 panic();
43};
44
Nariman Poushin0ece80f2018-02-26 06:52:04 +000045void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
46 u_register_t arg2, u_register_t arg3)
47{
Chandni Cherukuri3aa09f72018-11-28 11:31:51 +053048 sgi_plat_info.platform_id = plat_arm_sgi_get_platform_id();
49 sgi_plat_info.config_id = plat_arm_sgi_get_config_id();
Chandni Cherukuric8ef0452018-10-04 16:32:03 +053050
Nariman Poushin0ece80f2018-02-26 06:52:04 +000051 arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3);
52}
Sughosh Ganu18f513d2018-05-16 17:22:35 +053053
54void bl31_platform_setup(void)
55{
56 arm_bl31_platform_setup();
57
58#if RAS_EXTENSION
59 sgi_ras_intr_handler_setup();
60#endif
61}
Chandni Cherukurie4bf6a02018-11-14 13:43:59 +053062
63const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops)
64{
Chandni Cherukuri2dfe1d02018-11-22 10:15:25 +053065 /* For SGI-Clark.Helios platform only CPU ON/OFF is supported */
66 if ((sgi_plat_info.platform_id == SGI_CLARK_SID_VER_PART_NUM) &&
67 (sgi_plat_info.config_id == SGI_CLARK_HELIOS_CONFIG_ID)) {
68 ops->cpu_standby = NULL;
69 ops->system_off = NULL;
70 ops->system_reset = NULL;
71 ops->get_sys_suspend_power_state = NULL;
72 ops->pwr_domain_suspend = NULL;
73 ops->pwr_domain_suspend_finish = NULL;
74 }
75
Chandni Cherukurie4bf6a02018-11-14 13:43:59 +053076 return css_scmi_override_pm_ops(ops);
77}