1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2019-2021, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include "config_juno_xrp7724.h"
9 #include "config_mock_psu.h"
10 #include "config_psu.h"
11 #include "juno_id.h"
12
13 #include <mod_juno_xrp7724.h>
14 #include <mod_mock_psu.h>
15 #include <mod_psu.h>
16
17 #include <fwk_assert.h>
18 #include <fwk_element.h>
19 #include <fwk_id.h>
20 #include <fwk_module.h>
21 #include <fwk_module_idx.h>
22 #include <fwk_status.h>
23
24 #include <stddef.h>
25
26 static struct fwk_element psu_dev_desc_table[] = {
27 [MOD_PSU_ELEMENT_IDX_VSYS] = {
28 .name = "VSYS",
29 .data = &(const struct mod_psu_element_cfg) {
30 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
31 MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VSYS),
32 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
33 MOD_JUNO_XRP7724_API_IDX_PSU),
34 },
35 },
36 [MOD_PSU_ELEMENT_IDX_VBIG] = {
37 .name = "VBIG",
38 .data = &(const struct mod_psu_element_cfg) {
39 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
40 MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VBIG),
41 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
42 MOD_JUNO_XRP7724_API_IDX_PSU),
43 },
44 },
45 [MOD_PSU_ELEMENT_IDX_VLITTLE] = {
46 .name = "VLITLLE",
47 .data = &(const struct mod_psu_element_cfg) {
48 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
49 MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VLITTLE),
50 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
51 MOD_JUNO_XRP7724_API_IDX_PSU),
52 },
53 },
54 [MOD_PSU_ELEMENT_IDX_VGPU] = {
55 .name = "VGPU",
56 .data = &(const struct mod_psu_element_cfg) {
57 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
58 MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VGPU),
59 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_JUNO_XRP7724,
60 MOD_JUNO_XRP7724_API_IDX_PSU),
61 },
62 },
63 [MOD_PSU_ELEMENT_IDX_COUNT] = { 0 },
64 };
65
66 /* When running on a model, use the mock_psu */
67 static struct fwk_element psu_element_table_fvp[] = {
68 [MOD_PSU_ELEMENT_IDX_VSYS] = {
69 .name = "Fake-VSYS",
70 .data = &(const struct mod_psu_element_cfg) {
71 .driver_id = FWK_ID_ELEMENT_INIT(
72 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_ELEMENT_IDX_VSYS),
73 .driver_api_id = FWK_ID_API_INIT(
74 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_API_IDX_DRIVER),
75 },
76 },
77 [MOD_PSU_ELEMENT_IDX_VBIG] = {
78 .name = "Fake-VBIG",
79 .data = &(const struct mod_psu_element_cfg) {
80 .driver_id = FWK_ID_ELEMENT_INIT(
81 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_ELEMENT_IDX_VBIG),
82 .driver_api_id = FWK_ID_API_INIT(
83 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_API_IDX_DRIVER),
84 },
85 },
86 [MOD_PSU_ELEMENT_IDX_VLITTLE] = {
87 .name = "Fake-VLITTLE",
88 .data = &(const struct mod_psu_element_cfg) {
89 .driver_id = FWK_ID_ELEMENT_INIT(
90 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_ELEMENT_IDX_VLITTLE),
91 .driver_api_id = FWK_ID_API_INIT(
92 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_API_IDX_DRIVER),
93 },
94 },
95 [MOD_PSU_ELEMENT_IDX_VGPU] = {
96 .name = "Fake-VGPU",
97 .data = &(const struct mod_psu_element_cfg) {
98 .driver_id = FWK_ID_ELEMENT_INIT(
99 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_ELEMENT_IDX_VGPU),
100 .driver_api_id = FWK_ID_API_INIT(
101 FWK_MODULE_IDX_MOCK_PSU, MOD_MOCK_PSU_API_IDX_DRIVER),
102 },
103 },
104 [MOD_PSU_ELEMENT_IDX_COUNT] = { 0 } /* Termination description */
105 };
106
psu_get_dev_desc_table(fwk_id_t module_id)107 static const struct fwk_element *psu_get_dev_desc_table(fwk_id_t module_id)
108 {
109 int status;
110 enum juno_idx_platform platform_id = JUNO_IDX_PLATFORM_COUNT;
111
112 status = juno_id_get_platform(&platform_id);
113 if (!fwk_expect(status == FWK_SUCCESS)) {
114 return NULL;
115 }
116
117 if (platform_id == JUNO_IDX_PLATFORM_FVP) {
118 return psu_element_table_fvp;
119 } else {
120 return psu_dev_desc_table;
121 }
122 }
123
124 struct fwk_module_config config_psu = {
125 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(psu_get_dev_desc_table),
126 };
127