Lines Matching refs:sc

76 	struct aw_clk_nkmp_sc *sc;
79 sc = clknode_get_softc(clk);
82 if ((sc->flags & AW_CLK_HAS_MUX) != 0) {
84 READ4(clk, sc->offset, &val);
87 idx = (val & sc->mux_mask) >> sc->mux_shift;
97 struct aw_clk_nkmp_sc *sc;
100 sc = clknode_get_softc(clk);
102 if ((sc->flags & AW_CLK_HAS_GATE) == 0)
106 READ4(clk, sc->offset, &val);
108 val |= (1 << sc->gate_shift);
110 val &= ~(1 << sc->gate_shift);
111 WRITE4(clk, sc->offset, val);
120 struct aw_clk_nkmp_sc *sc;
123 sc = clknode_get_softc(clk);
125 if ((sc->flags & AW_CLK_HAS_MUX) == 0)
129 READ4(clk, sc->offset, &val);
130 val &= ~sc->mux_mask;
131 val |= index << sc->mux_shift;
132 WRITE4(clk, sc->offset, val);
139 aw_clk_nkmp_find_best(struct aw_clk_nkmp_sc *sc, uint64_t fparent, uint64_t *fout,
151 for (n = aw_clk_factor_get_min(&sc->n); n <= aw_clk_factor_get_max(&sc->n); ) {
152 for (k = aw_clk_factor_get_min(&sc->k); k <= aw_clk_factor_get_max(&sc->k); ) {
153 for (m = aw_clk_factor_get_min(&sc->m); m <= aw_clk_factor_get_max(&sc->m); ) {
154 for (p = aw_clk_factor_get_min(&sc->p); p <= aw_clk_factor_get_max(&sc->p); ) {
165 if ((sc->p.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0)
170 if ((sc->m.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0)
175 if ((sc->k.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0)
180 if ((sc->n.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0)
190 aw_clk_nkmp_set_freq_scale(struct clknode *clk, struct aw_clk_nkmp_sc *sc,
197 READ4(clk, sc->offset, &val);
199 m = aw_clk_get_factor(val, &sc->m);
200 p = aw_clk_get_factor(val, &sc->p);
203 val &= ~sc->p.mask;
204 val |= aw_clk_factor_get_value(&sc->p, factor_p) << sc->p.shift;
205 WRITE4(clk, sc->offset, val);
210 val &= ~sc->m.mask;
211 val |= aw_clk_factor_get_value(&sc->m, factor_m) << sc->m.shift;
212 WRITE4(clk, sc->offset, val);
216 val &= ~sc->n.mask;
217 val &= ~sc->k.mask;
218 val |= aw_clk_factor_get_value(&sc->n, factor_n) << sc->n.shift;
219 val |= aw_clk_factor_get_value(&sc->k, factor_k) << sc->k.shift;
220 WRITE4(clk, sc->offset, val);
224 val &= ~sc->m.mask;
225 val |= aw_clk_factor_get_value(&sc->m, factor_m) << sc->m.shift;
226 WRITE4(clk, sc->offset, val);
231 val &= ~sc->p.mask;
232 val |= aw_clk_factor_get_value(&sc->p, factor_p) << sc->p.shift;
233 WRITE4(clk, sc->offset, val);
237 if ((sc->flags & AW_CLK_HAS_LOCK) != 0) {
238 for (retry = 0; retry < sc->lock_retries; retry++) {
239 READ4(clk, sc->offset, &val);
240 if ((val & (1 << sc->lock_shift)) != 0)
253 struct aw_clk_nkmp_sc *sc;
258 sc = clknode_get_softc(clk);
260 best = aw_clk_nkmp_find_best(sc, fparent, fout,
279 if ((sc->flags & AW_CLK_SCALE_CHANGE) != 0)
280 aw_clk_nkmp_set_freq_scale(clk, sc,
284 READ4(clk, sc->offset, &val);
285 val &= ~sc->n.mask;
286 val &= ~sc->k.mask;
287 val &= ~sc->m.mask;
288 val &= ~sc->p.mask;
289 val |= aw_clk_factor_get_value(&sc->n, best_n) << sc->n.shift;
290 val |= aw_clk_factor_get_value(&sc->k, best_k) << sc->k.shift;
291 val |= aw_clk_factor_get_value(&sc->m, best_m) << sc->m.shift;
292 val |= aw_clk_factor_get_value(&sc->p, best_p) << sc->p.shift;
293 WRITE4(clk, sc->offset, val);
297 if ((sc->flags & AW_CLK_HAS_UPDATE) != 0) {
299 READ4(clk, sc->offset, &val);
300 val |= 1 << sc->update_shift;
301 WRITE4(clk, sc->offset, val);
306 if ((sc->flags & AW_CLK_HAS_LOCK) != 0) {
307 for (retry = 0; retry < sc->lock_retries; retry++) {
308 READ4(clk, sc->offset, &val);
309 if ((val & (1 << sc->lock_shift)) != 0)
325 struct aw_clk_nkmp_sc *sc;
328 sc = clknode_get_softc(clk);
331 READ4(clk, sc->offset, &val);
334 n = aw_clk_get_factor(val, &sc->n);
335 k = aw_clk_get_factor(val, &sc->k);
336 m = aw_clk_get_factor(val, &sc->m);
337 p = aw_clk_get_factor(val, &sc->p);
361 struct aw_clk_nkmp_sc *sc;
367 sc = clknode_get_softc(clk);
369 sc->offset = clkdef->offset;
371 sc->n.shift = clkdef->n.shift;
372 sc->n.width = clkdef->n.width;
373 sc->n.mask = ((1 << clkdef->n.width) - 1) << sc->n.shift;
374 sc->n.value = clkdef->n.value;
375 sc->n.flags = clkdef->n.flags;
377 sc->k.shift = clkdef->k.shift;
378 sc->k.width = clkdef->k.width;
379 sc->k.mask = ((1 << clkdef->k.width) - 1) << sc->k.shift;
380 sc->k.value = clkdef->k.value;
381 sc->k.flags = clkdef->k.flags;
383 sc->m.shift = clkdef->m.shift;
384 sc->m.width = clkdef->m.width;
385 sc->m.mask = ((1 << clkdef->m.width) - 1) << sc->m.shift;
386 sc->m.value = clkdef->m.value;
387 sc->m.flags = clkdef->m.flags;
389 sc->p.shift = clkdef->p.shift;
390 sc->p.width = clkdef->p.width;
391 sc->p.mask = ((1 << clkdef->p.width) - 1) << sc->p.shift;
392 sc->p.value = clkdef->p.value;
393 sc->p.flags = clkdef->p.flags;
395 sc->mux_shift = clkdef->mux_shift;
396 sc->mux_mask = ((1 << clkdef->mux_width) - 1) << sc->mux_shift;
398 sc->gate_shift = clkdef->gate_shift;
399 sc->lock_shift = clkdef->lock_shift;
400 sc->lock_retries = clkdef->lock_retries;
401 sc->update_shift = clkdef->update_shift;
402 sc->flags = clkdef->flags;