From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH 13/14] spi: dw: Support clock stretching
Date: Sun, 31 Jan 2021 19:34:35 -0500 [thread overview]
Message-ID: <20210201003436.1180667-14-seanga2@gmail.com> (raw)
In-Reply-To: <20210201003436.1180667-1-seanga2@gmail.com>
We don't always read/write to the FIFO fast enough. Enable clock stretching
for enhanced SPI transfers. This is only possible with DWC SSI devices more
recent than 1.01a. We also need to set the RXFTLR register to tell the
device when to start reciving again. In particular, the default of 0 will
result in the device never restarting reception if there is an overflow. On
the transmit side, we need to set CTRL1 so that the device knows when to
keep stretching the clock if the FIFO is empty.
Signed-off-by: Sean Anderson <seanga2@gmail.com>
---
drivers/spi/designware_spi.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index 4796d55b20..78da490c3e 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -254,7 +254,8 @@ static u32 dw_spi_update_spi_cr0(const struct spi_mem_op *op)
return FIELD_PREP(SPI_CTRLR0_TRANS_TYPE, trans_type)
| FIELD_PREP(SPI_CTRLR0_ADDR_L_MASK, op->addr.nbytes * 2)
| FIELD_PREP(SPI_CTRLR0_INST_L_MASK, 2)
- | FIELD_PREP(SPI_CTRLR0_WAIT_CYCLES_MASK, wait_cycles);
+ | FIELD_PREP(SPI_CTRLR0_WAIT_CYCLES_MASK, wait_cycles)
+ | SPI_CTRLR0_CLK_STRETCH_EN;
}
static int request_gpio_cs(struct udevice *bus)
@@ -356,6 +357,9 @@ static void spi_hw_init(struct udevice *bus, struct dw_spi_priv *priv)
priv->fifo_len = (fifo == 1) ? 0 : fifo;
dw_write(priv, DW_SPI_TXFTLR, 0);
}
+
+ /* Set receive fifo interrupt level register for clock stretching */
+ dw_write(priv, DW_SPI_RXFTLR, priv->fifo_len - 1);
}
/*
@@ -778,8 +782,7 @@ static int dw_spi_exec_op(struct spi_slave *slave, const struct spi_mem_op *op)
dw_write(priv, DW_SPI_SSIENR, 0);
dw_write(priv, DW_SPI_CTRLR0, cr0);
- if (read)
- dw_write(priv, DW_SPI_CTRLR1, op->data.nbytes - 1);
+ dw_write(priv, DW_SPI_CTRLR1, op->data.nbytes - 1);
if (priv->spi_frf != CTRLR0_SPI_FRF_BYTE)
dw_write(priv, DW_SPI_SPI_CTRL0, spi_cr0);
dw_write(priv, DW_SPI_SSIENR, 1);
--
2.29.2
next prev parent reply other threads:[~2021-02-01 0:34 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-01 0:34 [PATCH 00/14] spi: dw: Add support for DUAL/QUAD/OCTAL modes Sean Anderson
2021-02-01 0:34 ` [PATCH 01/14] cmd: sf: Display errno on erase failure Sean Anderson
2021-02-01 5:06 ` Bin Meng
2021-02-01 12:51 ` Pratyush Yadav
2021-02-01 0:34 ` [PATCH 02/14] cmd: sf: Print error on test failure Sean Anderson
2021-02-01 5:06 ` Bin Meng
2021-02-01 12:54 ` Pratyush Yadav
2021-02-01 0:34 ` [PATCH 03/14] mtd: spi-nor-core: Fix typo in documentation Sean Anderson
2021-02-01 5:06 ` Bin Meng
2021-02-01 12:23 ` Pratyush Yadav
2021-02-01 0:34 ` [PATCH 04/14] mtd: spi-mem: Export spi_mem_default_supports_op Sean Anderson
2021-02-01 5:06 ` Bin Meng
2021-02-01 12:07 ` Pratyush Yadav
2021-02-01 15:15 ` Sean Anderson
2021-02-01 0:34 ` [PATCH 05/14] spi: spi-mem: Add debug message for spi-mem ops Sean Anderson
2021-02-01 5:06 ` Bin Meng
2021-02-01 12:18 ` Pratyush Yadav
2021-02-01 15:33 ` Sean Anderson
2021-02-01 16:34 ` Pratyush Yadav
2021-02-01 0:34 ` [PATCH 06/14] spi: dw: Log status register on timeout Sean Anderson
2021-02-01 0:34 ` [PATCH 07/14] spi: dw: Mask all possible interrupts Sean Anderson
2021-02-04 4:51 ` Sean Anderson
2021-02-01 0:34 ` [PATCH 08/14] spi: dw: Switch to capabilities Sean Anderson
2021-02-01 0:34 ` [PATCH 09/14] spi: dw: Rewrite poll_transfer logic Sean Anderson
2021-02-01 0:34 ` [PATCH 10/14] spi: dw: Add DUAL/QUAD/OCTAL caps Sean Anderson
2021-02-01 18:00 ` Sean Anderson
2021-02-01 0:34 ` [PATCH 11/14] spi: dw: Add registers necessary for DUAL/QUAD/OCTAL Sean Anderson
2021-02-01 0:34 ` [PATCH 12/14] spi: dw: Support DUAL/QUAD/OCTAL Sean Anderson
2021-02-01 0:34 ` Sean Anderson [this message]
2021-02-01 0:34 ` [PATCH 14/14] riscv: k210: Enable QSPI for spi3 Sean Anderson
2021-02-01 5:16 ` Bin Meng
2021-02-04 2:32 ` Leo Liang
Reply instructions:
You may reply publicly 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=20210201003436.1180667-14-seanga2@gmail.com \
--to=seanga2@gmail.com \
--cc=u-boot@lists.denx.de \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox