svn commit: r348182 - head/sys/arm/allwinner/clkng
Emmanuel Vadot
manu at FreeBSD.org
Thu May 23 17:36:57 UTC 2019
Author: manu
Date: Thu May 23 17:36:55 2019
New Revision: 348182
URL: https://svnweb.freebsd.org/changeset/base/348182
Log:
arm: allwinner: Remove frac mode from NM clk
We have a correct clock type aw_clk_frac now for this.
Modified:
head/sys/arm/allwinner/clkng/aw_clk.h
head/sys/arm/allwinner/clkng/aw_clk_nm.c
head/sys/arm/allwinner/clkng/aw_clk_nm.h
Modified: head/sys/arm/allwinner/clkng/aw_clk.h
==============================================================================
--- head/sys/arm/allwinner/clkng/aw_clk.h Thu May 23 17:36:19 2019 (r348181)
+++ head/sys/arm/allwinner/clkng/aw_clk.h Thu May 23 17:36:55 2019 (r348182)
@@ -64,7 +64,6 @@ struct aw_clk_init {
#define AW_CLK_HAS_MUX 0x0004
#define AW_CLK_REPARENT 0x0008
#define AW_CLK_SCALE_CHANGE 0x0010
-#define AW_CLK_HAS_FRAC 0x0020
#define AW_CLK_HAS_UPDATE 0x0040
#define AW_CLK_HAS_PREDIV 0x0080
@@ -334,7 +333,7 @@ aw_clk_factor_get_value(struct aw_clk_factor *factor,
.gate_shift = _gate_shift, \
.lock_shift = _lock_shift, \
.lock_retries = _lock_retries, \
- .flags = _flags | AW_CLK_HAS_FRAC, \
+ .flags = _flags, \
.frac.freq0 = _freq0, \
.frac.freq1 = _freq1, \
.frac.mode_sel = _mode_sel, \
@@ -368,38 +367,6 @@ aw_clk_factor_get_value(struct aw_clk_factor *factor,
.mux_width = _mux_width, \
.gate_shift = _gate_shift, \
.flags = _flags, \
- }
-
-#define NM_CLK_WITH_FRAC(_clkname, _id, _name, _pnames, \
- _offset, \
- _nshift, _nwidth, _nvalue, _nflags, \
- _mshift, _mwidth, _mvalue, _mflags, \
- _gate_shift, _lock_shift,_lock_retries, \
- _flags, _freq0, _freq1, _mode_sel, _freq_sel) \
- static struct aw_clk_nm_def _clkname = { \
- .clkdef = { \
- .id = _id, \
- .name = _name, \
- .parent_names = _pnames, \
- .parent_cnt = nitems(_pnames), \
- }, \
- .offset = _offset, \
- .n.shift = _nshift, \
- .n.width = _nwidth, \
- .n.value = _nvalue, \
- .n.flags = _nflags, \
- .m.shift = _mshift, \
- .m.width = _mwidth, \
- .m.value = _mvalue, \
- .m.flags = _mflags, \
- .gate_shift = _gate_shift, \
- .lock_shift = _lock_shift, \
- .lock_retries = _lock_retries, \
- .flags = _flags | AW_CLK_HAS_FRAC, \
- .frac.freq0 = _freq0, \
- .frac.freq1 = _freq1, \
- .frac.mode_sel = _mode_sel, \
- .frac.freq_sel = _freq_sel, \
}
#define PREDIV_CLK(_clkname, _id, _name, _pnames, \
Modified: head/sys/arm/allwinner/clkng/aw_clk_nm.c
==============================================================================
--- head/sys/arm/allwinner/clkng/aw_clk_nm.c Thu May 23 17:36:19 2019 (r348181)
+++ head/sys/arm/allwinner/clkng/aw_clk_nm.c Thu May 23 17:36:55 2019 (r348182)
@@ -53,7 +53,6 @@ struct aw_clk_nm_sc {
struct aw_clk_factor m;
struct aw_clk_factor n;
struct aw_clk_factor prediv;
- struct aw_clk_frac frac;
uint32_t mux_shift;
uint32_t mux_mask;
@@ -182,13 +181,13 @@ aw_clk_nm_set_freq(struct clknode *clk, uint64_t fpare
struct aw_clk_nm_sc *sc;
struct clknode *p_clk;
const char **p_names;
- uint64_t cur, best, best_frac;
+ uint64_t cur, best;
uint32_t val, m, n, best_m, best_n;
int p_idx, best_parent, retry;
sc = clknode_get_softc(clk);
- best = best_frac = cur = 0;
+ best = cur = 0;
best_parent = 0;
if ((sc->flags & AW_CLK_REPARENT) != 0) {
@@ -210,13 +209,8 @@ aw_clk_nm_set_freq(struct clknode *clk, uint64_t fpare
p_clk = clknode_get_parent(clk);
clknode_get_freq(p_clk, &fparent);
} else {
- if (sc->flags & AW_CLK_HAS_FRAC &&
- (*fout == sc->frac.freq0 || *fout == sc->frac.freq1))
- best = best_frac = *fout;
-
- if (best == 0)
- best = aw_clk_nm_find_best(sc, fparent, fout,
- &best_n, &best_m);
+ best = aw_clk_nm_find_best(sc, fparent, fout,
+ &best_n, &best_m);
}
if ((flags & CLK_SET_DRYRUN) != 0) {
@@ -242,20 +236,12 @@ aw_clk_nm_set_freq(struct clknode *clk, uint64_t fpare
DEVICE_LOCK(clk);
READ4(clk, sc->offset, &val);
- if (best_frac != 0) {
- val &= ~sc->frac.mode_sel;
- if (best_frac == sc->frac.freq0)
- val &= ~sc->frac.freq_sel;
- else
- val |= sc->frac.freq_sel;
- } else {
- n = aw_clk_factor_get_value(&sc->n, best_n);
- m = aw_clk_factor_get_value(&sc->m, best_m);
- val &= ~sc->n.mask;
- val &= ~sc->m.mask;
- val |= n << sc->n.shift;
- val |= m << sc->m.shift;
- }
+ n = aw_clk_factor_get_value(&sc->n, best_n);
+ m = aw_clk_factor_get_value(&sc->m, best_m);
+ val &= ~sc->n.mask;
+ val &= ~sc->m.mask;
+ val |= n << sc->n.shift;
+ val |= m << sc->m.shift;
WRITE4(clk, sc->offset, val);
DEVICE_UNLOCK(clk);
@@ -287,25 +273,14 @@ aw_clk_nm_recalc(struct clknode *clk, uint64_t *freq)
READ4(clk, sc->offset, &val);
DEVICE_UNLOCK(clk);
- if (sc->flags & AW_CLK_HAS_FRAC && ((val & sc->frac.mode_sel) == 0)) {
- if (val & sc->frac.freq_sel)
- *freq = sc->frac.freq1;
- else
- *freq = sc->frac.freq0;
- } else {
- m = aw_clk_get_factor(val, &sc->m);
- n = aw_clk_get_factor(val, &sc->n);
- if (sc->flags & AW_CLK_HAS_PREDIV)
- prediv = aw_clk_get_factor(val, &sc->prediv);
- else
- prediv = 1;
+ m = aw_clk_get_factor(val, &sc->m);
+ n = aw_clk_get_factor(val, &sc->n);
+ if (sc->flags & AW_CLK_HAS_PREDIV)
+ prediv = aw_clk_get_factor(val, &sc->prediv);
+ else
+ prediv = 1;
- /* For FRAC NM the formula is freq_parent * n / m */
- if (sc->flags & AW_CLK_HAS_FRAC)
- *freq = *freq * n / m;
- else
- *freq = *freq / prediv / n / m;
- }
+ *freq = *freq / prediv / n / m;
return (0);
}
@@ -360,11 +335,6 @@ aw_clk_nm_register(struct clkdom *clkdom, struct aw_cl
else
sc->prediv.cond_mask = clkdef->prediv.cond_mask;
sc->prediv.cond_value = clkdef->prediv.cond_value;
-
- sc->frac.freq0 = clkdef->frac.freq0;
- sc->frac.freq1 = clkdef->frac.freq1;
- sc->frac.mode_sel = 1 << clkdef->frac.mode_sel;
- sc->frac.freq_sel = 1 << clkdef->frac.freq_sel;
sc->mux_shift = clkdef->mux_shift;
sc->mux_mask = ((1 << clkdef->mux_width) - 1) << sc->mux_shift;
Modified: head/sys/arm/allwinner/clkng/aw_clk_nm.h
==============================================================================
--- head/sys/arm/allwinner/clkng/aw_clk_nm.h Thu May 23 17:36:19 2019 (r348181)
+++ head/sys/arm/allwinner/clkng/aw_clk_nm.h Thu May 23 17:36:55 2019 (r348182)
@@ -38,7 +38,6 @@ struct aw_clk_nm_def {
struct aw_clk_factor m;
struct aw_clk_factor n;
struct aw_clk_factor prediv;
- struct aw_clk_frac frac;
uint32_t mux_shift;
uint32_t mux_width;
More information about the svn-src-all
mailing list