summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch')
-rw-r--r--target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch179
1 files changed, 0 insertions, 179 deletions
diff --git a/target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch b/target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch
deleted file mode 100644
index 5e116b0bbf..0000000000
--- a/target/linux/generic/pending-4.4/080-spi-introduce-accelerated-read-support-for-spi-flash.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From 556351f14e74db4cd3ddde386457edce7bf0b27f Mon Sep 17 00:00:00 2001
-From: Vignesh R <vigneshr@ti.com>
-Date: Fri, 11 Dec 2015 09:39:56 +0530
-Subject: [PATCH] spi: introduce accelerated read support for spi flash devices
-
-In addition to providing direct access to SPI bus, some spi controller
-hardwares (like ti-qspi) provide special port (like memory mapped port)
-that are optimized to improve SPI flash read performance.
-This means the controller can automatically send the SPI signals
-required to read data from the SPI flash device.
-For this, SPI controller needs to know flash specific information like
-read command to use, dummy bytes and address width.
-
-Introduce spi_flash_read() interface to support accelerated read
-over SPI flash devices. SPI master drivers can implement this callback to
-support interfaces such as memory mapped read etc. m25p80 flash driver
-and other flash drivers can call this make use of such interfaces. The
-interface should only be used with SPI flashes and cannot be used with
-other SPI devices.
-
-Signed-off-by: Vignesh R <vigneshr@ti.com>
-Signed-off-by: Mark Brown <broonie@kernel.org>
----
-
---- a/drivers/spi/spi.c
-+++ b/drivers/spi/spi.c
-@@ -1135,6 +1135,7 @@ static void __spi_pump_messages(struct s
- }
- }
-
-+ mutex_lock(&master->bus_lock_mutex);
- trace_spi_message_start(master->cur_msg);
-
- if (master->prepare_message) {
-@@ -1144,6 +1145,7 @@ static void __spi_pump_messages(struct s
- "failed to prepare message: %d\n", ret);
- master->cur_msg->status = ret;
- spi_finalize_current_message(master);
-+ mutex_unlock(&master->bus_lock_mutex);
- return;
- }
- master->cur_msg_prepared = true;
-@@ -1153,6 +1155,7 @@ static void __spi_pump_messages(struct s
- if (ret) {
- master->cur_msg->status = ret;
- spi_finalize_current_message(master);
-+ mutex_unlock(&master->bus_lock_mutex);
- return;
- }
-
-@@ -1160,8 +1163,10 @@ static void __spi_pump_messages(struct s
- if (ret) {
- dev_err(&master->dev,
- "failed to transfer one message from queue\n");
-+ mutex_unlock(&master->bus_lock_mutex);
- return;
- }
-+ mutex_unlock(&master->bus_lock_mutex);
- }
-
- /**
-@@ -2329,6 +2334,46 @@ int spi_async_locked(struct spi_device *
- EXPORT_SYMBOL_GPL(spi_async_locked);
-
-
-+int spi_flash_read(struct spi_device *spi,
-+ struct spi_flash_read_message *msg)
-+
-+{
-+ struct spi_master *master = spi->master;
-+ int ret;
-+
-+ if ((msg->opcode_nbits == SPI_NBITS_DUAL ||
-+ msg->addr_nbits == SPI_NBITS_DUAL) &&
-+ !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD)))
-+ return -EINVAL;
-+ if ((msg->opcode_nbits == SPI_NBITS_QUAD ||
-+ msg->addr_nbits == SPI_NBITS_QUAD) &&
-+ !(spi->mode & SPI_TX_QUAD))
-+ return -EINVAL;
-+ if (msg->data_nbits == SPI_NBITS_DUAL &&
-+ !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD)))
-+ return -EINVAL;
-+ if (msg->data_nbits == SPI_NBITS_QUAD &&
-+ !(spi->mode & SPI_RX_QUAD))
-+ return -EINVAL;
-+
-+ if (master->auto_runtime_pm) {
-+ ret = pm_runtime_get_sync(master->dev.parent);
-+ if (ret < 0) {
-+ dev_err(&master->dev, "Failed to power device: %d\n",
-+ ret);
-+ return ret;
-+ }
-+ }
-+ mutex_lock(&master->bus_lock_mutex);
-+ ret = master->spi_flash_read(spi, msg);
-+ mutex_unlock(&master->bus_lock_mutex);
-+ if (master->auto_runtime_pm)
-+ pm_runtime_put(master->dev.parent);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(spi_flash_read);
-+
- /*-------------------------------------------------------------------------*/
-
- /* Utility methods for SPI master protocol drivers, layered on
---- a/include/linux/spi/spi.h
-+++ b/include/linux/spi/spi.h
-@@ -25,6 +25,7 @@
- struct dma_chan;
- struct spi_master;
- struct spi_transfer;
-+struct spi_flash_read_message;
-
- /*
- * INTERFACES between SPI master-side drivers and SPI infrastructure.
-@@ -361,6 +362,8 @@ static inline void spi_unregister_driver
- * @handle_err: the subsystem calls the driver to handle an error that occurs
- * in the generic implementation of transfer_one_message().
- * @unprepare_message: undo any work done by prepare_message().
-+ * @spi_flash_read: to support spi-controller hardwares that provide
-+ * accelerated interface to read from flash devices.
- * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS
- * number. Any individual value may be -ENOENT for CS lines that
- * are not GPIOs (driven by the SPI controller itself).
-@@ -507,6 +510,8 @@ struct spi_master {
- struct spi_message *message);
- int (*unprepare_message)(struct spi_master *master,
- struct spi_message *message);
-+ int (*spi_flash_read)(struct spi_device *spi,
-+ struct spi_flash_read_message *msg);
-
- /*
- * These hooks are for drivers that use a generic implementation
-@@ -999,6 +1004,42 @@ static inline ssize_t spi_w8r16be(struct
- return be16_to_cpu(result);
- }
-
-+/**
-+ * struct spi_flash_read_message - flash specific information for
-+ * spi-masters that provide accelerated flash read interfaces
-+ * @buf: buffer to read data
-+ * @from: offset within the flash from where data is to be read
-+ * @len: length of data to be read
-+ * @retlen: actual length of data read
-+ * @read_opcode: read_opcode to be used to communicate with flash
-+ * @addr_width: number of address bytes
-+ * @dummy_bytes: number of dummy bytes
-+ * @opcode_nbits: number of lines to send opcode
-+ * @addr_nbits: number of lines to send address
-+ * @data_nbits: number of lines for data
-+ */
-+struct spi_flash_read_message {
-+ void *buf;
-+ loff_t from;
-+ size_t len;
-+ size_t retlen;
-+ u8 read_opcode;
-+ u8 addr_width;
-+ u8 dummy_bytes;
-+ u8 opcode_nbits;
-+ u8 addr_nbits;
-+ u8 data_nbits;
-+};
-+
-+/* SPI core interface for flash read support */
-+static inline bool spi_flash_read_supported(struct spi_device *spi)
-+{
-+ return spi->master->spi_flash_read ? true : false;
-+}
-+
-+int spi_flash_read(struct spi_device *spi,
-+ struct spi_flash_read_message *msg);
-+
- /*---------------------------------------------------------------------------*/
-
- /*