All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiner Kallweit <hkallweit1@gmail.com>
To: Mark Brown <broonie@kernel.org>,
	Brian Norris <computersforpeace@gmail.com>
Cc: Michal Suchanek <hramrach@gmail.com>,
	Martin Sperl <martin@sperl.org>,
	MTD Maling List <linux-mtd@lists.infradead.org>,
	"linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>
Subject: [PATCH 2/3] mtd: m25p80: handle HW message size restrictions
Date: Sun, 22 Nov 2015 00:08:02 +0100	[thread overview]
Message-ID: <5650F952.2060409@gmail.com> (raw)
In-Reply-To: <CAOMqctR=UDEPbgJDY3YvxpbVEEp4t6ajkyv=cVAZp2fLBNBanA@mail.gmail.com>

Extend m25p80_read allowing to read in chunks in case the
SPI HW has a max supported message size.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/mtd/devices/m25p80.c | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index c9c3b7f..df4c510 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -115,11 +115,7 @@ static inline unsigned int m25p80_rx_nbits(struct spi_nor *nor)
 	}
 }
 
-/*
- * Read an address range from the nor chip.  The address range
- * may be any size provided it is within the physical boundaries.
- */
-static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
+static int _m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
 			size_t *retlen, u_char *buf)
 {
 	struct m25p *flash = nor->priv;
@@ -153,6 +149,39 @@ static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
 }
 
 /*
+ * Read an address range from the nor chip.  The address range
+ * may be any size provided it is within the physical boundaries.
+ */
+static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
+                       size_t *retlen, u_char *buf)
+{
+	struct m25p *flash = nor->priv;
+	size_t cmd_len, xfer_len, max_len;
+	int ret = 0;
+
+	/* convert the dummy cycles to the number of bytes */
+	cmd_len = m25p_cmdsz(nor) + nor->read_dummy / 8;
+
+	max_len = flash->spi->master->max_msg_size ?: SIZE_MAX;
+
+	if (unlikely(max_len < cmd_len))
+		return -EINVAL;
+
+	max_len -= cmd_len;
+
+	while (len) {
+		xfer_len = min(len, max_len);
+		ret = _m25p80_read(nor, from, xfer_len, retlen, buf);
+		if (ret < 0)
+			break;
+		from += xfer_len;
+		len -= xfer_len;
+	}
+
+	return ret;
+}
+
+/*
  * board specific setup should have ensured the SPI clock used here
  * matches what the READ command supports, at least until this driver
  * understands FAST_READ (for clocks over 25 MHz).
-- 
2.6.2

WARNING: multiple messages have this Message-ID (diff)
From: Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Brian Norris
	<computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Michal Suchanek
	<hramrach-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Martin Sperl <martin-d5rIkyn9cnPYtjvyW6yDsg@public.gmane.org>,
	MTD Maling List
	<linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	"linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH 2/3] mtd: m25p80: handle HW message size restrictions
Date: Sun, 22 Nov 2015 00:08:02 +0100	[thread overview]
Message-ID: <5650F952.2060409@gmail.com> (raw)
In-Reply-To: <CAOMqctR=UDEPbgJDY3YvxpbVEEp4t6ajkyv=cVAZp2fLBNBanA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

Extend m25p80_read allowing to read in chunks in case the
SPI HW has a max supported message size.

Signed-off-by: Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/mtd/devices/m25p80.c | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index c9c3b7f..df4c510 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -115,11 +115,7 @@ static inline unsigned int m25p80_rx_nbits(struct spi_nor *nor)
 	}
 }
 
-/*
- * Read an address range from the nor chip.  The address range
- * may be any size provided it is within the physical boundaries.
- */
-static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
+static int _m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
 			size_t *retlen, u_char *buf)
 {
 	struct m25p *flash = nor->priv;
@@ -153,6 +149,39 @@ static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
 }
 
 /*
+ * Read an address range from the nor chip.  The address range
+ * may be any size provided it is within the physical boundaries.
+ */
+static int m25p80_read(struct spi_nor *nor, loff_t from, size_t len,
+                       size_t *retlen, u_char *buf)
+{
+	struct m25p *flash = nor->priv;
+	size_t cmd_len, xfer_len, max_len;
+	int ret = 0;
+
+	/* convert the dummy cycles to the number of bytes */
+	cmd_len = m25p_cmdsz(nor) + nor->read_dummy / 8;
+
+	max_len = flash->spi->master->max_msg_size ?: SIZE_MAX;
+
+	if (unlikely(max_len < cmd_len))
+		return -EINVAL;
+
+	max_len -= cmd_len;
+
+	while (len) {
+		xfer_len = min(len, max_len);
+		ret = _m25p80_read(nor, from, xfer_len, retlen, buf);
+		if (ret < 0)
+			break;
+		from += xfer_len;
+		len -= xfer_len;
+	}
+
+	return ret;
+}
+
+/*
  * board specific setup should have ensured the SPI clock used here
  * matches what the READ command supports, at least until this driver
  * understands FAST_READ (for clocks over 25 MHz).
-- 
2.6.2


--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-11-21 23:13 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-18 21:19 RfC: Handle SPI controller limitations like maximum message length Heiner Kallweit
2015-11-18 21:19 ` Heiner Kallweit
2015-11-18 21:57 ` Mark Brown
2015-11-18 21:57   ` Mark Brown
2015-11-18 22:50   ` Heiner Kallweit
2015-11-18 22:50     ` Heiner Kallweit
2015-11-19 11:40     ` Mark Brown
2015-11-19 11:40       ` Mark Brown
2015-11-19 15:00       ` Martin Sperl
2015-11-19 15:00         ` Martin Sperl
2015-11-19 17:15         ` Mark Brown
2015-11-19 17:15           ` Mark Brown
2015-11-20  0:07           ` Brian Norris
2015-11-20  0:07             ` Brian Norris
2015-11-20 11:06             ` Mark Brown
2015-11-20 11:06               ` Mark Brown
2015-11-20 11:16               ` Martin Sperl
2015-11-20 11:16                 ` Martin Sperl
2015-11-20 10:18           ` Martin Sperl
2015-11-20 10:18             ` Martin Sperl
2015-11-20 12:05             ` Mark Brown
2015-11-20 12:05               ` Mark Brown
2015-11-20 12:56               ` Martin Sperl
2015-11-20 12:56                 ` Martin Sperl
2015-11-21 13:49                 ` Mark Brown
2015-11-21 13:49                   ` Mark Brown
2015-11-21 14:10                   ` Heiner Kallweit
2015-11-21 14:10                     ` Heiner Kallweit
2015-11-21 15:57                     ` Michal Suchanek
2015-11-21 15:57                       ` Michal Suchanek
2015-11-21 22:59                       ` [PATCH 0/3] spi: mtd: Handle HW message length restrictions Heiner Kallweit
2015-11-21 22:59                         ` Heiner Kallweit
2015-11-21 23:01                       ` [PATCH 1/3] spi: core: add max_msg_size to spi_master Heiner Kallweit
2015-11-21 23:01                         ` Heiner Kallweit
2015-11-22 13:16                         ` Mark Brown
2015-11-22 13:16                           ` Mark Brown
2015-11-22 16:15                           ` Heiner Kallweit
2015-11-22 16:15                             ` Heiner Kallweit
2015-11-23 11:38                             ` Mark Brown
2015-11-23 11:38                               ` Mark Brown
2015-11-27 19:26                               ` Heiner Kallweit
2015-11-27 19:26                                 ` Heiner Kallweit
2015-11-30 16:42                                 ` Mark Brown
2015-11-30 16:42                                   ` Mark Brown
2015-11-30 20:15                                   ` Heiner Kallweit
2015-11-30 20:15                                     ` Heiner Kallweit
2015-11-21 23:08                       ` Heiner Kallweit [this message]
2015-11-21 23:08                         ` [PATCH 2/3] mtd: m25p80: handle HW message size restrictions Heiner Kallweit
2015-11-22 12:51                         ` Michal Suchanek
2015-11-22 12:51                           ` Michal Suchanek
2015-11-21 23:11                       ` [PATCH 3/3] spi: fsl-espi: make use of max_msg_size in spi_master to handle HW restrictions Heiner Kallweit
2015-11-21 23:11                         ` Heiner Kallweit
2015-11-30 20:24                       ` [PATCH v2 1/2] spi: core: add max_msg_size to spi_master Heiner Kallweit
2015-11-30 20:24                         ` Heiner Kallweit
2015-11-30 20:25                       ` [PATCH resubmit 2/2] spi: fsl-espi: make use of max_msg_size in spi_master to handle HW restrictions Heiner Kallweit
2015-11-30 20:25                         ` Heiner Kallweit
2015-12-01 14:19                         ` Mark Brown
2015-12-01 14:19                           ` Mark Brown
2015-12-01 18:53                           ` Heiner Kallweit
2015-12-01 18:53                             ` Heiner Kallweit
2015-11-22 13:19                     ` RfC: Handle SPI controller limitations like maximum message length Mark Brown
2015-11-22 13:19                       ` Mark Brown
2015-11-20  0:02 ` Brian Norris
2015-11-20  0:02   ` Brian Norris
2015-11-20  6:59   ` Heiner Kallweit
2015-11-20  6:59     ` Heiner Kallweit
2015-11-20 10:06     ` Heiner Kallweit
2015-11-20 10:06       ` Heiner Kallweit
2015-11-20 12:35       ` Mark Brown
2015-11-20 12:35         ` Mark Brown
2015-11-20 18:59         ` Heiner Kallweit
2015-11-20 18:59           ` Heiner Kallweit
2015-11-20 19:05           ` Michal Suchanek
2015-11-20 19:05             ` Michal Suchanek
2015-11-20 19:21             ` Mark Brown
2015-11-20 19:21               ` Mark Brown
2015-11-20 19:44               ` Michal Suchanek
2015-11-20 19:44                 ` Michal Suchanek
2015-11-20 23:22             ` Brian Norris
2015-11-20 23:22               ` Brian Norris
2015-11-21 22:53               ` Heiner Kallweit
2015-11-21 22:53                 ` Heiner Kallweit
2015-11-20 19:18           ` Mark Brown
2015-11-20 19:18             ` Mark Brown
2015-11-20 19:37             ` Heiner Kallweit
2015-11-20 19:37               ` Heiner Kallweit
2015-11-20 12:31   ` Mark Brown
2015-11-20 12:31     ` Mark Brown
2015-11-20 12:56 ` Michal Suchanek
2015-11-20 12:56   ` Michal Suchanek
2015-11-20 23:07   ` Brian Norris
2015-11-20 23:07     ` Brian Norris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5650F952.2060409@gmail.com \
    --to=hkallweit1@gmail.com \
    --cc=broonie@kernel.org \
    --cc=computersforpeace@gmail.com \
    --cc=hramrach@gmail.com \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=martin@sperl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.