Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71e24ae6 authored by Mahesh Sivasubramanian's avatar Mahesh Sivasubramanian
Browse files

rpm-smd: Handle TX FIFO full scenario by retrying



When a rpm-smd packet transmission is attempted and fails due to
the TX FIFO being full, retry for a fixed duration before returning
failure.

Change-Id: I93ecfb303e43ae56f4d5f12a88589e13a966cfcd
Signed-off-by: default avatarKarthik Parsha <kparsha@codeaurora.org>
Signed-off-by: default avatarMahesh Sivasubramanian <msivasub@codeaurora.org>
parent 3b74bf1e
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1139,13 +1139,16 @@ static int msm_rpm_glink_send_buffer(char *buf, uint32_t size, bool noirq)
	do {
		ret = glink_tx(glink_data->glink_handle, buf, buf,
					size, GLINK_TX_SINGLE_THREADED);
		if (ret == -EBUSY) {
			pr_warn("%s: Channel is not ready. ret = %d\n",
							__func__, ret);
			spin_unlock_irqrestore(&msm_rpm_data.smd_lock_write,
									flags);
		if (ret == -EBUSY || ret == -ENOSPC) {
			if (!noirq) {
				spin_unlock_irqrestore(
					&msm_rpm_data.smd_lock_write, flags);
				cpu_relax();
				spin_lock_irqsave(
					&msm_rpm_data.smd_lock_write, flags);
			} else {
				udelay(5);
			spin_lock_irqsave(&msm_rpm_data.smd_lock_write, flags);
			}
			timeout--;
		} else {
			ret = 0;