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:
parent
25aaff9100
commit
a49f6565b3
6 changed files with 79 additions and 7 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue