linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-09-30  8:00         ` [PATCH v3 5/7] mtd: m25p80: add support to parse the SPI flash's partitions Mingkai Hu
@ 2010-09-30  8:00           ` Mingkai Hu
       [not found]             ` <1285833646-12006-7-git-send-email-Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Mingkai Hu @ 2010-09-30  8:00 UTC (permalink / raw)
  To: linuxppc-dev, spi-devel-general, linux-mtd
  Cc: grant.likely, kumar.gala, tie-fei.zang, Mingkai Hu

For Freescale's eSPI controller, the max transaction length one time
is limitted by the SPCOM[TRANSLEN] field which is 0xFFFF. When used
mkfs.ext2 command to create ext2 filesystem on the flash, the read
length will exceed the max value of the SPCOM[TRANSLEN] field, so
change the read function to read page by page.

For other SPI flash driver, also needed to supply the read function
if used the eSPI controller.

Signed-off-by: Mingkai Hu <Mingkai.hu@freescale.com>
---
v3:
 - Add a quirks member for the SPI master to handle the contrains of the
   SPI controller. I can't think of other method. :-(

 drivers/mtd/devices/m25p80.c |   78 ++++++++++++++++++++++++++++++++++++++++++
 drivers/spi/spi_fsl_lib.c    |    4 ++
 include/linux/spi/spi.h      |    5 +++
 3 files changed, 87 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 47d53c7..f65cca8 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -377,6 +377,81 @@ static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len,
 }
 
 /*
+ * Read an address range from the flash chip page by page.
+ * Some controller has transaction length limitation such as the
+ * Freescale's eSPI controller can only trasmit 0xFFFF bytes one
+ * time, so we have to read page by page if the len is more than
+ * the limitation.
+ */
+static int m25p80_page_read(struct mtd_info *mtd, loff_t from, size_t len,
+	size_t *retlen, u_char *buf)
+{
+	struct m25p *flash = mtd_to_m25p(mtd);
+	struct spi_transfer t[2];
+	struct spi_message m;
+	u32 i, page_size = 0;
+
+	DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
+			dev_name(&flash->spi->dev), __func__, "from",
+			(u32)from, len);
+
+	/* sanity checks */
+	if (!len)
+		return 0;
+
+	if (from + len > flash->mtd.size)
+		return -EINVAL;
+
+	spi_message_init(&m);
+	memset(t, 0, (sizeof t));
+
+	/* NOTE:
+	 * OPCODE_FAST_READ (if available) is faster.
+	 * Should add 1 byte DUMMY_BYTE.
+	 */
+	t[0].tx_buf = flash->command;
+	t[0].len = m25p_cmdsz(flash) + FAST_READ_DUMMY_BYTE;
+	spi_message_add_tail(&t[0], &m);
+
+	t[1].rx_buf = buf;
+	spi_message_add_tail(&t[1], &m);
+
+	/* Byte count starts at zero. */
+	if (retlen)
+		*retlen = 0;
+
+	mutex_lock(&flash->lock);
+
+	/* Wait till previous write/erase is done. */
+	if (wait_till_ready(flash)) {
+		/* REVISIT status return?? */
+		mutex_unlock(&flash->lock);
+		return 1;
+	}
+
+	/* Set up the write data buffer. */
+	flash->command[0] = OPCODE_READ;
+
+	for (i = page_size; i < len; i += page_size) {
+		page_size = len - i;
+		if (page_size > flash->page_size)
+			page_size = flash->page_size;
+		m25p_addr2cmd(flash, from + i, flash->command);
+		t[1].len = page_size;
+		t[1].rx_buf = buf + i;
+
+		spi_sync(flash->spi, &m);
+
+		*retlen += m.actual_length - m25p_cmdsz(flash)
+			- FAST_READ_DUMMY_BYTE;
+	}
+
+	mutex_unlock(&flash->lock);
+
+	return 0;
+}
+
+/*
  * Write an address range to the flash chip.  Data must be written in
  * FLASH_PAGESIZE chunks.  The address range may be any size provided
  * it is within the physical boundaries.
@@ -874,6 +949,9 @@ static int __devinit m25p_probe(struct spi_device *spi)
 	flash->mtd.erase = m25p80_erase;
 	flash->mtd.read = m25p80_read;
 
+	if (spi->master->quirks & SPI_QUIRK_TRANS_LEN_LIMIT)
+		flash->mtd.read = m25p80_page_read;
+
 	/* sst flash chips use AAI word program */
 	if (info->jedec_id >> 16 == 0xbf)
 		flash->mtd.write = sst_write;
diff --git a/drivers/spi/spi_fsl_lib.c b/drivers/spi/spi_fsl_lib.c
index 5cd741f..c8d8c2d 100644
--- a/drivers/spi/spi_fsl_lib.c
+++ b/drivers/spi/spi_fsl_lib.c
@@ -135,6 +135,10 @@ int mpc8xxx_spi_probe(struct device *dev, struct resource *mem,
 	master->cleanup = mpc8xxx_spi_cleanup;
 	master->dev.of_node = dev->of_node;
 
+	if (of_get_property(dev->of_node,
+				"fsl,spi-quirk-trans-len-limit", NULL))
+		master->quirks |= SPI_QUIRK_TRANS_LEN_LIMIT;
+
 	mpc8xxx_spi = spi_master_get_devdata(master);
 	mpc8xxx_spi->dev = dev;
 	mpc8xxx_spi->get_rx = mpc8xxx_spi_rx_buf_u8;
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 92e52a1..4234dfd 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -304,6 +304,11 @@ struct spi_master {
 
 	/* called on release() to free memory provided by spi_master */
 	void			(*cleanup)(struct spi_device *spi);
+
+	/* some constraints of the controller */
+	u16			quirks;
+#define SPI_QUIRK_TRANS_LEN_LIMIT	BIT(0)	/* have trans length limit */
+
 };
 
 static inline void *spi_master_get_devdata(struct spi_master *master)
-- 
1.6.4



______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
@ 2010-09-30 10:46 David Brownell
  2010-09-30 14:16 ` Grant Likely
       [not found] ` <841976.76219.qm-g47maUHHHF8HBU+L9ui1Svu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
  0 siblings, 2 replies; 10+ messages in thread
From: David Brownell @ 2010-09-30 10:46 UTC (permalink / raw)
  To: linuxppc-dev, spi-devel-general, linux-mtd, Mingkai Hu
  Cc: kumar.gala, Mingkai Hu


--- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:

> From: Mingkai Hu <Mingkai.hu@freescale.com>
> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page

NAK.

We went over this before.

  The bug is in your SPI master controller driver,
and the fix there involves mapping large reads
 into multiple smaller reads.  (Example, 128K
read as two 64K reads instead of one of 128K.

It's *NEVER* appropriate to commit to patching all
upper level drivers in order to work around bugs
in lower level ones.  The set of such upper level
drivers that may need bugfixing is quite large,
most will never be used with your buggy controller
driver, and all such patches will need testing (but
the test resources are probably not available).

Whatever SPI controller driver you're working with
is clearly buggy ... but not unfixably so.

DO NOT head down the path of requiring every SPI
device driver to include workarounds for this odd
little SPI master driver bug.

- Dave

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-09-30 10:46 [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page David Brownell
@ 2010-09-30 14:16 ` Grant Likely
  2010-09-30 14:41   ` Grant Likely
       [not found] ` <841976.76219.qm-g47maUHHHF8HBU+L9ui1Svu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
  1 sibling, 1 reply; 10+ messages in thread
From: Grant Likely @ 2010-09-30 14:16 UTC (permalink / raw)
  To: David Brownell
  Cc: linuxppc-dev, Mingkai Hu, linux-mtd, kumar.gala,
	spi-devel-general

On Thu, Sep 30, 2010 at 7:46 PM, David Brownell <david-b@pacbell.net> wrote:
>
> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:
>
>> From: Mingkai Hu <Mingkai.hu@freescale.com>
>> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
>
> NAK.
>
> We went over this before.

Yes, I agree with David on this.  If large transfers don't work, then
it is the SPI master driver that is buggy.

g.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-09-30 14:16 ` Grant Likely
@ 2010-09-30 14:41   ` Grant Likely
  2010-09-30 15:06     ` Anton Vorontsov
  0 siblings, 1 reply; 10+ messages in thread
From: Grant Likely @ 2010-09-30 14:41 UTC (permalink / raw)
  To: David Brownell
  Cc: linuxppc-dev, Mingkai Hu, linux-mtd, kumar.gala,
	spi-devel-general

On Thu, Sep 30, 2010 at 11:16 PM, Grant Likely
<grant.likely@secretlab.ca> wrote:
> On Thu, Sep 30, 2010 at 7:46 PM, David Brownell <david-b@pacbell.net> wrote:
>>
>> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:
>>
>>> From: Mingkai Hu <Mingkai.hu@freescale.com>
>>> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
>>
>> NAK.
>>
>> We went over this before.
>
> Yes, I agree with David on this.  If large transfers don't work, then
> it is the SPI master driver that is buggy.

By the way, does this fix your problem?

https://patchwork.kernel.org/patch/184752/

g.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-09-30 14:41   ` Grant Likely
@ 2010-09-30 15:06     ` Anton Vorontsov
  2010-09-30 20:57       ` Grant Likely
       [not found]       ` <20100930150633.GA13741-wnGakbxT3iijyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
  0 siblings, 2 replies; 10+ messages in thread
From: Anton Vorontsov @ 2010-09-30 15:06 UTC (permalink / raw)
  To: Grant Likely
  Cc: kumar.gala, David Brownell, linuxppc-dev, linux-mtd,
	spi-devel-general, Mingkai Hu

On Thu, Sep 30, 2010 at 11:41:40PM +0900, Grant Likely wrote:
> On Thu, Sep 30, 2010 at 11:16 PM, Grant Likely
> <grant.likely@secretlab.ca> wrote:
> > On Thu, Sep 30, 2010 at 7:46 PM, David Brownell <david-b@pacbell.net> wrote:
> >>
> >> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:
> >>
> >>> From: Mingkai Hu <Mingkai.hu@freescale.com>
> >>> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
> >>
> >> NAK.
> >>
> >> We went over this before.
> >
> > Yes, I agree with David on this.  If large transfers don't work, then
> > it is the SPI master driver that is buggy.
> 
> By the way, does this fix your problem?
> 
> https://patchwork.kernel.org/patch/184752/

It shouldn't. AFAIK, eSPI is PIO-only controller, and the overrun
fix is for the DMA mode.

Thanks,

p.s. Btw, in patch 3/7, is_dma_mapped argument of fsl_espi_bufs()
is unneeded.

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-09-30 15:06     ` Anton Vorontsov
@ 2010-09-30 20:57       ` Grant Likely
       [not found]       ` <20100930150633.GA13741-wnGakbxT3iijyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
  1 sibling, 0 replies; 10+ messages in thread
From: Grant Likely @ 2010-09-30 20:57 UTC (permalink / raw)
  To: Anton Vorontsov
  Cc: kumar.gala, David Brownell, linuxppc-dev, linux-mtd,
	spi-devel-general, Mingkai Hu

On Fri, Oct 1, 2010 at 12:06 AM, Anton Vorontsov <cbouatmailru@gmail.com> wrote:
> On Thu, Sep 30, 2010 at 11:41:40PM +0900, Grant Likely wrote:
>> On Thu, Sep 30, 2010 at 11:16 PM, Grant Likely
>> <grant.likely@secretlab.ca> wrote:
>> > On Thu, Sep 30, 2010 at 7:46 PM, David Brownell <david-b@pacbell.net> wrote:
>> >>
>> >> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:
>> >>
>> >>> From: Mingkai Hu <Mingkai.hu@freescale.com>
>> >>> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
>> >>
>> >> NAK.
>> >>
>> >> We went over this before.
>> >
>> > Yes, I agree with David on this.  If large transfers don't work, then
>> > it is the SPI master driver that is buggy.
>>
>> By the way, does this fix your problem?
>>
>> https://patchwork.kernel.org/patch/184752/
>
> It shouldn't. AFAIK, eSPI is PIO-only controller, and the overrun
> fix is for the DMA mode.
>
> Thanks,
>
> p.s. Btw, in patch 3/7, is_dma_mapped argument of fsl_espi_bufs()
> is unneeded.

Thanks Anton.  Please reply to that patch with this comment so that
patchwork records it and I don't forget about it.

Thanks,
g.

>
> --
> Anton Vorontsov
> email: cbouatmailru@gmail.com
> irc://irc.freenode.net/bd2
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
       [not found]             ` <1285833646-12006-7-git-send-email-Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2010-09-30 21:41               ` Grant Likely
  0 siblings, 0 replies; 10+ messages in thread
From: Grant Likely @ 2010-09-30 21:41 UTC (permalink / raw)
  To: Mingkai Hu
  Cc: tie-fei.zang-KZfg59tc24xl57MIdRCFDg,
	linuxppc-dev-mnsaURCQ41sdnm+yROfE0A,
	kumar.gala-KZfg59tc24xl57MIdRCFDg,
	linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Hmmm.... for some reason the previous replies didn't get picked up by
patchwork, so I'm replying with my comment again for the public
record.

In this case the eSPI controller driver is buggy and needs to be
fixed.  If the hardware can only support small transfers, then it is
the responsibilty of the driver to chain up smaller chunks into one
big transfer, and make sure that the CS line doesn't go low in the
middle of it.

g.

On Thu, Sep 30, 2010 at 5:00 PM, Mingkai Hu <Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> For Freescale's eSPI controller, the max transaction length one time
> is limitted by the SPCOM[TRANSLEN] field which is 0xFFFF. When used
> mkfs.ext2 command to create ext2 filesystem on the flash, the read
> length will exceed the max value of the SPCOM[TRANSLEN] field, so
> change the read function to read page by page.
>
> For other SPI flash driver, also needed to supply the read function
> if used the eSPI controller.
>
> Signed-off-by: Mingkai Hu <Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
> v3:
>  - Add a quirks member for the SPI master to handle the contrains of the
>   SPI controller. I can't think of other method. :-(
>
>  drivers/mtd/devices/m25p80.c |   78 ++++++++++++++++++++++++++++++++++++++++++
>  drivers/spi/spi_fsl_lib.c    |    4 ++
>  include/linux/spi/spi.h      |    5 +++
>  3 files changed, 87 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
> index 47d53c7..f65cca8 100644
> --- a/drivers/mtd/devices/m25p80.c
> +++ b/drivers/mtd/devices/m25p80.c
> @@ -377,6 +377,81 @@ static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len,
>  }
>
>  /*
> + * Read an address range from the flash chip page by page.
> + * Some controller has transaction length limitation such as the
> + * Freescale's eSPI controller can only trasmit 0xFFFF bytes one
> + * time, so we have to read page by page if the len is more than
> + * the limitation.
> + */
> +static int m25p80_page_read(struct mtd_info *mtd, loff_t from, size_t len,
> +       size_t *retlen, u_char *buf)
> +{
> +       struct m25p *flash = mtd_to_m25p(mtd);
> +       struct spi_transfer t[2];
> +       struct spi_message m;
> +       u32 i, page_size = 0;
> +
> +       DEBUG(MTD_DEBUG_LEVEL2, "%s: %s %s 0x%08x, len %zd\n",
> +                       dev_name(&flash->spi->dev), __func__, "from",
> +                       (u32)from, len);
> +
> +       /* sanity checks */
> +       if (!len)
> +               return 0;
> +
> +       if (from + len > flash->mtd.size)
> +               return -EINVAL;
> +
> +       spi_message_init(&m);
> +       memset(t, 0, (sizeof t));
> +
> +       /* NOTE:
> +        * OPCODE_FAST_READ (if available) is faster.
> +        * Should add 1 byte DUMMY_BYTE.
> +        */
> +       t[0].tx_buf = flash->command;
> +       t[0].len = m25p_cmdsz(flash) + FAST_READ_DUMMY_BYTE;
> +       spi_message_add_tail(&t[0], &m);
> +
> +       t[1].rx_buf = buf;
> +       spi_message_add_tail(&t[1], &m);
> +
> +       /* Byte count starts at zero. */
> +       if (retlen)
> +               *retlen = 0;
> +
> +       mutex_lock(&flash->lock);
> +
> +       /* Wait till previous write/erase is done. */
> +       if (wait_till_ready(flash)) {
> +               /* REVISIT status return?? */
> +               mutex_unlock(&flash->lock);
> +               return 1;
> +       }
> +
> +       /* Set up the write data buffer. */
> +       flash->command[0] = OPCODE_READ;
> +
> +       for (i = page_size; i < len; i += page_size) {
> +               page_size = len - i;
> +               if (page_size > flash->page_size)
> +                       page_size = flash->page_size;
> +               m25p_addr2cmd(flash, from + i, flash->command);
> +               t[1].len = page_size;
> +               t[1].rx_buf = buf + i;
> +
> +               spi_sync(flash->spi, &m);
> +
> +               *retlen += m.actual_length - m25p_cmdsz(flash)
> +                       - FAST_READ_DUMMY_BYTE;
> +       }
> +
> +       mutex_unlock(&flash->lock);
> +
> +       return 0;
> +}
> +
> +/*
>  * Write an address range to the flash chip.  Data must be written in
>  * FLASH_PAGESIZE chunks.  The address range may be any size provided
>  * it is within the physical boundaries.
> @@ -874,6 +949,9 @@ static int __devinit m25p_probe(struct spi_device *spi)
>        flash->mtd.erase = m25p80_erase;
>        flash->mtd.read = m25p80_read;
>
> +       if (spi->master->quirks & SPI_QUIRK_TRANS_LEN_LIMIT)
> +               flash->mtd.read = m25p80_page_read;
> +
>        /* sst flash chips use AAI word program */
>        if (info->jedec_id >> 16 == 0xbf)
>                flash->mtd.write = sst_write;
> diff --git a/drivers/spi/spi_fsl_lib.c b/drivers/spi/spi_fsl_lib.c
> index 5cd741f..c8d8c2d 100644
> --- a/drivers/spi/spi_fsl_lib.c
> +++ b/drivers/spi/spi_fsl_lib.c
> @@ -135,6 +135,10 @@ int mpc8xxx_spi_probe(struct device *dev, struct resource *mem,
>        master->cleanup = mpc8xxx_spi_cleanup;
>        master->dev.of_node = dev->of_node;
>
> +       if (of_get_property(dev->of_node,
> +                               "fsl,spi-quirk-trans-len-limit", NULL))
> +               master->quirks |= SPI_QUIRK_TRANS_LEN_LIMIT;
> +
>        mpc8xxx_spi = spi_master_get_devdata(master);
>        mpc8xxx_spi->dev = dev;
>        mpc8xxx_spi->get_rx = mpc8xxx_spi_rx_buf_u8;
> diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
> index 92e52a1..4234dfd 100644
> --- a/include/linux/spi/spi.h
> +++ b/include/linux/spi/spi.h
> @@ -304,6 +304,11 @@ struct spi_master {
>
>        /* called on release() to free memory provided by spi_master */
>        void                    (*cleanup)(struct spi_device *spi);
> +
> +       /* some constraints of the controller */
> +       u16                     quirks;
> +#define SPI_QUIRK_TRANS_LEN_LIMIT      BIT(0)  /* have trans length limit */
> +
>  };
>
>  static inline void *spi_master_get_devdata(struct spi_master *master)
> --
> 1.6.4
>
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
       [not found] ` <841976.76219.qm-g47maUHHHF8HBU+L9ui1Svu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-10-08  2:13   ` Hu Mingkai-B21284
  0 siblings, 0 replies; 10+ messages in thread
From: Hu Mingkai-B21284 @ 2010-10-08  2:13 UTC (permalink / raw)
  To: David Brownell, linuxppc-dev-mnsaURCQ41sdnm+yROfE0A,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
  Cc: Gala Kumar-B11780, Zang Roy-R61911



> -----Original Message-----
> From: David Brownell [mailto:david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org]
> Sent: Thursday, September 30, 2010 6:46 PM
> To: linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org; spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org; linux-
> mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org; Hu Mingkai-B21284
> Cc: Gala Kumar-B11780; Zang Roy-R61911; Hu Mingkai-B21284
> Subject: Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by
> page
> 
> 
> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > From: Mingkai Hu <Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read page
> > by page
> 
> NAK.
> 
> We went over this before.
> 
>   The bug is in your SPI master controller driver, and the fix there involves
> mapping large reads  into multiple smaller reads.  (Example, 128K read as two
> 64K reads instead of one of 128K.
> 
> It's *NEVER* appropriate to commit to patching all upper level drivers in order
> to work around bugs in lower level ones.  The set of such upper level drivers
> that may need bugfixing is quite large, most will never be used with your buggy
> controller driver, and all such patches will need testing (but the test
> resources are probably not available).
> 
> Whatever SPI controller driver you're working with is clearly buggy ... but not
> unfixably so.
> 
> DO NOT head down the path of requiring every SPI device driver to include
> workarounds for this odd little SPI master driver bug.
> 
> - Dave
> 

Thanks for your comments, the controller driver is the proper place to handle this, I'll fix it.

Thanks,
Mingkai


------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
       [not found]       ` <20100930150633.GA13741-wnGakbxT3iijyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
@ 2010-10-08  2:15         ` Hu Mingkai-B21284
  2010-10-08  6:11           ` Kumar Gala
  0 siblings, 1 reply; 10+ messages in thread
From: Hu Mingkai-B21284 @ 2010-10-08  2:15 UTC (permalink / raw)
  To: Anton Vorontsov, Grant Likely
  Cc: David Brownell, linuxppc-dev-mnsaURCQ41sdnm+yROfE0A,
	Gala Kumar-B11780, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f



> -----Original Message-----
> From: Anton Vorontsov [mailto:cbouatmailru@gmail.com]
> Sent: Thursday, September 30, 2010 11:07 PM
> To: Grant Likely
> Cc: David Brownell; linuxppc-dev@ozlabs.org; Hu Mingkai-B21284; linux-
> mtd@lists.infradead.org; Gala Kumar-B11780; spi-devel-
> general@lists.sourceforge.net
> Subject: Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by
> page
> 
> On Thu, Sep 30, 2010 at 11:41:40PM +0900, Grant Likely wrote:
> > On Thu, Sep 30, 2010 at 11:16 PM, Grant Likely
> > <grant.likely@secretlab.ca> wrote:
> > > On Thu, Sep 30, 2010 at 7:46 PM, David Brownell <david-b@pacbell.net> wrote:
> > >>
> > >> --- On Thu, 9/30/10, Mingkai Hu <Mingkai.hu@freescale.com> wrote:
> > >>
> > >>> From: Mingkai Hu <Mingkai.hu@freescale.com>
> > >>> Subject: [PATCH v3 6/7] mtd: m25p80: add a read function to read
> > >>> page by page
> > >>
> > >> NAK.
> > >>
> > >> We went over this before.
> > >
> > > Yes, I agree with David on this.  If large transfers don't work,
> > > then it is the SPI master driver that is buggy.
> >
> > By the way, does this fix your problem?
> >
> > https://patchwork.kernel.org/patch/184752/
> 
> It shouldn't. AFAIK, eSPI is PIO-only controller, and the overrun fix is for the
> DMA mode.
> 
> Thanks,
> 
> p.s. Btw, in patch 3/7, is_dma_mapped argument of fsl_espi_bufs() is unneeded.
> 

Yes, the is_dma_mapped isn't needed, I'll remove it.

Thanks,
Mingkai
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page
  2010-10-08  2:15         ` Hu Mingkai-B21284
@ 2010-10-08  6:11           ` Kumar Gala
  0 siblings, 0 replies; 10+ messages in thread
From: Kumar Gala @ 2010-10-08  6:11 UTC (permalink / raw)
  To: Hu Mingkai-B21284
  Cc: David Brownell, linuxppc-dev, linux-mtd, spi-devel-general,
	Gala Kumar-B11780


On Oct 7, 2010, at 9:15 PM, Hu Mingkai-B21284 wrote:

>>>> Yes, I agree with David on this.  If large transfers don't work,
>>>> then it is the SPI master driver that is buggy.
>>> 
>>> By the way, does this fix your problem?
>>> 
>>> https://patchwork.kernel.org/patch/184752/
>> 
>> It shouldn't. AFAIK, eSPI is PIO-only controller, and the overrun fix is for the
>> DMA mode.
>> 
>> Thanks,
>> 
>> p.s. Btw, in patch 3/7, is_dma_mapped argument of fsl_espi_bufs() is unneeded.
>> 
> 
> Yes, the is_dma_mapped isn't needed, I'll remove it.
> 
> Thanks,
> Mingkai

I'd be really nice if we could close on this patchset in time for .37 acceptance.  I'm guessing that cutoff is quickly approaching.

- k

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-10-08  6:11 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-30 10:46 [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page David Brownell
2010-09-30 14:16 ` Grant Likely
2010-09-30 14:41   ` Grant Likely
2010-09-30 15:06     ` Anton Vorontsov
2010-09-30 20:57       ` Grant Likely
     [not found]       ` <20100930150633.GA13741-wnGakbxT3iijyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
2010-10-08  2:15         ` Hu Mingkai-B21284
2010-10-08  6:11           ` Kumar Gala
     [not found] ` <841976.76219.qm-g47maUHHHF8HBU+L9ui1Svu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-10-08  2:13   ` Hu Mingkai-B21284
  -- strict thread matches above, loose matches on Subject: below --
2010-09-30  8:00 [PATCH v3 0/7] refactor spi_mpc8xxx.c and add eSPI controller support Mingkai Hu
2010-09-30  8:00 ` [PATCH v3 1/7] spi/mpc8xxx: rename spi_mpc8xxx.c to spi_fsl_spi.c Mingkai Hu
2010-09-30  8:00   ` [PATCH v3 2/7] spi/mpc8xxx: refactor the common code for SPI/eSPI controller Mingkai Hu
2010-09-30  8:00     ` [PATCH v3 3/7] eSPI: add eSPI controller support Mingkai Hu
2010-09-30  8:00       ` [PATCH v3 4/7] powerpc/of: add eSPI controller dts bindings and DTS modification Mingkai Hu
2010-09-30  8:00         ` [PATCH v3 5/7] mtd: m25p80: add support to parse the SPI flash's partitions Mingkai Hu
2010-09-30  8:00           ` [PATCH v3 6/7] mtd: m25p80: add a read function to read page by page Mingkai Hu
     [not found]             ` <1285833646-12006-7-git-send-email-Mingkai.hu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2010-09-30 21:41               ` Grant Likely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).