1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2022, Linaro Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include <arch_main.h>
9 #include <fwk_element.h>
10 #include <fwk_id.h>
11 #include <fwk_module.h>
12 #include <fwk_module_idx.h>
13
14 #include <mod_optee_mbx.h>
15 #include <mod_optee_smt.h>
16 #include <scmi_agents.h>
17
18 #include <stdint.h>
19
20 #define OSPM0_SMT_MAILBOX_PA 0x2ffff000
21 #define OSPM0_SMT_MAILBOX_SIZE SCMI_SHMEM_SIZE
22
23 static const struct fwk_element mbx_element_table[] = {
24 [SCMI_CHANNEL_DEVICE_IDX_NS0] = {
25 .name = "SCMI non-secure to OP-TEE channel 0",
26 .data = &((struct mod_optee_mbx_channel_config){
27 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_OPTEE_SMT, 0),
28 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_OPTEE_SMT,
29 MOD_OPTEE_SMT_API_IDX_DRIVER_INPUT)
30 })
31 },
32 [SCMI_CHANNEL_DEVICE_IDX_COUNT] = { 0 },
33 };
34
mbx_get_element_table(fwk_id_t module_id)35 static const struct fwk_element *mbx_get_element_table(fwk_id_t module_id)
36 {
37 return (const struct fwk_element *)mbx_element_table;
38 }
39
40 struct fwk_module_config config_optee_mbx = {
41 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(mbx_get_element_table),
42 };
43
44 static struct fwk_element smt_elt_table[] = {
45 [0] = {
46 .name = "OSPM0",
47 .data = &((struct mod_optee_smt_channel_config) {
48 .type = MOD_OPTEE_SMT_CHANNEL_TYPE_REQUESTER,
49 .mailbox_address = OSPM0_SMT_MAILBOX_PA,
50 .mailbox_size = OSPM0_SMT_MAILBOX_SIZE,
51 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_OPTEE_MBX,
52 SCMI_CHANNEL_DEVICE_IDX_NS0),
53 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_OPTEE_MBX, 0),
54 })
55 },
56 [1] = { 0 },
57 };
58
smt_get_element_table(fwk_id_t module_id)59 static const struct fwk_element *smt_get_element_table(fwk_id_t module_id)
60 {
61 fwk_assert(fwk_id_get_module_idx(module_id) == FWK_MODULE_IDX_OPTEE_SMT);
62
63 return (const struct fwk_element *)smt_elt_table;
64 }
65
66 struct fwk_module_config config_optee_smt = {
67 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(smt_get_element_table),
68 };
69