Lines Matching refs:cprman

332 static inline void cprman_write(struct bcm2835_cprman *cprman, u32 reg, u32 val)  in cprman_write()  argument
334 writel(CM_PASSWORD | val, cprman->regs + reg); in cprman_write()
337 static inline u32 cprman_read(struct bcm2835_cprman *cprman, u32 reg) in cprman_read() argument
339 return readl(cprman->regs + reg); in cprman_read()
345 static unsigned long bcm2835_measure_tcnt_mux(struct bcm2835_cprman *cprman, in bcm2835_measure_tcnt_mux() argument
352 spin_lock(&cprman->regs_lock); in bcm2835_measure_tcnt_mux()
354 cprman_write(cprman, CM_TCNTCTL, CM_KILL); in bcm2835_measure_tcnt_mux()
356 cprman_write(cprman, CM_TCNTCTL, in bcm2835_measure_tcnt_mux()
360 cprman_write(cprman, CM_OSCCOUNT, osccount); in bcm2835_measure_tcnt_mux()
367 while (cprman_read(cprman, CM_OSCCOUNT)) { in bcm2835_measure_tcnt_mux()
369 dev_err(cprman->dev, "timeout waiting for OSCCOUNT\n"); in bcm2835_measure_tcnt_mux()
378 while (cprman_read(cprman, CM_TCNTCTL) & CM_BUSY) { in bcm2835_measure_tcnt_mux()
380 dev_err(cprman->dev, "timeout waiting for !BUSY\n"); in bcm2835_measure_tcnt_mux()
387 count = cprman_read(cprman, CM_TCNTCNT); in bcm2835_measure_tcnt_mux()
389 cprman_write(cprman, CM_TCNTCTL, 0); in bcm2835_measure_tcnt_mux()
392 spin_unlock(&cprman->regs_lock); in bcm2835_measure_tcnt_mux()
397 static void bcm2835_debugfs_regset(struct bcm2835_cprman *cprman, u32 base, in bcm2835_debugfs_regset() argument
403 regset = devm_kzalloc(cprman->dev, sizeof(*regset), GFP_KERNEL); in bcm2835_debugfs_regset()
409 regset->base = cprman->regs + base; in bcm2835_debugfs_regset()
513 struct bcm2835_cprman *cprman; member
520 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_is_on() local
523 return cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_is_on()
571 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_get_rate() local
573 u32 a2wctrl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_get_rate()
580 fdiv = cprman_read(cprman, data->frac_reg) & A2W_PLL_FRAC_MASK; in bcm2835_pll_get_rate()
583 using_prediv = cprman_read(cprman, data->ana_reg_base + 4) & in bcm2835_pll_get_rate()
597 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_off() local
600 spin_lock(&cprman->regs_lock); in bcm2835_pll_off()
601 cprman_write(cprman, data->cm_ctrl_reg, CM_PLL_ANARST); in bcm2835_pll_off()
602 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_off()
603 cprman_read(cprman, data->a2w_ctrl_reg) | in bcm2835_pll_off()
605 spin_unlock(&cprman->regs_lock); in bcm2835_pll_off()
611 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_on() local
615 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_on()
616 cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_on()
620 spin_lock(&cprman->regs_lock); in bcm2835_pll_on()
621 cprman_write(cprman, data->cm_ctrl_reg, in bcm2835_pll_on()
622 cprman_read(cprman, data->cm_ctrl_reg) & ~CM_PLL_ANARST); in bcm2835_pll_on()
623 spin_unlock(&cprman->regs_lock); in bcm2835_pll_on()
627 while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) { in bcm2835_pll_on()
629 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_pll_on()
637 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_on()
638 cprman_read(cprman, data->a2w_ctrl_reg) | in bcm2835_pll_on()
645 bcm2835_pll_write_ana(struct bcm2835_cprman *cprman, u32 ana_reg_base, u32 *ana) in bcm2835_pll_write_ana() argument
658 cprman_write(cprman, ana_reg_base + i * 4, ana[i]); in bcm2835_pll_write_ana()
665 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_set_rate() local
682 ana[i] = cprman_read(cprman, data->ana_reg_base + i * 4); in bcm2835_pll_set_rate()
704 spin_lock(&cprman->regs_lock); in bcm2835_pll_set_rate()
705 cprman_write(cprman, A2W_XOSC_CTRL, in bcm2835_pll_set_rate()
706 cprman_read(cprman, A2W_XOSC_CTRL) | in bcm2835_pll_set_rate()
708 spin_unlock(&cprman->regs_lock); in bcm2835_pll_set_rate()
711 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
714 cprman_write(cprman, data->frac_reg, fdiv); in bcm2835_pll_set_rate()
716 a2w_ctl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_set_rate()
721 cprman_write(cprman, data->a2w_ctrl_reg, a2w_ctl); in bcm2835_pll_set_rate()
724 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
733 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_debug_init() local
737 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL); in bcm2835_pll_debug_init()
756 bcm2835_debugfs_regset(cprman, 0, regs, 7, dentry); in bcm2835_pll_debug_init()
771 struct bcm2835_cprman *cprman; member
784 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_is_on() local
787 return !(cprman_read(cprman, data->a2w_reg) & A2W_PLL_CHANNEL_DISABLE); in bcm2835_pll_divider_is_on()
806 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_off() local
809 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_off()
810 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_off()
811 (cprman_read(cprman, data->cm_reg) & in bcm2835_pll_divider_off()
813 cprman_write(cprman, data->a2w_reg, in bcm2835_pll_divider_off()
814 cprman_read(cprman, data->a2w_reg) | in bcm2835_pll_divider_off()
816 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_off()
822 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_on() local
825 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_on()
826 cprman_write(cprman, data->a2w_reg, in bcm2835_pll_divider_on()
827 cprman_read(cprman, data->a2w_reg) & in bcm2835_pll_divider_on()
830 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_on()
831 cprman_read(cprman, data->cm_reg) & ~data->hold_mask); in bcm2835_pll_divider_on()
832 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_on()
842 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_set_rate() local
852 cprman_write(cprman, data->a2w_reg, div); in bcm2835_pll_divider_set_rate()
853 cm = cprman_read(cprman, data->cm_reg); in bcm2835_pll_divider_set_rate()
854 cprman_write(cprman, data->cm_reg, cm | data->load_mask); in bcm2835_pll_divider_set_rate()
855 cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); in bcm2835_pll_divider_set_rate()
864 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_debug_init() local
868 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL); in bcm2835_pll_divider_debug_init()
877 bcm2835_debugfs_regset(cprman, 0, regs, 2, dentry); in bcm2835_pll_divider_debug_init()
898 struct bcm2835_cprman *cprman; member
910 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_is_on() local
913 return (cprman_read(cprman, data->ctl_reg) & CM_ENABLE) != 0; in bcm2835_clock_is_on()
989 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_get_rate() local
996 div = cprman_read(cprman, data->div_reg); in bcm2835_clock_get_rate()
1003 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_wait_busy() local
1007 while (cprman_read(cprman, data->ctl_reg) & CM_BUSY) { in bcm2835_clock_wait_busy()
1009 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_clock_wait_busy()
1020 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_off() local
1023 spin_lock(&cprman->regs_lock); in bcm2835_clock_off()
1024 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_off()
1025 cprman_read(cprman, data->ctl_reg) & ~CM_ENABLE); in bcm2835_clock_off()
1026 spin_unlock(&cprman->regs_lock); in bcm2835_clock_off()
1035 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_on() local
1038 spin_lock(&cprman->regs_lock); in bcm2835_clock_on()
1039 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_on()
1040 cprman_read(cprman, data->ctl_reg) | in bcm2835_clock_on()
1043 spin_unlock(&cprman->regs_lock); in bcm2835_clock_on()
1049 dev_info(cprman->dev, in bcm2835_clock_on()
1053 bcm2835_measure_tcnt_mux(cprman, data->tcnt_mux)); in bcm2835_clock_on()
1063 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_set_rate() local
1068 spin_lock(&cprman->regs_lock); in bcm2835_clock_set_rate()
1078 ctl = cprman_read(cprman, data->ctl_reg) & ~CM_FRAC; in bcm2835_clock_set_rate()
1080 cprman_write(cprman, data->ctl_reg, ctl); in bcm2835_clock_set_rate()
1082 cprman_write(cprman, data->div_reg, div); in bcm2835_clock_set_rate()
1084 spin_unlock(&cprman->regs_lock); in bcm2835_clock_set_rate()
1106 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_choose_div_and_prate() local
1140 dev_warn(cprman->dev, in bcm2835_clock_choose_div_and_prate()
1224 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_set_parent() local
1228 cprman_write(cprman, data->ctl_reg, src); in bcm2835_clock_set_parent()
1235 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_get_parent() local
1237 u32 src = cprman_read(cprman, data->ctl_reg); in bcm2835_clock_get_parent()
1257 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_debug_init() local
1260 bcm2835_debugfs_regset(cprman, data->ctl_reg, in bcm2835_clock_debug_init()
1297 static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, in bcm2835_register_pll() argument
1307 init.parent_names = &cprman->real_parent_names[0]; in bcm2835_register_pll()
1317 pll->cprman = cprman; in bcm2835_register_pll()
1321 ret = devm_clk_hw_register(cprman->dev, &pll->hw); in bcm2835_register_pll()
1328 bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, in bcm2835_register_pll_divider() argument
1337 divider_name = devm_kasprintf(cprman->dev, GFP_KERNEL, in bcm2835_register_pll_divider()
1353 divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL); in bcm2835_register_pll_divider()
1357 divider->div.reg = cprman->regs + data->a2w_reg; in bcm2835_register_pll_divider()
1361 divider->div.lock = &cprman->regs_lock; in bcm2835_register_pll_divider()
1365 divider->cprman = cprman; in bcm2835_register_pll_divider()
1368 ret = devm_clk_hw_register(cprman->dev, &divider->div.hw); in bcm2835_register_pll_divider()
1377 return clk_hw_register_fixed_factor(cprman->dev, data->name, in bcm2835_register_pll_divider()
1387 static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, in bcm2835_register_clock() argument
1407 parents[i] = cprman->real_parent_names[ret]; in bcm2835_register_clock()
1432 if (!(cprman_read(cprman, data->ctl_reg) & CM_ENABLE)) in bcm2835_register_clock()
1436 clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL); in bcm2835_register_clock()
1440 clock->cprman = cprman; in bcm2835_register_clock()
1444 ret = devm_clk_hw_register(cprman->dev, &clock->hw); in bcm2835_register_clock()
1450 static struct clk *bcm2835_register_gate(struct bcm2835_cprman *cprman, in bcm2835_register_gate() argument
1453 return clk_register_gate(cprman->dev, data->name, data->parent, in bcm2835_register_gate()
1455 cprman->regs + data->ctl_reg, in bcm2835_register_gate()
1456 CM_GATE_BIT, 0, &cprman->regs_lock); in bcm2835_register_gate()
1459 typedef struct clk_hw *(*bcm2835_clk_register)(struct bcm2835_cprman *cprman,
2137 struct bcm2835_cprman *cprman; in bcm2835_clk_probe() local
2144 cprman = devm_kzalloc(dev, in bcm2835_clk_probe()
2145 struct_size(cprman, onecell.hws, asize), in bcm2835_clk_probe()
2147 if (!cprman) in bcm2835_clk_probe()
2150 spin_lock_init(&cprman->regs_lock); in bcm2835_clk_probe()
2151 cprman->dev = dev; in bcm2835_clk_probe()
2153 cprman->regs = devm_ioremap_resource(dev, res); in bcm2835_clk_probe()
2154 if (IS_ERR(cprman->regs)) in bcm2835_clk_probe()
2155 return PTR_ERR(cprman->regs); in bcm2835_clk_probe()
2157 memcpy(cprman->real_parent_names, cprman_parent_names, in bcm2835_clk_probe()
2159 of_clk_parent_fill(dev->of_node, cprman->real_parent_names, in bcm2835_clk_probe()
2169 if (!cprman->real_parent_names[0]) in bcm2835_clk_probe()
2172 platform_set_drvdata(pdev, cprman); in bcm2835_clk_probe()
2174 cprman->onecell.num = asize; in bcm2835_clk_probe()
2175 hws = cprman->onecell.hws; in bcm2835_clk_probe()
2180 hws[i] = desc->clk_register(cprman, desc->data); in bcm2835_clk_probe()
2188 &cprman->onecell); in bcm2835_clk_probe()