[PATCH] clk: qcom: sa8775p: enable GPLL9 before SDCC1 high-speed rates
Royyan Zahir
royzah at gmail.com
Wed Jul 8 19:02:28 CEST 2026
On lemans/sa8775p, the SDCC1 apps clock high-speed rates (192 and 384 MHz)
source from GPLL9 (ftbl_gcc_sdcc1_apps_clk_src), but the driver never enables
GPLL9. When SDCC1 is set to such a rate the RCG switches its source to a PLL
that is off, so the CMD_RCGR update bit never self-clears and U-Boot warns:
WARNING: RCG @ 0x120014 stuck at off
Vote GPLL9 on before selecting it as the SDCC1 source, mirroring how
clock-sm8250.c enables GPLL9 for SDCC2. GPLL9's mode/status register is at
0x9000 (lock is bit 31) and its enable vote is bit 9 of the APCS GPLL vote
register 0x4b028, matching gcc-sa8775p.c in Linux.
Not hardware-validated for SDCC high speed: the board this was found on
(Qualcomm IQ-9075 / Lemans EVK) boots from UFS with no SD card populated, so
here it only clears the stuck-RCG warning. Build-tested on lemans.
Signed-off-by: Royyan Zahir <royzah at gmail.com>
---
drivers/clk/qcom/clock-sa8775p.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/clk/qcom/clock-sa8775p.c b/drivers/clk/qcom/clock-sa8775p.c
--- a/drivers/clk/qcom/clock-sa8775p.c
+++ b/drivers/clk/qcom/clock-sa8775p.c
@@ -26,6 +26,9 @@
#define SDCC1_APPS_CLK_CMD_RCGR 0x20014
+#define APCS_GPLL9_STATUS 0x9000
+#define APCS_GPLLX_ENA_REG 0x4b028
+
#define GCC_QUPV3_WRAP0_S0_CLK_ENA_BIT BIT(10)
#define GCC_QUPV3_WRAP0_S1_CLK_ENA_BIT BIT(11)
#define GCC_QUPV3_WRAP0_S2_CLK_ENA_BIT BIT(12)
@@ -90,6 +93,14 @@
{ }
};
+/* GPLL9 (SDCC1 high-speed source) is not enabled by earlier boot stages. */
+static const struct pll_vote_clk gpll9_vote_clk = {
+ .status = APCS_GPLL9_STATUS,
+ .status_bit = BIT(31),
+ .ena_vote = APCS_GPLLX_ENA_REG,
+ .vote_bit = BIT(9),
+};
+
static ulong sa8775p_set_rate(struct clk *clk, ulong rate)
{
struct msm_clk_priv *priv = dev_get_priv(clk->dev);
@@ -130,6 +141,9 @@
return 19200000;
case GCC_SDCC1_APPS_CLK:
freq = qcom_find_freq(ftbl_gcc_sdcc1_apps_clk_src, rate);
+ /* SDCC1 high-speed rates source from GPLL9; vote it on first. */
+ if (freq->src == CFG_CLK_SRC_GPLL9)
+ clk_enable_gpll0(priv->base, &gpll9_vote_clk);
clk_rcg_set_rate_mnd(priv->base, SDCC1_APPS_CLK_CMD_RCGR,
freq->pre_div, freq->m, freq->n, freq->src, 8);
return freq->freq;
More information about the U-Boot
mailing list