1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include "config_power_domain.h"
9 #include "morello_core.h"
10 #include "morello_scp_mhu.h"
11 #include "morello_scp_mmap.h"
12 #include "morello_scp_scmi.h"
13 #include "morello_scp_software_mmap.h"
14
15 #include <mod_transport.h>
16
17 #include <fwk_element.h>
18 #include <fwk_id.h>
19 #include <fwk_module.h>
20 #include <fwk_module_idx.h>
21
22 #include <stdint.h>
23
24 static const struct fwk_element
25 transport_element_table[SCP_MORELLO_SCMI_SERVICE_IDX_COUNT + 1] = {
26 [SCP_MORELLO_SCMI_SERVICE_IDX_PSCI] = {
27 .name = "PSCI",
28 .data =
29 &(struct mod_transport_channel_config){
30 .channel_type = MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
31 .policies =
32 MOD_TRANSPORT_POLICY_INIT_MAILBOX | MOD_TRANSPORT_POLICY_SECURE,
33 .out_band_mailbox_address = SCP_AP_SHARED_SECURE_RAM,
34 .out_band_mailbox_size = SCP_SCMI_PAYLOAD_SIZE,
35 .driver_id = FWK_ID_SUB_ELEMENT_INIT(
36 FWK_MODULE_IDX_MHU,
37 MORELLO_MHU_DEVICE_IDX_S_CLUS0,
38 0),
39 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MHU, 0),
40 },
41 },
42 [SCP_MORELLO_SCMI_SERVICE_IDX_OSPM] = {
43 .name = "OSPM",
44 .data =
45 &(struct mod_transport_channel_config){
46 .channel_type = MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
47 .policies = MOD_TRANSPORT_POLICY_INIT_MAILBOX,
48 .out_band_mailbox_address = SCP_AP_BASE_NS_MAILBOX_SRAM,
49 .out_band_mailbox_size = SCP_SCMI_PAYLOAD_SIZE,
50 .driver_id = FWK_ID_SUB_ELEMENT_INIT(
51 FWK_MODULE_IDX_MHU,
52 MORELLO_MHU_DEVICE_IDX_NS_CLUS0,
53 0),
54 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MHU, 0),
55 },
56 },
57 [SCP_MORELLO_SCMI_SERVICE_IDX_MCP] = {
58 .name = "MCP",
59 .data =
60 &(struct mod_transport_channel_config){
61 .channel_type = MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
62 .policies =
63 MOD_TRANSPORT_POLICY_INIT_MAILBOX | MOD_TRANSPORT_POLICY_SECURE,
64 .out_band_mailbox_address = SCP_MCP_SHARED_SECURE_RAM,
65 .out_band_mailbox_size = SCP_SCMI_PAYLOAD_SIZE,
66 .driver_id = FWK_ID_SUB_ELEMENT_INIT(
67 FWK_MODULE_IDX_MHU,
68 MORELLO_MHU_DEVICE_IDX_S_MCP,
69 0),
70 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MHU, 0),
71 },
72 },
73 [SCP_MORELLO_SCMI_SERVICE_IDX_COUNT] = { 0 },
74 };
75
transport_get_element_table(fwk_id_t module_id)76 static const struct fwk_element *transport_get_element_table(fwk_id_t module_id)
77 {
78 unsigned int idx;
79 struct mod_transport_channel_config *config;
80
81 for (idx = 0; idx < SCP_MORELLO_SCMI_SERVICE_IDX_COUNT; idx++) {
82 config =
83 (struct mod_transport_channel_config *)(transport_element_table[idx]
84 .data);
85 config->pd_source_id = FWK_ID_ELEMENT(
86 FWK_MODULE_IDX_POWER_DOMAIN, PD_SINGLE_CHIP_IDX_SYSTOP0);
87 }
88
89 return transport_element_table;
90 }
91
92 const struct fwk_module_config config_transport = {
93 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(transport_get_element_table),
94 };
95