From: Sumit Garg <sumit.garg@kernel.org>
To: Balaji Selvanathan <balaji.selvanathan@oss.qualcomm.com>
Cc: u-boot@lists.denx.de, u-boot-qcom@groups.io,
Lukasz Majewski <lukma@denx.de>, Tom Rini <trini@konsulko.com>,
Casey Connolly <casey.connolly@linaro.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
David Wronek <david.wronek@mainlining.org>,
Jens Reidel <adrian@mainlining.org>,
Luca Weiss <luca.weiss@fairphone.com>,
Swathi Tamilselvan <swathi.tamilselvan@oss.qualcomm.com>,
Aswin Murugan <aswin.murugan@oss.qualcomm.com>,
Bhupesh Sharma <bhupesh.linux@gmail.com>,
Neha Malcom Francis <n-francis@ti.com>,
Julien Stephan <jstephan@baylibre.com>,
Marek Vasut <marek.vasut+renesas@mailbox.org>
Subject: Re: [PATCH v2 6/7] drivers: ufs: qcom: Initialize and enable clocks before hardware access
Date: Fri, 1 May 2026 13:13:23 +0530 [thread overview]
Message-ID: <afRZmyPhBLU-bwYU@sumit-xelite> (raw)
In-Reply-To: <20260427-ufs_clk-v2-6-36e10a7c0ef6@oss.qualcomm.com>
On Mon, Apr 27, 2026 at 02:56:10PM +0530, Balaji Selvanathan wrote:
> Move UFS clock initialization and enabling before hardware setup
> to ensure clocks are running when accessing UFS registers.
>
> Previously, U-Boot depended on earlier bootloader stages to
> initialize UFS clocks. When these bootloaders failed to do so,
> UFS registers became inaccessible, causing initialization to fail.
> This change makes U-Boot initialize and enable UFS clocks early
> in the init sequence, removing the dependency on previous
> bootloaders.
>
> Signed-off-by: Balaji Selvanathan <balaji.selvanathan@oss.qualcomm.com>
> ---
> Changes in v2:
> - Remove ufs_qcom_init_clks function and move the clock enabling and
> rate set codes to ufs_qcom_init
> - Add clk_release_bulk if ufs_qcom_enable_clks fails
> ---
> drivers/ufs/ufs-qcom.c | 53 ++++++++++++++++++++++++++++++++++----------------
> 1 file changed, 36 insertions(+), 17 deletions(-)
Reviewed-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
-Sumit
>
> diff --git a/drivers/ufs/ufs-qcom.c b/drivers/ufs/ufs-qcom.c
> index dc40ee62daf..ae33f62fbee 100644
> --- a/drivers/ufs/ufs-qcom.c
> +++ b/drivers/ufs/ufs-qcom.c
> @@ -30,6 +30,7 @@
> #define UFS_CPU_MAX_BANDWIDTH 819200
>
> static void ufs_qcom_dev_ref_clk_ctrl(struct ufs_hba *hba, bool enable);
> +static u32 ufs_qcom_get_core_clk_unipro_max_freq(struct ufs_hba *hba);
>
> static int ufs_qcom_enable_clks(struct ufs_qcom_priv *priv)
> {
> @@ -47,17 +48,6 @@ static int ufs_qcom_enable_clks(struct ufs_qcom_priv *priv)
> return 0;
> }
>
> -static int ufs_qcom_init_clks(struct ufs_qcom_priv *priv)
> -{
> - int err;
> - struct udevice *dev = priv->hba->dev;
> -
> - err = clk_get_bulk(dev, &priv->clks);
> - if (err)
> - return err;
> -
> - return 0;
> -}
>
> static int ufs_qcom_check_hibern8(struct ufs_hba *hba)
> {
> @@ -557,10 +547,45 @@ static void ufs_qcom_dev_ref_clk_ctrl(struct ufs_hba *hba, bool enable)
> static int ufs_qcom_init(struct ufs_hba *hba)
> {
> struct ufs_qcom_priv *priv = dev_get_priv(hba->dev);
> + struct udevice *dev = hba->dev;
> + struct clk clk;
> + u32 max_freq;
> + long rate;
> int err;
>
> priv->hba = hba;
>
> + /* Get maximum frequency for core_clk_unipro from device tree */
> + max_freq = ufs_qcom_get_core_clk_unipro_max_freq(hba);
> +
> + /* Get and configure core_clk_unipro */
> + err = clk_get_by_name(dev, "core_clk_unipro", &clk);
> + if (err) {
> + dev_err(dev, "Failed to get core_clk_unipro: %d\n", err);
> + return err;
> + }
> +
> + rate = clk_set_rate(&clk, max_freq);
> + if (rate < 0) {
> + dev_err(dev, "Failed to set core_clk_unipro rate to %u Hz: %ld\n",
> + max_freq, rate);
> + }
> +
> + /* Get all clocks */
> + err = clk_get_bulk(dev, &priv->clks);
> + if (err) {
> + dev_err(dev, "clk_get_bulk failed: %d\n", err);
> + return err;
> + }
> +
> + /* Enable clocks */
> + err = ufs_qcom_enable_clks(priv);
> + if (err) {
> + dev_err(dev, "failed to enable clocks: %d\n", err);
> + clk_release_bulk(&priv->clks);
> + return err;
> + }
> +
> /* setup clocks */
> ufs_qcom_setup_clocks(hba, true, PRE_CHANGE);
>
> @@ -579,12 +604,6 @@ static int ufs_qcom_init(struct ufs_hba *hba)
> priv->hw_ver.minor,
> priv->hw_ver.step);
>
> - err = ufs_qcom_init_clks(priv);
> - if (err) {
> - dev_err(hba->dev, "failed to initialize clocks, err:%d\n", err);
> - return err;
> - }
> -
> ufs_qcom_advertise_quirks(hba);
> ufs_qcom_setup_clocks(hba, true, POST_CHANGE);
>
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2026-05-01 7:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-27 9:26 [PATCH v2 0/7] Add UFS clock support for Qualcomm SoCs Balaji Selvanathan
2026-04-27 9:26 ` [PATCH v2 1/7] clk: stub: Sort compatible strings alphabetically Balaji Selvanathan
2026-05-01 7:38 ` Sumit Garg
2026-04-27 9:26 ` [PATCH v2 2/7] clk: qcom: clk-stub: Add compatibles for QCS615/SA8775P Balaji Selvanathan
2026-05-01 7:39 ` Sumit Garg
2026-04-27 9:26 ` [PATCH v2 3/7] clk: qcom: sa8775p: Add UFS clock support Balaji Selvanathan
2026-04-27 9:26 ` [PATCH v2 4/7] clk: qcom: qcs615: " Balaji Selvanathan
2026-04-27 9:26 ` [PATCH v2 5/7] clk: qcom: sc7280: " Balaji Selvanathan
2026-04-27 9:26 ` [PATCH v2 6/7] drivers: ufs: qcom: Initialize and enable clocks before hardware access Balaji Selvanathan
2026-05-01 7:43 ` Sumit Garg [this message]
2026-05-04 11:07 ` Neha Malcom Francis
2026-05-05 12:58 ` Casey Connolly
2026-04-27 9:26 ` [PATCH v2 7/7] ufs: qcom: Remove redundant POST_CHANGE clock setup call Balaji Selvanathan
2026-05-01 7:47 ` Sumit Garg
2026-05-04 11:07 ` Neha Malcom Francis
2026-05-05 13:01 ` [PATCH v2 0/7] Add UFS clock support for Qualcomm SoCs Casey Connolly
2026-05-05 14:14 ` Casey Connolly
2026-05-22 6:58 ` Neha Malcom Francis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afRZmyPhBLU-bwYU@sumit-xelite \
--to=sumit.garg@kernel.org \
--cc=adrian@mainlining.org \
--cc=aswin.murugan@oss.qualcomm.com \
--cc=balaji.selvanathan@oss.qualcomm.com \
--cc=bhupesh.linux@gmail.com \
--cc=casey.connolly@linaro.org \
--cc=david.wronek@mainlining.org \
--cc=jstephan@baylibre.com \
--cc=luca.weiss@fairphone.com \
--cc=lukma@denx.de \
--cc=marek.vasut+renesas@mailbox.org \
--cc=n-francis@ti.com \
--cc=neil.armstrong@linaro.org \
--cc=swathi.tamilselvan@oss.qualcomm.com \
--cc=trini@konsulko.com \
--cc=u-boot-qcom@groups.io \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.