According to design, PFD needs to be gated before
setting rate, this patch adds warning for PFD when
there is any try to set PFD rate with gate open;
Since PFD may be enabled during kernel boot up,
here doing enable and disable before setting APLL_PFD2
rate is to make sure it is gated by clock framework
before setting rate.
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
(cherry picked from commit
bc731e14dc8401efa55fee65948c3ec31c9e5483)
imx_clk_prepare_enable(clks[clks_init_on[i]]);
imx_clk_set_parent(clks[IMX7ULP_CLK_GPU2D], clks[IMX7ULP_CLK_APLL_PFD2]);
imx_clk_set_parent(clks[IMX7ULP_CLK_GPU3D], clks[IMX7ULP_CLK_APLL_PFD2]);
- imx_clk_set_rate(clks[IMX7ULP_CLK_APLL_PFD2], 350000000);
+
+ /* make sure PFD is gated before setting its rate */
+ clk_prepare_enable(clks[IMX7ULP_CLK_APLL_PFD2]);
+ clk_disable_unprepare(clks[IMX7ULP_CLK_APLL_PFD2]);
+ imx_clk_set_rate(clks[IMX7ULP_CLK_APLL_PFD2], 350000000);
pr_info("i.MX7ULP clock tree init done.\n");
}
u32 val;
u8 frac;
+ /* PFD can NOT change rate without gating */
+ WARN_ON(!(readl_relaxed(pfd->reg) &
+ (1 << ((pfd->idx + 1) * 8 - 1))));
+
tmp = tmp * 18 + rate / 2;
do_div(tmp, rate);
frac = tmp;