scsi: ufs: mediatek: Add UFS_MTK_CAP_DISABLE_MCQ
authorPo-Wen Kao <powen.kao@mediatek.com>
Fri, 15 Mar 2024 08:34:44 +0000 (16:34 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 26 Mar 2024 01:01:11 +0000 (21:01 -0400)
Add new mediatek host cap UFS_MTK_CAP_DISABLE_MCQ to allow disabling MCQ
feature by assigning dts boolean property "mediatek,ufs-disable-mcq".

Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Acked-by: Chun-Hung Wu <Chun-Hung.Wu@mediatek.com>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20240315083448.7185-4-peter.wang@mediatek.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/host/ufs-mediatek.c
drivers/ufs/host/ufs-mediatek.h

index 59ca5d937bb69990a8c20b41bb7b31750501d7e8..7c593ef7e1439f76ff0f85a7481dc658e0537119 100644 (file)
@@ -639,6 +639,9 @@ static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
        if (of_property_read_bool(np, "mediatek,ufs-tx-skew-fix"))
                host->caps |= UFS_MTK_CAP_TX_SKEW_FIX;
 
+       if (of_property_read_bool(np, "mediatek,ufs-disable-mcq"))
+               host->caps |= UFS_MTK_CAP_DISABLE_MCQ;
+
        dev_info(hba->dev, "caps: 0x%x", host->caps);
 }
 
@@ -902,6 +905,9 @@ static void ufs_mtk_init_mcq_irq(struct ufs_hba *hba)
        host->mcq_nr_intr = UFSHCD_MAX_Q_NR;
        pdev = container_of(hba->dev, struct platform_device, dev);
 
+       if (host->caps & UFS_MTK_CAP_DISABLE_MCQ)
+               goto failed;
+
        for (i = 0; i < host->mcq_nr_intr; i++) {
                /* irq index 0 is legacy irq, sq/cq irq start from index 1 */
                irq = platform_get_irq(pdev, i + 1);
@@ -1617,6 +1623,12 @@ static int ufs_mtk_clk_scale_notify(struct ufs_hba *hba, bool scale_up,
 
 static int ufs_mtk_get_hba_mac(struct ufs_hba *hba)
 {
+       struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+       /* MCQ operation not permitted */
+       if (host->caps & UFS_MTK_CAP_DISABLE_MCQ)
+               return -EPERM;
+
        return MAX_SUPP_MAC;
 }
 
index d5a92810386fa61fe0b044da438768d9fc898d6b..773e778bbc1dab6999c86ceafadf13b467e037d7 100644 (file)
@@ -143,6 +143,7 @@ enum ufs_mtk_host_caps {
        UFS_MTK_CAP_ALLOW_VCCQX_LPM            = 1 << 5,
        UFS_MTK_CAP_PMC_VIA_FASTAUTO           = 1 << 6,
        UFS_MTK_CAP_TX_SKEW_FIX                = 1 << 7,
+       UFS_MTK_CAP_DISABLE_MCQ                = 1 << 8,
 };
 
 struct ufs_mtk_crypt_cfg {