mmc: sunxi: Fix setup of last descriptor of dma transfer
authorHans de Goede <hdegoede@redhat.com>
Tue, 16 Dec 2014 14:10:59 +0000 (15:10 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 19 Jan 2015 08:56:08 +0000 (09:56 +0100)
The last descriptor might be the first descriptor as well, so use masking to
add the LD (last descriptor) bit and drop the DIC (disable interrupt on
completion) bit rather then hard assignment as hard assignment will override
the FD (first descriptor) bit if there is only 1 descriptor.

Also set the ER (end of ring) bit and clear buf_addr_ptr2 on the last
descriptor, like the android kernel code does.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: David Lanzendörfer <david.lanzendoerfer@o2s.ch>
Reported-by: <lixiang@allwinnertech.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sunxi-mmc.c

index 15cb8b7ffc3418a19770f97cf388c59ad440c0f4..1fe54a889ce33e780df8e24691abd386e4ceb93d 100644 (file)
@@ -310,7 +310,9 @@ static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host,
        }
 
        pdes[0].config |= SDXC_IDMAC_DES0_FD;
-       pdes[i - 1].config = SDXC_IDMAC_DES0_OWN | SDXC_IDMAC_DES0_LD;
+       pdes[i - 1].config |= SDXC_IDMAC_DES0_LD | SDXC_IDMAC_DES0_ER;
+       pdes[i - 1].config &= ~SDXC_IDMAC_DES0_DIC;
+       pdes[i - 1].buf_addr_ptr2 = 0;
 
        /*
         * Avoid the io-store starting the idmac hitting io-mem before the