if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC) {
                        host->max_adma = 65532; /* 32-bit alignment */
                        mmc->max_seg_size = 65535;
+                       /*
+                        * sdhci_adma_table_pre() expects to define 1 DMA
+                        * descriptor per segment, so the maximum segment size
+                        * is set accordingly. SDHCI allows up to 64KiB per DMA
+                        * descriptor (16-bit field), but some controllers do
+                        * not support "zero means 65536" reducing the maximum
+                        * for them to 65535. That is a problem if PAGE_SIZE is
+                        * 64KiB because the block layer does not support
+                        * max_seg_size < PAGE_SIZE, however
+                        * sdhci_adma_table_pre() has a workaround to handle
+                        * that case, and split the descriptor. Refer also
+                        * comment in sdhci_adma_table_pre().
+                        */
+                       if (mmc->max_seg_size < PAGE_SIZE)
+                               mmc->max_seg_size = PAGE_SIZE;
                } else {
                        mmc->max_seg_size = 65536;
                }