]> Git Repo - J-u-boot.git/blob - include/scmi_protocols.h
Merge tag 'u-boot-imx-master-20250127' of https://gitlab.denx.de/u-boot/custodians...
[J-u-boot.git] / include / scmi_protocols.h
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved.
4  * Copyright (C) 2019-2020, Linaro Limited
5  */
6 #ifndef _SCMI_PROTOCOLS_H
7 #define _SCMI_PROTOCOLS_H
8
9 #include <linux/bitops.h>
10 #include <asm/types.h>
11
12 /*
13  * Subset the SCMI protocols definition
14  * based on SCMI specification v2.0 (DEN0056B)
15  * https://developer.arm.com/docs/den0056/b
16  */
17
18 enum scmi_std_protocol {
19         SCMI_PROTOCOL_ID_BASE = 0x10,
20         SCMI_PROTOCOL_ID_POWER_DOMAIN = 0x11,
21         SCMI_PROTOCOL_ID_SYSTEM = 0x12,
22         SCMI_PROTOCOL_ID_PERF = 0x13,
23         SCMI_PROTOCOL_ID_CLOCK = 0x14,
24         SCMI_PROTOCOL_ID_SENSOR = 0x15,
25         SCMI_PROTOCOL_ID_RESET_DOMAIN = 0x16,
26         SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN = 0x17,
27 };
28
29 enum scmi_status_code {
30         SCMI_SUCCESS =  0,
31         SCMI_NOT_SUPPORTED = -1,
32         SCMI_INVALID_PARAMETERS = -2,
33         SCMI_DENIED = -3,
34         SCMI_NOT_FOUND = -4,
35         SCMI_OUT_OF_RANGE = -5,
36         SCMI_BUSY = -6,
37         SCMI_COMMS_ERROR = -7,
38         SCMI_GENERIC_ERROR = -8,
39         SCMI_HARDWARE_ERROR = -9,
40         SCMI_PROTOCOL_ERROR = -10,
41 };
42
43 /*
44  * Generic message IDs
45  */
46 enum scmi_discovery_id {
47         SCMI_PROTOCOL_VERSION = 0x0,
48         SCMI_PROTOCOL_ATTRIBUTES = 0x1,
49         SCMI_PROTOCOL_MESSAGE_ATTRIBUTES = 0x2,
50 };
51
52 /*
53  * SCMI Base Protocol
54  */
55 #define SCMI_BASE_PROTOCOL_VERSION 0x20000
56
57 enum scmi_base_message_id {
58         SCMI_BASE_DISCOVER_VENDOR = 0x3,
59         SCMI_BASE_DISCOVER_SUB_VENDOR = 0x4,
60         SCMI_BASE_DISCOVER_IMPL_VERSION = 0x5,
61         SCMI_BASE_DISCOVER_LIST_PROTOCOLS = 0x6,
62         SCMI_BASE_DISCOVER_AGENT = 0x7,
63         SCMI_BASE_NOTIFY_ERRORS = 0x8,
64         SCMI_BASE_SET_DEVICE_PERMISSIONS = 0x9,
65         SCMI_BASE_SET_PROTOCOL_PERMISSIONS = 0xa,
66         SCMI_BASE_RESET_AGENT_CONFIGURATION = 0xb,
67 };
68
69 #define SCMI_BASE_NAME_LENGTH_MAX 16
70
71 /**
72  * struct scmi_protocol_version_out - Response for SCMI_PROTOCOL_VERSION
73  *                                      command
74  * @status:     SCMI command status
75  * @version:    Protocol version
76  */
77 struct scmi_protocol_version_out {
78         s32 status;
79         u32 version;
80 };
81
82 /**
83  * struct scmi_protocol_attrs_out - Response for SCMI_PROTOCOL_ATTRIBUTES
84  *                                      command
85  * @status:     SCMI command status
86  * @attributes: Protocol attributes or implementation details
87  */
88 struct scmi_protocol_attrs_out {
89         s32 status;
90         u32 attributes;
91 };
92
93 #define SCMI_PROTOCOL_ATTRS_NUM_AGENTS(attributes) \
94                                 (((attributes) & GENMASK(15, 8)) >> 8)
95 #define SCMI_PROTOCOL_ATTRS_NUM_PROTOCOLS(attributes) \
96                                 ((attributes) & GENMASK(7, 0))
97
98 /**
99  * struct scmi_protocol_msg_attrs_out - Response for
100  *                                      SCMI_PROTOCOL_MESSAGE_ATTRIBUTES command
101  * @status:     SCMI command status
102  * @attributes: Message-specific attributes
103  */
104 struct scmi_protocol_msg_attrs_out {
105         s32 status;
106         u32 attributes;
107 };
108
109 /**
110  * struct scmi_base_discover_vendor_out - Response for
111  *                                        SCMI_BASE_DISCOVER_VENDOR or
112  *                                        SCMI_BASE_DISCOVER_SUB_VENDOR command
113  * @status:             SCMI command status
114  * @vendor_identifier:  Name of vendor or sub-vendor in string
115  */
116 struct scmi_base_discover_vendor_out {
117         s32 status;
118         u8 vendor_identifier[SCMI_BASE_NAME_LENGTH_MAX];
119 };
120
121 /**
122  * struct scmi_base_discover_impl_version_out - Response for
123  *                                      SCMI_BASE_DISCOVER_IMPL_VERSION command
124  * @status:             SCMI command status
125  * @impl_version:       Vendor-specific implementation version
126  */
127 struct scmi_base_discover_impl_version_out {
128         s32 status;
129         u32 impl_version;
130 };
131
132 /**
133  * struct scmi_base_discover_list_protocols_out - Response for
134  *                              SCMI_BASE_DISCOVER_LIST_PROTOCOLS command
135  * @status:             SCMI command status
136  * @num_protocols:      Number of SCMI protocols in @protocol
137  * @protocols:          Array of packed SCMI protocol ID's
138  */
139 struct scmi_base_discover_list_protocols_out {
140         s32 status;
141         u32 num_protocols;
142         u32 protocols[3];
143 };
144
145 /**
146  * struct scmi_base_discover_agent_out - Response for
147  *                                       SCMI_BASE_DISCOVER_AGENT command
148  * @status:     SCMI command status
149  * @agent_id:   SCMI agent ID
150  * @name:       Name of agent in string
151  */
152 struct scmi_base_discover_agent_out {
153         s32 status;
154         u32 agent_id;
155         u8 name[SCMI_BASE_NAME_LENGTH_MAX];
156 };
157
158 #define SCMI_BASE_NOTIFY_ERRORS_ENABLE BIT(0)
159
160 /**
161  * struct scmi_base_set_device_permissions_in - Parameters for
162  *                                      SCMI_BASE_SET_DEVICE_PERMISSIONS command
163  * @agent_id:   SCMI agent ID
164  * @device_id:  device ID
165  * @flags:      A set of flags
166  */
167 struct scmi_base_set_device_permissions_in {
168         u32 agent_id;
169         u32 device_id;
170         u32 flags;
171 };
172
173 #define SCMI_BASE_SET_DEVICE_PERMISSIONS_ACCESS BIT(0)
174
175 /**
176  * struct scmi_base_set_protocol_permissions_in - Parameters for
177  *                              SCMI_BASE_SET_PROTOCOL_PERMISSIONS command
178  * @agent_id:           SCMI agent ID
179  * @device_id:          device ID
180  * @command_id:         command ID
181  * @flags:              A set of flags
182  */
183 struct scmi_base_set_protocol_permissions_in {
184         u32 agent_id;
185         u32 device_id;
186         u32 command_id;
187         u32 flags;
188 };
189
190 #define SCMI_BASE_SET_PROTOCOL_PERMISSIONS_COMMAND GENMASK(7, 0)
191 #define SCMI_BASE_SET_PROTOCOL_PERMISSIONS_ACCESS BIT(0)
192
193 /**
194  * struct scmi_base_reset_agent_configuration_in - Parameters for
195  *                              SCMI_BASE_RESET_AGENT_CONFIGURATION command
196  * @agent_id:   SCMI agent ID
197  * @flags:      A set of flags
198  */
199 struct scmi_base_reset_agent_configuration_in {
200         u32 agent_id;
201         u32 flags;
202 };
203
204 #define SCMI_BASE_RESET_ALL_ACCESS_PERMISSIONS BIT(0)
205
206 /**
207  * struct scmi_base_ops - SCMI base protocol interfaces
208  */
209 struct scmi_base_ops {
210         /**
211          * protocol_version - get Base protocol version
212          * @dev:        SCMI protocol device
213          * @version:    Pointer to SCMI protocol version
214          *
215          * Obtain the protocol version number in @version for Base protocol.
216          *
217          * Return: 0 on success, error code on failure
218          */
219         int (*protocol_version)(struct udevice *dev, u32 *version);
220         /**
221          * protocol_attrs - get protocol attributes
222          * @dev:                SCMI protocol device
223          * @num_agents:         Number of SCMI agents
224          * @num_protocols:      Number of SCMI protocols
225          *
226          * Obtain the protocol attributes, the number of agents and the number
227          * of protocols, in @num_agents and @num_protocols respectively, that
228          * the device provides.
229          *
230          * Return: 0 on success, error code on failure
231          */
232         int (*protocol_attrs)(struct udevice *dev, u32 *num_agents,
233                               u32 *num_protocols);
234         /**
235          * protocol_message_attrs - get message-specific attributes
236          * @dev:                SCMI protocol device
237          * @message_id:         SCMI message ID
238          * @attributes:         Message-specific attributes
239          *
240          * Obtain the message-specific attributes in @attributes.
241          * This command succeeds if the message is implemented and available.
242          *
243          * Return: 0 on success, error code on failure
244          */
245         int (*protocol_message_attrs)(struct udevice *dev, u32 message_id,
246                                       u32 *attributes);
247         /**
248          * base_discover_vendor - get vendor name
249          * @dev:        SCMI protocol device
250          * @vendor:     Pointer to vendor name
251          *
252          * Obtain the vendor's name in @vendor.
253          * It is a caller's responsibility to free @vendor.
254          *
255          * Return: 0 on success, error code on failure
256          */
257         int (*base_discover_vendor)(struct udevice *dev, u8 **vendor);
258         /**
259          * base_discover_sub_vendor - get sub-vendor name
260          * @dev:        SCMI protocol device
261          * @sub_vendor: Pointer to sub-vendor name
262          *
263          * Obtain the sub-vendor's name in @sub_vendor.
264          * It is a caller's responsibility to free @sub_vendor.
265          *
266          * Return: 0 on success, error code on failure
267          */
268         int (*base_discover_sub_vendor)(struct udevice *dev, u8 **sub_vendor);
269         /**
270          * base_discover_impl_version - get implementation version
271          * @dev:                SCMI protocol device
272          * @impl_version:       Pointer to implementation version
273          *
274          * Obtain the implementation version number in @impl_version.
275          *
276          * Return: 0 on success, error code on failure
277          */
278         int (*base_discover_impl_version)(struct udevice *dev,
279                                           u32 *impl_version);
280         /**
281          * base_discover_list_protocols - get list of protocols
282          * @dev:        SCMI protocol device
283          * @protocols:  Pointer to array of SCMI protocols
284          *
285          * Obtain the list of protocols provided in @protocols.
286          * The number of elements in @protocols always match to the number of
287          * protocols returned by smci_protocol_attrs() when this function
288          * succeeds.
289          * It is a caller's responsibility to free @protocols.
290          *
291          * Return: the number of protocols in @protocols on success,
292          * error code on failure
293          */
294         int (*base_discover_list_protocols)(struct udevice *dev,
295                                             u8 **protocols);
296         /**
297          * base_discover_agent - identify agent
298          * @dev:                SCMI protocol device
299          * @agent_id:           SCMI agent ID
300          * @ret_agent_id:       Pointer to SCMI agent ID
301          * @name:               Pointer to SCMI agent name
302          *
303          * Obtain the agent's name in @name. If @agent_id is equal to
304          * 0xffffffff, * this function returns the caller's agent id in
305          * @ret_agent_id.
306          * It is a caller's responsibility to free @name.
307          *
308          * Return: 0 on success, error code on failure
309          */
310         int (*base_discover_agent)(struct udevice *dev, u32 agent_id,
311                                    u32 *ret_agent_id, u8 **name);
312         /**
313          * base_notify_errors - configure error notification
314          * @dev:        SCMI protocol device
315          * @enable:     Operation
316          *
317          * Enable or disable error notification from SCMI firmware.
318          *
319          * Return: 0 on success, error code on failure
320          */
321         int (*base_notify_errors)(struct udevice *dev, u32 enable);
322         /**
323          * base_set_device_permissions - configure access permission to device
324          * @dev:        SCMI protocol device
325          * @agent_id:   SCMI agent ID
326          * @device_id:  ID of device to access
327          * @flags:      A set of flags
328          *
329          * Ask for allowing or denying access permission to the device,
330          * @device_id. The meaning of @flags is defined in SCMI specification.
331          *
332          * Return: 0 on success, error code on failure
333          */
334         int (*base_set_device_permissions)(struct udevice *dev, u32 agent_id,
335                                            u32 device_id, u32 flags);
336         /**
337          * base_set_protocol_permissions - configure access permission to
338          *                                 protocol on device
339          * @dev:        SCMI protocol device
340          * @agent_id:   SCMI agent ID
341          * @device_id:  ID of device to access
342          * @command_id: command ID
343          * @flags:      A set of flags
344          *
345          * Ask for allowing or denying access permission to the protocol,
346          * @command_id, on the device, @device_id.
347          * The meaning of @flags is defined in SCMI specification.
348          *
349          * Return: 0 on success, error code on failure
350          */
351         int (*base_set_protocol_permissions)(struct udevice *dev, u32 agent_id,
352                                              u32 device_id, u32 command_id,
353                                              u32 flags);
354         /**
355          * base_reset_agent_configuration - reset resource settings
356          * @dev:        SCMI protocol device
357          * @agent_id:   SCMI agent ID
358          * @flags:      A set of flags
359          *
360          * Reset all the resource settings against @agent_id.
361          * The meaning of @flags is defined in SCMI specification.
362          *
363          * Return: 0 on success, error code on failure
364          */
365         int (*base_reset_agent_configuration)(struct udevice *dev, u32 agent_id,
366                                               u32 flags);
367 };
368
369 /**
370  * scmi_generic_protocol_version - get protocol version
371  * @dev:        SCMI protocol device
372  * @id:         SCMI protocol ID
373  * @version:    Pointer to SCMI protocol version
374  *
375  * Obtain the protocol version number in @version.
376  *
377  * Return: 0 on success, error code on failure
378  */
379 int scmi_generic_protocol_version(struct udevice *dev,
380                                   enum scmi_std_protocol id, u32 *version);
381
382 /**
383  * scmi_base_protocol_version - get Base protocol version
384  * @dev:        SCMI protocol device
385  * @version:    Pointer to SCMI protocol version
386  *
387  * Obtain the protocol version number in @version for Base protocol.
388  *
389  * Return: 0 on success, error code on failure
390  */
391 int scmi_base_protocol_version(struct udevice *dev, u32 *version);
392
393 /**
394  * scmi_protocol_attrs - get protocol attributes
395  * @dev:                SCMI protocol device
396  * @num_agents:         Number of SCMI agents
397  * @num_protocols:      Number of SCMI protocols
398  *
399  * Obtain the protocol attributes, the number of agents and the number
400  * of protocols, in @num_agents and @num_protocols respectively, that
401  * the device provides.
402  *
403  * Return: 0 on success, error code on failure
404  */
405 int scmi_base_protocol_attrs(struct udevice *dev, u32 *num_agents,
406                              u32 *num_protocols);
407
408 /**
409  * scmi_protocol_message_attrs - get message-specific attributes
410  * @dev:                SCMI protocol device
411  * @message_id:         SCMI message ID
412  * @attributes:         Message-specific attributes
413  *
414  * Obtain the message-specific attributes in @attributes.
415  * This command succeeds if the message is implemented and available.
416  *
417  * Return: 0 on success, error code on failure
418  */
419 int scmi_base_protocol_message_attrs(struct udevice *dev, u32 message_id,
420                                      u32 *attributes);
421
422 /**
423  * scmi_base_discover_vendor - get vendor name
424  * @dev:        SCMI protocol device
425  * @vendor:     Pointer to vendor name
426  *
427  * Obtain the vendor's name in @vendor.
428  * It is a caller's responsibility to free @vendor.
429  *
430  * Return: 0 on success, error code on failure
431  */
432 int scmi_base_discover_vendor(struct udevice *dev, u8 **vendor);
433
434 /**
435  * scmi_base_discover_sub_vendor - get sub-vendor name
436  * @dev:        SCMI protocol device
437  * @sub_vendor: Pointer to sub-vendor name
438  *
439  * Obtain the sub-vendor's name in @sub_vendor.
440  * It is a caller's responsibility to free @sub_vendor.
441  *
442  * Return: 0 on success, error code on failure
443  */
444 int scmi_base_discover_sub_vendor(struct udevice *dev, u8 **sub_vendor);
445
446 /**
447  * scmi_base_discover_impl_version - get implementation version
448  * @dev:                SCMI protocol device
449  * @impl_version:       Pointer to implementation version
450  *
451  * Obtain the implementation version number in @impl_version.
452  *
453  * Return: 0 on success, error code on failure
454  */
455 int scmi_base_discover_impl_version(struct udevice *dev, u32 *impl_version);
456
457 /**
458  * scmi_base_discover_list_protocols - get list of protocols
459  * @dev:        SCMI protocol device
460  * @protocols:  Pointer to array of SCMI protocols
461  *
462  * Obtain the list of protocols provided in @protocols.
463  * The number of elements in @protocols always match to the number of
464  * protocols returned by smci_protocol_attrs() when this function succeeds.
465  * It is a caller's responsibility to free @protocols.
466  *
467  * Return: the number of protocols in @protocols on success, error code on
468  * failure
469  */
470 int scmi_base_discover_list_protocols(struct udevice *dev, u8 **protocols);
471
472 /**
473  * scmi_base_discover_agent - identify agent
474  * @dev:                SCMI protocol device
475  * @agent_id:           SCMI agent ID
476  * @ret_agent_id:       Pointer to SCMI agent ID
477  * @name:               Pointer to SCMI agent name
478  *
479  * Obtain the agent's name in @name. If @agent_id is equal to 0xffffffff,
480  * this function returns the caller's agent id in @ret_agent_id.
481  * It is a caller's responsibility to free @name.
482  *
483  * Return: 0 on success, error code on failure
484  */
485 int scmi_base_discover_agent(struct udevice *dev, u32 agent_id,
486                              u32 *ret_agent_id, u8 **name);
487
488 /**
489  * scmi_base_notify_errors - configure error notification
490  * @dev:        SCMI protocol device
491  * @enable:     Operation
492  *
493  * Enable or disable error notification from SCMI firmware.
494  *
495  * Return: 0 on success, error code on failure
496  */
497 int scmi_base_notify_errors(struct udevice *dev, u32 enable);
498
499 /**
500  * scmi_base_set_device_permissions - configure access permission to device
501  * @dev:        SCMI protocol device
502  * @agent_id:   SCMI agent ID
503  * @device_id:  ID of device to access
504  * @flags:      A set of flags
505  *
506  * Ask for allowing or denying access permission to the device, @device_id.
507  * The meaning of @flags is defined in SCMI specification.
508  *
509  * Return: 0 on success, error code on failure
510  */
511 int scmi_base_set_device_permissions(struct udevice *dev, u32 agent_id,
512                                      u32 device_id, u32 flags);
513
514 /**
515  * scmi_base_set_protocol_permissions - configure access permission to
516  *                                      protocol on device
517  * @dev:        SCMI protocol device
518  * @agent_id:   SCMI agent ID
519  * @device_id:  ID of device to access
520  * @command_id: SCMI command ID
521  * @flags:      A set of flags
522  *
523  * Ask for allowing or denying access permission to the protocol, @command_id,
524  * on the device, @device_id.
525  * The meaning of @flags is defined in SCMI specification.
526  *
527  * Return: 0 on success, error code on failure
528  */
529 int scmi_base_set_protocol_permissions(struct udevice *dev,
530                                        u32 agent_id, u32 device_id,
531                                        u32 command_id, u32 flags);
532
533 /**
534  * scmi_base_reset_agent_configuration - reset resource settings
535  * @dev:        SCMI protocol device
536  * @agent_id:   SCMI agent ID
537  * @flags:      A set of flags
538  *
539  * Reset all the resource settings against @agent_id.
540  * The meaning of @flags is defined in SCMI specification.
541  *
542  * Return: 0 on success, error code on failure
543  */
544 int scmi_base_reset_agent_configuration(struct udevice *dev, u32 agent_id,
545                                         u32 flags);
546
547 /*
548  * SCMI Power Domain Management Protocol
549  */
550
551 #define SCMI_PWD_PROTOCOL_VERSION 0x30000
552 #define SCMI_PWD_PSTATE_TYPE_LOST BIT(30)
553 #define SCMI_PWD_PSTATE_ID GENMASK(27, 0)
554
555 enum scmi_power_domain_message_id {
556         SCMI_PWD_ATTRIBUTES = 0x3,
557         SCMI_PWD_STATE_SET = 0x4,
558         SCMI_PWD_STATE_GET = 0x5,
559         SCMI_PWD_STATE_NOTIFY = 0x6,
560         SCMI_PWD_STATE_CHANGE_REQUESTED_NOTIFY = 0x7,
561         SCMI_PWD_NAME_GET = 0x8,
562 };
563
564 /**
565  * struct scmi_pwd_protocol_attrs_out
566  * @status:             SCMI command status
567  * @attributes:         Protocol attributes
568  * @stats_addr_low:     Lower 32 bits of address of statistics memory region
569  * @stats_addr_high:    Higher 32 bits of address of statistics memory region
570  * @stats_len:          Length of statistics memory region
571  */
572 struct scmi_pwd_protocol_attrs_out {
573         s32 status;
574         u32 attributes;
575         u32 stats_addr_low;
576         u32 stats_addr_high;
577         u32 stats_len;
578 };
579
580 #define SCMI_PWD_PROTO_ATTRS_NUM_PWD(attributes) ((attributes) & GENMASK(15, 0))
581
582 /**
583  * struct scmi_pwd_protocol_msg_attrs_out
584  * @status:             SCMI command status
585  * @attributes:         Message-specific attributes
586  */
587 struct scmi_pwd_protocol_msg_attrs_out {
588         s32 status;
589         u32 attributes;
590 };
591
592 #define SCMI_PWD_NAME_LENGTH_MAX 16
593
594 /**
595  * struct scmi_pwd_attrs_out
596  * @status:     SCMI command status
597  * @attributes: Power domain attributes
598  * @name:       Name of power domain
599  */
600 struct scmi_pwd_attrs_out {
601         s32 status;
602         u32 attributes;
603         u8 name[SCMI_PWD_NAME_LENGTH_MAX];
604 };
605
606 #define SCMI_PWD_ATTR_PSTATE_CHANGE_NOTIFY      BIT(31)
607 #define SCMI_PWD_ATTR_PSTATE_ASYNC              BIT(30)
608 #define SCMI_PWD_ATTR_PSTATE_SYNC               BIT(29)
609 #define SCMI_PWD_ATTR_PSTATE_CHANGE_RQ_NOTIFY   BIT(28)
610 #define SCMI_PWD_ATTR_EXTENDED_NAME             BIT(27)
611
612 /**
613  * struct scmi_pwd_state_set_in
614  * @flags:      Flags
615  * @domain_id:  Identifier of power domain
616  * @pstate:     Power state of the domain
617  */
618 struct scmi_pwd_state_set_in {
619         u32 flags;
620         u32 domain_id;
621         u32 pstate;
622 };
623
624 #define SCMI_PWD_SET_FLAGS_ASYNC BIT(0)
625
626 /**
627  * struct scmi_pwd_state_get_out
628  * @status:     SCMI command status
629  * @pstate:     Power state of the domain
630  */
631 struct scmi_pwd_state_get_out {
632         s32 status;
633         u32 pstate;
634 };
635
636 #define SCMI_PWD_EXTENDED_NAME_MAX 64
637 /**
638  * struct scmi_pwd_name_get_out
639  * @status:             SCMI command status
640  * @flags:              Parameter flags
641  * @extended_name:      Extended name of power domain
642  */
643 struct scmi_pwd_name_get_out {
644         s32 status;
645         u32 flags;
646         u8 extended_name[SCMI_PWD_EXTENDED_NAME_MAX];
647 };
648
649 /**
650  * scmi_pwd_protocol_attrs - get protocol attributes
651  * @dev:        SCMI protocol device
652  * @num_pwdoms: Number of power domains
653  * @stats_addr: Address of statistics memory region
654  * @stats_len:  Length of statistics memory region
655  *
656  * Obtain the protocol attributes, the number of power domains and
657  * the information of statistics memory region.
658  *
659  * Return: 0 on success, error code on failure
660  */
661 int scmi_pwd_protocol_attrs(struct udevice *dev, int *num_pwdoms,
662                             u64 *stats_addr, size_t *stats_len);
663 /**
664  * scmi_pwd_protocol_message_attrs - get message-specific attributes
665  * @dev:                SCMI protocol device
666  * @message_id:         SCMI message ID
667  * @attributes:         Message-specific attributes
668  *
669  * Obtain the message-specific attributes in @attributes.
670  *
671  * Return: 0 on success, error code on failure
672  */
673 int scmi_pwd_protocol_message_attrs(struct udevice *dev, s32 message_id,
674                                     u32 *attributes);
675 /**
676  * scmi_pwd_attrs - get power domain attributes
677  * @dev:        SCMI protocol device
678  * @domain_id:  Identifier of power domain
679  * @attributes: Power domain attributes
680  * @name:       Name of power domain
681  *
682  * Obtain the attributes of the given power domain, @domain_id, in @attributes
683  * as well as its name in @name.
684  *
685  * Return: 0 on success, error code on failure
686  */
687 int scmi_pwd_attrs(struct udevice *dev, u32 message_id, u32 *attributes,
688                    u8 **name);
689 /**
690  * scmi_pwd_state_set - set power state
691  * @dev:        SCMI protocol device
692  * @flags:      Parameter flags
693  * @domain_id:  Identifier of power domain
694  * @pstate:     Power state
695  *
696  * Change the power state of the given power domain, @domain_id.
697  *
698  * Return: 0 on success, error code on failure
699  */
700 int scmi_pwd_state_set(struct udevice *dev, u32 flags, u32 domain_id,
701                        u32 pstate);
702 /**
703  * scmi_pwd_state_get - get power state
704  * @dev:        SCMI protocol device
705  * @domain_id:  Identifier of power domain
706  * @pstate:     Power state
707  *
708  * Obtain the power state of the given power domain, @domain_id.
709  *
710  * Return: 0 on success, error code on failure
711  */
712 int scmi_pwd_state_get(struct udevice *dev, u32 domain_id, u32 *pstate);
713 /**
714  * scmi_pwd_name_get - get extended name
715  * @dev:        SCMI protocol device
716  * @domain_id:  Identifier of power domain
717  * @name:       Extended name of the domain
718  *
719  * Obtain the extended name of the given power domain, @domain_id, in @name.
720  *
721  * Return: 0 on success, error code on failure
722  */
723 int scmi_pwd_name_get(struct udevice *dev, u32 domain_id, u8 **name);
724
725 /*
726  * SCMI Clock Protocol
727  */
728
729 enum scmi_clock_message_id {
730         SCMI_CLOCK_ATTRIBUTES = 0x3,
731         SCMI_CLOCK_RATE_SET = 0x5,
732         SCMI_CLOCK_RATE_GET = 0x6,
733         SCMI_CLOCK_CONFIG_SET = 0x7,
734 };
735
736 #define SCMI_CLK_PROTO_ATTR_COUNT_MASK  GENMASK(15, 0)
737 #define SCMI_CLK_RATE_ASYNC_NOTIFY      BIT(0)
738 #define SCMI_CLK_RATE_ASYNC_NORESP      (BIT(0) | BIT(1))
739 #define SCMI_CLK_RATE_ROUND_DOWN        0
740 #define SCMI_CLK_RATE_ROUND_UP          BIT(2)
741 #define SCMI_CLK_RATE_ROUND_CLOSEST     BIT(3)
742
743 #define SCMI_CLOCK_NAME_LENGTH_MAX 16
744
745 /**
746  * struct scmi_clk_get_nb_out - Response for SCMI_PROTOCOL_ATTRIBUTES command
747  * @status:     SCMI command status
748  * @attributes: Attributes of the clock protocol, mainly number of clocks exposed
749  */
750 struct scmi_clk_protocol_attr_out {
751         s32 status;
752         u32 attributes;
753 };
754
755 /**
756  * struct scmi_clk_attribute_in - Message payload for SCMI_CLOCK_ATTRIBUTES command
757  * @clock_id:   SCMI clock ID
758  */
759 struct scmi_clk_attribute_in {
760         u32 clock_id;
761 };
762
763 /**
764  * struct scmi_clk_get_nb_out - Response payload for SCMI_CLOCK_ATTRIBUTES command
765  * @status:     SCMI command status
766  * @attributes: clock attributes
767  * @clock_name: name of the clock
768  */
769 struct scmi_clk_attribute_out {
770         s32 status;
771         u32 attributes;
772         char clock_name[SCMI_CLOCK_NAME_LENGTH_MAX];
773 };
774
775 /**
776  * struct scmi_clk_state_in - Message payload for CLOCK_CONFIG_SET command
777  * @clock_id:   SCMI clock ID
778  * @attributes: Attributes of the targets clock state
779  */
780 struct scmi_clk_state_in {
781         u32 clock_id;
782         u32 attributes;
783 };
784
785 /**
786  * struct scmi_clk_state_out - Response payload for CLOCK_CONFIG_SET command
787  * @status:     SCMI command status
788  */
789 struct scmi_clk_state_out {
790         s32 status;
791 };
792
793 /**
794  * struct scmi_clk_state_in - Message payload for CLOCK_RATE_GET command
795  * @clock_id:   SCMI clock ID
796  * @attributes: Attributes of the targets clock state
797  */
798 struct scmi_clk_rate_get_in {
799         u32 clock_id;
800 };
801
802 /**
803  * struct scmi_clk_rate_get_out - Response payload for CLOCK_RATE_GET command
804  * @status:     SCMI command status
805  * @rate_lsb:   32bit LSB of the clock rate in Hertz
806  * @rate_msb:   32bit MSB of the clock rate in Hertz
807  */
808 struct scmi_clk_rate_get_out {
809         s32 status;
810         u32 rate_lsb;
811         u32 rate_msb;
812 };
813
814 /**
815  * struct scmi_clk_state_in - Message payload for CLOCK_RATE_SET command
816  * @flags:      Flags for the clock rate set request
817  * @clock_id:   SCMI clock ID
818  * @rate_lsb:   32bit LSB of the clock rate in Hertz
819  * @rate_msb:   32bit MSB of the clock rate in Hertz
820  */
821 struct scmi_clk_rate_set_in {
822         u32 flags;
823         u32 clock_id;
824         u32 rate_lsb;
825         u32 rate_msb;
826 };
827
828 /**
829  * struct scmi_clk_rate_set_out - Response payload for CLOCK_RATE_SET command
830  * @status:     SCMI command status
831  */
832 struct scmi_clk_rate_set_out {
833         s32 status;
834 };
835
836 /*
837  * SCMI Reset Domain Protocol
838  */
839
840 enum scmi_reset_domain_message_id {
841         SCMI_RESET_DOMAIN_ATTRIBUTES = 0x3,
842         SCMI_RESET_DOMAIN_RESET = 0x4,
843 };
844
845 #define SCMI_RD_NAME_LEN                16
846
847 #define SCMI_RD_ATTRIBUTES_FLAG_ASYNC   BIT(31)
848 #define SCMI_RD_ATTRIBUTES_FLAG_NOTIF   BIT(30)
849
850 #define SCMI_RD_RESET_FLAG_ASYNC        BIT(2)
851 #define SCMI_RD_RESET_FLAG_ASSERT       BIT(1)
852 #define SCMI_RD_RESET_FLAG_CYCLE        BIT(0)
853
854 /**
855  * struct scmi_rd_attr_in - Payload for RESET_DOMAIN_ATTRIBUTES message
856  * @domain_id:  SCMI reset domain ID
857  */
858 struct scmi_rd_attr_in {
859         u32 domain_id;
860 };
861
862 /**
863  * struct scmi_rd_attr_out - Payload for RESET_DOMAIN_ATTRIBUTES response
864  * @status:     SCMI command status
865  * @attributes: Retrieved attributes of the reset domain
866  * @latency:    Reset cycle max lantency
867  * @name:       Reset domain name
868  */
869 struct scmi_rd_attr_out {
870         s32 status;
871         u32 attributes;
872         u32 latency;
873         char name[SCMI_RD_NAME_LEN];
874 };
875
876 /**
877  * struct scmi_rd_reset_in - Message payload for RESET command
878  * @domain_id:          SCMI reset domain ID
879  * @flags:              Flags for the reset request
880  * @reset_state:        Reset target state
881  */
882 struct scmi_rd_reset_in {
883         u32 domain_id;
884         u32 flags;
885         u32 reset_state;
886 };
887
888 /**
889  * struct scmi_rd_reset_out - Response payload for RESET command
890  * @status:     SCMI command status
891  */
892 struct scmi_rd_reset_out {
893         s32 status;
894 };
895
896 /*
897  * SCMI Voltage Domain Protocol
898  */
899
900 enum scmi_voltage_domain_message_id {
901         SCMI_VOLTAGE_DOMAIN_ATTRIBUTES = 0x3,
902         SCMI_VOLTAGE_DOMAIN_CONFIG_SET = 0x5,
903         SCMI_VOLTAGE_DOMAIN_CONFIG_GET = 0x6,
904         SCMI_VOLTAGE_DOMAIN_LEVEL_SET = 0x7,
905         SCMI_VOLTAGE_DOMAIN_LEVEL_GET = 0x8,
906 };
907
908 #define SCMI_VOLTD_NAME_LEN             16
909
910 #define SCMI_VOLTD_CONFIG_MASK          GENMASK(3, 0)
911 #define SCMI_VOLTD_CONFIG_OFF           0
912 #define SCMI_VOLTD_CONFIG_ON            0x7
913
914 /**
915  * struct scmi_voltd_attr_in - Payload for VOLTAGE_DOMAIN_ATTRIBUTES message
916  * @domain_id:  SCMI voltage domain ID
917  */
918 struct scmi_voltd_attr_in {
919         u32 domain_id;
920 };
921
922 /**
923  * struct scmi_voltd_attr_out - Payload for VOLTAGE_DOMAIN_ATTRIBUTES response
924  * @status:     SCMI command status
925  * @attributes: Retrieved attributes of the voltage domain
926  * @name:       Voltage domain name
927  */
928 struct scmi_voltd_attr_out {
929         s32 status;
930         u32 attributes;
931         char name[SCMI_VOLTD_NAME_LEN];
932 };
933
934 /**
935  * struct scmi_voltd_config_set_in - Message payload for VOLTAGE_CONFIG_SET cmd
936  * @domain_id:  SCMI voltage domain ID
937  * @config:     Configuration data of the voltage domain
938  */
939 struct scmi_voltd_config_set_in {
940         u32 domain_id;
941         u32 config;
942 };
943
944 /**
945  * struct scmi_voltd_config_set_out - Response for VOLTAGE_CONFIG_SET command
946  * @status:     SCMI command status
947  */
948 struct scmi_voltd_config_set_out {
949         s32 status;
950 };
951
952 /**
953  * struct scmi_voltd_config_get_in - Message payload for VOLTAGE_CONFIG_GET cmd
954  * @domain_id:  SCMI voltage domain ID
955  */
956 struct scmi_voltd_config_get_in {
957         u32 domain_id;
958 };
959
960 /**
961  * struct scmi_voltd_config_get_out - Response for VOLTAGE_CONFIG_GET command
962  * @status:     SCMI command status
963  * @config:     Configuration data of the voltage domain
964  */
965 struct scmi_voltd_config_get_out {
966         s32 status;
967         u32 config;
968 };
969
970 /**
971  * struct scmi_voltd_level_set_in - Message payload for VOLTAGE_LEVEL_SET cmd
972  * @domain_id:          SCMI voltage domain ID
973  * @flags:              Parameter flags for configuring target level
974  * @voltage_level:      Target voltage level in microvolts (uV)
975  */
976 struct scmi_voltd_level_set_in {
977         u32 domain_id;
978         u32 flags;
979         s32 voltage_level;
980 };
981
982 /**
983  * struct scmi_voltd_level_set_out - Response for VOLTAGE_LEVEL_SET command
984  * @status:     SCMI    command status
985  */
986 struct scmi_voltd_level_set_out {
987         s32 status;
988 };
989
990 /**
991  * struct scmi_voltd_level_get_in - Message payload for VOLTAGE_LEVEL_GET cmd
992  * @domain_id:          SCMI voltage domain ID
993  */
994 struct scmi_voltd_level_get_in {
995         u32 domain_id;
996 };
997
998 /**
999  * struct scmi_voltd_level_get_out - Response for VOLTAGE_LEVEL_GET command
1000  * @status:             SCMI command status
1001  * @voltage_level:      Voltage level in microvolts (uV)
1002  */
1003 struct scmi_voltd_level_get_out {
1004         s32 status;
1005         s32 voltage_level;
1006 };
1007
1008 #endif /* _SCMI_PROTOCOLS_H */
This page took 0.081153 seconds and 4 git commands to generate.