Lines Matching +full:clkr +full:- +full:- +full:-
1 // SPDX-License-Identifier: GPL-2.0-only
11 #include <linux/clk-provider.h>
13 #include <linux/reset-controller.h>
18 #include <dt-bindings/clock/qcom,gcc-ipq4019.h>
21 #include "clk-regmap.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
25 #include "clk-regmap-divider.h"
28 struct clk_regmap_div, clkr)
45 * struct clk_fepll_vco - vco feedback divider corresponds for FEPLL clocks
61 * struct clk_fepll - clk divider corresponds to FEPLL clocks
90 const struct clk_fepll_vco *pll_vco = pll_div->pll_vco; in clk_fepll_vco_calc_rate()
94 regmap_read(pll_div->cdiv.clkr.regmap, pll_vco->reg, &cdiv); in clk_fepll_vco_calc_rate()
95 refclkdiv = (cdiv >> pll_vco->refclkdiv_shift) & in clk_fepll_vco_calc_rate()
96 (BIT(pll_vco->refclkdiv_width) - 1); in clk_fepll_vco_calc_rate()
97 fdbkdiv = (cdiv >> pll_vco->fdbkdiv_shift) & in clk_fepll_vco_calc_rate()
98 (BIT(pll_vco->fdbkdiv_width) - 1); in clk_fepll_vco_calc_rate()
135 f = qcom_find_freq(pll->freq_tbl, rate); in clk_cpu_div_round_rate()
137 return -EINVAL; in clk_cpu_div_round_rate()
139 p_hw = clk_hw_get_parent_by_index(hw, f->src); in clk_cpu_div_round_rate()
142 return f->freq; in clk_cpu_div_round_rate()
157 f = qcom_find_freq(pll->freq_tbl, rate); in clk_cpu_div_set_rate()
159 return -EINVAL; in clk_cpu_div_set_rate()
161 mask = (BIT(pll->cdiv.width) - 1) << pll->cdiv.shift; in clk_cpu_div_set_rate()
162 regmap_update_bits(pll->cdiv.clkr.regmap, in clk_cpu_div_set_rate()
163 pll->cdiv.reg, mask, in clk_cpu_div_set_rate()
164 f->pre_div << pll->cdiv.shift); in clk_cpu_div_set_rate()
188 regmap_read(pll->cdiv.clkr.regmap, pll->cdiv.reg, &cdiv); in clk_cpu_div_recalc_rate()
189 cdiv = (cdiv >> pll->cdiv.shift) & (BIT(pll->cdiv.width) - 1); in clk_cpu_div_recalc_rate()
235 .cdiv.clkr = {
266 if (pll->fixed_div) { in clk_regmap_clk_div_recalc_rate()
267 pre_div = pll->fixed_div; in clk_regmap_clk_div_recalc_rate()
269 regmap_read(pll->cdiv.clkr.regmap, pll->cdiv.reg, &cdiv); in clk_regmap_clk_div_recalc_rate()
270 cdiv = (cdiv >> pll->cdiv.shift) & (BIT(pll->cdiv.width) - 1); in clk_regmap_clk_div_recalc_rate()
272 for (clkt = pll->div_table; clkt->div; clkt++) { in clk_regmap_clk_div_recalc_rate()
273 if (clkt->val == cdiv) in clk_regmap_clk_div_recalc_rate()
274 pre_div = clkt->div; in clk_regmap_clk_div_recalc_rate()
290 .cdiv.clkr = {
306 .cdiv.clkr = {
322 .cdiv.clkr = {
338 .cdiv.clkr = {
354 .cdiv.clkr = {
380 .cdiv.clkr = {
399 .cdiv.clkr = {
422 { .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
423 { .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
437 .clkr.hw.init = &(struct clk_init_data){
447 .clkr = {
453 &gcc_pcnoc_ahb_clk_src.clkr.hw },
469 { .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
483 .clkr.hw.init = &(struct clk_init_data){
494 .clkr = {
500 &pcnoc_clk_src.clkr.hw },
510 .clkr = {
516 &audio_clk_src.clkr.hw },
534 .clkr.hw.init = &(struct clk_init_data){
544 .clkr = {
550 &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
563 .clkr.hw.init = &(struct clk_init_data){
573 .clkr = {
579 &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
594 { .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
614 .clkr.hw.init = &(struct clk_init_data){
624 .clkr = {
630 &blsp1_qup1_spi_apps_clk_src.clkr.hw },
644 .clkr.hw.init = &(struct clk_init_data){
654 .clkr = {
660 &blsp1_qup2_spi_apps_clk_src.clkr.hw },
688 .clkr.hw.init = &(struct clk_init_data){
698 .clkr = {
704 &blsp1_uart1_apps_clk_src.clkr.hw },
718 .clkr.hw.init = &(struct clk_init_data){
728 .clkr = {
734 &blsp1_uart2_apps_clk_src.clkr.hw },
755 .clkr.hw.init = &(struct clk_init_data){
765 .clkr = {
771 &gp1_clk_src.clkr.hw },
785 .clkr.hw.init = &(struct clk_init_data){
795 .clkr = {
801 &gp2_clk_src.clkr.hw },
815 .clkr.hw.init = &(struct clk_init_data){
825 .clkr = {
831 &gp3_clk_src.clkr.hw },
847 { .hw = &gcc_apss_sdcc_clk.cdiv.clkr.hw },
848 { .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
867 .clkr.hw.init = &(struct clk_init_data){
903 { .hw = &gcc_fepll200_clk.cdiv.clkr.hw },
904 { .hw = &gcc_fepll500_clk.cdiv.clkr.hw },
905 { .hw = &gcc_apss_cpu_plldiv_clk.cdiv.clkr.hw },
913 .clkr.hw.init = &(struct clk_init_data){
933 .clkr.hw.init = &(struct clk_init_data){
944 .clkr = {
950 &apps_ahb_clk_src.clkr.hw },
961 .clkr = {
967 &pcnoc_clk_src.clkr.hw },
976 .clkr = {
993 .clkr = {
999 &pcnoc_clk_src.clkr.hw },
1010 .clkr = {
1016 &pcnoc_clk_src.clkr.hw },
1026 .clkr = {
1032 &gcc_fepll125_clk.cdiv.clkr.hw },
1042 .clkr = {
1048 &gcc_fepll125_clk.cdiv.clkr.hw },
1062 { .hw = &gcc_fepll125dly_clk.cdiv.clkr.hw },
1075 .clkr.hw.init = &(struct clk_init_data){
1085 .clkr = {
1091 &fephy_125m_dly_clk_src.clkr.hw },
1102 .clkr = {
1108 &gcc_fepll200_clk.cdiv.clkr.hw },
1117 .clkr = {
1123 &pcnoc_clk_src.clkr.hw },
1132 .clkr = {
1138 &pcnoc_clk_src.clkr.hw },
1147 .clkr = {
1153 &gcc_fepll200_clk.cdiv.clkr.hw },
1162 .clkr = {
1168 &gcc_fepll200_clk.cdiv.clkr.hw },
1178 .clkr = {
1184 &pcnoc_clk_src.clkr.hw },
1193 .clkr = {
1199 &pcnoc_clk_src.clkr.hw },
1208 .clkr = {
1214 &pcnoc_clk_src.clkr.hw },
1223 .clkr = {
1229 &pcnoc_clk_src.clkr.hw },
1238 .clkr = {
1244 &sdcc1_apps_clk_src.clkr.hw },
1255 .clkr = {
1261 &pcnoc_clk_src.clkr.hw },
1270 .clkr = {
1276 &pcnoc_clk_src.clkr.hw },
1285 .clkr = {
1310 .clkr.hw.init = &(struct clk_init_data){
1320 .clkr = {
1326 &usb30_mock_utmi_clk_src.clkr.hw },
1336 .clkr = {
1342 &gcc_fepll125_clk.cdiv.clkr.hw },
1351 .clkr = {
1368 .clkr = {
1374 &usb30_mock_utmi_clk_src.clkr.hw },
1389 { .hw = &gcc_fepllwcss2g_clk.cdiv.clkr.hw },
1403 .clkr.hw.init = &(struct clk_init_data){
1414 .clkr = {
1420 &wcss2g_clk_src.clkr.hw },
1430 .clkr = {
1448 .clkr = {
1470 { .hw = &gcc_fepllwcss5g_clk.cdiv.clkr.hw },
1484 .clkr.hw.init = &(struct clk_init_data){
1494 .clkr = {
1500 &wcss5g_clk_src.clkr.hw },
1510 .clkr = {
1528 .clkr = {
1545 [AUDIO_CLK_SRC] = &audio_clk_src.clkr,
1546 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
1547 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
1548 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
1549 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
1550 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
1551 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
1552 [GCC_USB3_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
1553 [GCC_APPS_CLK_SRC] = &apps_clk_src.clkr,
1554 [GCC_APPS_AHB_CLK_SRC] = &apps_ahb_clk_src.clkr,
1555 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
1556 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
1557 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
1558 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
1559 [FEPHY_125M_DLY_CLK_SRC] = &fephy_125m_dly_clk_src.clkr,
1560 [WCSS2G_CLK_SRC] = &wcss2g_clk_src.clkr,
1561 [WCSS5G_CLK_SRC] = &wcss5g_clk_src.clkr,
1562 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
1563 [GCC_AUDIO_AHB_CLK] = &gcc_audio_ahb_clk.clkr,
1564 [GCC_AUDIO_PWM_CLK] = &gcc_audio_pwm_clk.clkr,
1565 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
1566 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
1567 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
1568 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
1569 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
1570 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
1571 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
1572 [GCC_DCD_XO_CLK] = &gcc_dcd_xo_clk.clkr,
1573 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
1574 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
1575 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
1576 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
1577 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
1578 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
1579 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
1580 [GCC_ESS_CLK] = &gcc_ess_clk.clkr,
1581 [GCC_IMEM_AXI_CLK] = &gcc_imem_axi_clk.clkr,
1582 [GCC_IMEM_CFG_AHB_CLK] = &gcc_imem_cfg_ahb_clk.clkr,
1583 [GCC_PCIE_AHB_CLK] = &gcc_pcie_ahb_clk.clkr,
1584 [GCC_PCIE_AXI_M_CLK] = &gcc_pcie_axi_m_clk.clkr,
1585 [GCC_PCIE_AXI_S_CLK] = &gcc_pcie_axi_s_clk.clkr,
1586 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
1587 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
1588 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
1589 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
1590 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
1591 [GCC_TLMM_AHB_CLK] = &gcc_tlmm_ahb_clk.clkr,
1592 [GCC_USB2_MASTER_CLK] = &gcc_usb2_master_clk.clkr,
1593 [GCC_USB2_SLEEP_CLK] = &gcc_usb2_sleep_clk.clkr,
1594 [GCC_USB2_MOCK_UTMI_CLK] = &gcc_usb2_mock_utmi_clk.clkr,
1595 [GCC_USB3_MASTER_CLK] = &gcc_usb3_master_clk.clkr,
1596 [GCC_USB3_SLEEP_CLK] = &gcc_usb3_sleep_clk.clkr,
1597 [GCC_USB3_MOCK_UTMI_CLK] = &gcc_usb3_mock_utmi_clk.clkr,
1598 [GCC_WCSS2G_CLK] = &gcc_wcss2g_clk.clkr,
1599 [GCC_WCSS2G_REF_CLK] = &gcc_wcss2g_ref_clk.clkr,
1600 [GCC_WCSS2G_RTC_CLK] = &gcc_wcss2g_rtc_clk.clkr,
1601 [GCC_WCSS5G_CLK] = &gcc_wcss5g_clk.clkr,
1602 [GCC_WCSS5G_REF_CLK] = &gcc_wcss5g_ref_clk.clkr,
1603 [GCC_WCSS5G_RTC_CLK] = &gcc_wcss5g_rtc_clk.clkr,
1604 [GCC_SDCC_PLLDIV_CLK] = &gcc_apss_sdcc_clk.cdiv.clkr,
1605 [GCC_FEPLL125_CLK] = &gcc_fepll125_clk.cdiv.clkr,
1606 [GCC_FEPLL125DLY_CLK] = &gcc_fepll125dly_clk.cdiv.clkr,
1607 [GCC_FEPLL200_CLK] = &gcc_fepll200_clk.cdiv.clkr,
1608 [GCC_FEPLL500_CLK] = &gcc_fepll500_clk.cdiv.clkr,
1609 [GCC_FEPLL_WCSS2G_CLK] = &gcc_fepllwcss2g_clk.cdiv.clkr,
1610 [GCC_FEPLL_WCSS5G_CLK] = &gcc_fepllwcss5g_clk.cdiv.clkr,
1611 [GCC_APSS_CPU_PLLDIV_CLK] = &gcc_apss_cpu_plldiv_clk.cdiv.clkr,
1612 [GCC_PCNOC_AHB_CLK_SRC] = &gcc_pcnoc_ahb_clk_src.clkr,
1613 [GCC_PCNOC_AHB_CLK] = &pcnoc_clk_src.clkr,
1713 { .compatible = "qcom,gcc-ipq4019" },
1725 err = clk_rcg2_ops.set_parent(&apps_clk_src.clkr.hw, in gcc_ipq4019_cpu_clk_notifier_fn()
1743 return devm_clk_notifier_register(&pdev->dev, apps_clk_src.clkr.hw.clk, in gcc_ipq4019_probe()
1750 .name = "qcom,gcc-ipq4019",
1767 MODULE_ALIAS("platform:gcc-ipq4019");