Commit 5adca38c authored by Martin K. Petersen's avatar Martin K. Petersen

Merge patch series "Enable DMA clustering in the UFS driver"

Bart Van Assche <bvanassche@acm.org> says:

The third patch in this series enables DMA clustering in the UFS
driver since UFS host controllers support DMA clustering. The first
two patches fix bugs in the Exynos host controller driver.

Link: https://lore.kernel.org/r/20230112234215.2630817-1-bvanassche@acm.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 5a5ef64f 13f87983
...@@ -5107,8 +5107,8 @@ static int ufshcd_slave_configure(struct scsi_device *sdev) ...@@ -5107,8 +5107,8 @@ static int ufshcd_slave_configure(struct scsi_device *sdev)
ufshcd_hpb_configure(hba, sdev); ufshcd_hpb_configure(hba, sdev);
blk_queue_update_dma_pad(q, PRDT_DATA_BYTE_COUNT_PAD - 1); blk_queue_update_dma_pad(q, PRDT_DATA_BYTE_COUNT_PAD - 1);
if (hba->quirks & UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE) if (hba->quirks & UFSHCD_QUIRK_4KB_DMA_ALIGNMENT)
blk_queue_update_dma_alignment(q, PAGE_SIZE - 1); blk_queue_update_dma_alignment(q, 4096 - 1);
/* /*
* Block runtime-pm until all consumers are added. * Block runtime-pm until all consumers are added.
* Refer ufshcd_setup_links(). * Refer ufshcd_setup_links().
...@@ -8724,7 +8724,6 @@ static struct scsi_host_template ufshcd_driver_template = { ...@@ -8724,7 +8724,6 @@ static struct scsi_host_template ufshcd_driver_template = {
.max_host_blocked = 1, .max_host_blocked = 1,
.track_queue_depth = 1, .track_queue_depth = 1,
.sdev_groups = ufshcd_driver_groups, .sdev_groups = ufshcd_driver_groups,
.dma_boundary = PAGE_SIZE - 1,
.rpm_autosuspend_delay = RPM_AUTOSUSPEND_DELAY_MS, .rpm_autosuspend_delay = RPM_AUTOSUSPEND_DELAY_MS,
}; };
......
...@@ -1300,6 +1300,14 @@ static int exynos_ufs_hce_enable_notify(struct ufs_hba *hba, ...@@ -1300,6 +1300,14 @@ static int exynos_ufs_hce_enable_notify(struct ufs_hba *hba,
switch (status) { switch (status) {
case PRE_CHANGE: case PRE_CHANGE:
/*
* The maximum segment size must be set after scsi_host_alloc()
* has been called and before LUN scanning starts
* (ufshcd_async_scan()). Note: this callback may also be called
* from other functions than ufshcd_init().
*/
hba->host->max_segment_size = 4096;
if (ufs->drv_data->pre_hce_enable) { if (ufs->drv_data->pre_hce_enable) {
ret = ufs->drv_data->pre_hce_enable(ufs); ret = ufs->drv_data->pre_hce_enable(ufs);
if (ret) if (ret)
...@@ -1673,7 +1681,7 @@ static const struct exynos_ufs_drv_data exynos_ufs_drvs = { ...@@ -1673,7 +1681,7 @@ static const struct exynos_ufs_drv_data exynos_ufs_drvs = {
UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR | UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR |
UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL | UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL |
UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING | UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING |
UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE, UFSHCD_QUIRK_4KB_DMA_ALIGNMENT,
.opts = EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL | .opts = EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL |
EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL | EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL |
EXYNOS_UFS_OPT_BROKEN_RX_SEL_IDX | EXYNOS_UFS_OPT_BROKEN_RX_SEL_IDX |
......
...@@ -583,9 +583,9 @@ enum ufshcd_quirks { ...@@ -583,9 +583,9 @@ enum ufshcd_quirks {
UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING = 1 << 13, UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING = 1 << 13,
/* /*
* This quirk allows only sg entries aligned with page size. * Align DMA SG entries on a 4 KiB boundary.
*/ */
UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE = 1 << 14, UFSHCD_QUIRK_4KB_DMA_ALIGNMENT = 1 << 14,
/* /*
* This quirk needs to be enabled if the host controller does not * This quirk needs to be enabled if the host controller does not
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment