printk: add and use LOGLEVEL_<level> defines for KERN_<LEVEL> equivalents
[deliverable/linux.git] / drivers / mmc / host / mvsdio.c
index 6b4c5ad3b3939c6103871eb790d304d1a1ad4f4d..4f8618f4522df2db6e08c4680dd0f08e75e8d7dd 100644 (file)
@@ -111,10 +111,15 @@ static int mvsd_setup_data(struct mvsd_host *host, struct mmc_data *data)
        mvsd_write(MVSD_BLK_COUNT, data->blocks);
        mvsd_write(MVSD_BLK_SIZE, data->blksz);
 
-       if (nodma || (data->blksz | data->sg->offset) & 3) {
+       if (nodma || (data->blksz | data->sg->offset) & 3 ||
+           ((!(data->flags & MMC_DATA_READ) && data->sg->offset & 0x3f))) {
                /*
                 * We cannot do DMA on a buffer which offset or size
                 * is not aligned on a 4-byte boundary.
+                *
+                * It also appears the host to card DMA can corrupt
+                * data when the buffer is not aligned on a 64 byte
+                * boundary.
                 */
                host->pio_size = data->blocks * data->blksz;
                host->pio_ptr = sg_virt(data->sg);
This page took 0.023929 seconds and 5 git commands to generate.