On Wednesday 04 February 2009, Kumar, Purushotam wrote:
> I will take the responsibility of taking the MMC driver upstream.

Great, thanks.  Appended is a minor it-compiles cleanup patch,
mostly getting rid of the needless ASM hacks (let's just expect
DMA to be used always, now that it behaves) and saving ~160 bytes.

- Dave


==========
--- d26-mainline.orig/drivers/mmc/host/davinci_mmc.c    2009-02-04 
10:12:25.000000000 -0800
+++ d26-mainline/drivers/mmc/host/davinci_mmc.c 2009-02-04 10:12:10.000000000 
-0800
@@ -34,8 +34,6 @@
 #include <mach/mmc.h>
 #include <mach/cpu.h>
 #include <mach/edma.h>
-#include <mach/hardware.h>
-#include <mach/irqs.h>
 
 /*
  * Register Definitions
@@ -134,7 +132,6 @@
 
 /* MMCSD Init clock in Hz in opendain mode */
 #define MMCSD_INIT_CLOCK               200000
-#define DRIVER_NAME                    "davinci_mmc"
 
 /*
  * One scatterlist dma "segment" is at most MAX_CCNT rw_threshold units,
@@ -201,60 +198,6 @@ struct mmc_davinci_host {
 };
 
 
-#define DAVINCI_MMCSD_READ_FIFO(pDst, pRegs, cnt) asm( \
-       "       cmp     %3,#16\n" \
-       "1:     ldrhs   r0,[%1,%2]\n" \
-       "       ldrhs   r1,[%1,%2]\n" \
-       "       ldrhs   r2,[%1,%2]\n" \
-       "       ldrhs   r3,[%1,%2]\n" \
-       "       stmhsia %0!,{r0,r1,r2,r3}\n" \
-       "       beq     3f\n" \
-       "       subhs   %3,%3,#16\n" \
-       "       cmp     %3,#16\n" \
-       "       bhs     1b\n" \
-       "       tst     %3,#0x0c\n" \
-       "2:     ldrne   r0,[%1,%2]\n" \
-       "       strne   r0,[%0],#4\n" \
-       "       subne   %3,%3,#4\n" \
-       "       tst     %3,#0x0c\n" \
-       "       bne     2b\n" \
-       "       tst     %3,#2\n" \
-       "       ldrneh  r0,[%1,%2]\n" \
-       "       strneh  r0,[%0],#2\n" \
-       "       tst     %3,#1\n" \
-       "       ldrneb  r0,[%1,%2]\n" \
-       "       strneb  r0,[%0],#1\n" \
-       "3:\n" \
-        : "+r"(pDst) : "r"(pRegs), "i"(DAVINCI_MMCDRR), \
-        "r"(cnt) : "r0", "r1", "r2", "r3");
-
-#define DAVINCI_MMCSD_WRITE_FIFO(pDst, pRegs, cnt) asm( \
-       "       cmp     %3,#16\n" \
-       "1:     ldmhsia %0!,{r0,r1,r2,r3}\n" \
-       "       strhs   r0,[%1,%2]\n" \
-       "       strhs   r1,[%1,%2]\n" \
-       "       strhs   r2,[%1,%2]\n" \
-       "       strhs   r3,[%1,%2]\n" \
-       "       beq     3f\n" \
-       "       subhs   %3,%3,#16\n" \
-       "       cmp     %3,#16\n" \
-       "       bhs     1b\n" \
-       "       tst     %3,#0x0c\n" \
-       "2:     ldrne   r0,[%0],#4\n" \
-       "       strne   r0,[%1,%2]\n" \
-       "       subne   %3,%3,#4\n" \
-       "       tst     %3,#0x0c\n" \
-       "       bne     2b\n" \
-       "       tst     %3,#2\n" \
-       "       ldrneh  r0,[%0],#2\n" \
-       "       strneh  r0,[%1,%2]\n" \
-       "       tst     %3,#1\n" \
-       "       ldrneb  r0,[%0],#1\n" \
-       "       strneb  r0,[%1,%2]\n" \
-       "3:\n" \
-        : "+r"(pDst) : "r"(pRegs), "i"(DAVINCI_MMCDXR), \
-        "r"(cnt) : "r0", "r1", "r2", "r3");
-
 /* PIO only */
 static void mmc_davinci_sg_to_buf(struct mmc_davinci_host *host)
 {
@@ -284,13 +227,13 @@ static void davinci_fifo_data_trans(stru
        host->bytes_left -= n;
 
        /* NOTE:  we never transfer more than rw_threshold bytes
-        * to/from the fifo here; there's no I/O overlap.
+        * to/from the fifo here; there's no I/O overlap.  We don't
+        * try to speed up PIO by using 32 bit FIFO writes.
         */
-       if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) {
-               DAVINCI_MMCSD_WRITE_FIFO(p, host->base, n);
-       } else {
-               DAVINCI_MMCSD_READ_FIFO(p, host->base, n);
-       }
+       if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE)
+               iowrite8_rep(host->base + DAVINCI_MMCDXR, p, n);
+       else
+               ioread8_rep(host->base + DAVINCI_MMCDXR, p, n);
        host->buffer = p;
 }
 
@@ -407,7 +350,7 @@ static void mmc_davinci_start_command(st
 
 static void davinci_abort_dma(struct mmc_davinci_host *host)
 {
-       int sync_dev = 0;
+       int sync_dev;
 
        if (host->data_dir == DAVINCI_MMC_DATADIR_READ)
                sync_dev = host->rxdma;
@@ -677,20 +620,19 @@ mmc_davinci_prepare_data(struct mmc_davi
        writel(timeout, host->base + DAVINCI_MMCTOD);
        writel(data->blocks, host->base + DAVINCI_MMCNBLK);
        writel(data->blksz, host->base + DAVINCI_MMCBLEN);
-       host->data_dir = (data->flags & MMC_DATA_WRITE)
-                       ? DAVINCI_MMC_DATADIR_WRITE
-                       : DAVINCI_MMC_DATADIR_READ;
 
        /* Configure the FIFO */
-       switch (host->data_dir) {
-       case DAVINCI_MMC_DATADIR_WRITE:
+       switch (data->flags & MMC_DATA_WRITE) {
+       case MMC_DATA_WRITE:
+               host->data_dir = DAVINCI_MMC_DATADIR_WRITE;
                writel(fifo_lev | MMCFIFOCTL_FIFODIR_WR | MMCFIFOCTL_FIFORST,
                        host->base + DAVINCI_MMCFIFOCTL);
                writel(fifo_lev | MMCFIFOCTL_FIFODIR_WR,
                        host->base + DAVINCI_MMCFIFOCTL);
                break;
 
-       case DAVINCI_MMC_DATADIR_READ:
+       default:
+               host->data_dir = DAVINCI_MMC_DATADIR_READ;
                writel(fifo_lev | MMCFIFOCTL_FIFODIR_RD | MMCFIFOCTL_FIFORST,
                        host->base + DAVINCI_MMCFIFOCTL);
                writel(fifo_lev | MMCFIFOCTL_FIFODIR_RD,
@@ -1105,7 +1047,7 @@ static int __init davinci_mmcsd_probe(st
 
        ret = -EBUSY;
        mem_size = r->end - r->start + 1;
-       mem = request_mem_region(r->start, mem_size, DRIVER_NAME);
+       mem = request_mem_region(r->start, mem_size, pdev->name);
        if (!mem)
                goto out;
 
@@ -1270,9 +1212,11 @@ static int davinci_mmcsd_resume(struct p
 #define davinci_mmcsd_resume   NULL
 #endif
 
+MODULE_ALIAS("platform:davinci_mmc");
+
 static struct platform_driver davinci_mmcsd_driver = {
        .driver         = {
-               .name   = DRIVER_NAME,
+               .name   = "davinci_mmc",
                .owner  = THIS_MODULE,
        },
        .remove         = __exit_p(davinci_mmcsd_remove),

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to