Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm/allwinner/clkng/aw_clk_nm.c
Show First 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | aw_clk_nm_find_best(struct aw_clk_nm_sc *sc, uint64_t fparent, uint64_t *fout, | ||||
max_m = aw_clk_factor_get_max(&sc->m); | max_m = aw_clk_factor_get_max(&sc->m); | ||||
max_n = aw_clk_factor_get_max(&sc->n); | max_n = aw_clk_factor_get_max(&sc->n); | ||||
min_m = aw_clk_factor_get_min(&sc->m); | min_m = aw_clk_factor_get_min(&sc->m); | ||||
min_n = aw_clk_factor_get_min(&sc->n); | min_n = aw_clk_factor_get_min(&sc->n); | ||||
for (m = min_m; m <= max_m; ) { | for (m = min_m; m <= max_m; ) { | ||||
for (n = min_n; n <= max_n; ) { | for (n = min_n; n <= max_n; ) { | ||||
cur = fparent / n / m; | cur = fparent / n / m; | ||||
if (abs(*fout - cur) < abs(*fout - best)) { | if (clk_freq_diff(*fout, cur) < | ||||
clk_freq_diff(*fout, best)) { | |||||
best = cur; | best = cur; | ||||
*factor_n = n; | *factor_n = n; | ||||
*factor_m = m; | *factor_m = m; | ||||
} | } | ||||
if ((sc->n.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0) | if ((sc->n.flags & AW_CLK_FACTOR_POWER_OF_TWO) != 0) | ||||
n <<= 1; | n <<= 1; | ||||
else | else | ||||
Show All 26 Lines | aw_clk_nm_set_freq(struct clknode *clk, uint64_t fparent, uint64_t *fout, | ||||
if ((sc->flags & AW_CLK_REPARENT) != 0) { | if ((sc->flags & AW_CLK_REPARENT) != 0) { | ||||
p_names = clknode_get_parent_names(clk); | p_names = clknode_get_parent_names(clk); | ||||
for (p_idx = 0; p_idx != clknode_get_parents_num(clk); p_idx++) { | for (p_idx = 0; p_idx != clknode_get_parents_num(clk); p_idx++) { | ||||
p_clk = clknode_find_by_name(p_names[p_idx]); | p_clk = clknode_find_by_name(p_names[p_idx]); | ||||
clknode_get_freq(p_clk, &fparent); | clknode_get_freq(p_clk, &fparent); | ||||
cur = aw_clk_nm_find_best(sc, fparent, fout, &n, &m); | cur = aw_clk_nm_find_best(sc, fparent, fout, &n, &m); | ||||
if (abs((*fout - cur)) < abs((*fout - best))) { | if (clk_freq_diff(*fout, cur) < | ||||
clk_freq_diff(*fout, best)) { | |||||
best = cur; | best = cur; | ||||
best_parent = p_idx; | best_parent = p_idx; | ||||
best_n = n; | best_n = n; | ||||
best_m = m; | best_m = m; | ||||
} | } | ||||
} | } | ||||
p_idx = clknode_get_parent_idx(clk); | p_idx = clknode_get_parent_idx(clk); | ||||
▲ Show 20 Lines • Show All 148 Lines • Show Last 20 Lines |