Lines Matching refs:pll

85 	struct iproc_pll *pll;
128 static int pll_get_rate_index(struct iproc_pll *pll, unsigned int target_rate)
132 for (i = 0; i < pll->num_vco_entries; i++)
133 if (target_rate == pll->vco_param[i].rate)
136 if (i >= pll->num_vco_entries)
157 static int pll_wait_for_lock(struct iproc_pll *pll)
160 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
163 u32 val = readl(pll->status_base + ctrl->status.offset);
173 static void iproc_pll_write(const struct iproc_pll *pll, void __iomem *base,
176 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
181 (base == pll->status_base || base == pll->control_base)))
185 static void __pll_disable(struct iproc_pll *pll)
187 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
191 val = readl(pll->asiu_base + ctrl->asiu.offset);
193 iproc_pll_write(pll, pll->asiu_base, ctrl->asiu.offset, val);
197 val = readl(pll->control_base + ctrl->aon.offset);
199 iproc_pll_write(pll, pll->control_base, ctrl->aon.offset, val);
202 if (pll->pwr_base) {
204 val = readl(pll->pwr_base + ctrl->aon.offset);
206 iproc_pll_write(pll, pll->pwr_base, ctrl->aon.offset, val);
210 iproc_pll_write(pll, pll->pwr_base, ctrl->aon.offset, val);
214 static int __pll_enable(struct iproc_pll *pll)
216 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
220 val = readl(pll->control_base + ctrl->aon.offset);
222 iproc_pll_write(pll, pll->control_base, ctrl->aon.offset, val);
225 if (pll->pwr_base) {
227 val = readl(pll->pwr_base + ctrl->aon.offset);
230 iproc_pll_write(pll, pll->pwr_base, ctrl->aon.offset, val);
235 val = readl(pll->asiu_base + ctrl->asiu.offset);
237 iproc_pll_write(pll, pll->asiu_base, ctrl->asiu.offset, val);
243 static void __pll_put_in_reset(struct iproc_pll *pll)
246 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
249 val = readl(pll->control_base + reset->offset);
254 iproc_pll_write(pll, pll->control_base, reset->offset, val);
257 static void __pll_bring_out_reset(struct iproc_pll *pll, unsigned int kp,
261 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
265 val = readl(pll->control_base + dig_filter->offset);
271 iproc_pll_write(pll, pll->control_base, dig_filter->offset, val);
273 val = readl(pll->control_base + reset->offset);
278 iproc_pll_write(pll, pll->control_base, reset->offset, val);
286 static bool pll_fractional_change_only(struct iproc_pll *pll,
289 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
295 val = readl(pll->status_base + ctrl->status.offset);
299 val = readl(pll->control_base + ctrl->ndiv_int.offset);
306 val = readl(pll->control_base + ctrl->pdiv.offset);
318 struct iproc_pll *pll = clk->pll;
319 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
347 pr_err("%s: pll: %s has invalid rate: %lu\n", __func__,
354 pr_err("%s: pll: %s has invalid kp\n", __func__, clk_name);
358 ret = __pll_enable(pll);
360 pr_err("%s: pll: %s fails to enable\n", __func__, clk_name);
364 if (pll_fractional_change_only(clk->pll, vco)) {
367 val = readl(pll->control_base + ctrl->ndiv_frac.offset);
371 iproc_pll_write(pll, pll->control_base,
378 __pll_put_in_reset(pll);
382 val = readl(pll->control_base + ctrl->macro_mode.offset);
386 iproc_pll_write(pll, pll->control_base,
390 iproc_pll_write(pll, pll->control_base, ctrl->vco_ctrl.u_offset, 0);
392 val = readl(pll->control_base + ctrl->vco_ctrl.l_offset);
402 iproc_pll_write(pll, pll->control_base, ctrl->vco_ctrl.l_offset, val);
405 val = readl(pll->control_base + ctrl->ndiv_int.offset);
408 iproc_pll_write(pll, pll->control_base, ctrl->ndiv_int.offset, val);
412 val = readl(pll->control_base + ctrl->ndiv_frac.offset);
416 iproc_pll_write(pll, pll->control_base, ctrl->ndiv_frac.offset,
421 val = readl(pll->control_base + ctrl->pdiv.offset);
424 iproc_pll_write(pll, pll->control_base, ctrl->pdiv.offset, val);
426 __pll_bring_out_reset(pll, kp, ka, ki);
428 ret = pll_wait_for_lock(pll);
430 pr_err("%s: pll: %s failed to lock\n", __func__, clk_name);
440 struct iproc_pll *pll = clk->pll;
442 return __pll_enable(pll);
448 struct iproc_pll *pll = clk->pll;
449 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
454 __pll_disable(pll);
461 struct iproc_pll *pll = clk->pll;
462 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
472 val = readl(pll->status_base + ctrl->status.offset);
481 val = readl(pll->control_base + ctrl->ndiv_int.offset);
487 val = readl(pll->control_base + ctrl->ndiv_frac.offset);
493 val = readl(pll->control_base + ctrl->pdiv.offset);
511 struct iproc_pll *pll = clk->pll;
512 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
532 if (!pll->vco_param)
536 for (i = 0; i < pll->num_vco_entries; i++) {
537 diff = abs(req->rate - pll->vco_param[i].rate);
547 req->rate = pll->vco_param[best_idx].rate;
556 struct iproc_pll *pll = clk->pll;
557 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
566 rate_index = pll_get_rate_index(pll, rate);
570 vco_param = pll->vco_param[rate_index];
589 struct iproc_pll *pll = clk->pll;
593 val = readl(pll->control_base + ctrl->enable.offset);
595 iproc_pll_write(pll, pll->control_base, ctrl->enable.offset, val);
598 val = readl(pll->control_base + ctrl->enable.offset);
600 iproc_pll_write(pll, pll->control_base, ctrl->enable.offset, val);
609 struct iproc_pll *pll = clk->pll;
615 val = readl(pll->control_base + ctrl->enable.offset);
617 iproc_pll_write(pll, pll->control_base, ctrl->enable.offset, val);
625 struct iproc_pll *pll = clk->pll;
633 val = readl(pll->control_base + ctrl->mdiv.offset);
673 struct iproc_pll *pll = clk->pll;
687 val = readl(pll->control_base + ctrl->mdiv.offset);
694 iproc_pll_write(pll, pll->control_base, ctrl->mdiv.offset, val);
711 static void iproc_pll_sw_cfg(struct iproc_pll *pll)
713 const struct iproc_pll_ctrl *ctrl = pll->ctrl;
718 val = readl(pll->control_base + ctrl->sw_ctrl.offset);
720 iproc_pll_write(pll, pll->control_base, ctrl->sw_ctrl.offset,
733 struct iproc_pll *pll;
744 pll = kzalloc(sizeof(*pll), GFP_KERNEL);
745 if (WARN_ON(!pll))
757 pll->control_base = of_iomap(node, 0);
758 if (WARN_ON(!pll->control_base))
762 pll->pwr_base = of_iomap(node, 1);
766 pll->asiu_base = of_iomap(node, 2);
767 if (WARN_ON(!pll->asiu_base))
775 pll->status_base = of_iomap(node, 2);
776 if (!pll->status_base)
779 pll->status_base = pll->control_base;
782 pll->ctrl = pll_ctrl;
785 iclk->pll = pll;
801 pll->num_vco_entries = num_vco_entries;
802 pll->vco_param = vco;
805 iproc_pll_sw_cfg(pll);
824 iclk->pll = pll;
852 if (pll->status_base != pll->control_base)
853 iounmap(pll->status_base);
856 if (pll->asiu_base)
857 iounmap(pll->asiu_base);
860 if (pll->pwr_base)
861 iounmap(pll->pwr_base);
863 iounmap(pll->control_base);
872 kfree(pll);