Lines Matching +full:- +full:m1
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
42 * clk = clkin * n / m0 / m1
51 struct aw_clk_factor m1; member
85 if ((sc->flags & AW_CLK_HAS_GATE) == 0) in aw_clk_nmm_set_gate()
89 READ4(clk, sc->offset, &val); in aw_clk_nmm_set_gate()
91 val |= (1 << sc->gate_shift); in aw_clk_nmm_set_gate()
93 val &= ~(1 << sc->gate_shift); in aw_clk_nmm_set_gate()
94 WRITE4(clk, sc->offset, val); in aw_clk_nmm_set_gate()
105 uint32_t n, m0, m1; in aw_clk_nmm_find_best() local
111 max_n = aw_clk_factor_get_max(&sc->n); in aw_clk_nmm_find_best()
112 min_n = aw_clk_factor_get_min(&sc->n); in aw_clk_nmm_find_best()
113 max_m0 = aw_clk_factor_get_max(&sc->m0); in aw_clk_nmm_find_best()
114 min_m0 = aw_clk_factor_get_min(&sc->m0); in aw_clk_nmm_find_best()
115 max_m1 = aw_clk_factor_get_max(&sc->m1); in aw_clk_nmm_find_best()
116 min_m1 = aw_clk_factor_get_min(&sc->m1); in aw_clk_nmm_find_best()
119 for (m1 = min_m1; m1 <= max_m1; ) { in aw_clk_nmm_find_best()
121 cur = fparent * n / m0 / m1; in aw_clk_nmm_find_best()
122 if (abs(*fout - cur) < abs(*fout - best)) { in aw_clk_nmm_find_best()
126 *factor_m1 = m1; in aw_clk_nmm_find_best()
130 m1++; in aw_clk_nmm_find_best()
144 uint32_t val, n, m0, m1, best_n, best_m0, best_m1; in aw_clk_nmm_set_freq() local
172 READ4(clk, sc->offset, &val); in aw_clk_nmm_set_freq()
174 n = aw_clk_factor_get_value(&sc->n, best_n); in aw_clk_nmm_set_freq()
175 m0 = aw_clk_factor_get_value(&sc->m0, best_m0); in aw_clk_nmm_set_freq()
176 m1 = aw_clk_factor_get_value(&sc->m1, best_m1); in aw_clk_nmm_set_freq()
177 val &= ~sc->n.mask; in aw_clk_nmm_set_freq()
178 val &= ~sc->m0.mask; in aw_clk_nmm_set_freq()
179 val &= ~sc->m1.mask; in aw_clk_nmm_set_freq()
180 val |= n << sc->n.shift; in aw_clk_nmm_set_freq()
181 val |= m0 << sc->m0.shift; in aw_clk_nmm_set_freq()
182 val |= m1 << sc->m1.shift; in aw_clk_nmm_set_freq()
184 WRITE4(clk, sc->offset, val); in aw_clk_nmm_set_freq()
187 if ((sc->flags & AW_CLK_HAS_LOCK) != 0) { in aw_clk_nmm_set_freq()
188 for (retry = 0; retry < sc->lock_retries; retry++) { in aw_clk_nmm_set_freq()
189 READ4(clk, sc->offset, &val); in aw_clk_nmm_set_freq()
190 if ((val & (1 << sc->lock_shift)) != 0) in aw_clk_nmm_set_freq()
206 uint32_t val, n, m0, m1; in aw_clk_nmm_recalc() local
211 READ4(clk, sc->offset, &val); in aw_clk_nmm_recalc()
214 n = aw_clk_get_factor(val, &sc->n); in aw_clk_nmm_recalc()
215 m0 = aw_clk_get_factor(val, &sc->m0); in aw_clk_nmm_recalc()
216 m1 = aw_clk_get_factor(val, &sc->m1); in aw_clk_nmm_recalc()
218 *freq = *freq * n / m0 / m1; in aw_clk_nmm_recalc()
241 clk = clknode_create(clkdom, &aw_nmm_clknode_class, &clkdef->clkdef); in aw_clk_nmm_register()
247 sc->offset = clkdef->offset; in aw_clk_nmm_register()
249 sc->n.shift = clkdef->n.shift; in aw_clk_nmm_register()
250 sc->n.width = clkdef->n.width; in aw_clk_nmm_register()
251 sc->n.mask = ((1 << sc->n.width) - 1) << sc->n.shift; in aw_clk_nmm_register()
252 sc->n.value = clkdef->n.value; in aw_clk_nmm_register()
253 sc->n.flags = clkdef->n.flags; in aw_clk_nmm_register()
255 sc->m0.shift = clkdef->m0.shift; in aw_clk_nmm_register()
256 sc->m0.width = clkdef->m0.width; in aw_clk_nmm_register()
257 sc->m0.mask = ((1 << sc->m0.width) - 1) << sc->m0.shift; in aw_clk_nmm_register()
258 sc->m0.value = clkdef->m0.value; in aw_clk_nmm_register()
259 sc->m0.flags = clkdef->m0.flags; in aw_clk_nmm_register()
261 sc->m1.shift = clkdef->m1.shift; in aw_clk_nmm_register()
262 sc->m1.width = clkdef->m1.width; in aw_clk_nmm_register()
263 sc->m1.mask = ((1 << sc->m1.width) - 1) << sc->m1.shift; in aw_clk_nmm_register()
264 sc->m1.value = clkdef->m1.value; in aw_clk_nmm_register()
265 sc->m1.flags = clkdef->m1.flags; in aw_clk_nmm_register()
267 sc->gate_shift = clkdef->gate_shift; in aw_clk_nmm_register()
269 sc->lock_shift = clkdef->lock_shift; in aw_clk_nmm_register()
270 sc->lock_retries = clkdef->lock_retries; in aw_clk_nmm_register()
272 sc->flags = clkdef->flags; in aw_clk_nmm_register()