Commit 01bf3fec authored by Sibi Sankar's avatar Sibi Sankar Committed by Bjorn Andersson
Browse files

remoteproc: qcom: q6v5-mss: Use regmap_read_poll_timeout



Replace the loop for HALT_ACK detection with regmap_read_poll_timeout.

Reviewed-by: default avatarEvan Green <evgreen@chromium.org>
Signed-off-by: default avatarSibi Sankar <sibis@codeaurora.org>
Link: https://lore.kernel.org/r/20200123131236.1078-2-sibis@codeaurora.org


Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent 0c2caf75
Loading
Loading
Loading
Loading
+7 −20
Original line number Diff line number Diff line
@@ -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)
@@ -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;

@@ -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)
@@ -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;

@@ -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))