Thread (13 messages) 13 messages, 3 authors, 2022-05-11

Re: [PATCH v11 2/3] fpga: microchip-spi: add Microchip MPF FPGA manager

From: Ivan Bornyakov <hidden>
Date: 2022-05-09 17:38:25
Also in: linux-fpga, lkml

On Mon, May 09, 2022 at 11:41:18AM +0000, Conor.Dooley@microchip.com wrote:
Hey Ivan, one comment below.
Thanks,
Conor.

On 07/05/2022 08:43, Ivan Bornyakov wrote:
quoted
... snip ...
+static int mpf_read_status(struct spi_device *spi)
+{
+       u8 status, status_command = MPF_SPI_READ_STATUS;
+       struct spi_transfer xfer = {
+               .tx_buf = &status_command,
+               .rx_buf = &status,
+               .len = 1,
+       };
+       int ret = spi_sync_transfer(spi, &xfer, 1);
+
+       if ((status & MPF_STATUS_SPI_VIOLATION) ||
+           (status & MPF_STATUS_SPI_ERROR))
+               ret = -EIO;
+
+       return ret ? : status;
+}
+
... snip ...
+
+static int poll_status_not_busy(struct spi_device *spi, u8 mask)
+{
+       int status, timeout = MPF_STATUS_POLL_TIMEOUT;
+
+       while (timeout--) {
+               status = mpf_read_status(spi);
+               if (status < 0 ||
+                   (!(status & MPF_STATUS_BUSY) && (!mask || (status & mask))))
+                       return status;
+
+               usleep_range(1000, 2000);
+       }
+
+       return -EBUSY;
+}
Is there a reason you changed this from the snippet you sent me
in the responses to version 8:
static int poll_status_not_busy(struct spi_device *spi, u8 mask)
{
	u8 status, status_command = MPF_SPI_READ_STATUS;
	int ret, timeout = MPF_STATUS_POLL_TIMEOUT;
	struct spi_transfer xfer = {
		.tx_buf = &status_command,
		.rx_buf = &status,
		.len = 1,
	};

	while (timeout--) {
		ret = spi_sync_transfer(spi, &xfer, 1);
		if (ret < 0)
			return ret;

		if (!(status & MPF_STATUS_BUSY) && (!mask || (status & mask)))
			return status;

		usleep_range(1000, 2000);
	}

	return -EBUSY;
}

With the current version, I hit the "Failed to write bitstream
frame" check in mpf_ops_write at random points in the transfer.
Replacing poll_status_not_busy with the above allows it to run
to completion.
In my eyes they are equivalent, aren't they?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help