Lines Matching refs:nkmp
33 struct _ccu_nkmp *nkmp)
39 for (_k = nkmp->min_k; _k <= nkmp->max_k; _k++) {
40 for (_n = nkmp->min_n; _n <= nkmp->max_n; _n++) {
41 for (_m = nkmp->min_m; _m <= nkmp->max_m; _m++) {
42 for (_p = nkmp->min_p; _p <= nkmp->max_p; _p <<= 1) {
64 nkmp->n = best_n;
65 nkmp->k = best_k;
66 nkmp->m = best_m;
67 nkmp->p = best_p;
74 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
76 return ccu_gate_helper_disable(&nkmp->common, nkmp->enable);
81 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
83 return ccu_gate_helper_enable(&nkmp->common, nkmp->enable);
88 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
90 return ccu_gate_helper_is_enabled(&nkmp->common, nkmp->enable);
96 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
100 reg = readl(nkmp->common.base + nkmp->common.reg);
102 n = reg >> nkmp->n.shift;
103 n &= (1 << nkmp->n.width) - 1;
104 n += nkmp->n.offset;
108 k = reg >> nkmp->k.shift;
109 k &= (1 << nkmp->k.width) - 1;
110 k += nkmp->k.offset;
114 m = reg >> nkmp->m.shift;
115 m &= (1 << nkmp->m.width) - 1;
116 m += nkmp->m.offset;
120 p = reg >> nkmp->p.shift;
121 p &= (1 << nkmp->p.width) - 1;
124 if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
125 rate /= nkmp->fixed_post_div;
133 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
136 if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
137 rate *= nkmp->fixed_post_div;
139 if (nkmp->max_rate && rate > nkmp->max_rate) {
140 rate = nkmp->max_rate;
141 if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
142 rate /= nkmp->fixed_post_div;
146 _nkmp.min_n = nkmp->n.min ?: 1;
147 _nkmp.max_n = nkmp->n.max ?: 1 << nkmp->n.width;
148 _nkmp.min_k = nkmp->k.min ?: 1;
149 _nkmp.max_k = nkmp->k.max ?: 1 << nkmp->k.width;
151 _nkmp.max_m = nkmp->m.max ?: 1 << nkmp->m.width;
153 _nkmp.max_p = nkmp->p.max ?: 1 << ((1 << nkmp->p.width) - 1);
157 if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
158 rate = rate / nkmp->fixed_post_div;
166 struct ccu_nkmp *nkmp = hw_to_ccu_nkmp(hw);
172 if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
173 rate = rate * nkmp->fixed_post_div;
175 _nkmp.min_n = nkmp->n.min ?: 1;
176 _nkmp.max_n = nkmp->n.max ?: 1 << nkmp->n.width;
177 _nkmp.min_k = nkmp->k.min ?: 1;
178 _nkmp.max_k = nkmp->k.max ?: 1 << nkmp->k.width;
180 _nkmp.max_m = nkmp->m.max ?: 1 << nkmp->m.width;
182 _nkmp.max_p = nkmp->p.max ?: 1 << ((1 << nkmp->p.width) - 1);
192 if (nkmp->n.width)
193 n_mask = GENMASK(nkmp->n.width + nkmp->n.shift - 1,
194 nkmp->n.shift);
195 if (nkmp->k.width)
196 k_mask = GENMASK(nkmp->k.width + nkmp->k.shift - 1,
197 nkmp->k.shift);
198 if (nkmp->m.width)
199 m_mask = GENMASK(nkmp->m.width + nkmp->m.shift - 1,
200 nkmp->m.shift);
201 if (nkmp->p.width)
202 p_mask = GENMASK(nkmp->p.width + nkmp->p.shift - 1,
203 nkmp->p.shift);
205 spin_lock_irqsave(nkmp->common.lock, flags);
207 reg = readl(nkmp->common.base + nkmp->common.reg);
210 reg |= ((_nkmp.n - nkmp->n.offset) << nkmp->n.shift) & n_mask;
211 reg |= ((_nkmp.k - nkmp->k.offset) << nkmp->k.shift) & k_mask;
212 reg |= ((_nkmp.m - nkmp->m.offset) << nkmp->m.shift) & m_mask;
213 reg |= (ilog2(_nkmp.p) << nkmp->p.shift) & p_mask;
215 writel(reg, nkmp->common.base + nkmp->common.reg);
217 spin_unlock_irqrestore(nkmp->common.lock, flags);
219 ccu_helper_wait_for_lock(&nkmp->common, nkmp->lock);