From 701657e6f7655cbb9277592d3c311e6cacbd055b Mon Sep 17 00:00:00 2001 From: Mallikarjun Kasoju Date: Wed, 18 Sep 2024 16:12:51 +0000 Subject: [PATCH] ufs: Set utmi_pll1 as parent for cpu_isc clocks Set utmi_pll1 as parent for cpu_isc clocks Bug 4782274 Change-Id: Iab71527dc6de3f46d4b7880c3dd00eadc130c5ba Signed-off-by: Mallikarjun Kasoju --- drivers/scsi/ufs/ufs-tegra-common.c | 42 ++++++++++++++++++++++++++--- drivers/scsi/ufs/ufs-tegra.h | 2 ++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/ufs/ufs-tegra-common.c b/drivers/scsi/ufs/ufs-tegra-common.c index 77dc79cc..5c45af55 100644 --- a/drivers/scsi/ufs/ufs-tegra-common.c +++ b/drivers/scsi/ufs/ufs-tegra-common.c @@ -808,16 +808,42 @@ static int ufs_tegra_init_ufs_clks(struct ufs_tegra_host *ufs_tegra) if (ufs_tegra->soc->chip_id != TEGRA264) { err = ufs_tegra_host_clk_get(dev, "pll_p", &ufs_tegra->ufshc_parent); + if (err) + goto out; } else { err = ufs_tegra_host_clk_get(dev, "pllrefe_vcoout", &ufs_tegra->ufshc_parent); - if (err) + if (err) { + dev_err(dev, "%s: pllrefe_vcoout clock get failed: Err %d", + __func__, err); goto out; + } + err = ufs_tegra_host_clk_get(dev, "ufshc_div", &ufs_tegra->ufshc_clk_div); + if (err) { + dev_err(dev, "%s: ufshc_div clock get failed: Err %d", + __func__, err); + goto out; + } + + err = ufs_tegra_host_clk_get(dev, + "isc_cpu", &ufs_tegra->isc_cpu); + if (err) { + dev_err(dev, "%s: isc_cpu clock get failed: Err %d", + __func__, err); + goto out; + } + + err = ufs_tegra_host_clk_get(dev, + "utmi_pll1", &ufs_tegra->utmi_pll1); + if (err) { + dev_err(dev, "%s: utmi_pll1 clock get failed: Err %d", + __func__, err); + goto out; + } } - if (err) - goto out; + if (ufs_tegra->soc->chip_id != TEGRA264) { err = ufs_tegra_host_clk_get(dev, "clk_m", &ufs_tegra->ufsdev_parent); @@ -854,12 +880,20 @@ static int ufs_tegra_enable_ufs_clks(struct ufs_tegra_host *ufs_tegra) */ err = clk_set_parent(ufs_tegra->ufshc_clk, ufs_tegra->ufshc_clk_div); + + if (err) { + pr_err("\n ufshc_clk clk_set_parent failed\n"); + goto out; + } + err = clk_set_parent(ufs_tegra->isc_cpu, + ufs_tegra->utmi_pll1); + } else { err = clk_set_parent(ufs_tegra->ufshc_clk, ufs_tegra->ufshc_parent); } if (err) { - pr_err("Function clk_set_parent failed\n"); + pr_err("\n clk_set_parent failed\n"); goto out; } if (ufs_tegra->soc->chip_id != TEGRA264) { diff --git a/drivers/scsi/ufs/ufs-tegra.h b/drivers/scsi/ufs/ufs-tegra.h index d7ad8366..02d34c9c 100644 --- a/drivers/scsi/ufs/ufs-tegra.h +++ b/drivers/scsi/ufs/ufs-tegra.h @@ -389,6 +389,8 @@ struct ufs_tegra_host { struct clk *ufs_uphy_pll3; struct clk *pllrefe_clk; struct clk *mphy_l0_uphy_tx_fifo; + struct clk *isc_cpu; + struct clk *utmi_pll1; struct regulator *vddio_ufs; struct regulator *vddio_ufs_ap; struct pinctrl *ufs_pinctrl;