Message ID | 1402393811-24578-1-git-send-email-josh.wu@atmel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 6/10/2014 5:50 PM, Josh Wu wrote: > Add a new function to read the NFC status. Meantime, this function will > theck if there is any errors in NFC. > > Signed-off-by: Josh Wu <josh.wu@atmel.com> Tested-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com> I add a Tested-by tag from Matthieu Crapet. He didn't reply this email thread directly. His test-by tag is in email:http://lists.infradead.org/pipermail/linux-mtd/2014-June/054443.html Best Regards, Josh Wu > --- > drivers/mtd/nand/atmel_nand.c | 24 +++++++++++++++++++++++- > drivers/mtd/nand/atmel_nand_nfc.h | 4 ++++ > 2 files changed, 27 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c > index ec97ccb..25d9921 100644 > --- a/drivers/mtd/nand/atmel_nand.c > +++ b/drivers/mtd/nand/atmel_nand.c > @@ -1572,6 +1572,25 @@ static int atmel_hw_nand_init_params(struct platform_device *pdev, > return 0; > } > > +static inline u32 nfc_read_status(struct atmel_nand_host *host) > +{ > + u32 err_flags = NFC_SR_DTOE | NFC_SR_UNDEF | NFC_SR_AWB | NFC_SR_ASE; > + u32 nfc_status = nfc_readl(host->nfc->hsmc_regs, SR); > + > + if (unlikely(nfc_status & err_flags)) { > + if (nfc_status & NFC_SR_DTOE) > + dev_err(host->dev, "NFC: Waiting Nand R/B Timeout Error\n"); > + else if (nfc_status & NFC_SR_UNDEF) > + dev_err(host->dev, "NFC: Access Undefined Area Error\n"); > + else if (nfc_status & NFC_SR_AWB) > + dev_err(host->dev, "NFC: Access memory While NFC is busy\n"); > + else if (nfc_status & NFC_SR_ASE) > + dev_err(host->dev, "NFC: Access memory Size Error\n"); > + } > + > + return nfc_status; > +} > + > /* SMC interrupt service routine */ > static irqreturn_t hsmc_interrupt(int irq, void *dev_id) > { > @@ -1579,7 +1598,7 @@ static irqreturn_t hsmc_interrupt(int irq, void *dev_id) > u32 status, mask, pending; > irqreturn_t ret = IRQ_HANDLED; > > - status = nfc_readl(host->nfc->hsmc_regs, SR); > + status = nfc_read_status(host); > mask = nfc_readl(host->nfc->hsmc_regs, IMR); > pending = status & mask; > > @@ -2210,6 +2229,9 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev) > } > } > > + nfc_writel(nfc->hsmc_regs, IDR, 0xffffffff); > + nfc_readl(nfc->hsmc_regs, SR); /* clear the NFC_SR */ > + > nfc->is_initialized = true; > dev_info(&pdev->dev, "NFC is probed.\n"); > return 0; > diff --git a/drivers/mtd/nand/atmel_nand_nfc.h b/drivers/mtd/nand/atmel_nand_nfc.h > index 4efd117..85b8ca6 100644 > --- a/drivers/mtd/nand/atmel_nand_nfc.h > +++ b/drivers/mtd/nand/atmel_nand_nfc.h > @@ -37,6 +37,10 @@ > #define ATMEL_HSMC_NFC_SR 0x08 /* NFC Status Register */ > #define NFC_SR_XFR_DONE (1 << 16) > #define NFC_SR_CMD_DONE (1 << 17) > +#define NFC_SR_DTOE (1 << 20) > +#define NFC_SR_UNDEF (1 << 21) > +#define NFC_SR_AWB (1 << 22) > +#define NFC_SR_ASE (1 << 23) > #define NFC_SR_RB_EDGE (1 << 24) > > #define ATMEL_HSMC_NFC_IER 0x0c
On 7/16/2014 6:06 PM, Josh Wu wrote: > On 6/10/2014 5:50 PM, Josh Wu wrote: >> Add a new function to read the NFC status. Meantime, this function will >> theck if there is any errors in NFC. >> >> Signed-off-by: Josh Wu <josh.wu@atmel.com> > > Tested-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com> > Sorry, I forgot to mention this Tested-by tag is for these patch series. Best Regards, Josh Wu > I add a Tested-by tag from Matthieu Crapet. > He didn't reply this email thread directly. His test-by tag is in > email:http://lists.infradead.org/pipermail/linux-mtd/2014-June/054443.html > > > Best Regards, > Josh Wu >
On Tue, Jun 10, 2014 at 05:50:09PM +0800, Josh Wu wrote: > Add a new function to read the NFC status. Meantime, this function will > theck if there is any errors in NFC. > > Signed-off-by: Josh Wu <josh.wu@atmel.com> Fixed up some of the wording and pushed to l2-mtd.git. Thanks! Brian
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index ec97ccb..25d9921 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c @@ -1572,6 +1572,25 @@ static int atmel_hw_nand_init_params(struct platform_device *pdev, return 0; } +static inline u32 nfc_read_status(struct atmel_nand_host *host) +{ + u32 err_flags = NFC_SR_DTOE | NFC_SR_UNDEF | NFC_SR_AWB | NFC_SR_ASE; + u32 nfc_status = nfc_readl(host->nfc->hsmc_regs, SR); + + if (unlikely(nfc_status & err_flags)) { + if (nfc_status & NFC_SR_DTOE) + dev_err(host->dev, "NFC: Waiting Nand R/B Timeout Error\n"); + else if (nfc_status & NFC_SR_UNDEF) + dev_err(host->dev, "NFC: Access Undefined Area Error\n"); + else if (nfc_status & NFC_SR_AWB) + dev_err(host->dev, "NFC: Access memory While NFC is busy\n"); + else if (nfc_status & NFC_SR_ASE) + dev_err(host->dev, "NFC: Access memory Size Error\n"); + } + + return nfc_status; +} + /* SMC interrupt service routine */ static irqreturn_t hsmc_interrupt(int irq, void *dev_id) { @@ -1579,7 +1598,7 @@ static irqreturn_t hsmc_interrupt(int irq, void *dev_id) u32 status, mask, pending; irqreturn_t ret = IRQ_HANDLED; - status = nfc_readl(host->nfc->hsmc_regs, SR); + status = nfc_read_status(host); mask = nfc_readl(host->nfc->hsmc_regs, IMR); pending = status & mask; @@ -2210,6 +2229,9 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev) } } + nfc_writel(nfc->hsmc_regs, IDR, 0xffffffff); + nfc_readl(nfc->hsmc_regs, SR); /* clear the NFC_SR */ + nfc->is_initialized = true; dev_info(&pdev->dev, "NFC is probed.\n"); return 0; diff --git a/drivers/mtd/nand/atmel_nand_nfc.h b/drivers/mtd/nand/atmel_nand_nfc.h index 4efd117..85b8ca6 100644 --- a/drivers/mtd/nand/atmel_nand_nfc.h +++ b/drivers/mtd/nand/atmel_nand_nfc.h @@ -37,6 +37,10 @@ #define ATMEL_HSMC_NFC_SR 0x08 /* NFC Status Register */ #define NFC_SR_XFR_DONE (1 << 16) #define NFC_SR_CMD_DONE (1 << 17) +#define NFC_SR_DTOE (1 << 20) +#define NFC_SR_UNDEF (1 << 21) +#define NFC_SR_AWB (1 << 22) +#define NFC_SR_ASE (1 << 23) #define NFC_SR_RB_EDGE (1 << 24) #define ATMEL_HSMC_NFC_IER 0x0c
Add a new function to read the NFC status. Meantime, this function will theck if there is any errors in NFC. Signed-off-by: Josh Wu <josh.wu@atmel.com> --- drivers/mtd/nand/atmel_nand.c | 24 +++++++++++++++++++++++- drivers/mtd/nand/atmel_nand_nfc.h | 4 ++++ 2 files changed, 27 insertions(+), 1 deletion(-)