提交 b75c83d9 编写于 作者: C Cristian Marussi 提交者: Sudeep Holla

firmware: arm_scmi: Fix the asynchronous reset requests

SCMI Reset protocol specification allows the asynchronous reset request
only when an autonomous reset action is specified. Reset requests based
on explicit assert/deassert of signals should not be served
asynchronously.

Current implementation will instead issue an asynchronous request in any
case, as long as the reset domain had advertised to support asynchronous
resets.

Avoid requesting the asynchronous resets when the reset action is not
of the autonomous type, even if the target reset domain does, in general,
support the asynchronous requests.

Link: https://lore.kernel.org/r/20220817172731.1185305-6-cristian.marussi@arm.com
Fixes: 95a15d80 ("firmware: arm_scmi: Add RESET protocol in SCMI v2.0")
Signed-off-by: NCristian Marussi <cristian.marussi@arm.com>
Signed-off-by: NSudeep Holla <sudeep.holla@arm.com>
上级 e9076ffb
...@@ -172,7 +172,7 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain, ...@@ -172,7 +172,7 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain,
return -EINVAL; return -EINVAL;
rdom = pi->dom_info + domain; rdom = pi->dom_info + domain;
if (rdom->async_reset) if (rdom->async_reset && flags & AUTONOMOUS_RESET)
flags |= ASYNCHRONOUS_RESET; flags |= ASYNCHRONOUS_RESET;
ret = ph->xops->xfer_get_init(ph, RESET, sizeof(*dom), 0, &t); ret = ph->xops->xfer_get_init(ph, RESET, sizeof(*dom), 0, &t);
...@@ -184,7 +184,7 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain, ...@@ -184,7 +184,7 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain,
dom->flags = cpu_to_le32(flags); dom->flags = cpu_to_le32(flags);
dom->reset_state = cpu_to_le32(state); dom->reset_state = cpu_to_le32(state);
if (rdom->async_reset) if (flags & ASYNCHRONOUS_RESET)
ret = ph->xops->do_xfer_with_response(ph, t); ret = ph->xops->do_xfer_with_response(ph, t);
else else
ret = ph->xops->do_xfer(ph, t); ret = ph->xops->do_xfer(ph, t);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册