kernel: m25p80: allow fallback from spi_flash_read to regular SPI transfer
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/mtd/devices/m25p80.c
 | 
					--- a/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
+++ b/drivers/mtd/devices/m25p80.c
 | 
					+++ b/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
@@ -192,6 +192,7 @@ static ssize_t m25p80_read(struct spi_no
 | 
					@@ -194,6 +194,7 @@ static ssize_t m25p80_read(struct spi_no
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 static int m25p_probe(struct spi_device *spi)
 | 
					 static int m25p_probe(struct spi_device *spi)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
 	struct flash_platform_data	*data;
 | 
					 	struct flash_platform_data	*data;
 | 
				
			||||||
 	struct m25p *flash;
 | 
					 	struct m25p *flash;
 | 
				
			||||||
 	struct spi_nor *nor;
 | 
					 	struct spi_nor *nor;
 | 
				
			||||||
@@ -244,8 +245,11 @@ static int m25p_probe(struct spi_device
 | 
					@@ -246,8 +247,11 @@ static int m25p_probe(struct spi_device
 | 
				
			||||||
 	if (ret)
 | 
					 	if (ret)
 | 
				
			||||||
 		return ret;
 | 
					 		return ret;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/devices/m25p80.c
 | 
					--- a/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
+++ b/drivers/mtd/devices/m25p80.c
 | 
					+++ b/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
@@ -172,7 +172,8 @@ static ssize_t m25p80_read(struct spi_no
 | 
					@@ -174,7 +174,8 @@ static ssize_t m25p80_read(struct spi_no
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	t[1].rx_buf = buf;
 | 
					 	t[1].rx_buf = buf;
 | 
				
			||||||
 	t[1].rx_nbits = m25p80_rx_nbits(nor);
 | 
					 	t[1].rx_nbits = m25p80_rx_nbits(nor);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					From: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					Date: Fri, 23 Feb 2018 17:12:16 +0100
 | 
				
			||||||
 | 
					Subject: [PATCH] mtd: m25p80: allow fallback from spi_flash_read to regular
 | 
				
			||||||
 | 
					 SPI transfer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some flash controllers, e.g. on the ath79 platform can support a fast
 | 
				
			||||||
 | 
					flash read via memory mapping, but only if the flash chip is in
 | 
				
			||||||
 | 
					3-byte address mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since spi_flash_read_supported does not have access to the same data as
 | 
				
			||||||
 | 
					spi_flash_read, the driver can't detect an unsupported call until m25p80
 | 
				
			||||||
 | 
					has decided to use spi_flash_read.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Allow the driver to indicate a fallback to a regular SPI transfer by
 | 
				
			||||||
 | 
					returning -EOPNOTSUPP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
 | 
					+++ b/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
 | 
					@@ -170,9 +170,11 @@ static ssize_t m25p80_read(struct spi_no
 | 
				
			||||||
 | 
					 		msg.data_nbits = data_nbits;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		ret = spi_flash_read(spi, &msg);
 | 
				
			||||||
 | 
					-		if (ret < 0)
 | 
				
			||||||
 | 
					-			return ret;
 | 
				
			||||||
 | 
					-		return msg.retlen;
 | 
				
			||||||
 | 
					+		if (ret != -EOPNOTSUPP) {
 | 
				
			||||||
 | 
					+			if (ret < 0)
 | 
				
			||||||
 | 
					+				return ret;
 | 
				
			||||||
 | 
					+			return msg.retlen;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	spi_message_init(&m);
 | 
				
			||||||
@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					From: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					Date: Fri, 23 Feb 2018 17:12:16 +0100
 | 
				
			||||||
 | 
					Subject: [PATCH] mtd: m25p80: allow fallback from spi_flash_read to regular
 | 
				
			||||||
 | 
					 SPI transfer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some flash controllers, e.g. on the ath79 platform can support a fast
 | 
				
			||||||
 | 
					flash read via memory mapping, but only if the flash chip is in
 | 
				
			||||||
 | 
					3-byte address mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since spi_flash_read_supported does not have access to the same data as
 | 
				
			||||||
 | 
					spi_flash_read, the driver can't detect an unsupported call until m25p80
 | 
				
			||||||
 | 
					has decided to use spi_flash_read.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Allow the driver to indicate a fallback to a regular SPI transfer by
 | 
				
			||||||
 | 
					returning -EOPNOTSUPP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
 | 
					+++ b/drivers/mtd/devices/m25p80.c
 | 
				
			||||||
 | 
					@@ -155,9 +155,11 @@ static ssize_t m25p80_read(struct spi_no
 | 
				
			||||||
 | 
					 		msg.data_nbits = m25p80_rx_nbits(nor);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		ret = spi_flash_read(spi, &msg);
 | 
				
			||||||
 | 
					-		if (ret < 0)
 | 
				
			||||||
 | 
					-			return ret;
 | 
				
			||||||
 | 
					-		return msg.retlen;
 | 
				
			||||||
 | 
					+		if (ret != -EOPNOTSUPP) {
 | 
				
			||||||
 | 
					+			if (ret < 0)
 | 
				
			||||||
 | 
					+				return ret;
 | 
				
			||||||
 | 
					+			return msg.retlen;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	spi_message_init(&m);
 | 
				
			||||||
@@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 #include <linux/mtd/mtd.h>
 | 
					 #include <linux/mtd/mtd.h>
 | 
				
			||||||
 #include <linux/mtd/partitions.h>
 | 
					 #include <linux/mtd/partitions.h>
 | 
				
			||||||
@@ -243,6 +244,10 @@ static int m25p_probe(struct spi_device
 | 
					@@ -245,6 +246,10 @@ static int m25p_probe(struct spi_device
 | 
				
			||||||
 	};
 | 
					 	};
 | 
				
			||||||
 	char *flash_name;
 | 
					 	char *flash_name;
 | 
				
			||||||
 	int ret;
 | 
					 	int ret;
 | 
				
			||||||
@@ -33,7 +33,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	data = dev_get_platdata(&spi->dev);
 | 
					 	data = dev_get_platdata(&spi->dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -281,6 +286,8 @@ static int m25p_probe(struct spi_device
 | 
					@@ -283,6 +288,8 @@ static int m25p_probe(struct spi_device
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (data && data->name)
 | 
					 	if (data && data->name)
 | 
				
			||||||
 		nor->mtd.name = data->name;
 | 
					 		nor->mtd.name = data->name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 #include <linux/mtd/mtd.h>
 | 
					 #include <linux/mtd/mtd.h>
 | 
				
			||||||
 #include <linux/mtd/partitions.h>
 | 
					 #include <linux/mtd/partitions.h>
 | 
				
			||||||
@@ -198,6 +199,10 @@ static int m25p_probe(struct spi_device
 | 
					@@ -200,6 +201,10 @@ static int m25p_probe(struct spi_device
 | 
				
			||||||
 	enum read_mode mode = SPI_NOR_NORMAL;
 | 
					 	enum read_mode mode = SPI_NOR_NORMAL;
 | 
				
			||||||
 	char *flash_name;
 | 
					 	char *flash_name;
 | 
				
			||||||
 	int ret;
 | 
					 	int ret;
 | 
				
			||||||
@@ -33,7 +33,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	data = dev_get_platdata(&spi->dev);
 | 
					 	data = dev_get_platdata(&spi->dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -227,6 +232,8 @@ static int m25p_probe(struct spi_device
 | 
					@@ -229,6 +234,8 @@ static int m25p_probe(struct spi_device
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (data && data->name)
 | 
					 	if (data && data->name)
 | 
				
			||||||
 		nor->mtd.name = data->name;
 | 
					 		nor->mtd.name = data->name;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user