Lines Matching refs:cprman

334 static inline void cprman_write(struct bcm2835_cprman *cprman, u32 reg, u32 val)  in cprman_write()  argument
336 writel(CM_PASSWORD | val, cprman->regs + reg); in cprman_write()
339 static inline u32 cprman_read(struct bcm2835_cprman *cprman, u32 reg) in cprman_read() argument
341 return readl(cprman->regs + reg); in cprman_read()
347 static unsigned long bcm2835_measure_tcnt_mux(struct bcm2835_cprman *cprman, in bcm2835_measure_tcnt_mux() argument
354 spin_lock(&cprman->regs_lock); in bcm2835_measure_tcnt_mux()
356 cprman_write(cprman, CM_TCNTCTL, CM_KILL); in bcm2835_measure_tcnt_mux()
358 cprman_write(cprman, CM_TCNTCTL, in bcm2835_measure_tcnt_mux()
362 cprman_write(cprman, CM_OSCCOUNT, osccount); in bcm2835_measure_tcnt_mux()
369 while (cprman_read(cprman, CM_OSCCOUNT)) { in bcm2835_measure_tcnt_mux()
371 dev_err(cprman->dev, "timeout waiting for OSCCOUNT\n"); in bcm2835_measure_tcnt_mux()
380 while (cprman_read(cprman, CM_TCNTCTL) & CM_BUSY) { in bcm2835_measure_tcnt_mux()
382 dev_err(cprman->dev, "timeout waiting for !BUSY\n"); in bcm2835_measure_tcnt_mux()
389 count = cprman_read(cprman, CM_TCNTCNT); in bcm2835_measure_tcnt_mux()
391 cprman_write(cprman, CM_TCNTCTL, 0); in bcm2835_measure_tcnt_mux()
394 spin_unlock(&cprman->regs_lock); in bcm2835_measure_tcnt_mux()
399 static void bcm2835_debugfs_regset(struct bcm2835_cprman *cprman, u32 base, in bcm2835_debugfs_regset() argument
405 regset = devm_kzalloc(cprman->dev, sizeof(*regset), GFP_KERNEL); in bcm2835_debugfs_regset()
411 regset->base = cprman->regs + base; in bcm2835_debugfs_regset()
516 struct bcm2835_cprman *cprman; member
523 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_is_on() local
526 return cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_is_on()
530 static u32 bcm2835_pll_get_prediv_mask(struct bcm2835_cprman *cprman, in bcm2835_pll_get_prediv_mask() argument
538 if (cprman->soc & SOC_BCM2711) in bcm2835_pll_get_prediv_mask()
588 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_get_rate() local
590 u32 a2wctrl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_get_rate()
597 fdiv = cprman_read(cprman, data->frac_reg) & A2W_PLL_FRAC_MASK; in bcm2835_pll_get_rate()
600 using_prediv = cprman_read(cprman, data->ana_reg_base + 4) & in bcm2835_pll_get_rate()
601 bcm2835_pll_get_prediv_mask(cprman, data); in bcm2835_pll_get_rate()
614 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_off() local
617 spin_lock(&cprman->regs_lock); in bcm2835_pll_off()
618 cprman_write(cprman, data->cm_ctrl_reg, CM_PLL_ANARST); in bcm2835_pll_off()
619 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_off()
620 cprman_read(cprman, data->a2w_ctrl_reg) | in bcm2835_pll_off()
622 spin_unlock(&cprman->regs_lock); in bcm2835_pll_off()
628 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_on() local
632 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_on()
633 cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_on()
637 spin_lock(&cprman->regs_lock); in bcm2835_pll_on()
638 cprman_write(cprman, data->cm_ctrl_reg, in bcm2835_pll_on()
639 cprman_read(cprman, data->cm_ctrl_reg) & ~CM_PLL_ANARST); in bcm2835_pll_on()
640 spin_unlock(&cprman->regs_lock); in bcm2835_pll_on()
644 while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) { in bcm2835_pll_on()
646 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_pll_on()
654 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_on()
655 cprman_read(cprman, data->a2w_ctrl_reg) | in bcm2835_pll_on()
662 bcm2835_pll_write_ana(struct bcm2835_cprman *cprman, u32 ana_reg_base, u32 *ana) in bcm2835_pll_write_ana() argument
675 cprman_write(cprman, ana_reg_base + i * 4, ana[i]); in bcm2835_pll_write_ana()
682 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_set_rate() local
684 u32 prediv_mask = bcm2835_pll_get_prediv_mask(cprman, data); in bcm2835_pll_set_rate()
700 ana[i] = cprman_read(cprman, data->ana_reg_base + i * 4); in bcm2835_pll_set_rate()
722 spin_lock(&cprman->regs_lock); in bcm2835_pll_set_rate()
723 cprman_write(cprman, A2W_XOSC_CTRL, in bcm2835_pll_set_rate()
724 cprman_read(cprman, A2W_XOSC_CTRL) | in bcm2835_pll_set_rate()
726 spin_unlock(&cprman->regs_lock); in bcm2835_pll_set_rate()
729 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
732 cprman_write(cprman, data->frac_reg, fdiv); in bcm2835_pll_set_rate()
734 a2w_ctl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_set_rate()
739 cprman_write(cprman, data->a2w_ctrl_reg, a2w_ctl); in bcm2835_pll_set_rate()
742 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
751 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_debug_init() local
755 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL); in bcm2835_pll_debug_init()
774 bcm2835_debugfs_regset(cprman, 0, regs, 7, dentry); in bcm2835_pll_debug_init()
789 struct bcm2835_cprman *cprman; member
802 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_is_on() local
805 return !(cprman_read(cprman, data->a2w_reg) & A2W_PLL_CHANNEL_DISABLE); in bcm2835_pll_divider_is_on()
824 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_off() local
827 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_off()
828 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_off()
829 (cprman_read(cprman, data->cm_reg) & in bcm2835_pll_divider_off()
831 cprman_write(cprman, data->a2w_reg, in bcm2835_pll_divider_off()
832 cprman_read(cprman, data->a2w_reg) | in bcm2835_pll_divider_off()
834 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_off()
840 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_on() local
843 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_on()
844 cprman_write(cprman, data->a2w_reg, in bcm2835_pll_divider_on()
845 cprman_read(cprman, data->a2w_reg) & in bcm2835_pll_divider_on()
848 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_on()
849 cprman_read(cprman, data->cm_reg) & ~data->hold_mask); in bcm2835_pll_divider_on()
850 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_on()
860 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_set_rate() local
870 cprman_write(cprman, data->a2w_reg, div); in bcm2835_pll_divider_set_rate()
871 cm = cprman_read(cprman, data->cm_reg); in bcm2835_pll_divider_set_rate()
872 cprman_write(cprman, data->cm_reg, cm | data->load_mask); in bcm2835_pll_divider_set_rate()
873 cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); in bcm2835_pll_divider_set_rate()
882 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_debug_init() local
886 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL); in bcm2835_pll_divider_debug_init()
895 bcm2835_debugfs_regset(cprman, 0, regs, 2, dentry); in bcm2835_pll_divider_debug_init()
916 struct bcm2835_cprman *cprman; member
928 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_is_on() local
931 return (cprman_read(cprman, data->ctl_reg) & CM_ENABLE) != 0; in bcm2835_clock_is_on()
1002 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_get_rate() local
1009 div = cprman_read(cprman, data->div_reg); in bcm2835_clock_get_rate()
1016 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_wait_busy() local
1020 while (cprman_read(cprman, data->ctl_reg) & CM_BUSY) { in bcm2835_clock_wait_busy()
1022 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_clock_wait_busy()
1033 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_off() local
1036 spin_lock(&cprman->regs_lock); in bcm2835_clock_off()
1037 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_off()
1038 cprman_read(cprman, data->ctl_reg) & ~CM_ENABLE); in bcm2835_clock_off()
1039 spin_unlock(&cprman->regs_lock); in bcm2835_clock_off()
1048 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_on() local
1051 spin_lock(&cprman->regs_lock); in bcm2835_clock_on()
1052 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_on()
1053 cprman_read(cprman, data->ctl_reg) | in bcm2835_clock_on()
1056 spin_unlock(&cprman->regs_lock); in bcm2835_clock_on()
1062 dev_info(cprman->dev, in bcm2835_clock_on()
1066 bcm2835_measure_tcnt_mux(cprman, data->tcnt_mux)); in bcm2835_clock_on()
1076 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_set_rate() local
1081 spin_lock(&cprman->regs_lock); in bcm2835_clock_set_rate()
1091 ctl = cprman_read(cprman, data->ctl_reg) & ~CM_FRAC; in bcm2835_clock_set_rate()
1093 cprman_write(cprman, data->ctl_reg, ctl); in bcm2835_clock_set_rate()
1095 cprman_write(cprman, data->div_reg, div); in bcm2835_clock_set_rate()
1097 spin_unlock(&cprman->regs_lock); in bcm2835_clock_set_rate()
1119 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_choose_div_and_prate() local
1153 dev_warn(cprman->dev, in bcm2835_clock_choose_div_and_prate()
1237 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_set_parent() local
1241 cprman_write(cprman, data->ctl_reg, src); in bcm2835_clock_set_parent()
1248 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_get_parent() local
1250 u32 src = cprman_read(cprman, data->ctl_reg); in bcm2835_clock_get_parent()
1270 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_debug_init() local
1273 bcm2835_debugfs_regset(cprman, data->ctl_reg, in bcm2835_clock_debug_init()
1310 static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, in bcm2835_register_pll() argument
1321 init.parent_names = &cprman->real_parent_names[0]; in bcm2835_register_pll()
1331 pll->cprman = cprman; in bcm2835_register_pll()
1335 ret = devm_clk_hw_register(cprman->dev, &pll->hw); in bcm2835_register_pll()
1344 bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, in bcm2835_register_pll_divider() argument
1354 divider_name = devm_kasprintf(cprman->dev, GFP_KERNEL, in bcm2835_register_pll_divider()
1370 divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL); in bcm2835_register_pll_divider()
1374 divider->div.reg = cprman->regs + divider_data->a2w_reg; in bcm2835_register_pll_divider()
1378 divider->div.lock = &cprman->regs_lock; in bcm2835_register_pll_divider()
1382 divider->cprman = cprman; in bcm2835_register_pll_divider()
1385 ret = devm_clk_hw_register(cprman->dev, &divider->div.hw); in bcm2835_register_pll_divider()
1394 return clk_hw_register_fixed_factor(cprman->dev, in bcm2835_register_pll_divider()
1405 static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, in bcm2835_register_clock() argument
1426 parents[i] = cprman->real_parent_names[ret]; in bcm2835_register_clock()
1451 if (!(cprman_read(cprman, clock_data->ctl_reg) & CM_ENABLE)) in bcm2835_register_clock()
1455 clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL); in bcm2835_register_clock()
1459 clock->cprman = cprman; in bcm2835_register_clock()
1463 ret = devm_clk_hw_register(cprman->dev, &clock->hw); in bcm2835_register_clock()
1469 static struct clk_hw *bcm2835_register_gate(struct bcm2835_cprman *cprman, in bcm2835_register_gate() argument
1474 return clk_hw_register_gate(cprman->dev, gate_data->name, in bcm2835_register_gate()
1477 cprman->regs + gate_data->ctl_reg, in bcm2835_register_gate()
1478 CM_GATE_BIT, 0, &cprman->regs_lock); in bcm2835_register_gate()
1482 struct clk_hw *(*clk_register)(struct bcm2835_cprman *cprman,
2237 struct bcm2835_cprman *cprman; in bcm2835_clk_probe() local
2248 cprman = devm_kzalloc(dev, in bcm2835_clk_probe()
2249 struct_size(cprman, onecell.hws, asize), in bcm2835_clk_probe()
2251 if (!cprman) in bcm2835_clk_probe()
2254 spin_lock_init(&cprman->regs_lock); in bcm2835_clk_probe()
2255 cprman->dev = dev; in bcm2835_clk_probe()
2256 cprman->regs = devm_platform_ioremap_resource(pdev, 0); in bcm2835_clk_probe()
2257 if (IS_ERR(cprman->regs)) in bcm2835_clk_probe()
2258 return PTR_ERR(cprman->regs); in bcm2835_clk_probe()
2260 memcpy(cprman->real_parent_names, cprman_parent_names, in bcm2835_clk_probe()
2262 of_clk_parent_fill(dev->of_node, cprman->real_parent_names, in bcm2835_clk_probe()
2272 if (!cprman->real_parent_names[0]) in bcm2835_clk_probe()
2275 platform_set_drvdata(pdev, cprman); in bcm2835_clk_probe()
2277 cprman->onecell.num = asize; in bcm2835_clk_probe()
2278 cprman->soc = pdata->soc; in bcm2835_clk_probe()
2279 hws = cprman->onecell.hws; in bcm2835_clk_probe()
2285 hws[i] = desc->clk_register(cprman, desc->data); in bcm2835_clk_probe()
2294 &cprman->onecell); in bcm2835_clk_probe()