If its not already gone through... Acked-by: Ian Molton <ian@xxxxxxxxxxxxxx> -- Ian Molton Linux, Automotive, and other hacking: http://www.mnementh.co.uk/ On 30 August 2010 11:50, Matt Fleming <matt@xxxxxxxxxxxxxxxxx> wrote: > From: Yusuke Goda <yusuke.goda.sx@xxxxxxxxxxx> > > Adjust the tmio_mmc block size check to accept 2-byte requests in 4-bit > mode if the hardware supports it. > > Tested with the SDHI hardware block included in sh7724. > > Signed-off-by: Yusuke Goda <yusuke.goda.sx@xxxxxxxxxxx> > Signed-off-by: Matt Fleming <matt@xxxxxxxxxxxxxxxxx> > --- > > Andrew, I've added some code to Yusuke's original patch based on > feedback from Ian Molton saying that the original change didn't work on > his hardware. I'd really prefer some Tested-by's and Acked-by's before > you take this patch just so we can make sure that everybody is happy and > that everybody's hardware still works. > > Magnus was worried that this patch would conflict with the SDHI/MMCIF > hotplug patches from Arnd (particularly "[PATCH 1/4] tmio_mmc: Allow the > mfd driver to specify get_cd handler") but I seem to be able to shuffle > the patches around without any conflicts. > > drivers/mfd/sh_mobile_sdhi.c | 6 ++++++ > drivers/mmc/host/tmio_mmc.c | 17 ++++++++++++----- > include/linux/mfd/tmio.h | 5 +++++ > 3 files changed, 23 insertions(+), 5 deletions(-) > > diff --git a/drivers/mfd/sh_mobile_sdhi.c b/drivers/mfd/sh_mobile_sdhi.c > index 7c23630..9d43316 100644 > --- a/drivers/mfd/sh_mobile_sdhi.c > +++ b/drivers/mfd/sh_mobile_sdhi.c > @@ -125,6 +125,12 @@ static int __init sh_mobile_sdhi_probe(struct platform_device *pdev) > mmc_data->capabilities |= p->tmio_caps; > } > > + /* > + * All SDHI blocks support 2-byte and larger block sizes in 4-bit > + * bus width mode. > + */ > + mmc_data->flags |= TMIO_MMC_BLKSZ_2BYTES; > + > if (p && p->dma_slave_tx >= 0 && p->dma_slave_rx >= 0) { > priv->param_tx.slave_id = p->dma_slave_tx; > priv->param_rx.slave_id = p->dma_slave_rx; > diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c > index 1a47221..e7765a8 100644 > --- a/drivers/mmc/host/tmio_mmc.c > +++ b/drivers/mmc/host/tmio_mmc.c > @@ -658,14 +658,21 @@ static void tmio_mmc_release_dma(struct tmio_mmc_host *host) > static int tmio_mmc_start_data(struct tmio_mmc_host *host, > struct mmc_data *data) > { > + struct mfd_cell *cell = host->pdev->dev.platform_data; > + struct tmio_mmc_data *pdata = cell->driver_data; > + > pr_debug("setup data transfer: blocksize %08x nr_blocks %d\n", > data->blksz, data->blocks); > > - /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */ > - if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { > - pr_err("%s: %d byte block unsupported in 4 bit mode\n", > - mmc_hostname(host->mmc), data->blksz); > - return -EINVAL; > + /* Some hardware cannot perform 2 byte requests in 4 bit mode */ > + if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) { > + int blksz_2bytes = pdata->flags & TMIO_MMC_BLKSZ_2BYTES; > + > + if (data->blksz < 2 || (data->blksz < 4 && !blksz_2bytes)) { > + pr_err("%s: %d byte block unsupported in 4 bit mode\n", > + mmc_hostname(host->mmc), data->blksz); > + return -EINVAL; > + } > } > > tmio_mmc_init_sg(host, data); > diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h > index 24c43bb..085f041 100644 > --- a/include/linux/mfd/tmio.h > +++ b/include/linux/mfd/tmio.h > @@ -52,6 +52,11 @@ > > /* tmio MMC platform flags */ > #define TMIO_MMC_WRPROTECT_DISABLE (1 << 0) > +/* > + * Some controllers can support a 2-byte block size when the bus width > + * is configured in 4-bit mode. > + */ > +#define TMIO_MMC_BLKSZ_2BYTES (1 << 1) > > int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); > int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base); > -- > 1.7.1 > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html