enum scmi_power_protocol_cmd {
POWER_DOMAIN_ATTRIBUTES = 0x3,
POWER_STATE_NOTIFY = 0x6,
struct scmi_msg_resp_power_attributes {
struct scmi_msg_resp_power_domain_attributes {
#define SUPPORTS_STATE_SET_NOTIFY(x) ((x) & BIT(31))
#define SUPPORTS_STATE_SET_ASYNC(x) ((x) & BIT(30))
#define SUPPORTS_STATE_SET_SYNC(x) ((x) & BIT(29))
u8 name[SCMI_MAX_STR_SIZE];
struct scmi_power_set_state {
#define STATE_SET_ASYNC BIT(0)
struct scmi_power_state_notify {
char name[SCMI_MAX_STR_SIZE];
struct power_dom_info *dom_info;
static int scmi_power_attributes_get(const struct scmi_handle *handle,
struct scmi_power_info *pi)
struct scmi_msg_resp_power_attributes *attr;
ret = scmi_xfer_get_init(handle, PROTOCOL_ATTRIBUTES,
SCMI_PROTOCOL_POWER, 0, sizeof(*attr), &t);
ret = scmi_do_xfer(handle, t);
pi->num_domains = le16_to_cpu(attr->num_domains);
pi->stats_addr = le32_to_cpu(attr->stats_addr_low) |
(u64)le32_to_cpu(attr->stats_addr_high) << 32;
pi->stats_size = le32_to_cpu(attr->stats_size);
scmi_xfer_put(handle, t);
scmi_power_domain_attributes_get(const struct scmi_handle *handle, u32 domain,
struct power_dom_info *dom_info)
struct scmi_msg_resp_power_domain_attributes *attr;