Message ID | 1348053667-10389-1-git-send-email-javier.martin@vista-silicon.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Sep 19, 2012 at 01:21:07PM +0200, Javier Martin wrote: > When a SD card is initialized some data transfers of 64 and 8 bytes > are issued. It seems the DMA has some problems dealing with these kind > of "short" transfers, leading sometimes to the SD card not being detected. > > In order to solve this problem, do not use DMA for transfer sizes lower > than the sector size. > > Signed-off-by: Javier Martin <javier.martin@vista-silicon.com> > --- > drivers/mmc/host/mxcmmc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c > index fc42a2e..a09637f 100644 > --- a/drivers/mmc/host/mxcmmc.c > +++ b/drivers/mmc/host/mxcmmc.c > @@ -240,7 +240,7 @@ static int mxcmci_setup_data(struct mxcmci_host *host, struct mmc_data *data) > return 0; > > for_each_sg(data->sg, sg, data->sg_len, i) { > - if (sg->offset & 3 || sg->length & 3) { > + if (sg->offset & 3 || sg->length < 512) { This drops the check for sg->length & 3. The mmc framework probably never issues such transfers, but can we be sure? Sascha
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c index fc42a2e..a09637f 100644 --- a/drivers/mmc/host/mxcmmc.c +++ b/drivers/mmc/host/mxcmmc.c @@ -240,7 +240,7 @@ static int mxcmci_setup_data(struct mxcmci_host *host, struct mmc_data *data) return 0; for_each_sg(data->sg, sg, data->sg_len, i) { - if (sg->offset & 3 || sg->length & 3) { + if (sg->offset & 3 || sg->length < 512) { host->do_dma = 0; return 0; }
When a SD card is initialized some data transfers of 64 and 8 bytes are issued. It seems the DMA has some problems dealing with these kind of "short" transfers, leading sometimes to the SD card not being detected. In order to solve this problem, do not use DMA for transfer sizes lower than the sector size. Signed-off-by: Javier Martin <javier.martin@vista-silicon.com> --- drivers/mmc/host/mxcmmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)