From 312db50237ea2db4a5bdbc5bee1bf53d56af7623 Mon Sep 17 00:00:00 2001 From: Luke go Date: Thu, 21 Jan 2021 17:20:52 +0900 Subject: [PATCH] Revert "Revert "ODROID-COMMON: drivers/spi: Set the 64 bits per word by default"" This reverts commit 4389a90ae44dbaebb123b1b7377d8f1dcefe472d. Change-Id: I7f750bd403e75bb7bf871bca01b4bcfcd0389757 --- drivers/spi/spi-meson-spicc.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c index fdfd79469c08..b1ae9f295fe7 100644 --- a/drivers/spi/spi-meson-spicc.c +++ b/drivers/spi/spi-meson-spicc.c @@ -478,11 +478,9 @@ static inline void meson_spicc_tx(struct meson_spicc_device *spicc) static void meson_spicc_setup_pio_burst(struct meson_spicc_device *spicc) { - unsigned int burst_len; - - burst_len = min_t(unsigned int, - spicc->xfer_remain / spicc->bytes_per_word, - spicc->data->fifo_size); + unsigned int burst_len = min_t(unsigned int, + spicc->xfer_remain / spicc->bytes_per_word, + spicc->data->fifo_size); /* Setup Xfer variables */ spicc->tx_remain = burst_len; @@ -588,6 +586,18 @@ static int meson_spicc_transfer_one(struct spi_master *master, spicc->rx_buf = (u8 *)xfer->rx_buf; spicc->xfer_remain = xfer->len; +#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON) + if ((xfer->len >= 64) && (xfer->bits_per_word == 8) && ((xfer->len % 8) == 0)) { + int cnt = xfer->len / 8; + int i; + + u64 *tx_buf = (u64 *) &spicc->tx_buf[0]; + for (i = 0; i < cnt; i++) + tx_buf[i] = __swab64p((__u64 *) &spicc->tx_buf[i * 8]); + + xfer->bits_per_word = 64; + } +#endif /* Pre-calculate word size */ spicc->bytes_per_word = DIV_ROUND_UP(spicc->xfer->bits_per_word, 8);