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 }; 27 28 enum scmi_status_code { 29 SCMI_SUCCESS = 0, 30 SCMI_NOT_SUPPORTED = -1, 31 SCMI_INVALID_PARAMETERS = -2, 32 SCMI_DENIED = -3, 33 SCMI_NOT_FOUND = -4, 34 SCMI_OUT_OF_RANGE = -5, 35 SCMI_BUSY = -6, 36 SCMI_COMMS_ERROR = -7, 37 SCMI_GENERIC_ERROR = -8, 38 SCMI_HARDWARE_ERROR = -9, 39 SCMI_PROTOCOL_ERROR = -10, 40 }; 41 42 /* 43 * SCMI Clock Protocol 44 */ 45 46 enum scmi_clock_message_id { 47 SCMI_CLOCK_RATE_SET = 0x5, 48 SCMI_CLOCK_RATE_GET = 0x6, 49 SCMI_CLOCK_CONFIG_SET = 0x7, 50 }; 51 52 #define SCMI_CLK_RATE_ASYNC_NOTIFY BIT(0) 53 #define SCMI_CLK_RATE_ASYNC_NORESP (BIT(0) | BIT(1)) 54 #define SCMI_CLK_RATE_ROUND_DOWN 0 55 #define SCMI_CLK_RATE_ROUND_UP BIT(2) 56 #define SCMI_CLK_RATE_ROUND_CLOSEST BIT(3) 57 58 /** 59 * struct scmi_clk_state_in - Message payload for CLOCK_CONFIG_SET command 60 * @clock_id: SCMI clock ID 61 * @attributes: Attributes of the targets clock state 62 */ 63 struct scmi_clk_state_in { 64 u32 clock_id; 65 u32 attributes; 66 }; 67 68 /** 69 * struct scmi_clk_state_out - Response payload for CLOCK_CONFIG_SET command 70 * @status: SCMI command status 71 */ 72 struct scmi_clk_state_out { 73 s32 status; 74 }; 75 76 /** 77 * struct scmi_clk_state_in - Message payload for CLOCK_RATE_GET command 78 * @clock_id: SCMI clock ID 79 * @attributes: Attributes of the targets clock state 80 */ 81 struct scmi_clk_rate_get_in { 82 u32 clock_id; 83 }; 84 85 /** 86 * struct scmi_clk_rate_get_out - Response payload for CLOCK_RATE_GET command 87 * @status: SCMI command status 88 * @rate_lsb: 32bit LSB of the clock rate in Hertz 89 * @rate_msb: 32bit MSB of the clock rate in Hertz 90 */ 91 struct scmi_clk_rate_get_out { 92 s32 status; 93 u32 rate_lsb; 94 u32 rate_msb; 95 }; 96 97 /** 98 * struct scmi_clk_state_in - Message payload for CLOCK_RATE_SET command 99 * @clock_id: SCMI clock ID 100 * @flags: Flags for the clock rate set request 101 * @rate_lsb: 32bit LSB of the clock rate in Hertz 102 * @rate_msb: 32bit MSB of the clock rate in Hertz 103 */ 104 struct scmi_clk_rate_set_in { 105 u32 clock_id; 106 u32 flags; 107 u32 rate_lsb; 108 u32 rate_msb; 109 }; 110 111 /** 112 * struct scmi_clk_rate_set_out - Response payload for CLOCK_RATE_SET command 113 * @status: SCMI command status 114 */ 115 struct scmi_clk_rate_set_out { 116 s32 status; 117 }; 118 119 /* 120 * SCMI Reset Domain Protocol 121 */ 122 123 enum scmi_reset_domain_message_id { 124 SCMI_RESET_DOMAIN_ATTRIBUTES = 0x3, 125 SCMI_RESET_DOMAIN_RESET = 0x4, 126 }; 127 128 #define SCMI_RD_NAME_LEN 16 129 130 #define SCMI_RD_ATTRIBUTES_FLAG_ASYNC BIT(31) 131 #define SCMI_RD_ATTRIBUTES_FLAG_NOTIF BIT(30) 132 133 #define SCMI_RD_RESET_FLAG_ASYNC BIT(2) 134 #define SCMI_RD_RESET_FLAG_ASSERT BIT(1) 135 #define SCMI_RD_RESET_FLAG_CYCLE BIT(0) 136 137 /** 138 * struct scmi_rd_attr_in - Payload for RESET_DOMAIN_ATTRIBUTES message 139 * @domain_id: SCMI reset domain ID 140 */ 141 struct scmi_rd_attr_in { 142 u32 domain_id; 143 }; 144 145 /** 146 * struct scmi_rd_attr_out - Payload for RESET_DOMAIN_ATTRIBUTES response 147 * @status: SCMI command status 148 * @attributes: Retrieved attributes of the reset domain 149 * @latency: Reset cycle max lantency 150 * @name: Reset domain name 151 */ 152 struct scmi_rd_attr_out { 153 s32 status; 154 u32 attributes; 155 u32 latency; 156 char name[SCMI_RD_NAME_LEN]; 157 }; 158 159 /** 160 * struct scmi_rd_reset_in - Message payload for RESET command 161 * @domain_id: SCMI reset domain ID 162 * @flags: Flags for the reset request 163 * @reset_state: Reset target state 164 */ 165 struct scmi_rd_reset_in { 166 u32 domain_id; 167 u32 flags; 168 u32 reset_state; 169 }; 170 171 /** 172 * struct scmi_rd_reset_out - Response payload for RESET command 173 * @status: SCMI command status 174 */ 175 struct scmi_rd_reset_out { 176 s32 status; 177 }; 178 179 #endif /* _SCMI_PROTOCOLS_H */ 180