staging: mt7621-mmc: Refactor msdc_init_gpd_bd
authorChristian Lütke-Stetzkamp <christian@lkamp.de>
Wed, 18 Apr 2018 15:27:41 +0000 (17:27 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Apr 2018 13:37:54 +0000 (15:37 +0200)
The msdc_init_gpd_bd function is currently hard to read, because of
old, commented out code and a while loop, where a for loop is much
easier to read. Refactor it to make the code more readable.

Signed-off-by: Christian Lütke-Stetzkamp <christian@lkamp.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/mt7621-mmc/sd.c

index 79436d36b99d96de4da791f6d52f9fa2997fd829..7f6e584c7836fd01d41b1007fd8c33a4f5aad956 100644 (file)
@@ -2495,32 +2495,21 @@ static void msdc_init_gpd_bd(struct msdc_host *host, struct msdc_dma *dma)
 {
        struct gpd *gpd = dma->gpd;
        struct bd  *bd  = dma->bd;
-       struct bd  *ptr, *prev;
+       int i;
 
-       /* we just support one gpd */
-       int bdlen = MAX_BD_PER_GPD;
+       /* we just support one gpd, but gpd->next must be set for desc
+        * DMA. That's why we alloc 2 gpd structurs.
+        */
 
-       /* init the 2 gpd */
        memset(gpd, 0, sizeof(struct gpd) * 2);
-       //gpd->next = (void *)virt_to_phys(gpd + 1); /* pointer to a null gpd, bug! kmalloc <-> virt_to_phys */
-       //gpd->next = (dma->gpd_addr + 1);    /* bug */
-       gpd->next = (void *)((u32)dma->gpd_addr + sizeof(struct gpd));
 
-       //gpd->intr = 0;
        gpd->bdp  = 1;   /* hwo, cs, bd pointer */
-       //gpd->ptr  = (void*)virt_to_phys(bd);
        gpd->ptr = (void *)dma->bd_addr; /* physical address */
+       gpd->next = (void *)((u32)dma->gpd_addr + sizeof(struct gpd));
 
-       memset(bd, 0, sizeof(struct bd) * bdlen);
-       ptr = bd + bdlen - 1;
-       //ptr->eol  = 1;  /* 0 or 1 [Fix me]*/
-       //ptr->next = 0;
-
-       while (ptr != bd) {
-               prev = ptr - 1;
-               prev->next = (void *)(dma->bd_addr + sizeof(struct bd) * (ptr - bd));
-               ptr = prev;
-       }
+       memset(bd, 0, sizeof(struct bd) * MAX_BD_NUM);
+       for (i = 0; i < (MAX_BD_NUM - 1); i++)
+               bd[i].next = (void *)(dma->bd_addr * sizeof(*bd) * (i + 1));
 }
 
 static int msdc_drv_probe(struct platform_device *pdev)