diff options
author | Mark Brown <broonie@kernel.org> | 2019-03-15 13:06:34 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-03-15 13:06:34 -0400 |
commit | 3949ba3b3724e0304b0989ca4c1d785a1fb93ba0 (patch) | |
tree | 6508295ee9d9e2dccb2a5a3dc053cdbb98d555b6 | |
parent | 6d85028134d3f4f946924e2f9f0aaff47d9de840 (diff) | |
parent | 5356c2c70e385198e1a753ee364323f2fc01f759 (diff) |
Merge branch 'spi-5.1' into spi-5.2 for stm32
-rw-r--r-- | drivers/spi/spi-imx.c | 2 | ||||
-rw-r--r-- | drivers/spi/spi-rspi.c | 48 | ||||
-rw-r--r-- | drivers/spi/spi-stm32-qspi.c | 4 | ||||
-rw-r--r-- | drivers/spi/spi.c | 2 |
4 files changed, 26 insertions, 30 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index e08646e715ba..09c9a1edb2c6 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
@@ -1501,7 +1501,7 @@ static int spi_imx_transfer(struct spi_device *spi, | |||
1501 | 1501 | ||
1502 | /* flush rxfifo before transfer */ | 1502 | /* flush rxfifo before transfer */ |
1503 | while (spi_imx->devtype_data->rx_available(spi_imx)) | 1503 | while (spi_imx->devtype_data->rx_available(spi_imx)) |
1504 | spi_imx->rx(spi_imx); | 1504 | readl(spi_imx->base + MXC_CSPIRXDATA); |
1505 | 1505 | ||
1506 | if (spi_imx->slave_mode) | 1506 | if (spi_imx->slave_mode) |
1507 | return spi_imx_pio_transfer_slave(spi, transfer); | 1507 | return spi_imx_pio_transfer_slave(spi, transfer); |
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index 556870dcdf79..3be8fbe80b08 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) | |||
271 | /* Sets parity, interrupt mask */ | 271 | /* Sets parity, interrupt mask */ |
272 | rspi_write8(rspi, 0x00, RSPI_SPCR2); | 272 | rspi_write8(rspi, 0x00, RSPI_SPCR2); |
273 | 273 | ||
274 | /* Sets SPCMD */ | 274 | /* Resets sequencer */ |
275 | rspi_write8(rspi, 0, RSPI_SPSCR); | ||
275 | rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); | 276 | rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); |
276 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); | 277 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
277 | 278 | ||
@@ -315,7 +316,8 @@ static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size) | |||
315 | rspi_write8(rspi, 0x00, RSPI_SSLND); | 316 | rspi_write8(rspi, 0x00, RSPI_SSLND); |
316 | rspi_write8(rspi, 0x00, RSPI_SPND); | 317 | rspi_write8(rspi, 0x00, RSPI_SPND); |
317 | 318 | ||
318 | /* Sets SPCMD */ | 319 | /* Resets sequencer */ |
320 | rspi_write8(rspi, 0, RSPI_SPSCR); | ||
319 | rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); | 321 | rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); |
320 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); | 322 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
321 | 323 | ||
@@ -366,7 +368,8 @@ static int qspi_set_config_register(struct rspi_data *rspi, int access_size) | |||
366 | /* Sets buffer to allow normal operation */ | 368 | /* Sets buffer to allow normal operation */ |
367 | rspi_write8(rspi, 0x00, QSPI_SPBFCR); | 369 | rspi_write8(rspi, 0x00, QSPI_SPBFCR); |
368 | 370 | ||
369 | /* Sets SPCMD */ | 371 | /* Resets sequencer */ |
372 | rspi_write8(rspi, 0, RSPI_SPSCR); | ||
370 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); | 373 | rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); |
371 | 374 | ||
372 | /* Sets RSPI mode */ | 375 | /* Sets RSPI mode */ |
@@ -868,28 +871,6 @@ static int qspi_transfer_one(struct spi_controller *ctlr, | |||
868 | } | 871 | } |
869 | } | 872 | } |
870 | 873 | ||
871 | static int rspi_setup(struct spi_device *spi) | ||
872 | { | ||
873 | struct rspi_data *rspi = spi_controller_get_devdata(spi->controller); | ||
874 | |||
875 | rspi->max_speed_hz = spi->max_speed_hz; | ||
876 | |||
877 | rspi->spcmd = SPCMD_SSLKP; | ||
878 | if (spi->mode & SPI_CPOL) | ||
879 | rspi->spcmd |= SPCMD_CPOL; | ||
880 | if (spi->mode & SPI_CPHA) | ||
881 | rspi->spcmd |= SPCMD_CPHA; | ||
882 | |||
883 | /* CMOS output mode and MOSI signal from previous transfer */ | ||
884 | rspi->sppcr = 0; | ||
885 | if (spi->mode & SPI_LOOP) | ||
886 | rspi->sppcr |= SPPCR_SPLP; | ||
887 | |||
888 | set_config_register(rspi, 8); | ||
889 | |||
890 | return 0; | ||
891 | } | ||
892 | |||
893 | static u16 qspi_transfer_mode(const struct spi_transfer *xfer) | 874 | static u16 qspi_transfer_mode(const struct spi_transfer *xfer) |
894 | { | 875 | { |
895 | if (xfer->tx_buf) | 876 | if (xfer->tx_buf) |
@@ -959,8 +940,24 @@ static int rspi_prepare_message(struct spi_controller *ctlr, | |||
959 | struct spi_message *msg) | 940 | struct spi_message *msg) |
960 | { | 941 | { |
961 | struct rspi_data *rspi = spi_controller_get_devdata(ctlr); | 942 | struct rspi_data *rspi = spi_controller_get_devdata(ctlr); |
943 | struct spi_device *spi = msg->spi; | ||
962 | int ret; | 944 | int ret; |
963 | 945 | ||
946 | rspi->max_speed_hz = spi->max_speed_hz; | ||
947 | |||
948 | rspi->spcmd = SPCMD_SSLKP; | ||
949 | if (spi->mode & SPI_CPOL) | ||
950 | rspi->spcmd |= SPCMD_CPOL; | ||
951 | if (spi->mode & SPI_CPHA) | ||
952 | rspi->spcmd |= SPCMD_CPHA; | ||
953 | |||
954 | /* CMOS output mode and MOSI signal from previous transfer */ | ||
955 | rspi->sppcr = 0; | ||
956 | if (spi->mode & SPI_LOOP) | ||
957 | rspi->sppcr |= SPPCR_SPLP; | ||
958 | |||
959 | set_config_register(rspi, 8); | ||
960 | |||
964 | if (msg->spi->mode & | 961 | if (msg->spi->mode & |
965 | (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) { | 962 | (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) { |
966 | /* Setup sequencer for messages with multiple transfer modes */ | 963 | /* Setup sequencer for messages with multiple transfer modes */ |
@@ -1267,7 +1264,6 @@ static int rspi_probe(struct platform_device *pdev) | |||
1267 | init_waitqueue_head(&rspi->wait); | 1264 | init_waitqueue_head(&rspi->wait); |
1268 | 1265 | ||
1269 | ctlr->bus_num = pdev->id; | 1266 | ctlr->bus_num = pdev->id; |
1270 | ctlr->setup = rspi_setup; | ||
1271 | ctlr->auto_runtime_pm = true; | 1267 | ctlr->auto_runtime_pm = true; |
1272 | ctlr->transfer_one = ops->transfer_one; | 1268 | ctlr->transfer_one = ops->transfer_one; |
1273 | ctlr->prepare_message = rspi_prepare_message; | 1269 | ctlr->prepare_message = rspi_prepare_message; |
diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c index 3b2a9a6b990d..7354f9d68dba 100644 --- a/drivers/spi/spi-stm32-qspi.c +++ b/drivers/spi/spi-stm32-qspi.c | |||
@@ -76,7 +76,6 @@ | |||
76 | #define QSPI_PSMAR 0x28 | 76 | #define QSPI_PSMAR 0x28 |
77 | #define QSPI_PIR 0x2c | 77 | #define QSPI_PIR 0x2c |
78 | #define QSPI_LPTR 0x30 | 78 | #define QSPI_LPTR 0x30 |
79 | #define LPTR_DFT_TIMEOUT 0x10 | ||
80 | 79 | ||
81 | #define STM32_QSPI_MAX_MMAP_SZ SZ_256M | 80 | #define STM32_QSPI_MAX_MMAP_SZ SZ_256M |
82 | #define STM32_QSPI_MAX_NORCHIP 2 | 81 | #define STM32_QSPI_MAX_NORCHIP 2 |
@@ -372,8 +371,7 @@ static int stm32_qspi_setup(struct spi_device *spi) | |||
372 | flash->presc = presc; | 371 | flash->presc = presc; |
373 | 372 | ||
374 | mutex_lock(&qspi->lock); | 373 | mutex_lock(&qspi->lock); |
375 | writel_relaxed(LPTR_DFT_TIMEOUT, qspi->io_base + QSPI_LPTR); | 374 | cr = FIELD_PREP(CR_FTHRES_MASK, 3) | CR_SSHIFT | CR_EN; |
376 | cr = FIELD_PREP(CR_FTHRES_MASK, 3) | CR_TCEN | CR_SSHIFT | CR_EN; | ||
377 | writel_relaxed(cr, qspi->io_base + QSPI_CR); | 375 | writel_relaxed(cr, qspi->io_base + QSPI_CR); |
378 | 376 | ||
379 | /* set dcr fsize to max address */ | 377 | /* set dcr fsize to max address */ |
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 93986f879b09..2be394d3bc59 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -1039,6 +1039,8 @@ static int spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg) | |||
1039 | if (max_tx || max_rx) { | 1039 | if (max_tx || max_rx) { |
1040 | list_for_each_entry(xfer, &msg->transfers, | 1040 | list_for_each_entry(xfer, &msg->transfers, |
1041 | transfer_list) { | 1041 | transfer_list) { |
1042 | if (!xfer->len) | ||
1043 | continue; | ||
1042 | if (!xfer->tx_buf) | 1044 | if (!xfer->tx_buf) |
1043 | xfer->tx_buf = ctlr->dummy_tx; | 1045 | xfer->tx_buf = ctlr->dummy_tx; |
1044 | if (!xfer->rx_buf) | 1046 | if (!xfer->rx_buf) |