Lines Matching refs:scu

216 extern u32 ast2600_get_pll_rate(struct ast2600_scu *scu, int pll_idx)  in ast2600_get_pll_rate()  argument
224 pll_reg = readl(&scu->h_pll_param); in ast2600_get_pll_rate()
227 pll_reg = readl(&scu->m_pll_param); in ast2600_get_pll_rate()
230 pll_reg = readl(&scu->d_pll_param); in ast2600_get_pll_rate()
233 pll_reg = readl(&scu->e_pll_param); in ast2600_get_pll_rate()
254 u32 hwstrap1 = readl(&scu->hwstrap1.hwstrap); in ast2600_get_pll_rate()
271 extern u32 ast2600_get_apll_rate(struct ast2600_scu *scu) in ast2600_get_apll_rate() argument
273 u32 hw_rev = readl(&scu->chip_id1); in ast2600_get_apll_rate()
275 u32 apll_reg = readl(&scu->a_pll_param); in ast2600_get_apll_rate()
337 static u32 ast2600_get_hclk(struct ast2600_scu *scu) in ast2600_get_hclk() argument
339 u32 hw_rev = readl(&scu->chip_id1); in ast2600_get_hclk()
340 u32 hwstrap1 = readl(&scu->hwstrap1.hwstrap); in ast2600_get_hclk()
369 rate = ast2600_get_pll_rate(scu, ASPEED_CLK_HPLL); in ast2600_get_hclk()
374 static u32 ast2600_get_bclk_rate(struct ast2600_scu *scu) in ast2600_get_bclk_rate() argument
377 u32 bclk_sel = (readl(&scu->clk_sel1) >> 20) & 0x7; in ast2600_get_bclk_rate()
379 rate = ast2600_get_pll_rate(scu, ASPEED_CLK_EPLL); in ast2600_get_bclk_rate()
392 static u32 ast2600_get_pclk1(struct ast2600_scu *scu) in ast2600_get_pclk1() argument
394 u32 clk_sel1 = readl(&scu->clk_sel1); in ast2600_get_pclk1()
396 u32 rate = ast2600_get_pll_rate(scu, ASPEED_CLK_HPLL); in ast2600_get_pclk1()
401 static u32 ast2600_get_pclk2(struct ast2600_scu *scu) in ast2600_get_pclk2() argument
403 u32 clk_sel4 = readl(&scu->clk_sel4); in ast2600_get_pclk2()
405 u32 rate = ast2600_get_hclk(scu); in ast2600_get_pclk2()
410 static u32 ast2600_get_uxclk_in_rate(struct ast2600_scu *scu) in ast2600_get_uxclk_in_rate() argument
413 u32 uxclk_sel = readl(&scu->clk_sel5); in ast2600_get_uxclk_in_rate()
418 clk_in = ast2600_get_apll_rate(scu) / 4; in ast2600_get_uxclk_in_rate()
421 clk_in = ast2600_get_apll_rate(scu) / 2; in ast2600_get_uxclk_in_rate()
424 clk_in = ast2600_get_apll_rate(scu); in ast2600_get_uxclk_in_rate()
427 clk_in = ast2600_get_hclk(scu); in ast2600_get_uxclk_in_rate()
434 static u32 ast2600_get_huxclk_in_rate(struct ast2600_scu *scu) in ast2600_get_huxclk_in_rate() argument
437 u32 huclk_sel = readl(&scu->clk_sel5); in ast2600_get_huxclk_in_rate()
442 clk_in = ast2600_get_apll_rate(scu) / 4; in ast2600_get_huxclk_in_rate()
445 clk_in = ast2600_get_apll_rate(scu) / 2; in ast2600_get_huxclk_in_rate()
448 clk_in = ast2600_get_apll_rate(scu); in ast2600_get_huxclk_in_rate()
451 clk_in = ast2600_get_hclk(scu); in ast2600_get_huxclk_in_rate()
458 static u32 ast2600_get_uart_uxclk_rate(struct ast2600_scu *scu) in ast2600_get_uart_uxclk_rate() argument
460 u32 clk_in = ast2600_get_uxclk_in_rate(scu); in ast2600_get_uart_uxclk_rate()
461 u32 div_reg = readl(&scu->uart_24m_ref_uxclk); in ast2600_get_uart_uxclk_rate()
472 static u32 ast2600_get_uart_huxclk_rate(struct ast2600_scu *scu) in ast2600_get_uart_huxclk_rate() argument
474 u32 clk_in = ast2600_get_huxclk_in_rate(scu); in ast2600_get_uart_huxclk_rate()
475 u32 div_reg = readl(&scu->uart_24m_ref_huxclk); in ast2600_get_uart_huxclk_rate()
487 static u32 ast2600_get_sdio_clk_rate(struct ast2600_scu *scu) in ast2600_get_sdio_clk_rate() argument
490 u32 clk_sel = readl(&scu->clk_sel4); in ast2600_get_sdio_clk_rate()
492 u32 hw_rev = readl(&scu->chip_id1); in ast2600_get_sdio_clk_rate()
495 clkin = ast2600_get_apll_rate(scu); in ast2600_get_sdio_clk_rate()
497 clkin = ast2600_get_hclk(scu); in ast2600_get_sdio_clk_rate()
506 static u32 ast2600_get_emmc_clk_rate(struct ast2600_scu *scu) in ast2600_get_emmc_clk_rate() argument
508 u32 mmc_clk_src = readl(&scu->clk_sel1); in ast2600_get_emmc_clk_rate()
510 u32 clk_sel = readl(&scu->clk_sel1); in ast2600_get_emmc_clk_rate()
515 clkin = ast2600_get_pll_rate(scu, ASPEED_CLK_MPLL); in ast2600_get_emmc_clk_rate()
518 clkin = ast2600_get_pll_rate(scu, ASPEED_CLK_HPLL); in ast2600_get_emmc_clk_rate()
526 static void ast2600_enable_uart_pinmux(struct ast2600_scu *scu, int uart_idx) in ast2600_enable_uart_pinmux() argument
530 scu->pinmux_ctrl7 |= (BIT(7) | BIT(6)); in ast2600_enable_uart_pinmux()
533 scu->pinmux_ctrl7 |= (BIT(14) | BIT(15)); in ast2600_enable_uart_pinmux()
536 scu->pinmux_ctrl6 |= (BIT(28) | BIT(29)); in ast2600_enable_uart_pinmux()
539 scu->pinmux_ctrl4 |= (BIT(14) | BIT(15)); in ast2600_enable_uart_pinmux()
545 scu->pinmux_ctrl5 |= (BIT(16) | BIT(17)); in ast2600_enable_uart_pinmux()
548 scu->pinmux_ctrl5 |= (BIT(18) | BIT(19)); in ast2600_enable_uart_pinmux()
551 scu->pinmux_ctrl5 |= (BIT(20) | BIT(21)); in ast2600_enable_uart_pinmux()
554 scu->pinmux_ctrl5 |= (BIT(22) | BIT(23)); in ast2600_enable_uart_pinmux()
557 scu->pinmux_ctrl8 |= (BIT(20) | BIT(21)); in ast2600_enable_uart_pinmux()
560 scu->pinmux_ctrl8 |= (BIT(22) | BIT(23)); in ast2600_enable_uart_pinmux()
563 scu->pinmux_ctrl19 |= (BIT(0) | BIT(1)); in ast2600_enable_uart_pinmux()
564 scu->pinmux_ctrl6 &= ~(BIT(0) | BIT(1)); in ast2600_enable_uart_pinmux()
567 scu->pinmux_ctrl19 |= (BIT(2) | BIT(3)); in ast2600_enable_uart_pinmux()
568 scu->pinmux_ctrl6 &= ~(BIT(2) | BIT(3)); in ast2600_enable_uart_pinmux()
576 static u32 ast2600_get_uart_clk_rate(struct ast2600_scu *scu, int uart_idx) in ast2600_get_uart_clk_rate() argument
579 u32 uart_sel = readl(&scu->clk_sel4); in ast2600_get_uart_clk_rate()
580 u32 uart_sel5 = readl(&scu->clk_sel5); in ast2600_get_uart_clk_rate()
584 ast2600_enable_uart_pinmux(scu, uart_idx); in ast2600_get_uart_clk_rate()
596 uart_clk = ast2600_get_uart_huxclk_rate(scu); in ast2600_get_uart_clk_rate()
598 uart_clk = ast2600_get_uart_uxclk_rate(scu); in ast2600_get_uart_clk_rate()
604 if (readl(&scu->misc_ctrl1) & BIT(12)) in ast2600_get_uart_clk_rate()
609 if (readl(&scu->clk_sel2) & BIT(14)) in ast2600_get_uart_clk_rate()
635 uart_clk = ast2600_get_uart_huxclk_rate(scu); in ast2600_get_uart_clk_rate()
637 uart_clk = ast2600_get_uart_uxclk_rate(scu); in ast2600_get_uart_clk_rate()
654 rate = ast2600_get_pll_rate(priv->scu, clk->id); in ast2600_clk_get_rate()
657 rate = ast2600_get_hclk(priv->scu); in ast2600_clk_get_rate()
660 rate = ast2600_get_pclk1(priv->scu); in ast2600_clk_get_rate()
663 rate = ast2600_get_pclk2(priv->scu); in ast2600_clk_get_rate()
666 rate = ast2600_get_apll_rate(priv->scu); in ast2600_clk_get_rate()
669 rate = ast2600_get_uart_clk_rate(priv->scu, 1); in ast2600_clk_get_rate()
672 rate = ast2600_get_uart_clk_rate(priv->scu, 2); in ast2600_clk_get_rate()
675 rate = ast2600_get_uart_clk_rate(priv->scu, 3); in ast2600_clk_get_rate()
678 rate = ast2600_get_uart_clk_rate(priv->scu, 4); in ast2600_clk_get_rate()
681 rate = ast2600_get_uart_clk_rate(priv->scu, 5); in ast2600_clk_get_rate()
684 rate = ast2600_get_bclk_rate(priv->scu); in ast2600_clk_get_rate()
687 rate = ast2600_get_sdio_clk_rate(priv->scu); in ast2600_clk_get_rate()
690 rate = ast2600_get_emmc_clk_rate(priv->scu); in ast2600_clk_get_rate()
693 rate = ast2600_get_uart_uxclk_rate(priv->scu); in ast2600_clk_get_rate()
696 rate = ast2600_get_uart_huxclk_rate(priv->scu); in ast2600_clk_get_rate()
732 static u32 ast2600_configure_pll(struct ast2600_scu *scu, in ast2600_configure_pll() argument
740 addr = (u32)(&scu->h_pll_param); in ast2600_configure_pll()
741 addr_ext = (u32)(&scu->h_pll_ext_param); in ast2600_configure_pll()
744 addr = (u32)(&scu->m_pll_param); in ast2600_configure_pll()
745 addr_ext = (u32)(&scu->m_pll_ext_param); in ast2600_configure_pll()
748 addr = (u32)(&scu->d_pll_param); in ast2600_configure_pll()
749 addr_ext = (u32)(&scu->d_pll_ext_param); in ast2600_configure_pll()
752 addr = (u32)(&scu->e_pll_param); in ast2600_configure_pll()
753 addr_ext = (u32)(&scu->e_pll_ext_param); in ast2600_configure_pll()
783 static u32 ast2600_configure_ddr(struct ast2600_scu *scu, ulong rate) in ast2600_configure_ddr() argument
793 ast2600_configure_pll(scu, &mpll.cfg, ASPEED_CLK_MPLL); in ast2600_configure_ddr()
795 return ast2600_get_pll_rate(scu, ASPEED_CLK_MPLL); in ast2600_configure_ddr()
805 new_rate = ast2600_configure_ddr(priv->scu, rate); in ast2600_clk_set_rate()
814 static int ast2600_calc_dly32_time(struct ast2600_scu *scu, int die_id, int stage) in ast2600_calc_dly32_time() argument
821 base = (u32)&scu->freq_counter_ctrl2; in ast2600_calc_dly32_time()
825 base = (u32)&scu->freq_counter_ctrl1; in ast2600_calc_dly32_time()
863 struct ast2600_scu *scu = priv->scu; in ast2600_init_dly32_lookup() local
867 priv->dly32_lookup[0][i] = ast2600_calc_dly32_time(scu, 0, i); in ast2600_init_dly32_lookup()
868 priv->dly32_lookup[1][i] = ast2600_calc_dly32_time(scu, 1, i); in ast2600_init_dly32_lookup()
907 struct ast2600_scu *scu = priv->scu; in ast2600_configure_mac12_clk() local
962 reg[0] |= (readl(&scu->mac12_clk_delay) & ~GENMASK(25, 0)); in ast2600_configure_mac12_clk()
963 writel(reg[0], &scu->mac12_clk_delay); in ast2600_configure_mac12_clk()
964 writel(reg[1], &scu->mac12_clk_delay_100M); in ast2600_configure_mac12_clk()
965 writel(reg[2], &scu->mac12_clk_delay_10M); in ast2600_configure_mac12_clk()
968 clrsetbits_le32(&scu->clk_sel1, GENMASK(18, 16), (0x2 << 16)); in ast2600_configure_mac12_clk()
975 struct ast2600_scu *scu = priv->scu; in ast2600_configure_mac34_clk() local
1029 reg[0] |= (readl(&scu->mac34_clk_delay) & ~GENMASK(25, 0)); in ast2600_configure_mac34_clk()
1032 writel(reg[0], &scu->mac34_clk_delay); in ast2600_configure_mac34_clk()
1033 writel(reg[1], &scu->mac34_clk_delay_100M); in ast2600_configure_mac34_clk()
1034 writel(reg[2], &scu->mac34_clk_delay_10M); in ast2600_configure_mac34_clk()
1041 clrsetbits_le32(&scu->clk_sel4, (GENMASK(26, 24) | GENMASK(18, 16)), in ast2600_configure_mac34_clk()
1049 clrsetbits_le32(&scu->pinmux_ctrl16, GENMASK(3, 0), in ast2600_configure_mac34_clk()
1219 static u32 ast2600_configure_mac(struct ast2600_scu *scu, int index) in ast2600_configure_mac() argument
1228 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_configure_mac()
1230 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_configure_mac()
1232 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_configure_mac()
1237 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_configure_mac()
1239 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_configure_mac()
1241 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_configure_mac()
1246 writel(reset_bit, &scu->sysreset_ctrl2); in ast2600_configure_mac()
1248 writel(clkstop_bit, &scu->clk_stop_clr_ctrl2); in ast2600_configure_mac()
1250 writel(reset_bit, &scu->sysreset_clr_ctrl2); in ast2600_configure_mac()
1255 writel(reset_bit, &scu->sysreset_ctrl2); in ast2600_configure_mac()
1257 writel(clkstop_bit, &scu->clk_stop_clr_ctrl2); in ast2600_configure_mac()
1259 writel(reset_bit, &scu->sysreset_clr_ctrl2); in ast2600_configure_mac()
1271 static void ast2600_configure_rsa_ecc_clk(struct ast2600_scu *scu) in ast2600_configure_rsa_ecc_clk() argument
1273 u32 clk_sel = readl(&scu->clk_sel1); in ast2600_configure_rsa_ecc_clk()
1280 writel(clk_sel, &scu->clk_sel1); in ast2600_configure_rsa_ecc_clk()
1284 static ulong ast2600_enable_sdclk(struct ast2600_scu *scu) in ast2600_enable_sdclk() argument
1292 writel(reset_bit, &scu->sysreset_ctrl2); in ast2600_enable_sdclk()
1296 writel(clkstop_bit, &scu->clk_stop_clr_ctrl2); in ast2600_enable_sdclk()
1298 writel(reset_bit, &scu->sysreset_clr_ctrl2); in ast2600_enable_sdclk()
1308 static ulong ast2600_enable_extsdclk(struct ast2600_scu *scu) in ast2600_enable_extsdclk() argument
1310 u32 clk_sel = readl(&scu->clk_sel4); in ast2600_enable_extsdclk()
1321 rate = ast2600_get_apll_rate(scu); in ast2600_enable_extsdclk()
1329 writel(clk_sel, &scu->clk_sel4); in ast2600_enable_extsdclk()
1332 setbits_le32(&scu->clk_sel4, enableclk_bit); in ast2600_enable_extsdclk()
1338 static ulong ast2600_enable_emmcclk(struct ast2600_scu *scu) in ast2600_enable_emmcclk() argument
1346 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_enable_emmcclk()
1349 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_enable_emmcclk()
1351 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_enable_emmcclk()
1361 static ulong ast2600_enable_extemmcclk(struct ast2600_scu *scu) in ast2600_enable_extemmcclk() argument
1363 u32 revision_id = readl(&scu->chip_id1); in ast2600_enable_extemmcclk()
1364 u32 clk_sel = readl(&scu->clk_sel1); in ast2600_enable_extemmcclk()
1381 rate = ast2600_get_pll_rate(scu, ASPEED_CLK_MPLL); in ast2600_enable_extemmcclk()
1390 writel(clk_sel, &scu->clk_sel1); in ast2600_enable_extemmcclk()
1394 rate = ast2600_get_pll_rate(scu, ASPEED_CLK_HPLL); in ast2600_enable_extemmcclk()
1404 writel(clk_sel, &scu->clk_sel1); in ast2600_enable_extemmcclk()
1406 setbits_le32(&scu->clk_sel1, enableclk_bit); in ast2600_enable_extemmcclk()
1413 static ulong ast2600_enable_fsiclk(struct ast2600_scu *scu) in ast2600_enable_fsiclk() argument
1424 if (!(readl(&scu->clk_stop_ctrl2) & clkstop_bit)) { in ast2600_enable_fsiclk()
1429 writel(reset_bit, &scu->sysreset_ctrl2); in ast2600_enable_fsiclk()
1431 writel(clkstop_bit, &scu->clk_stop_clr_ctrl2); in ast2600_enable_fsiclk()
1433 writel(reset_bit, &scu->sysreset_clr_ctrl2); in ast2600_enable_fsiclk()
1438 static ulong ast2600_enable_usbahclk(struct ast2600_scu *scu) in ast2600_enable_usbahclk() argument
1446 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_enable_usbahclk()
1448 writel(clkstop_bit, &scu->clk_stop_ctrl1); in ast2600_enable_usbahclk()
1450 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_enable_usbahclk()
1455 static ulong ast2600_enable_usbbhclk(struct ast2600_scu *scu) in ast2600_enable_usbbhclk() argument
1463 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_enable_usbbhclk()
1465 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_enable_usbbhclk()
1468 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_enable_usbbhclk()
1474 static ulong ast2600_enable_haceclk(struct ast2600_scu *scu) in ast2600_enable_haceclk() argument
1482 writel(reset_bit, &scu->sysreset_ctrl1); in ast2600_enable_haceclk()
1484 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_enable_haceclk()
1487 writel(reset_bit, &scu->sysreset_clr_ctrl1); in ast2600_enable_haceclk()
1492 static ulong ast2600_enable_rsaeccclk(struct ast2600_scu *scu) in ast2600_enable_rsaeccclk() argument
1498 writel(clkstop_bit, &scu->clk_stop_clr_ctrl1); in ast2600_enable_rsaeccclk()
1510 ast2600_configure_mac(priv->scu, 1); in ast2600_clk_enable()
1513 ast2600_configure_mac(priv->scu, 2); in ast2600_clk_enable()
1516 ast2600_configure_mac(priv->scu, 3); in ast2600_clk_enable()
1519 ast2600_configure_mac(priv->scu, 4); in ast2600_clk_enable()
1522 ast2600_enable_sdclk(priv->scu); in ast2600_clk_enable()
1525 ast2600_enable_extsdclk(priv->scu); in ast2600_clk_enable()
1528 ast2600_enable_emmcclk(priv->scu); in ast2600_clk_enable()
1531 ast2600_enable_extemmcclk(priv->scu); in ast2600_clk_enable()
1534 ast2600_enable_fsiclk(priv->scu); in ast2600_clk_enable()
1537 ast2600_enable_usbahclk(priv->scu); in ast2600_clk_enable()
1540 ast2600_enable_usbbhclk(priv->scu); in ast2600_clk_enable()
1543 ast2600_enable_haceclk(priv->scu); in ast2600_clk_enable()
1546 ast2600_enable_rsaeccclk(priv->scu); in ast2600_clk_enable()
1567 priv->scu = devfdt_get_addr_ptr(dev); in ast2600_clk_probe()
1568 if (IS_ERR(priv->scu)) in ast2600_clk_probe()
1569 return PTR_ERR(priv->scu); in ast2600_clk_probe()
1575 setbits_le32(&priv->scu->clk_sel4, in ast2600_clk_probe()
1578 setbits_le32(&priv->scu->clk_sel5, in ast2600_clk_probe()
1582 ast2600_init_rgmii_clk(priv->scu, &rgmii_clk_defconfig); in ast2600_clk_probe()
1583 ast2600_init_rmii_clk(priv->scu, &rmii_clk_defconfig); in ast2600_clk_probe()
1587 ast2600_configure_rsa_ecc_clk(priv->scu); in ast2600_clk_probe()