[U-Boot] [PATCH v4 1/4] mmc: mmc_spi: Use SPI_XFER_BEGIN and SPI_XFER_END flags

Anup Patel anup at brainfault.org
Tue Jul 16 08:08:22 UTC 2019


On Tue, Jul 16, 2019 at 1:05 PM Jagan Teki <jagan at amarulasolutions.com> wrote:
>
> On Tue, Jul 16, 2019 at 9:52 AM Anup Patel <Anup.Patel at wdc.com> wrote:
> >
> > Most DM based SPI host controller drivers use SPI_XFER_BEGIN and
> > SPI_XFER_END flags to enable/disable slave chip select.
> >
> > This patch extends MMC SPI driver to pass SPI_XFER_BEGIN flag when
> > MMC command is send at start and pass SPI_XFER_END flag using a
> > dummy transfer (of bitlen = 0) at the end of MMC command.
> >
> > Suggested-by: Jagan Teki <jagan at amarulasolutions.com>
> > Signed-off-by: Anup Patel <anup.patel at wdc.com>
> > ---
> >  drivers/mmc/mmc_spi.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/mmc/mmc_spi.c b/drivers/mmc/mmc_spi.c
> > index f3d687ae80..350812a04b 100644
> > --- a/drivers/mmc/mmc_spi.c
> > +++ b/drivers/mmc/mmc_spi.c
> > @@ -84,7 +84,7 @@ static int mmc_spi_sendcmd(struct udevice *dev,
> >         cmdo[4] = cmdarg >> 8;
> >         cmdo[5] = cmdarg;
> >         cmdo[6] = (crc7(0, &cmdo[1], 5) << 1) | 0x01;
> > -       ret = dm_spi_xfer(dev, sizeof(cmdo) * 8, cmdo, NULL, 0);
> > +       ret = dm_spi_xfer(dev, sizeof(cmdo) * 8, cmdo, NULL, SPI_XFER_BEGIN);
> >         if (ret)
> >                 return ret;
> >
> > @@ -360,6 +360,8 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd,
> >         }
> >
> >  done:
> > +       dm_spi_xfer(dev, 0, NULL, NULL, SPI_XFER_END);
> > +
>
> Look like this driver has several dm_spi_xfer in their won sequence,
> have you tried of sending command and buf in same spi_xfer call so
> dout and din can be NULL based on the read and write? if ie possible
> we can manage the transfer flags in single sub call based on data_len
> like drivers/mtd/spi/sf.c does.

MMC SPI protocol is very different compared to SPI serial flash.

We have to poll for expected byte pattern when waiting for transfer/command
to complete. We don't know in-advance how many bytes we will have to read.

Regards,
Anup


More information about the U-Boot mailing list