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