1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2022-2023, Linaro Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include <fwk_module.h>
9 #include <fwk_module_idx.h>
10 #include <scmi_agents.h>
11 #include <mod_scmi_clock.h>
12 #include "clock_devices.h"
13 
14 static const struct mod_scmi_clock_device agent_device_table_ospm[] = {
15     {
16         /* MOCK_0 */
17         .element_id =
18             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_0),
19         .starts_enabled = true,
20     },
21     {
22         /* MOCK_1 */
23         .element_id =
24             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_1),
25         .starts_enabled = true,
26     },
27     {
28         /* VPU */
29         .element_id =
30             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_VPU),
31         .starts_enabled = true,
32     },
33     {
34         /* MOCK_3 */
35         .element_id =
36             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_3),
37         .starts_enabled = true,
38     },
39     {
40         /* DPU */
41         .element_id =
42             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_DPU),
43         .starts_enabled = true,
44     },
45     {
46         /* PIXEL_0 */
47         .element_id =
48             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_PIXEL_0),
49         .starts_enabled = true,
50     },
51     {
52         /* PIXEL_1 */
53         .element_id =
54             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_PIXEL_1),
55         .starts_enabled = true,
56     },
57 };
58 
59 static const struct mod_scmi_clock_device agent_device_table_perf[] = {
60     {
61         /* MOCK_0 */
62         .element_id =
63             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_0),
64     },
65     {
66         /* MOCK_2 */
67         .element_id =
68             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_2),
69     },
70     {
71         /* MOCK_3 */
72         .element_id =
73             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_MOCK_3),
74     },
75     {
76         /* PIXEL_0 */
77         .element_id =
78             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_PIXEL_0),
79     },
80     {
81         /* PIXEL_1 */
82         .element_id =
83             FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_DEV_IDX_PIXEL_1),
84     },
85 };
86 
87 static const struct mod_scmi_clock_agent agent_table[SCMI_AGENT_ID_COUNT] = {
88     [SCMI_AGENT_ID_OSPM] = {
89         .device_table = agent_device_table_ospm,
90         .device_count = FWK_ARRAY_SIZE(agent_device_table_ospm),
91     },
92     [SCMI_AGENT_ID_PSCI] = { 0 /* No access */ },
93     [SCMI_AGENT_ID_PERF] = {
94         .device_table = agent_device_table_perf,
95         .device_count = FWK_ARRAY_SIZE(agent_device_table_perf),
96     },
97 };
98 
99 struct fwk_module_config config_scmi_clock = {
100     .data = &((struct mod_scmi_clock_config) {
101         .max_pending_transactions = 0,
102         .agent_table = agent_table,
103         .agent_count = FWK_ARRAY_SIZE(agent_table),
104     }),
105 };
106