Lines Matching refs:cprman
294 static inline void cprman_write(struct bcm2835_cprman *cprman, u32 reg, u32 val) in cprman_write() argument
296 writel(CM_PASSWORD | val, cprman->regs + reg); in cprman_write()
299 static inline u32 cprman_read(struct bcm2835_cprman *cprman, u32 reg) in cprman_read() argument
301 return readl(cprman->regs + reg); in cprman_read()
812 struct bcm2835_cprman *cprman; member
819 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_is_on() local
822 return cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_is_on()
866 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_get_rate() local
868 u32 a2wctrl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_get_rate()
875 fdiv = cprman_read(cprman, data->frac_reg) & A2W_PLL_FRAC_MASK; in bcm2835_pll_get_rate()
878 using_prediv = cprman_read(cprman, data->ana_reg_base + 4) & in bcm2835_pll_get_rate()
890 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_off() local
893 spin_lock(&cprman->regs_lock); in bcm2835_pll_off()
894 cprman_write(cprman, data->cm_ctrl_reg, in bcm2835_pll_off()
895 cprman_read(cprman, data->cm_ctrl_reg) | in bcm2835_pll_off()
897 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_off()
898 cprman_read(cprman, data->a2w_ctrl_reg) | in bcm2835_pll_off()
900 spin_unlock(&cprman->regs_lock); in bcm2835_pll_off()
906 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_on() local
910 cprman_write(cprman, data->a2w_ctrl_reg, in bcm2835_pll_on()
911 cprman_read(cprman, data->a2w_ctrl_reg) & in bcm2835_pll_on()
915 cprman_write(cprman, data->cm_ctrl_reg, in bcm2835_pll_on()
916 cprman_read(cprman, data->cm_ctrl_reg) & ~CM_PLL_ANARST); in bcm2835_pll_on()
920 while (!(cprman_read(cprman, CM_LOCK) & data->lock_mask)) { in bcm2835_pll_on()
922 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_pll_on()
934 bcm2835_pll_write_ana(struct bcm2835_cprman *cprman, u32 ana_reg_base, u32 *ana) in bcm2835_pll_write_ana() argument
947 cprman_write(cprman, ana_reg_base + i * 4, ana[i]); in bcm2835_pll_write_ana()
954 struct bcm2835_cprman *cprman = pll->cprman; in bcm2835_pll_set_rate() local
962 dev_err(cprman->dev, "%s: rate out of spec: %lu vs (%lu, %lu)\n", in bcm2835_pll_set_rate()
978 ana[i] = cprman_read(cprman, data->ana_reg_base + i * 4); in bcm2835_pll_set_rate()
1000 cprman_write(cprman, A2W_XOSC_CTRL, in bcm2835_pll_set_rate()
1001 cprman_read(cprman, A2W_XOSC_CTRL) | in bcm2835_pll_set_rate()
1005 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
1008 cprman_write(cprman, data->frac_reg, fdiv); in bcm2835_pll_set_rate()
1010 a2w_ctl = cprman_read(cprman, data->a2w_ctrl_reg); in bcm2835_pll_set_rate()
1015 cprman_write(cprman, data->a2w_ctrl_reg, a2w_ctl); in bcm2835_pll_set_rate()
1018 bcm2835_pll_write_ana(cprman, data->ana_reg_base, ana); in bcm2835_pll_set_rate()
1034 struct bcm2835_cprman *cprman; member
1047 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_is_on() local
1050 return !(cprman_read(cprman, data->a2w_reg) & A2W_PLL_CHANNEL_DISABLE); in bcm2835_pll_divider_is_on()
1064 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_get_rate() local
1066 u32 div = cprman_read(cprman, data->a2w_reg); in bcm2835_pll_divider_get_rate()
1078 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_off() local
1081 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_off()
1082 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_off()
1083 (cprman_read(cprman, data->cm_reg) & in bcm2835_pll_divider_off()
1085 cprman_write(cprman, data->a2w_reg, A2W_PLL_CHANNEL_DISABLE); in bcm2835_pll_divider_off()
1086 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_off()
1092 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_on() local
1095 spin_lock(&cprman->regs_lock); in bcm2835_pll_divider_on()
1096 cprman_write(cprman, data->a2w_reg, in bcm2835_pll_divider_on()
1097 cprman_read(cprman, data->a2w_reg) & in bcm2835_pll_divider_on()
1100 cprman_write(cprman, data->cm_reg, in bcm2835_pll_divider_on()
1101 cprman_read(cprman, data->cm_reg) & ~data->hold_mask); in bcm2835_pll_divider_on()
1102 spin_unlock(&cprman->regs_lock); in bcm2835_pll_divider_on()
1112 struct bcm2835_cprman *cprman = divider->cprman; in bcm2835_pll_divider_set_rate() local
1122 cprman_write(cprman, data->a2w_reg, div); in bcm2835_pll_divider_set_rate()
1123 cm = cprman_read(cprman, data->cm_reg); in bcm2835_pll_divider_set_rate()
1124 cprman_write(cprman, data->cm_reg, cm | data->load_mask); in bcm2835_pll_divider_set_rate()
1125 cprman_write(cprman, data->cm_reg, cm & ~data->load_mask); in bcm2835_pll_divider_set_rate()
1147 struct bcm2835_cprman *cprman; member
1159 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_is_on() local
1162 return (cprman_read(cprman, data->ctl_reg) & CM_ENABLE) != 0; in bcm2835_clock_is_on()
1231 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_get_rate() local
1233 u32 div = cprman_read(cprman, data->div_reg); in bcm2835_clock_get_rate()
1240 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_wait_busy() local
1244 while (cprman_read(cprman, data->ctl_reg) & CM_BUSY) { in bcm2835_clock_wait_busy()
1246 dev_err(cprman->dev, "%s: couldn't lock PLL\n", in bcm2835_clock_wait_busy()
1257 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_off() local
1260 spin_lock(&cprman->regs_lock); in bcm2835_clock_off()
1261 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_off()
1262 cprman_read(cprman, data->ctl_reg) & ~CM_ENABLE); in bcm2835_clock_off()
1263 spin_unlock(&cprman->regs_lock); in bcm2835_clock_off()
1272 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_on() local
1275 spin_lock(&cprman->regs_lock); in bcm2835_clock_on()
1276 cprman_write(cprman, data->ctl_reg, in bcm2835_clock_on()
1277 cprman_read(cprman, data->ctl_reg) | in bcm2835_clock_on()
1280 spin_unlock(&cprman->regs_lock); in bcm2835_clock_on()
1289 struct bcm2835_cprman *cprman = clock->cprman; in bcm2835_clock_set_rate() local
1293 cprman_write(cprman, data->div_reg, div); in bcm2835_clock_set_rate()
1323 static struct clk *bcm2835_register_pll(struct bcm2835_cprman *cprman, in bcm2835_register_pll() argument
1332 init.parent_names = &cprman->osc_name; in bcm2835_register_pll()
1342 pll->cprman = cprman; in bcm2835_register_pll()
1346 return devm_clk_register(cprman->dev, &pll->hw); in bcm2835_register_pll()
1350 bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, in bcm2835_register_pll_divider() argument
1359 divider_name = devm_kasprintf(cprman->dev, GFP_KERNEL, in bcm2835_register_pll_divider()
1375 divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL); in bcm2835_register_pll_divider()
1379 divider->div.reg = cprman->regs + data->a2w_reg; in bcm2835_register_pll_divider()
1383 divider->div.lock = &cprman->regs_lock; in bcm2835_register_pll_divider()
1387 divider->cprman = cprman; in bcm2835_register_pll_divider()
1390 clk = devm_clk_register(cprman->dev, ÷r->div.hw); in bcm2835_register_pll_divider()
1399 return clk_register_fixed_factor(cprman->dev, data->name, in bcm2835_register_pll_divider()
1409 static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman, in bcm2835_register_clock() argument
1424 parent = devm_kasprintf(cprman->dev, GFP_KERNEL, in bcm2835_register_clock()
1435 parents[i] = cprman->osc_name; in bcm2835_register_clock()
1440 clk_register_mux(cprman->dev, parent, in bcm2835_register_clock()
1443 cprman->regs + data->ctl_reg, in bcm2835_register_clock()
1445 0, &cprman->regs_lock); in bcm2835_register_clock()
1463 clock = devm_kzalloc(cprman->dev, sizeof(*clock), GFP_KERNEL); in bcm2835_register_clock()
1467 clock->cprman = cprman; in bcm2835_register_clock()
1471 return devm_clk_register(cprman->dev, &clock->hw); in bcm2835_register_clock()
1478 struct bcm2835_cprman *cprman; in bcm2835_clk_probe() local
1481 cprman = devm_kzalloc(dev, sizeof(*cprman), GFP_KERNEL); in bcm2835_clk_probe()
1482 if (!cprman) in bcm2835_clk_probe()
1485 spin_lock_init(&cprman->regs_lock); in bcm2835_clk_probe()
1486 cprman->dev = dev; in bcm2835_clk_probe()
1488 cprman->regs = devm_ioremap_resource(dev, res); in bcm2835_clk_probe()
1489 if (IS_ERR(cprman->regs)) in bcm2835_clk_probe()
1490 return PTR_ERR(cprman->regs); in bcm2835_clk_probe()
1492 cprman->osc_name = of_clk_get_parent_name(dev->of_node, 0); in bcm2835_clk_probe()
1493 if (!cprman->osc_name) in bcm2835_clk_probe()
1496 platform_set_drvdata(pdev, cprman); in bcm2835_clk_probe()
1498 cprman->onecell.clk_num = BCM2835_CLOCK_COUNT; in bcm2835_clk_probe()
1499 cprman->onecell.clks = cprman->clks; in bcm2835_clk_probe()
1500 clks = cprman->clks; in bcm2835_clk_probe()
1502 clks[BCM2835_PLLA] = bcm2835_register_pll(cprman, &bcm2835_plla_data); in bcm2835_clk_probe()
1503 clks[BCM2835_PLLB] = bcm2835_register_pll(cprman, &bcm2835_pllb_data); in bcm2835_clk_probe()
1504 clks[BCM2835_PLLC] = bcm2835_register_pll(cprman, &bcm2835_pllc_data); in bcm2835_clk_probe()
1505 clks[BCM2835_PLLD] = bcm2835_register_pll(cprman, &bcm2835_plld_data); in bcm2835_clk_probe()
1506 clks[BCM2835_PLLH] = bcm2835_register_pll(cprman, &bcm2835_pllh_data); in bcm2835_clk_probe()
1509 bcm2835_register_pll_divider(cprman, &bcm2835_plla_core_data); in bcm2835_clk_probe()
1511 bcm2835_register_pll_divider(cprman, &bcm2835_plla_per_data); in bcm2835_clk_probe()
1513 bcm2835_register_pll_divider(cprman, &bcm2835_pllc_core0_data); in bcm2835_clk_probe()
1515 bcm2835_register_pll_divider(cprman, &bcm2835_pllc_core1_data); in bcm2835_clk_probe()
1517 bcm2835_register_pll_divider(cprman, &bcm2835_pllc_core2_data); in bcm2835_clk_probe()
1519 bcm2835_register_pll_divider(cprman, &bcm2835_pllc_per_data); in bcm2835_clk_probe()
1521 bcm2835_register_pll_divider(cprman, &bcm2835_plld_core_data); in bcm2835_clk_probe()
1523 bcm2835_register_pll_divider(cprman, &bcm2835_plld_per_data); in bcm2835_clk_probe()
1525 bcm2835_register_pll_divider(cprman, &bcm2835_pllh_rcal_data); in bcm2835_clk_probe()
1527 bcm2835_register_pll_divider(cprman, &bcm2835_pllh_aux_data); in bcm2835_clk_probe()
1529 bcm2835_register_pll_divider(cprman, &bcm2835_pllh_pix_data); in bcm2835_clk_probe()
1532 bcm2835_register_clock(cprman, &bcm2835_clock_timer_data); in bcm2835_clk_probe()
1534 bcm2835_register_clock(cprman, &bcm2835_clock_otp_data); in bcm2835_clk_probe()
1536 bcm2835_register_clock(cprman, &bcm2835_clock_tsens_data); in bcm2835_clk_probe()
1538 bcm2835_register_clock(cprman, &bcm2835_clock_vpu_data); in bcm2835_clk_probe()
1540 bcm2835_register_clock(cprman, &bcm2835_clock_v3d_data); in bcm2835_clk_probe()
1542 bcm2835_register_clock(cprman, &bcm2835_clock_isp_data); in bcm2835_clk_probe()
1544 bcm2835_register_clock(cprman, &bcm2835_clock_h264_data); in bcm2835_clk_probe()
1546 bcm2835_register_clock(cprman, &bcm2835_clock_v3d_data); in bcm2835_clk_probe()
1548 bcm2835_register_clock(cprman, &bcm2835_clock_sdram_data); in bcm2835_clk_probe()
1550 bcm2835_register_clock(cprman, &bcm2835_clock_uart_data); in bcm2835_clk_probe()
1552 bcm2835_register_clock(cprman, &bcm2835_clock_vec_data); in bcm2835_clk_probe()
1554 bcm2835_register_clock(cprman, &bcm2835_clock_hsm_data); in bcm2835_clk_probe()
1556 bcm2835_register_clock(cprman, &bcm2835_clock_emmc_data); in bcm2835_clk_probe()
1567 cprman->regs + CM_PERIICTL, CM_GATE_BIT, in bcm2835_clk_probe()
1568 0, &cprman->regs_lock); in bcm2835_clk_probe()
1571 &cprman->onecell); in bcm2835_clk_probe()