Line data Source code
1 1 : /* 2 : * Copyright 2024 NXP 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief SCMI clock protocol helpers 10 : */ 11 : 12 : #ifndef _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_CLK_H_ 13 : #define _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_CLK_H_ 14 : 15 : #include <zephyr/drivers/firmware/scmi/protocol.h> 16 : 17 0 : #define SCMI_CLK_CONFIG_DISABLE_ENABLE_MASK GENMASK(1, 0) 18 0 : #define SCMI_CLK_CONFIG_ENABLE_DISABLE(x)\ 19 : ((uint32_t)(x) & SCMI_CLK_CONFIG_DISABLE_ENABLE_MASK) 20 : 21 0 : #define SCMI_CLK_ATTRIBUTES_CLK_NUM(x) ((x) & GENMASK(15, 0)) 22 : 23 : /** 24 : * @struct scmi_clock_config 25 : * 26 : * @brief Describes the parameters for the CLOCK_CONFIG_SET 27 : * command 28 : */ 29 1 : struct scmi_clock_config { 30 0 : uint32_t clk_id; 31 0 : uint32_t attributes; 32 0 : uint32_t extended_cfg_val; 33 : }; 34 : 35 : /** 36 : * @brief Clock protocol command message IDs 37 : */ 38 0 : enum scmi_clock_message { 39 : SCMI_CLK_MSG_PROTOCOL_VERSION = 0x0, 40 : SCMI_CLK_MSG_PROTOCOL_ATTRIBUTES = 0x1, 41 : SCMI_CLK_MSG_PROTOCOL_MESSAGE_ATTRIBUTES = 0x2, 42 : SCMI_CLK_MSG_CLOCK_ATTRIBUTES = 0x3, 43 : SCMI_CLK_MSG_CLOCK_DESCRIBE_RATES = 0x4, 44 : SCMI_CLK_MSG_CLOCK_RATE_SET = 0x5, 45 : SCMI_CLK_MSG_CLOCK_RATE_GET = 0x6, 46 : SCMI_CLK_MSG_CLOCK_CONFIG_SET = 0x7, 47 : SCMI_CLK_MSG_CLOCK_NAME_GET = 0x8, 48 : SCMI_CLK_MSG_CLOCK_RATE_NOTIFY = 0x9, 49 : SCMI_CLK_MSG_CLOCK_RATE_CHANGE_REQUESTED_NOTIFY = 0xa, 50 : SCMI_CLK_MSG_CLOCK_CONFIG_GET = 0xb, 51 : SCMI_CLK_MSG_CLOCK_POSSIBLE_PARENTS_GET = 0xc, 52 : SCMI_CLK_MSG_CLOCK_PARENT_SET = 0xd, 53 : SCMI_CLK_MSG_CLOCK_PARENT_GET = 0xe, 54 : SCMI_CLK_MSG_CLOCK_GET_PERMISSIONS = 0xf, 55 : SCMI_CLK_MSG_NEGOTIATE_PROTOCOL_VERSION = 0x10, 56 : }; 57 : 58 : /** 59 : * @brief Send the PROTOCOL_ATTRIBUTES command and get its reply 60 : * 61 : * @param proto pointer to SCMI clock protocol data 62 : * @param attributes pointer to attributes to be set via 63 : * this command 64 : * 65 : * @retval 0 if successful 66 : * @retval negative errno if failure 67 : */ 68 1 : int scmi_clock_protocol_attributes(struct scmi_protocol *proto, 69 : uint32_t *attributes); 70 : 71 : /** 72 : * @brief Send the CLOCK_CONFIG_SET command and get its reply 73 : * 74 : * @param proto pointer to SCMI clock protocol data 75 : * @param cfg pointer to structure containing configuration 76 : * to be set 77 : * 78 : * @retval 0 if successful 79 : * @retval negative errno if failure 80 : */ 81 1 : int scmi_clock_config_set(struct scmi_protocol *proto, 82 : struct scmi_clock_config *cfg); 83 : /** 84 : * @brief Query the rate of a clock 85 : * 86 : * @param proto pointer to SCMI clock protocol data 87 : * @param clk_id ID of the clock for which the query is done 88 : * @param rate pointer to rate to be set via this command 89 : * 90 : * @retval 0 if successful 91 : * @retval negative errno if failure 92 : */ 93 1 : int scmi_clock_rate_get(struct scmi_protocol *proto, 94 : uint32_t clk_id, uint32_t *rate); 95 : 96 : #endif /* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_CLK_H_ */