Zephyr API Documentation
4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
util.h
Go to the documentation of this file.
1
/*
2
* Copyright 2024 NXP
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
15
16
#ifndef _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_UTIL_H_
17
#define _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_UTIL_H_
18
25
37
#define SCMI_PROTOCOL_NAME(proto) CONCAT(scmi_protocol_, proto)
38
39
#ifdef CONFIG_ARM_SCMI_MAILBOX_TRANSPORT
43
#define DT_SCMI_TRANSPORT_COMPATIBLE arm_scmi
44
#elif CONFIG_ARM_SCMI_SMC_TRANSPORT
48
#define DT_SCMI_TRANSPORT_COMPATIBLE arm_scmi_smc
49
#else
50
#error "Transport needs to define COMPATIBLE macro"
51
#endif
52
64
#define DT_SCMI_TRANSPORT_PROTO_IS_BASE(node_id) \
65
DT_NODE_HAS_COMPAT(node_id, DT_SCMI_TRANSPORT_COMPATIBLE)
66
77
#define DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id) \
78
COND_CODE_1(DT_SCMI_TRANSPORT_PROTO_IS_BASE(node_id), \
79
(SCMI_PROTOCOL_BASE), \
80
(DT_REG_ADDR_RAW(node_id)))
81
82
#ifdef CONFIG_ARM_SCMI_TRANSPORT_HAS_STATIC_CHANNELS
83
84
#ifdef CONFIG_ARM_SCMI_MAILBOX_TRANSPORT
98
#define DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, idx)\
99
DT_PROP_HAS_IDX(node_id, shmem, idx)
100
#elif CONFIG_ARM_SCMI_SMC_TRANSPORT
109
#define DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, idx) 0
110
#else
111
#error "Transport with static channels needs to define HAS_CHAN macro"
112
#endif
113
114
#define SCMI_TRANSPORT_CHAN_NAME(proto, idx) CONCAT(scmi_channel_, proto, _, idx)
115
127
#define DT_SCMI_TRANSPORT_TX_CHAN_DECLARE(node_id) \
128
COND_CODE_1(DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, 0), \
129
(extern struct scmi_channel \
130
SCMI_TRANSPORT_CHAN_NAME( \
131
DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id), 0);), \
132
(extern struct scmi_channel \
133
SCMI_TRANSPORT_CHAN_NAME(SCMI_PROTOCOL_BASE, 0);)) \
134
147
#define DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
148
DT_SCMI_TRANSPORT_TX_CHAN_DECLARE(node_id) \
149
158
#define DT_INST_SCMI_TRANSPORT_CHANNELS_DECLARE(inst) \
159
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(DT_INST(inst, DT_DRV_COMPAT))
160
173
#define DT_SCMI_TRANSPORT_TX_CHAN(node_id) \
174
COND_CODE_1(DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, 0), \
175
(&SCMI_TRANSPORT_CHAN_NAME( \
176
DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id), 0)), \
177
(&SCMI_TRANSPORT_CHAN_NAME(SCMI_PROTOCOL_BASE, 0)))
178
191
#define DT_SCMI_TRANSPORT_CHAN_DEFINE(node_id, idx, proto, pdata) \
192
struct scmi_channel SCMI_TRANSPORT_CHAN_NAME(proto, idx) = \
193
{ \
194
.data = pdata, \
195
}
196
212
#define DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, proto, pdata, version_val) \
213
STRUCT_SECTION_ITERABLE(scmi_protocol, SCMI_PROTOCOL_NAME(proto)) = \
214
{ \
215
.id = proto, \
216
.tx = DT_SCMI_TRANSPORT_TX_CHAN(node_id), \
217
.data = pdata, \
218
.version = version_val \
219
}
220
221
#else
/* CONFIG_ARM_SCMI_TRANSPORT_HAS_STATIC_CHANNELS */
222
223
#define DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id)
224
225
#define DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, proto, pdata) \
226
STRUCT_SECTION_ITERABLE(scmi_protocol, SCMI_PROTOCOL_NAME(proto)) = \
227
{ \
228
.id = proto, \
229
.data = pdata, \
230
}
231
232
#endif
/* CONFIG_ARM_SCMI_TRANSPORT_HAS_STATIC_CHANNELS */
233
246
#define DT_INST_SCMI_TRANSPORT_DEFINE(inst, pm, data, config, level, prio, api) \
247
DEVICE_DT_INST_DEFINE(inst, &scmi_core_transport_init, \
248
pm, data, config, level, prio, api)
249
275
#define DT_SCMI_PROTOCOL_DEFINE(node_id, init_fn, pm, data, config, \
276
level, prio, api, version_val) \
277
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
278
DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, \
279
DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id), \
280
data, version_val); \
281
DEVICE_DT_DEFINE(node_id, init_fn, pm, \
282
&SCMI_PROTOCOL_NAME( \
283
DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id)), \
284
config, level, prio, api)
285
299
#define DT_INST_SCMI_PROTOCOL_DEFINE(inst, init_fn, pm, data, config, \
300
level, prio, api, version) \
301
DT_SCMI_PROTOCOL_DEFINE(DT_INST(inst, DT_DRV_COMPAT), init_fn, pm, \
302
data, config, level, prio, api, version)
303
315
#define DT_SCMI_PROTOCOL_DEFINE_NODEV(node_id, data, version) \
316
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
317
DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, \
318
DT_SCMI_TRANSPORT_PROTOCOL_ID(node_id), \
319
data, version)
320
333
#define SCMI_FIELD_MAKE(x, mask, shift)\
334
(((uint32_t)(x) & (mask)) << (shift))
335
344
#define SCMI_PROTOCOL_BASE 16
345
#define SCMI_PROTOCOL_POWER_DOMAIN 17
346
#define SCMI_PROTOCOL_SYSTEM 18
347
#define SCMI_PROTOCOL_PERF 19
348
#define SCMI_PROTOCOL_CLOCK 20
349
#define SCMI_PROTOCOL_SENSOR 21
350
#define SCMI_PROTOCOL_RESET_DOMAIN 22
351
#define SCMI_PROTOCOL_VOLTAGE_DOMAIN 23
352
#define SCMI_PROTOCOL_PCAP_MONITOR 24
353
#define SCMI_PROTOCOL_PINCTRL 25
354
358
359
#endif
/* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_UTIL_H_ */
zephyr
drivers
firmware
scmi
util.h
Generated on
for Zephyr API Documentation by
1.16.1