dma_addr_t dma;
                void *buf;
 
-               if (host->flags & SDHCI_USE_64_BIT_DMA) {
-                       host->adma_table_sz = host->adma_table_cnt *
-                                             SDHCI_ADMA2_64_DESC_SZ(host);
-                       host->desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
-               } else {
-                       host->adma_table_sz = host->adma_table_cnt *
-                                             SDHCI_ADMA2_32_DESC_SZ;
-                       host->desc_sz = SDHCI_ADMA2_32_DESC_SZ;
-               }
+               if (!(host->flags & SDHCI_USE_64_BIT_DMA))
+                       host->alloc_desc_sz = SDHCI_ADMA2_32_DESC_SZ;
+               else if (!host->alloc_desc_sz)
+                       host->alloc_desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
+
+               host->desc_sz = host->alloc_desc_sz;
+               host->adma_table_sz = host->adma_table_cnt * host->desc_sz;
 
                host->align_buffer_sz = SDHCI_MAX_SEGS * SDHCI_ADMA2_ALIGN;
                /*
 
        dma_addr_t adma_addr;   /* Mapped ADMA descr. table */
        dma_addr_t align_addr;  /* Mapped bounce buffer */
 
-       unsigned int desc_sz;   /* ADMA descriptor size */
+       unsigned int desc_sz;   /* ADMA current descriptor size */
+       unsigned int alloc_desc_sz;     /* ADMA descr. max size host supports */
 
        struct workqueue_struct *complete_wq;   /* Request completion wq */
        struct work_struct      complete_work;  /* Request completion work */