| From 29d1b89b04a25a6fc62f90b0971bb821cd506402 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Tue, 12 Mar 2019 19:45:13 +0100 |
| Subject: spi: rspi: Fix sequencer reset during initialization |
| |
| [ Upstream commit 26843bb128590edd7eba1ad7ce22e4b9f1066ce3 ] |
| |
| While the sequencer is reset after each SPI message since commit |
| 880c6d114fd79a69 ("spi: rspi: Add support for Quad and Dual SPI |
| Transfers on QSPI"), it was never reset for the first message, thus |
| relying on reset state or bootloader settings. |
| |
| Fix this by initializing it explicitly during configuration. |
| |
| Fixes: 0b2182ddac4b8837 ("spi: add support for Renesas RSPI") |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/spi/spi-rspi.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c |
| index 556870dcdf799..5d35a82945cd1 100644 |
| --- a/drivers/spi/spi-rspi.c |
| +++ b/drivers/spi/spi-rspi.c |
| @@ -271,7 +271,8 @@ static int rspi_set_config_register(struct rspi_data *rspi, int access_size) |
| /* Sets parity, interrupt mask */ |
| rspi_write8(rspi, 0x00, RSPI_SPCR2); |
| |
| - /* Sets SPCMD */ |
| + /* Resets sequencer */ |
| + rspi_write8(rspi, 0, RSPI_SPSCR); |
| rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); |
| rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
| |
| @@ -315,7 +316,8 @@ static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size) |
| rspi_write8(rspi, 0x00, RSPI_SSLND); |
| rspi_write8(rspi, 0x00, RSPI_SPND); |
| |
| - /* Sets SPCMD */ |
| + /* Resets sequencer */ |
| + rspi_write8(rspi, 0, RSPI_SPSCR); |
| rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); |
| rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
| |
| @@ -366,7 +368,8 @@ static int qspi_set_config_register(struct rspi_data *rspi, int access_size) |
| /* Sets buffer to allow normal operation */ |
| rspi_write8(rspi, 0x00, QSPI_SPBFCR); |
| |
| - /* Sets SPCMD */ |
| + /* Resets sequencer */ |
| + rspi_write8(rspi, 0, RSPI_SPSCR); |
| rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
| |
| /* Sets RSPI mode */ |
| -- |
| 2.20.1 |
| |