[ISSUE] ADMA issue when PAGE_SIZE=64K

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ulf, Adrian

For mmc controllers with quirks SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC, it
limit the max segment size as 64K-1.
Currently, linux kernel support 4K/16K/64K PAGE_SIZE. If choose 64K
PAGE_SIZE, sdhci in ADMA mode with the upper quirks will meet issue.
Though mmc driver give block layer the max segment size through
blk_queue_max_segment_size(), but in this function, it will compare the
argument with PAGE_SIZE.
In this case, finally the mmc request queue will get 64K as the max segment
size. Once the sg data length=64K, ADMA will meet issue.

Find this issue on i.MX8MM-evk board, and I just notice omap/tegra/s3c also
contain this quirks, seems a common issue.
Should sdhci driver detect this case, and change to use SDMA mode
automatically? Any thoughts?


/block/blk-settings.c
void blk_queue_max_segment_size(struct request_queue *q, unsigned int
max_size)
{
         if (max_size < PAGE_SIZE) {
                 max_size = PAGE_SIZE;
                 printk(KERN_INFO "%s: set to minimum %d\n",
                        __func__, max_size);
         }

         /* see blk_queue_virt_boundary() for the explanation */
         WARN_ON_ONCE(q->limits.virt_boundary_mask);

         q->limits.max_segment_size = max_size;
 }
 EXPORT_SYMBOL(blk_queue_max_segment_size);



Best Regards
Haibo Chen


Attachment: smime.p7s
Description: S/MIME cryptographic signature


[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux