[PATCH] clk: qcom: sa8775p: enable GPLL9 before SDCC1 high-speed rates
Muhammad Royyan Zahir
royzah at gmail.com
Thu Jul 9 06:21:44 CEST 2026
Hi Casey,
Thanks for the review!
I confirmed SDCC1 here is the board's single sdhc controller (mmc at 87c4000,
GCC_SDCC1_APPS_CLK), and the EVK's sd-card overlay wires it to the SD slot,
so a card in high-speed mode exercises exactly the GPLL9-sourced 192 MHz
rate this patch enables.
I do not have the board on hand at the moment (i am travelling) my
mate does, so I will arrange the SD-card file-access test through him and
follow up with a Tested-by.
If Balaji, Varadarajan or Sumit get to it first on their boards, all the
better.
Thanks,
Royyan
On Thu, Jul 9, 2026 at 8:03 AM Casey Connolly <casey.connolly at linaro.org>
wrote:
> Hi Royyan,
>
> On 7/8/26 19:02, Royyan Zahir wrote:
> > 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.
>
> Nice find! Thanks for fixing this.
>
> >
> > 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.
>
> Can you test file access on an sdcard perhaps?
>
> Balaji, Varadarajan, Sumit: could you confirm this fix and maybe send a
> T-b?
>
> >
> > Signed-off-by: Royyan Zahir <royzah at gmail.com>
>
> Reviewed-by: Casey Connolly <casey.connolly at linaro.org>
>
> Thanks,
> // Casey
>
> > ---
> > 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