scsi: ufs: exynos: Fix the maximum segment size
authorBart Van Assche <bvanassche@acm.org>
Thu, 12 Jan 2023 23:42:14 +0000 (15:42 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 24 Jan 2023 02:35:54 +0000 (21:35 -0500)
Prepare for enabling DMA clustering and also for supporting PAGE_SIZE !=
4096 by declaring explicitly that the maximum segment size is 4096 bytes
for Exynos UFS host controllers. Add this code in
exynos_ufs_hce_enable_notify() such that it happens after scsi_host_alloc()
and before __scsi_init_queue() is called by the LUN scanning code.

Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Kiwoong Kim <kwmad.kim@samsung.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Tested-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/host/ufs-exynos.c

index 3cdac89..7c985fc 100644 (file)
@@ -1300,6 +1300,14 @@ static int exynos_ufs_hce_enable_notify(struct ufs_hba *hba,
 
        switch (status) {
        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) {
                        ret = ufs->drv_data->pre_hce_enable(ufs);
                        if (ret)