Lines Matching refs:cprman
321 * Real names of cprman clock parents looked up through
335 static inline void cprman_write(struct bcm2835_cprman *cprman, u32 reg, u32 val)
337 writel(CM_PASSWORD | val, cprman->regs + reg);
340 static inline u32 cprman_read(struct bcm2835_cprman *cprman, u32 reg)
342 return readl(cprman->regs + reg);
348 static unsigned long bcm2835_measure_tcnt_mux(struct bcm2835_cprman *cprman,
355 spin_lock(&cprman->regs_lock);
357 cprman_write(cprman, CM_TCNTCTL, CM_KILL);
359 cprman_write(cprman, CM_TCNTCTL,
363 cprman_write(cprman, CM_OSCCOUNT, osccount);
370 while (cprman_read(cprman, CM_OSCCOUNT)) {
372 dev_err(cprman->dev, "timeout waiting for OSCCOUNT\n");
381 while (cprman_read(cprman, CM_TCNTCTL) & CM_BUSY) {
383 dev_err(cprman->dev, "timeout waiting for !BUSY\n");
390 count = cprman_read(cprman, CM_TCNTCNT);
392 cprman_write(cprman, CM_TCNTCTL, 0);
395 spin_unlock(&cprman->regs_lock);
400 static void bcm2835_debugfs_regset(struct bcm2835_cprman *cprman, u32 base,
406 regset = devm_kzalloc(cprman->dev, sizeof(*regset), GFP_KERNEL);
412 regset->base = cprman->regs + base;
519 struct bcm2835_cprman *cprman;
526 struct bcm2835_cprman *cprman = pll->cprman;
529 return cprman_read(cprman, data->a2w_ctrl_reg) &
533 static u32 bcm2835_pll_get_prediv_mask(struct bcm2835_cprman *cprman,
541 if (cprman->soc & SOC_BCM2711)
591 struct bcm2835_cprman *cprman = pll->cprman;
593 u32 a2wctrl = cprman_read(cprman, data->a2w_ctrl_reg);
600 fdiv = cprman_read(cprman, data->frac_reg) & A2W_PLL_FRAC_MASK;
603 using_prediv = cprman_read(cprman, data->ana_reg_base + 4) &
604 bcm2835_pll_get_prediv_mask(cprman, data);
617 struct bcm2835_cprman *cprman = pll->cprman;
620 spin_lock(&cprman->regs_lock);
621 cprman_write(cprman, data->cm_ctrl_reg, CM_PLL_ANARST);
622 cprman_write(cprman, data->a2w_ctrl_reg,
623 cprman_read(cprman, data->a2w_ctrl_reg) |
625 spin_unlock(&cprman->regs_lock);
631 struct bcm2835_cprman *cprman = pll->cprman;
635 cprman_write(cprman, data->a2w_ctrl_reg,
636 cprman_read(cprman, data->a2w_ctrl_reg) &
640 spin_lock(&cprman->regs_lock);
641 cprman_write(cprman, data->cm_ctrl_reg,
642 cprman_read(cprman, data->cm_ctrl_reg) & ~CM_PLL_ANARST);
643 spin_unlock(&cprman->regs_lock);
647 while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) {
649 dev_err(cprman->dev, "%s: couldn't lock PLL\n",
657 cprman_write(cprman, data->a2w_ctrl_reg,
658 cprman_read(cprman, data->a2w_ctrl_reg) |
665 bcm2835_pll_write_ana(struct bcm2835_cprman *cprman, u32 ana_reg_base, u32 *ana)
678 cprman_write(cprman, ana_reg_base + i * 4, ana[i]);
685 struct bcm2835_cprman *cprman = pll->cprman;
687 u32 prediv_mask = bcm2835_pll_get_prediv_mask(cprman, data);
703 ana[i] = cprman_read(cprman, data->ana_reg_base + i * 4);
725 spin_lock(&cprman->regs_lock);
726 cprman_write(cprman, A2W_XOSC_CTRL,
727 cprman_read(cprman, A2W_XOSC_CTRL) |
729 spin_unlock(&cprman->regs_lock);
732 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana);
735 cprman_write(cprman, data->frac_reg, fdiv);
737 a2w_ctl = cprman_read(cprman, data->a2w_ctrl_reg);
742 cprman_write(cprman, data->a2w_ctrl_reg, a2w_ctl);
745 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana);
754 struct bcm2835_cprman *cprman = pll->cprman;
758 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL);
777 bcm2835_debugfs_regset(cprman, 0, regs, 7, dentry);
792 struct bcm2835_cprman *cprman;
805 struct bcm2835_cprman *cprman = divider->cprman;
808 return !(cprman_read(cprman, data->a2w_reg) & A2W_PLL_CHANNEL_DISABLE);
826 struct bcm2835_cprman *cprman = divider->cprman;
829 spin_lock(&cprman->regs_lock);
830 cprman_write(cprman, data->cm_reg,
831 (cprman_read(cprman, data->cm_reg) &
833 cprman_write(cprman, data->a2w_reg,
834 cprman_read(cprman, data->a2w_reg) |
836 spin_unlock(&cprman->regs_lock);
842 struct bcm2835_cprman *cprman = divider->cprman;
845 spin_lock(&cprman->regs_lock);
846 cprman_write(cprman, data->a2w_reg,
847 cprman_read(cprman, data->a2w_reg) &
850 cprman_write(cprman, data->cm_reg,
851 cprman_read(cprman, data->cm_reg) & ~data->hold_mask);
852 spin_unlock(&cprman->regs_lock);
862 struct bcm2835_cprman *cprman = divider->cprman;
872 cprman_write(cprman, data->a2w_reg, div);
873 cm = cprman_read(cprman, data->cm_reg);
874 cprman_write(cprman, data->cm_reg, cm | data->load_mask);
875 cprman_write(cprman, data->cm_reg, cm & ~data->load_mask);
884 struct bcm2835_cprman *cprman = divider->cprman;
888 regs = devm_kcalloc(cprman->dev, 7, sizeof(*regs), GFP_KERNEL);
897 bcm2835_debugfs_regset(cprman, 0, regs, 2, dentry);
918 struct bcm2835_cprman *cprman;
930 struct bcm2835_cprman *cprman = clock->cprman;
933 return (cprman_read(cprman, data->ctl_reg) & CM_ENABLE) != 0;
1024 struct bcm2835_cprman *cprman = clock->cprman;
1032 div = cprman_read(cprman, data->div_reg);
1044 struct bcm2835_cprman *cprman = clock->cprman;
1048 while (cprman_read(cprman, data->ctl_reg) & CM_BUSY) {
1050 dev_err(cprman->dev, "%s: couldn't lock PLL\n",
1061 struct bcm2835_cprman *cprman = clock->cprman;
1064 spin_lock(&cprman->regs_lock);
1065 cprman_write(cprman, data->ctl_reg,
1066 cprman_read(cprman, data->ctl_reg) & ~CM_ENABLE);
1067 spin_unlock(&cprman->regs_lock);
1076 struct bcm2835_cprman *cprman = clock->cprman;
1079 spin_lock(&cprman->regs_lock);
1080 cprman_write(cprman, data->ctl_reg,
1081 cprman_read(cprman, data->ctl_reg) |
1084 spin_unlock(&cprman->regs_lock);
1090 dev_info(cprman->dev,
1094 bcm2835_measure_tcnt_mux(cprman, data->tcnt_mux));
1104 struct bcm2835_cprman *cprman = clock->cprman;
1109 spin_lock(&cprman->regs_lock);
1119 ctl = cprman_read(cprman, data->ctl_reg) & ~CM_FRAC;
1121 cprman_write(cprman, data->ctl_reg, ctl);
1123 cprman_write(cprman, data->div_reg, div);
1125 spin_unlock(&cprman->regs_lock);
1147 struct bcm2835_cprman *cprman = clock->cprman;
1181 dev_warn(cprman->dev,
1265 struct bcm2835_cprman *cprman = clock->cprman;
1269 cprman_write(cprman, data->ctl_reg, src);
1276 struct bcm2835_cprman *cprman = clock->cprman;
1278 u32 src = cprman_read(cprman, data->ctl_reg);
1298 struct bcm2835_cprman *cprman = clock->cprman;
1301 bcm2835_debugfs_regset(cprman, data->ctl_reg,
1338 static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
1349 init.parent_names = &cprman->real_parent_names[0];
1359 pll->cprman = cprman;
1363 ret = devm_clk_hw_register(cprman->dev, &pll->hw);
1372 bcm2835_register_pll_divider(struct bcm2835_cprman *cprman,
1382 divider_name = devm_kasprintf(cprman->dev, GFP_KERNEL,
1398 divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL);
1402 divider->div.reg = cprman->regs + divider_data->a2w_reg;
1406 divider->div.lock = &cprman->regs_lock;
1410 divider->cprman = cprman;
1413 ret = devm_clk_hw_register(cprman->dev, ÷r->div.hw);
1422 return clk_hw_register_fixed_factor(cprman->dev,
1433 static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman,
1454 parents[i] = cprman->real_parent_names[ret];
1479 if (!(cprman_read(cprman, clock_data->ctl_reg) & CM_ENABLE))
1483 clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL);
1487 clock->cprman = cprman;
1491 ret = devm_clk_hw_register(cprman->dev, &clock->hw);
1497 static struct clk_hw *bcm2835_register_gate(struct bcm2835_cprman *cprman,
1502 return clk_hw_register_gate(cprman->dev, gate_data->name,
1505 cprman->regs + gate_data->ctl_reg,
1506 CM_GATE_BIT, 0, &cprman->regs_lock);
1510 struct clk_hw *(*clk_register)(struct bcm2835_cprman *cprman,
1619 * analog PHY. The _inv variants are generated internally to cprman,
2266 struct bcm2835_cprman *cprman;
2277 cprman = devm_kzalloc(dev,
2278 struct_size(cprman, onecell.hws, asize),
2280 if (!cprman)
2283 spin_lock_init(&cprman->regs_lock);
2284 cprman->dev = dev;
2285 cprman->regs = devm_platform_ioremap_resource(pdev, 0);
2286 if (IS_ERR(cprman->regs))
2287 return PTR_ERR(cprman->regs);
2289 memcpy(cprman->real_parent_names, cprman_parent_names,
2291 of_clk_parent_fill(dev->of_node, cprman->real_parent_names,
2301 if (!cprman->real_parent_names[0])
2304 platform_set_drvdata(pdev, cprman);
2306 cprman->onecell.num = asize;
2307 cprman->soc = pdata->soc;
2308 hws = cprman->onecell.hws;
2314 hws[i] = desc->clk_register(cprman, desc->data);
2323 &cprman->onecell);
2335 { .compatible = "brcm,bcm2835-cprman", .data = &cprman_bcm2835_plat_data },
2336 { .compatible = "brcm,bcm2711-cprman", .data = &cprman_bcm2711_plat_data },