aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2021-05-31 12:06:20 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2021-05-31 12:10:24 +0000
commitac1d7397bf33acf8955fc0871ff124550bf50d1f (patch)
tree3f5f8fbb677857e2ed97dbfb577bb8e918292718
parentbec0a5dca76c783d374ba9e9417208efde86b15f (diff)
arm64: allwinner: clk: Test with the current parent freq first
Even if the clock is flagged with AW_CLK_SET_PARENT the current parent freq might be enough to get a correct divisor. So test first if we can get the expected freq before changing the parent freq.
-rw-r--r--sys/arm/allwinner/clkng/aw_clk_m.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/arm/allwinner/clkng/aw_clk_m.c b/sys/arm/allwinner/clkng/aw_clk_m.c
index 4f8189d48299..9f2dea6722bc 100644
--- a/sys/arm/allwinner/clkng/aw_clk_m.c
+++ b/sys/arm/allwinner/clkng/aw_clk_m.c
@@ -175,7 +175,9 @@ aw_clk_m_set_freq(struct clknode *clk, uint64_t fparent, uint64_t *fout,
best = cur = 0;
- if ((sc->flags & AW_CLK_SET_PARENT) != 0) {
+ best = aw_clk_m_find_best(sc, fparent, fout,
+ &best_m);
+ if ((best != *fout) && ((sc->flags & AW_CLK_SET_PARENT) != 0)) {
p_clk = clknode_get_parent(clk);
if (p_clk == NULL) {
printf("%s: Cannot get parent for clock %s\n",
@@ -187,9 +189,6 @@ aw_clk_m_set_freq(struct clknode *clk, uint64_t fparent, uint64_t *fout,
clknode_get_freq(p_clk, &fparent);
best = aw_clk_m_find_best(sc, fparent, fout,
&best_m);
- } else {
- best = aw_clk_m_find_best(sc, fparent, fout,
- &best_m);
}
if ((flags & CLK_SET_DRYRUN) != 0) {