1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 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 = &((struct mod_transport_channel_config){
29 .channel_type =
30 MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
31 .policies =
32 MOD_TRANSPORT_POLICY_INIT_MAILBOX |
33 MOD_TRANSPORT_POLICY_SECURE,
34 .out_band_mailbox_address =
35 SCP_AP_SHARED_SECURE_RAM,
36 .out_band_mailbox_size =
37 SCP_SCMI_PAYLOAD_SIZE,
38 .driver_id =
39 FWK_ID_SUB_ELEMENT_INIT(
40 FWK_MODULE_IDX_MHU,
41 MORELLO_MHU_DEVICE_IDX_S_CLUS0,
42 0),
43 .driver_api_id =
44 FWK_ID_API_INIT(
45 FWK_MODULE_IDX_MHU,
46 0),
47 }),
48 },
49 [SCP_MORELLO_SCMI_SERVICE_IDX_OSPM] = {
50 .name = "OSPM",
51 .data = &((struct mod_transport_channel_config){
52 .channel_type =
53 MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
54 .policies =
55 MOD_TRANSPORT_POLICY_INIT_MAILBOX,
56 .out_band_mailbox_address =
57 SCP_AP_BASE_NS_MAILBOX_SRAM,
58 .out_band_mailbox_size =
59 SCP_SCMI_PAYLOAD_SIZE,
60 .driver_id =
61 FWK_ID_SUB_ELEMENT_INIT(
62 FWK_MODULE_IDX_MHU,
63 MORELLO_MHU_DEVICE_IDX_NS_CLUS0,
64 0),
65 .driver_api_id =
66 FWK_ID_API_INIT(
67 FWK_MODULE_IDX_MHU,
68 0),
69 }),
70 },
71 [SCP_MORELLO_SCMI_SERVICE_IDX_MCP] = {
72 .name = "MCP",
73 .data = &((struct mod_transport_channel_config){
74 .channel_type =
75 MOD_TRANSPORT_CHANNEL_TYPE_COMPLETER,
76 .policies =
77 MOD_TRANSPORT_POLICY_INIT_MAILBOX |
78 MOD_TRANSPORT_POLICY_SECURE,
79 .out_band_mailbox_address =
80 SCP_MCP_SHARED_SECURE_RAM,
81 .out_band_mailbox_size =
82 SCP_SCMI_PAYLOAD_SIZE,
83 .driver_id = FWK_ID_SUB_ELEMENT_INIT(
84 FWK_MODULE_IDX_MHU,
85 MORELLO_MHU_DEVICE_IDX_S_MCP,
86 0),
87 .driver_api_id = FWK_ID_API_INIT(
88 FWK_MODULE_IDX_MHU,
89 0),
90 }),
91 },
92 [SCP_MORELLO_SCMI_SERVICE_IDX_COUNT] = { 0 },
93 };
94
transport_get_element_table(fwk_id_t module_id)95 static const struct fwk_element *transport_get_element_table(fwk_id_t module_id)
96 {
97 unsigned int idx;
98 struct mod_transport_channel_config *config;
99
100 for (idx = 0; idx < SCP_MORELLO_SCMI_SERVICE_IDX_COUNT; idx++) {
101 config =
102 (struct mod_transport_channel_config *)(transport_element_table[idx]
103 .data);
104 config->pd_source_id = FWK_ID_ELEMENT(
105 FWK_MODULE_IDX_POWER_DOMAIN, PD_SINGLE_CHIP_IDX_SYSTOP0);
106 }
107
108 return transport_element_table;
109 }
110
111 const struct fwk_module_config config_transport = {
112 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(transport_get_element_table),
113 };
114