Zephyr API Documentation
4.4.0-rc1
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_TRANSPORT_HAS_STATIC_CHANNELS
40
41
#ifdef CONFIG_ARM_SCMI_MAILBOX_TRANSPORT
55
#define DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, idx)\
56
DT_PROP_HAS_IDX(node_id, shmem, idx)
57
#elif CONFIG_ARM_SCMI_SMC_TRANSPORT
66
#define DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, idx) 0
67
#else
68
#error "Transport with static channels needs to define HAS_CHAN macro"
69
#endif
70
71
#define SCMI_TRANSPORT_CHAN_NAME(proto, idx) CONCAT(scmi_channel_, proto, _, idx)
72
84
#define DT_SCMI_TRANSPORT_TX_CHAN_DECLARE(node_id) \
85
COND_CODE_1(DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, 0), \
86
(extern struct scmi_channel \
87
SCMI_TRANSPORT_CHAN_NAME(DT_REG_ADDR_RAW(node_id), 0);), \
88
(extern struct scmi_channel \
89
SCMI_TRANSPORT_CHAN_NAME(SCMI_PROTOCOL_BASE, 0);)) \
90
103
#define DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
104
DT_SCMI_TRANSPORT_TX_CHAN_DECLARE(node_id) \
105
114
#define DT_INST_SCMI_TRANSPORT_CHANNELS_DECLARE(inst) \
115
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(DT_INST(inst, DT_DRV_COMPAT))
116
129
#define DT_SCMI_TRANSPORT_TX_CHAN(node_id) \
130
COND_CODE_1(DT_SCMI_TRANSPORT_PROTO_HAS_CHAN(node_id, 0), \
131
(&SCMI_TRANSPORT_CHAN_NAME(DT_REG_ADDR_RAW(node_id), 0)), \
132
(&SCMI_TRANSPORT_CHAN_NAME(SCMI_PROTOCOL_BASE, 0)))
133
146
#define DT_SCMI_TRANSPORT_CHAN_DEFINE(node_id, idx, proto, pdata) \
147
struct scmi_channel SCMI_TRANSPORT_CHAN_NAME(proto, idx) = \
148
{ \
149
.data = pdata, \
150
}
151
167
#define DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, proto, pdata, version_val) \
168
STRUCT_SECTION_ITERABLE(scmi_protocol, SCMI_PROTOCOL_NAME(proto)) = \
169
{ \
170
.id = proto, \
171
.tx = DT_SCMI_TRANSPORT_TX_CHAN(node_id), \
172
.data = pdata, \
173
.version = version_val \
174
}
175
176
#else
/* CONFIG_ARM_SCMI_TRANSPORT_HAS_STATIC_CHANNELS */
177
178
#define DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id)
179
180
#define DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, proto, pdata) \
181
STRUCT_SECTION_ITERABLE(scmi_protocol, SCMI_PROTOCOL_NAME(proto)) = \
182
{ \
183
.id = proto, \
184
.data = pdata, \
185
}
186
187
#endif
/* CONFIG_ARM_SCMI_TRANSPORT_HAS_STATIC_CHANNELS */
188
201
#define DT_INST_SCMI_TRANSPORT_DEFINE(inst, pm, data, config, level, prio, api) \
202
DEVICE_DT_INST_DEFINE(inst, &scmi_core_transport_init, \
203
pm, data, config, level, prio, api)
204
230
#define DT_SCMI_PROTOCOL_DEFINE(node_id, init_fn, pm, data, config, \
231
level, prio, api, version_val) \
232
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
233
DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, DT_REG_ADDR_RAW(node_id), data, \
234
version_val); \
235
DEVICE_DT_DEFINE(node_id, init_fn, pm, \
236
&SCMI_PROTOCOL_NAME(DT_REG_ADDR_RAW(node_id)), \
237
config, level, prio, api)
238
252
#define DT_INST_SCMI_PROTOCOL_DEFINE(inst, init_fn, pm, data, config, \
253
level, prio, api, version) \
254
DT_SCMI_PROTOCOL_DEFINE(DT_INST(inst, DT_DRV_COMPAT), init_fn, pm, \
255
data, config, level, prio, api, version)
256
268
#define DT_SCMI_PROTOCOL_DEFINE_NODEV(node_id, data, version) \
269
DT_SCMI_TRANSPORT_CHANNELS_DECLARE(node_id) \
270
DT_SCMI_PROTOCOL_DATA_DEFINE(node_id, DT_REG_ADDR_RAW(node_id), data, \
271
version) \
272
273
285
#define SCMI_FIELD_MAKE(x, mask, shift)\
286
(((uint32_t)(x) & (mask)) << (shift))
287
296
#define SCMI_PROTOCOL_BASE 16
297
#define SCMI_PROTOCOL_POWER_DOMAIN 17
298
#define SCMI_PROTOCOL_SYSTEM 18
299
#define SCMI_PROTOCOL_PERF 19
300
#define SCMI_PROTOCOL_CLOCK 20
301
#define SCMI_PROTOCOL_SENSOR 21
302
#define SCMI_PROTOCOL_RESET_DOMAIN 22
303
#define SCMI_PROTOCOL_VOLTAGE_DOMAIN 23
304
#define SCMI_PROTOCOL_PCAP_MONITOR 24
305
#define SCMI_PROTOCOL_PINCTRL 25
306
310
311
#endif
/* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_UTIL_H_ */
zephyr
drivers
firmware
scmi
util.h
Generated on
for Zephyr API Documentation by
1.16.1