Lines Matching +full:div +full:- +full:reg

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
79 if (sc->grf) in rk_clk_composite_read_4()
80 *val = SYSCON_READ_4(sc->grf, addr); in rk_clk_composite_read_4()
91 if (sc->grf) in rk_clk_composite_write_4()
92 SYSCON_WRITE_4(sc->grf, addr, val | (0xffff << 16)); in rk_clk_composite_write_4()
123 if ((sc->flags & RK_CLK_COMPOSITE_GRF) != 0) { in rk_clk_composite_init()
124 sc->grf = rk_clk_composite_get_grf(clk); in rk_clk_composite_init()
125 if (sc->grf == NULL) in rk_clk_composite_init()
131 if ((sc->flags & RK_CLK_COMPOSITE_HAVE_MUX) != 0) { in rk_clk_composite_init()
133 READ4(clk, sc->muxdiv_offset, &val); in rk_clk_composite_init()
136 idx = (val & sc->mux_mask) >> sc->mux_shift; in rk_clk_composite_init()
152 if ((sc->flags & RK_CLK_COMPOSITE_HAVE_MUX) == 0) in rk_clk_composite_set_mux()
157 val |= (index << sc->mux_shift); in rk_clk_composite_set_mux()
158 val |= sc->mux_mask << RK_CLK_COMPOSITE_MASK_SHIFT; in rk_clk_composite_set_mux()
159 dprintf("Write: muxdiv_offset=%x, val=%x\n", sc->muxdiv_offset, val); in rk_clk_composite_set_mux()
160 WRITE4(clk, sc->muxdiv_offset, val); in rk_clk_composite_set_mux()
170 uint32_t reg, div; in rk_clk_composite_recalc() local
176 READ4(clk, sc->muxdiv_offset, &reg); in rk_clk_composite_recalc()
177 dprintf("Read: muxdiv_offset=%x, val=%x\n", sc->muxdiv_offset, reg); in rk_clk_composite_recalc()
181 div = ((reg & sc->div_mask) >> sc->div_shift); in rk_clk_composite_recalc()
182 if (sc->flags & RK_CLK_COMPOSITE_DIV_EXP) in rk_clk_composite_recalc()
183 div = 1 << div; in rk_clk_composite_recalc()
185 div += 1; in rk_clk_composite_recalc()
186 dprintf("parent_freq=%ju, div=%u\n", *freq, div); in rk_clk_composite_recalc()
187 *freq = *freq / div; in rk_clk_composite_recalc()
194 uint64_t freq, uint32_t *reg) in rk_clk_composite_find_best() argument
198 uint32_t div, div_reg; in rk_clk_composite_find_best() local
204 for (div_reg = 0; div_reg <= ((sc->div_mask >> sc->div_shift) + 1); in rk_clk_composite_find_best()
206 if (sc->flags == RK_CLK_COMPOSITE_DIV_EXP) in rk_clk_composite_find_best()
207 div = 1 << div_reg; in rk_clk_composite_find_best()
209 div = div_reg + 1; in rk_clk_composite_find_best()
210 cur = fparent / div; in rk_clk_composite_find_best()
211 if ((freq - cur) < (freq - best)) { in rk_clk_composite_find_best()
213 best_div = div; in rk_clk_composite_find_best()
218 *reg = best_div_reg; in rk_clk_composite_find_best()
230 uint32_t div, div_reg, best_div, best_div_reg, val; in rk_clk_composite_set_freq() local
234 dprintf("Finding best parent/div for target freq of %ju\n", *fout); in rk_clk_composite_set_freq()
242 div = rk_clk_composite_find_best(sc, fparent, *fout, &div_reg); in rk_clk_composite_set_freq()
243 cur = fparent / div; in rk_clk_composite_set_freq()
244 if ((*fout - cur) < (*fout - best)) { in rk_clk_composite_set_freq()
246 best_div = div; in rk_clk_composite_set_freq()
277 dprintf("Setting divider to %d (reg: %d)\n", best_div, best_div_reg); in rk_clk_composite_set_freq()
278 dprintf(" div_mask: 0x%X, div_shift: %d\n", sc->div_mask, in rk_clk_composite_set_freq()
279 sc->div_shift); in rk_clk_composite_set_freq()
282 val = best_div_reg << sc->div_shift; in rk_clk_composite_set_freq()
283 val |= sc->div_mask << RK_CLK_COMPOSITE_MASK_SHIFT; in rk_clk_composite_set_freq()
284 dprintf("Write: muxdiv_offset=%x, val=%x\n", sc->muxdiv_offset, val); in rk_clk_composite_set_freq()
285 WRITE4(clk, sc->muxdiv_offset, val); in rk_clk_composite_set_freq()
313 &clkdef->clkdef); in rk_clk_composite_register()
319 sc->muxdiv_offset = clkdef->muxdiv_offset; in rk_clk_composite_register()
321 sc->mux_shift = clkdef->mux_shift; in rk_clk_composite_register()
322 sc->mux_width = clkdef->mux_width; in rk_clk_composite_register()
323 sc->mux_mask = ((1 << clkdef->mux_width) - 1) << sc->mux_shift; in rk_clk_composite_register()
325 sc->div_shift = clkdef->div_shift; in rk_clk_composite_register()
326 sc->div_width = clkdef->div_width; in rk_clk_composite_register()
327 sc->div_mask = ((1 << clkdef->div_width) - 1) << sc->div_shift; in rk_clk_composite_register()
329 sc->flags = clkdef->flags; in rk_clk_composite_register()