From e3e15a3cb10d73b4adebbcc236aa3bdcc7eb91ed Mon Sep 17 00:00:00 2001 From: Abhilash G Date: Wed, 17 May 2023 13:30:33 +0000 Subject: [PATCH] scsi: ufs: Fix UFS CBB errors Fix UFS CBB errors by using the vendor register for T234 instead of T194. Bug 4089453 Change-Id: Ic54b2eea6822d459a6103d15eb60ff2d595fc256 Signed-off-by: Abhilash G Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2906058 Reviewed-by: svcacv Reviewed-by: Mallikarjun Kasoju Reviewed-by: Laxman Dewangan GVS: Gerrit_Virtual_Submit --- drivers/scsi/ufs/ufs-tegra-common.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/ufs/ufs-tegra-common.c b/drivers/scsi/ufs/ufs-tegra-common.c index 99ca1901..f7ba115a 100644 --- a/drivers/scsi/ufs/ufs-tegra-common.c +++ b/drivers/scsi/ufs/ufs-tegra-common.c @@ -97,14 +97,19 @@ static int __ufs_tegra_mphy_receiver_calibration( void __iomem *mphy_base) { struct device *dev = ufs_tegra->hba->dev; - u32 mphy_rx_vendor; + u32 mphy_rx_vendor, mphy_rx_vendor2_reg; int timeout = 100; - mphy_update(mphy_base, MPHY_GO_BIT, MPHY_RX_APB_VENDOR2_0); + if (ufs_tegra->soc->chip_id == TEGRA234) + mphy_rx_vendor2_reg = MPHY_RX_APB_VENDOR2_0_T234; + else + mphy_rx_vendor2_reg = MPHY_RX_APB_VENDOR2_0; + + mphy_update(mphy_base, MPHY_GO_BIT, mphy_rx_vendor2_reg); while (timeout--) { udelay(1); - mphy_rx_vendor = mphy_readl(mphy_base, MPHY_RX_APB_VENDOR2_0); + mphy_rx_vendor = mphy_readl(mphy_base, mphy_rx_vendor2_reg); if (mphy_rx_vendor & MPHY_RX_APB_VENDOR2_0_RX_CAL_DONE) { dev_info(dev, "MPhy Receiver Calibration passed\n"); return 0; @@ -129,18 +134,24 @@ static int ufs_tegra_mphy_receiver_calibration(struct ufs_tegra_host *ufs_tegra, void __iomem *mphy_base) { int err = 0; + u32 mphy_rx_vendor2_reg; - if (!ufs_tegra->enable_mphy_rx_calib) + if (ufs_tegra->enable_mphy_rx_calib) return 0; + if (ufs_tegra->soc->chip_id == TEGRA234) + mphy_rx_vendor2_reg = MPHY_RX_APB_VENDOR2_0_T234; + else + mphy_rx_vendor2_reg = MPHY_RX_APB_VENDOR2_0; + mphy_update(mphy_base, MPHY_RX_APB_VENDOR2_0_RX_CAL_EN, - MPHY_RX_APB_VENDOR2_0); + mphy_rx_vendor2_reg); err = __ufs_tegra_mphy_receiver_calibration(ufs_tegra, mphy_base); if (err) return err; mphy_clear_bits(mphy_base, MPHY_RX_APB_VENDOR2_0_RX_CAL_EN, - MPHY_RX_APB_VENDOR2_0); + mphy_rx_vendor2_reg); err = __ufs_tegra_mphy_receiver_calibration(ufs_tegra, mphy_base); return err;