Lines Matching +full:protocol +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0
3 * System Control and Management Interface (SCMI) Base Protocol
5 * Copyright (C) 2018-2021 ARM Ltd.
8 #define pr_fmt(fmt) "SCMI Notifications BASE - " fmt
51 * scmi_base_attributes_get() - gets the implementation details
52 * that are associated with the base protocol.
54 * @ph: SCMI protocol handle
63 struct scmi_revision_info *rev = ph->get_priv(ph); in scmi_base_attributes_get()
65 ret = ph->xops->xfer_get_init(ph, PROTOCOL_ATTRIBUTES, in scmi_base_attributes_get()
70 ret = ph->xops->do_xfer(ph, t); in scmi_base_attributes_get()
72 attr_info = t->rx.buf; in scmi_base_attributes_get()
73 rev->num_protocols = attr_info->num_protocols; in scmi_base_attributes_get()
74 rev->num_agents = attr_info->num_agents; in scmi_base_attributes_get()
77 ph->xops->xfer_put(ph, t); in scmi_base_attributes_get()
83 * scmi_base_vendor_id_get() - gets vendor/subvendor identifier ASCII string.
85 * @ph: SCMI protocol handle
86 * @sub_vendor: specify true if sub-vendor ID is needed
97 struct scmi_revision_info *rev = ph->get_priv(ph); in scmi_base_vendor_id_get()
102 vendor_id = rev->sub_vendor_id; in scmi_base_vendor_id_get()
103 size = ARRAY_SIZE(rev->sub_vendor_id); in scmi_base_vendor_id_get()
106 vendor_id = rev->vendor_id; in scmi_base_vendor_id_get()
107 size = ARRAY_SIZE(rev->vendor_id); in scmi_base_vendor_id_get()
110 ret = ph->xops->xfer_get_init(ph, cmd, 0, size, &t); in scmi_base_vendor_id_get()
114 ret = ph->xops->do_xfer(ph, t); in scmi_base_vendor_id_get()
116 memcpy(vendor_id, t->rx.buf, size); in scmi_base_vendor_id_get()
118 ph->xops->xfer_put(ph, t); in scmi_base_vendor_id_get()
124 * scmi_base_implementation_version_get() - gets a vendor-specific
125 * implementation 32-bit version. The format of the version number is
126 * vendor-specific
128 * @ph: SCMI protocol handle
138 struct scmi_revision_info *rev = ph->get_priv(ph); in scmi_base_implementation_version_get()
140 ret = ph->xops->xfer_get_init(ph, BASE_DISCOVER_IMPLEMENT_VERSION, in scmi_base_implementation_version_get()
145 ret = ph->xops->do_xfer(ph, t); in scmi_base_implementation_version_get()
147 impl_ver = t->rx.buf; in scmi_base_implementation_version_get()
148 rev->impl_ver = le32_to_cpu(*impl_ver); in scmi_base_implementation_version_get()
151 ph->xops->xfer_put(ph, t); in scmi_base_implementation_version_get()
157 * scmi_base_implementation_list_get() - gets the list of protocols it is
160 * @ph: SCMI protocol handle
161 * @protocols_imp: pointer to hold the list of protocol identifiers
174 struct device *dev = ph->dev; in scmi_base_implementation_list_get()
176 ret = ph->xops->xfer_get_init(ph, BASE_DISCOVER_LIST_PROTOCOLS, in scmi_base_implementation_list_get()
181 num_skip = t->tx.buf; in scmi_base_implementation_list_get()
182 num_ret = t->rx.buf; in scmi_base_implementation_list_get()
183 list = t->rx.buf + sizeof(*num_ret); in scmi_base_implementation_list_get()
189 ret = ph->xops->do_xfer(ph, t); in scmi_base_implementation_list_get()
195 dev_err(dev, "No. of Protocol > MAX_PROTOCOLS_IMP"); in scmi_base_implementation_list_get()
204 ph->xops->reset_rx_to_maxsz(ph, t); in scmi_base_implementation_list_get()
207 ph->xops->xfer_put(ph, t); in scmi_base_implementation_list_get()
213 * scmi_base_discover_agent_get() - discover the name of an agent
215 * @ph: SCMI protocol handle
216 * @id: Agent identifier
219 * An agent id of 0 is reserved to identify the platform itself.
225 int id, char *name) in scmi_base_discover_agent_get() argument
230 ret = ph->xops->xfer_get_init(ph, BASE_DISCOVER_AGENT, in scmi_base_discover_agent_get()
235 put_unaligned_le32(id, t->tx.buf); in scmi_base_discover_agent_get()
237 ret = ph->xops->do_xfer(ph, t); in scmi_base_discover_agent_get()
239 strlcpy(name, t->rx.buf, SCMI_MAX_STR_SIZE); in scmi_base_discover_agent_get()
241 ph->xops->xfer_put(ph, t); in scmi_base_discover_agent_get()
254 ret = ph->xops->xfer_get_init(ph, BASE_NOTIFY_ERRORS, in scmi_base_error_notify()
259 cfg = t->tx.buf; in scmi_base_error_notify()
260 cfg->event_control = cpu_to_le32(evt_cntl); in scmi_base_error_notify()
262 ret = ph->xops->do_xfer(ph, t); in scmi_base_error_notify()
264 ph->xops->xfer_put(ph, t); in scmi_base_error_notify()
275 pr_debug("FAIL_ENABLED - evt[%X] ret:%d\n", evt_id, ret); in scmi_base_set_notify_enabled()
299 r->timestamp = timestamp; in scmi_base_fill_custom_report()
300 r->agent_id = le32_to_cpu(p->agent_id); in scmi_base_fill_custom_report()
301 r->fatal = IS_FATAL_ERROR(le32_to_cpu(p->error_status)); in scmi_base_fill_custom_report()
302 r->cmd_count = ERROR_CMD_COUNT(le32_to_cpu(p->error_status)); in scmi_base_fill_custom_report()
303 for (i = 0; i < r->cmd_count; i++) in scmi_base_fill_custom_report()
304 r->reports[i] = le64_to_cpu(p->msg_reports[i]); in scmi_base_fill_custom_report()
312 .id = SCMI_EVENT_BASE_ERROR_EVENT,
334 int id, ret; in scmi_base_protocol_init() local
338 struct device *dev = ph->dev; in scmi_base_protocol_init()
341 ret = ph->xops->version_get(ph, &version); in scmi_base_protocol_init()
347 return -ENOMEM; in scmi_base_protocol_init()
349 rev->major_ver = PROTOCOL_REV_MAJOR(version), in scmi_base_protocol_init()
350 rev->minor_ver = PROTOCOL_REV_MINOR(version); in scmi_base_protocol_init()
351 ph->set_priv(ph, rev); in scmi_base_protocol_init()
361 dev_info(dev, "SCMI Protocol v%d.%d '%s:%s' Firmware version 0x%x\n", in scmi_base_protocol_init()
362 rev->major_ver, rev->minor_ver, rev->vendor_id, in scmi_base_protocol_init()
363 rev->sub_vendor_id, rev->impl_ver); in scmi_base_protocol_init()
364 dev_dbg(dev, "Found %d protocol(s) %d agent(s)\n", rev->num_protocols, in scmi_base_protocol_init()
365 rev->num_agents); in scmi_base_protocol_init()
367 for (id = 0; id < rev->num_agents; id++) { in scmi_base_protocol_init()
368 scmi_base_discover_agent_get(ph, id, name); in scmi_base_protocol_init()
369 dev_dbg(dev, "Agent %d: %s\n", id, name); in scmi_base_protocol_init()
376 .id = SCMI_PROTOCOL_BASE,