[U-Boot] [PATCH v3] spi: fsl_qspi: Add controller busy check before new spi operation

Suresh Gupta suresh.gupta at nxp.com
Wed Aug 30 14:31:10 UTC 2017



> -----Original Message-----
> From: Jagan Teki [mailto:jagannadh.teki at gmail.com]
> Sent: Wednesday, August 30, 2017 7:54 PM
> To: Suresh Gupta <suresh.gupta at nxp.com>
> Cc: u-boot at lists.denx.de; York Sun <york.sun at nxp.com>
> Subject: Re: [PATCH v3] spi: fsl_qspi: Add controller busy check before new spi
> operation
> 
> On Wed, Aug 30, 2017 at 2:00 PM, Suresh Gupta <suresh.gupta at nxp.com>
> wrote:
> > It is recommended to check either controller is free to take new spi
> > action. The IP_ACC and AHB_ACC bits indicates that the controller is
> > busy in IP or AHB mode respectively.
> > And the BUSY bit indicates that controller is currently busy handling
> > a transaction to an external flash device
> >
> > Signed-off-by: Suresh Gupta <suresh.gupta at nxp.com>
> > ---
> > Chnages in v3:
> >  - replace printf to debug
> >  - return whatever return from wait_for_bit, before it was -EBUSY
> >
> > Changes in v2:
> >
> >  - Add wait_for_bit instead of while
> >  - move the busy check code to fsl_qspi_claim_bus form qspi_xfer
> >
> >
> >  drivers/spi/fsl_qspi.c | 28 +++++++++++++++++++++++++++-
> > drivers/spi/fsl_qspi.h |  4 ++++
> >  2 files changed, 31 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index
> > 1dfa89a..8f0f29e 100644
> > --- a/drivers/spi/fsl_qspi.c
> > +++ b/drivers/spi/fsl_qspi.c
> > @@ -14,6 +14,7 @@
> >  #include <dm.h>
> >  #include <errno.h>
> >  #include <watchdog.h>
> > +#include <wait_bit.h>
> >  #include "fsl_qspi.h"
> >
> >  DECLARE_GLOBAL_DATA_PTR;
> > @@ -991,7 +992,7 @@ static int fsl_qspi_probe(struct udevice *bus)
> >         struct fsl_qspi_platdata *plat = dev_get_platdata(bus);
> >         struct fsl_qspi_priv *priv = dev_get_priv(bus);
> >         struct dm_spi_bus *dm_spi_bus;
> > -       int i;
> > +       int i, ret;
> >
> >         dm_spi_bus = bus->uclass_priv;
> >
> > @@ -1011,6 +1012,18 @@ static int fsl_qspi_probe(struct udevice *bus)
> >         priv->flash_num = plat->flash_num;
> >         priv->num_chipselect = plat->num_chipselect;
> >
> > +       /* make sure controller is not busy anywhere */
> > +       ret = wait_for_bit(__func__, &priv->regs->sr,
> > +                          QSPI_SR_BUSY_MASK |
> > +                          QSPI_SR_AHB_ACC_MASK |
> > +                          QSPI_SR_IP_ACC_MASK,
> > +                          false, 1000, false);
> 
> 100ms not enough?
It should be, Will send new patch


> 
> thanks!
> --
> Jagan Teki
> Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream
> Maintainer Hyderabad, India.


More information about the U-Boot mailing list