Skip to content

Commit

Permalink
remoteproc: qcom: q6v5-mss: Use regmap_read_poll_timeout
Browse files Browse the repository at this point in the history
Replace the loop for HALT_ACK detection with regmap_read_poll_timeout.

Reviewed-by: Evan Green <evgreen@chromium.org>
Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Link: https://lore.kernel.org/r/20200123131236.1078-2-sibis@codeaurora.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
  • Loading branch information
Sibi Sankar authored and Bjorn Andersson committed Jan 24, 2020
1 parent 0c2caf7 commit 01bf3fe
Showing 1 changed file with 7 additions and 20 deletions.
27 changes: 7 additions & 20 deletions drivers/remoteproc/qcom_q6v5_mss.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@
#define NAV_AXI_HALTACK_BIT BIT(1)
#define NAV_AXI_IDLE_BIT BIT(2)

#define HALT_ACK_TIMEOUT_MS 100
#define HALT_ACK_TIMEOUT_US 100000
#define NAV_HALT_ACK_TIMEOUT_US 200

/* QDSP6SS_RESET */
#define Q6SS_STOP_CORE BIT(0)
Expand Down Expand Up @@ -716,7 +717,6 @@ static void q6v5proc_halt_axi_port(struct q6v5 *qproc,
struct regmap *halt_map,
u32 offset)
{
unsigned long timeout;
unsigned int val;
int ret;

Expand All @@ -729,14 +729,8 @@ static void q6v5proc_halt_axi_port(struct q6v5 *qproc,
regmap_write(halt_map, offset + AXI_HALTREQ_REG, 1);

/* Wait for halt */
timeout = jiffies + msecs_to_jiffies(HALT_ACK_TIMEOUT_MS);
for (;;) {
ret = regmap_read(halt_map, offset + AXI_HALTACK_REG, &val);
if (ret || val || time_after(jiffies, timeout))
break;

msleep(1);
}
regmap_read_poll_timeout(halt_map, offset + AXI_HALTACK_REG, val,
val, 1000, HALT_ACK_TIMEOUT_US);

ret = regmap_read(halt_map, offset + AXI_IDLE_REG, &val);
if (ret || !val)
Expand All @@ -750,7 +744,6 @@ static void q6v5proc_halt_nav_axi_port(struct q6v5 *qproc,
struct regmap *halt_map,
u32 offset)
{
unsigned long timeout;
unsigned int val;
int ret;

Expand All @@ -764,15 +757,9 @@ static void q6v5proc_halt_nav_axi_port(struct q6v5 *qproc,
NAV_AXI_HALTREQ_BIT);

/* Wait for halt ack*/
timeout = jiffies + msecs_to_jiffies(HALT_ACK_TIMEOUT_MS);
for (;;) {
ret = regmap_read(halt_map, offset, &val);
if (ret || (val & NAV_AXI_HALTACK_BIT) ||
time_after(jiffies, timeout))
break;

udelay(5);
}
regmap_read_poll_timeout(halt_map, offset, val,
(val & NAV_AXI_HALTACK_BIT),
5, NAV_HALT_ACK_TIMEOUT_US);

ret = regmap_read(halt_map, offset, &val);
if (ret || !(val & NAV_AXI_IDLE_BIT))
Expand Down

0 comments on commit 01bf3fe

Please sign in to comment.