Lines Matching refs:zclk
178 struct cpg_z_clk *zclk = to_z_clk(hw);
182 val = readl(zclk->reg) & zclk->mask;
183 mult = 32 - (val >> __ffs(zclk->mask));
186 32 * zclk->fixed_div);
192 struct cpg_z_clk *zclk = to_z_clk(hw);
197 if (rate <= zclk->max_rate) {
199 prate = zclk->max_rate;
205 prate * zclk->fixed_div);
207 prate = req->best_parent_rate / zclk->fixed_div;
223 struct cpg_z_clk *zclk = to_z_clk(hw);
227 mult = DIV64_U64_ROUND_CLOSEST(rate * 32ULL * zclk->fixed_div,
231 if (readl(zclk->kick_reg) & CPG_FRQCRB_KICK)
234 cpg_reg_modify(zclk->reg, zclk->mask, (32 - mult) << __ffs(zclk->mask));
240 cpg_reg_modify(zclk->kick_reg, 0, CPG_FRQCRB_KICK);
252 if (!(readl(zclk->kick_reg) & CPG_FRQCRB_KICK))
276 struct cpg_z_clk *zclk;
279 zclk = kzalloc(sizeof(*zclk), GFP_KERNEL);
280 if (!zclk)
289 zclk->reg = reg + fcr;
290 zclk->kick_reg = reg + CPG_FRQCRB;
291 zclk->hw.init = &init;
292 zclk->mask = GENMASK(offset + 4, offset);
293 zclk->fixed_div = div; /* PLLVCO x 1/div x SYS-CPU divider */
295 clk = clk_register(NULL, &zclk->hw);
297 kfree(zclk);
301 zclk->max_rate = clk_hw_get_rate(clk_hw_get_parent(&zclk->hw)) /
302 zclk->fixed_div;