|
@@ -292,8 +292,8 @@ static int scmi_perf_limits_get(const struct scmi_handle *handle, u32 domain,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
-scmi_perf_level_set(const struct scmi_handle *handle, u32 domain, u32 level)
|
|
|
+static int scmi_perf_level_set(const struct scmi_handle *handle, u32 domain,
|
|
|
+ u32 level, bool poll)
|
|
|
{
|
|
|
int ret;
|
|
|
struct scmi_xfer *t;
|
|
@@ -304,6 +304,7 @@ scmi_perf_level_set(const struct scmi_handle *handle, u32 domain, u32 level)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
+ t->hdr.poll_completion = poll;
|
|
|
lvl = t->tx.buf;
|
|
|
lvl->domain = cpu_to_le32(domain);
|
|
|
lvl->level = cpu_to_le32(level);
|
|
@@ -314,8 +315,8 @@ scmi_perf_level_set(const struct scmi_handle *handle, u32 domain, u32 level)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
-scmi_perf_level_get(const struct scmi_handle *handle, u32 domain, u32 *level)
|
|
|
+static int scmi_perf_level_get(const struct scmi_handle *handle, u32 domain,
|
|
|
+ u32 *level, bool poll)
|
|
|
{
|
|
|
int ret;
|
|
|
struct scmi_xfer *t;
|
|
@@ -325,6 +326,7 @@ scmi_perf_level_get(const struct scmi_handle *handle, u32 domain, u32 *level)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
+ t->hdr.poll_completion = poll;
|
|
|
*(__le32 *)t->tx.buf = cpu_to_le32(domain);
|
|
|
|
|
|
ret = scmi_do_xfer(handle, t);
|
|
@@ -400,23 +402,24 @@ static int scmi_dvfs_get_transition_latency(const struct scmi_handle *handle,
|
|
|
}
|
|
|
|
|
|
static int scmi_dvfs_freq_set(const struct scmi_handle *handle, u32 domain,
|
|
|
- unsigned long freq)
|
|
|
+ unsigned long freq, bool poll)
|
|
|
{
|
|
|
struct scmi_perf_info *pi = handle->perf_priv;
|
|
|
struct perf_dom_info *dom = pi->dom_info + domain;
|
|
|
|
|
|
- return scmi_perf_level_set(handle, domain, freq / dom->mult_factor);
|
|
|
+ return scmi_perf_level_set(handle, domain, freq / dom->mult_factor,
|
|
|
+ poll);
|
|
|
}
|
|
|
|
|
|
static int scmi_dvfs_freq_get(const struct scmi_handle *handle, u32 domain,
|
|
|
- unsigned long *freq)
|
|
|
+ unsigned long *freq, bool poll)
|
|
|
{
|
|
|
int ret;
|
|
|
u32 level;
|
|
|
struct scmi_perf_info *pi = handle->perf_priv;
|
|
|
struct perf_dom_info *dom = pi->dom_info + domain;
|
|
|
|
|
|
- ret = scmi_perf_level_get(handle, domain, &level);
|
|
|
+ ret = scmi_perf_level_get(handle, domain, &level, poll);
|
|
|
if (!ret)
|
|
|
*freq = level * dom->mult_factor;
|
|
|
|