Linux-Watchdog Archive on lore.kernel.org
 help / color / Atom feed
From: Andrey Smirnov <andrew.smirnov@gmail.com>
To: linux-watchdog@vger.kernel.org
Cc: Andrey Smirnov <andrew.smirnov@gmail.com>,
	Chris Healy <cphealy@gmail.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Rick Ramstetter <rick@anteaterllc.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v2 19/22] watchdog: ziirave_wdt: Drop status polling code
Date: Mon, 12 Aug 2019 13:09:03 -0700
Message-ID: <20190812200906.31344-20-andrew.smirnov@gmail.com> (raw)
In-Reply-To: <20190812200906.31344-1-andrew.smirnov@gmail.com>

Bootloader firmware doesn't implement DOWNLOAD_START or
DOWNLOAD_PACKET in a non-blocking way. It will stretch the clock of
the first status byte read until the operation is complete. Polling
for the status is not really necessary since it will always succed on
the first try. Replace polling code with a simple single byte read to
simplify things.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Rick Ramstetter <rick@anteaterllc.com>
Cc: linux-watchdog@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/watchdog/ziirave_wdt.c | 28 +++++++---------------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/drivers/watchdog/ziirave_wdt.c b/drivers/watchdog/ziirave_wdt.c
index 92df27350e41..681f65349779 100644
--- a/drivers/watchdog/ziirave_wdt.c
+++ b/drivers/watchdog/ziirave_wdt.c
@@ -57,11 +57,6 @@ static char *ziirave_reasons[] = {"power cycle", "hw watchdog", NULL, NULL,
 
 /* Received and ready for next Download packet. */
 #define ZIIRAVE_FIRM_DOWNLOAD_ACK	1
-/* Currently writing to flash. Retry Download status in a moment! */
-#define ZIIRAVE_FIRM_DOWNLOAD_BUSY	2
-
-/* Wait for ACK timeout in ms */
-#define ZIIRAVE_FIRM_WAIT_FOR_ACK_TIMEOUT	50
 
 /* Firmware commands */
 #define ZIIRAVE_CMD_DOWNLOAD_START		0x10
@@ -175,25 +170,16 @@ static unsigned int ziirave_wdt_get_timeleft(struct watchdog_device *wdd)
 	return ret;
 }
 
-static int ziirave_firm_wait_for_ack(struct watchdog_device *wdd)
+static int ziirave_firm_read_ack(struct watchdog_device *wdd)
 {
 	struct i2c_client *client = to_i2c_client(wdd->parent);
 	int ret;
-	unsigned long timeout;
-
-	timeout = jiffies + msecs_to_jiffies(ZIIRAVE_FIRM_WAIT_FOR_ACK_TIMEOUT);
-	do {
-		if (time_after(jiffies, timeout))
-			return -ETIMEDOUT;
 
-		usleep_range(5000, 10000);
-
-		ret = i2c_smbus_read_byte(client);
-		if (ret < 0) {
-			dev_err(&client->dev, "Failed to read byte\n");
-			return ret;
-		}
-	} while (ret == ZIIRAVE_FIRM_DOWNLOAD_BUSY);
+	ret = i2c_smbus_read_byte(client);
+	if (ret < 0) {
+		dev_err(&client->dev, "Failed to read status byte\n");
+		return ret;
+	}
 
 	return ret == ZIIRAVE_FIRM_DOWNLOAD_ACK ? 0 : -EIO;
 }
@@ -226,7 +212,7 @@ static int ziirave_firm_write_block_data(struct watchdog_device *wdd,
 	}
 
 	if (wait_for_ack)
-		ret = ziirave_firm_wait_for_ack(wdd);
+		ret = ziirave_firm_read_ack(wdd);
 
 	return ret;
 }
-- 
2.21.0


  parent reply index

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-12 20:08 [PATCH v2 00/22] Ziirave_wdt driver fixes Andrey Smirnov
2019-08-12 20:08 ` [PATCH v2 01/22] watchdog: ziirave_wdt: Add missing newline Andrey Smirnov
2019-08-12 20:08 ` [PATCH v2 02/22] watchdog: ziirave_wdt: Be verbose about errors in probe() Andrey Smirnov
2019-08-12 20:08 ` [PATCH v2 03/22] watchdog: ziirave_wdt: Be more verbose during firmware update Andrey Smirnov
2019-08-12 20:08 ` [PATCH v2 04/22] watchdog: ziirave_wdt: Don't bail out on unexpected timeout value Andrey Smirnov
2019-08-15 18:12   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 05/22] watchdog: ziirave_wdt: Log bootloader/firmware info during probe Andrey Smirnov
2019-08-12 20:08 ` [PATCH v2 06/22] watchdog: ziirave_wdt: Simplify ziirave_firm_write_pkt() Andrey Smirnov
2019-08-15 18:14   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 07/22] watchdog: ziirave_wdt: Check packet length only once Andrey Smirnov
2019-08-15 18:14   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 08/22] watchdog: ziirave_wdt: Skip zeros when calculating checksum Andrey Smirnov
2019-08-15 18:16   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 09/22] watchdog: ziirave_wdt: Fix incorrect use of ARRAY_SIZE Andrey Smirnov
2019-08-15 18:17   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 10/22] watchdog: ziirave_wdt: Zero out only what's necessary Andrey Smirnov
2019-08-15 18:17   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 11/22] watchdog: ziirave_wdt: Make use of put_unaligned_le16 Andrey Smirnov
2019-08-15 18:18   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 12/22] watchdog: ziirave_wdt: Don't check if ihex record length is zero Andrey Smirnov
2019-08-15 18:19   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 13/22] watchdog: ziirave_wdt: Don't read out more than 'len' firmware bytes Andrey Smirnov
2019-08-15 18:19   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 14/22] watchdog: ziirave_wdt: Don't try to program readonly flash Andrey Smirnov
2019-08-15 18:21   ` Guenter Roeck
2019-08-12 20:08 ` [PATCH v2 15/22] watchdog: ziirave_wdt: Fix misleading error message Andrey Smirnov
2019-08-15 18:22   ` Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 16/22] watchdog: ziirave_wdt: Fix JUMP_TO_BOOTLOADER payload Andrey Smirnov
2019-08-15 18:22   ` Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 17/22] watchdog: ziirave_wdt: Fix DOWNLOAD_END payload Andrey Smirnov
2019-08-15 18:23   ` Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 18/22] watchdog: ziirave_wdt: Fix RESET_PROCESSOR payload Andrey Smirnov
2019-08-15 18:23   ` Guenter Roeck
2019-08-12 20:09 ` Andrey Smirnov [this message]
2019-08-15 18:24   ` [PATCH v2 19/22] watchdog: ziirave_wdt: Drop status polling code Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 20/22] watchdog: ziirave_wdt: Fix DOWNLOAD_START payload Andrey Smirnov
2019-08-15 18:24   ` Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 21/22] watchdog: ziirave_wdt: Drop ziirave_firm_write_block_data() Andrey Smirnov
2019-08-15 18:25   ` Guenter Roeck
2019-08-12 20:09 ` [PATCH v2 22/22] watchdog: ziirave_wdt: Update checked I2C functionality mask Andrey Smirnov
2019-08-15 18:25   ` Guenter Roeck

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190812200906.31344-20-andrew.smirnov@gmail.com \
    --to=andrew.smirnov@gmail.com \
    --cc=cphealy@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=rick@anteaterllc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Watchdog Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-watchdog/0 linux-watchdog/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-watchdog linux-watchdog/ https://lore.kernel.org/linux-watchdog \
		linux-watchdog@vger.kernel.org linux-watchdog@archiver.kernel.org
	public-inbox-index linux-watchdog


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-watchdog


AGPL code for this site: git clone https://public-inbox.org/ public-inbox