From: ezequiel.garcia@free-electrons.com (Ezequiel Garcia)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 12/27] mtd: nand: pxa3xx: Use a completion to signal device ready
Date: Mon, 4 Nov 2013 10:51:12 -0300 [thread overview]
Message-ID: <20131104135112.GG2516@localhost> (raw)
In-Reply-To: <20131103230337.GF5896@gmail.com>
On Sun, Nov 03, 2013 at 06:03:39PM -0500, Huang Shijie wrote:
> On Fri, Oct 18, 2013 at 08:02:39PM -0300, Ezequiel Garcia wrote:
> > Apparently, the expected behavior of the waitfunc() NAND chip call
> > is to wait for the device to be READY (this is a standard chip line).
> > However, the current implementation does almost nothing, which opens
> > a possibility to issue a command to a non-ready device.
> >
> > Fix this by adding a new completion to wait for the ready event to arrive.
> >
> > Because the "is ready" flag is cleared from the controller status
> > register, it's needed to store that state in the driver, and because the
> > field is accesed from an interruption, the field needs to be of an
> > atomic type.
> >
> > Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> > ---
> > drivers/mtd/nand/pxa3xx_nand.c | 45 +++++++++++++++++++++++++++++-------------
> > 1 file changed, 31 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> > index 95e2ce3..1ceccb6 100644
> > --- a/drivers/mtd/nand/pxa3xx_nand.c
> > +++ b/drivers/mtd/nand/pxa3xx_nand.c
> > @@ -35,6 +35,7 @@
> >
> > #include <linux/platform_data/mtd-nand-pxa3xx.h>
> >
> > +#define NAND_DEV_READY_TIMEOUT 50
> > #define CHIP_DELAY_TIMEOUT (2 * HZ/10)
> > #define NAND_STOP_DELAY (2 * HZ/50)
> > #define PAGE_CHUNK_SIZE (2048)
> > @@ -166,7 +167,7 @@ struct pxa3xx_nand_info {
> > struct clk *clk;
> > void __iomem *mmio_base;
> > unsigned long mmio_phys;
> > - struct completion cmd_complete;
> > + struct completion cmd_complete, dev_ready;
> >
> > unsigned int buf_start;
> > unsigned int buf_count;
> > @@ -196,7 +197,13 @@ struct pxa3xx_nand_info {
> > int use_ecc; /* use HW ECC ? */
> > int use_dma; /* use DMA ? */
> > int use_spare; /* use spare ? */
> > - int is_ready;
> > +
> > + /*
> > + * The is_ready flag is accesed from several places,
> > + * including an interruption hander. We need an atomic
> > + * type to avoid races.
> > + */
> > + atomic_t is_ready;
> Do we really need to change it to atomic_t?
>
> IMHO, the write is also a atomic operation.
>
I see. Well, if reading and setting an int type is atomic
(at least on ARM), then of course we don't need the atomic_t.
On the other side, it really shouldn't hurt too much and
it emphasize the fact that it's accesed from the IRQ handler
and the other callbacks (such as waitfunc).
So, I'm still inclined to keeping it atomic.
Does it sound stupid?
--
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
next prev parent reply other threads:[~2013-11-04 13:51 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-18 23:02 [PATCH v2 00/27] Armada 370/XP NAND support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 01/27] clk: mvebu: Add Core Divider clock Ezequiel Garcia
2013-10-23 11:28 ` Jason Cooper
2013-10-23 13:06 ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 02/27] ARM: mvebu: Add Core Divider clock device-tree binding Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 03/27] ARM: mvebu: Add a 2 GHz fixed-clock Armada 370/XP Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 04/27] ARM: mvebu: Add the core-divider clock to " Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 05/27] mtd: nand: pxa3xx: Make config menu show supported platforms Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 06/27] mtd: nand: pxa3xx: Prevent sub-page writes Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 07/27] mtd: nand: pxa3xx: Early variant detection Ezequiel Garcia
2013-11-03 21:18 ` Huang Shijie
2013-11-04 12:01 ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 08/27] mtd: nand: pxa3xx: Use chip->cmdfunc instead of the internal Ezequiel Garcia
2013-11-03 21:32 ` Huang Shijie
2013-11-04 11:58 ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 09/27] mtd: nand: pxa3xx: Split FIFO size from to-be-read FIFO count Ezequiel Garcia
2013-11-03 22:36 ` Huang Shijie
2013-11-04 12:13 ` Ezequiel Garcia
2013-11-10 8:30 ` Haojian Zhuang
2013-10-18 23:02 ` [PATCH v2 10/27] mtd: nand: pxa3xx: Replace host->page_size by mtd->writesize Ezequiel Garcia
2013-11-03 22:52 ` Huang Shijie
2013-11-04 12:24 ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 11/27] mtd: nand: pxa3xx: Disable OOB on arbitrary length commands Ezequiel Garcia
2013-11-03 22:59 ` Huang Shijie
2013-11-04 12:41 ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 12/27] mtd: nand: pxa3xx: Use a completion to signal device ready Ezequiel Garcia
2013-11-03 23:03 ` Huang Shijie
2013-11-04 13:51 ` Ezequiel Garcia [this message]
2013-11-05 18:44 ` Brian Norris
2013-10-18 23:02 ` [PATCH v2 13/27] mtd: nand: pxa3xx: Add bad block handling Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 14/27] mtd: nand: pxa3xx: Add driver-specific ECC BCH support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 15/27] mtd: nand: pxa3xx: Clear cmd buffer #3 (NDCB3) on command start Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 16/27] mtd: nand: pxa3xx: Add helper function to set page address Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 17/27] mtd: nand: pxa3xx: Remove READ0 switch/case falltrough Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 18/27] mtd: nand: pxa3xx: Split prepare_command_pool() in two stages Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 19/27] mtd: nand: pxa3xx: Move the data buffer clean to prepare_start_command() Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 20/27] mtd: nand: pxa3xx: Fix SEQIN column address set Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 21/27] mtd: nand: pxa3xx: Add a read/write buffers markers Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 22/27] mtd: nand: pxa3xx: Introduce multiple page I/O support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 23/27] mtd: nand: pxa3xx: Add multiple chunk write support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 24/27] mtd: nand: pxa3xx: Add ECC BCH correctable errors detection Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 25/27] ARM: mvebu: Add support for NAND controller in Armada 370/XP Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 26/27] ARM: mvebu: Enable NAND controller in Armada XP GP board Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 27/27] ARM: mvebu: Enable NAND controller in Armada 370 Mirabox Ezequiel Garcia
2013-10-19 6:35 ` [PATCH v2 00/27] Armada 370/XP NAND support Willy Tarreau
2013-10-19 14:25 ` Jason Cooper
2013-10-19 16:21 ` Ezequiel Garcia
2013-10-20 17:50 ` Thomas Petazzoni
2013-10-20 19:24 ` Jason Cooper
2013-10-31 15:58 ` Ezequiel Garcia
2013-10-31 18:22 ` Brian Norris
2013-11-01 2:07 ` Huang Shijie
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=20131104135112.GG2516@localhost \
--to=ezequiel.garcia@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.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 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).