Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: add the SM8650 Global Clock Controller driver, part 2

Add Global Clock Controller (GCC) driver plumbing for the SM8650 platform.

Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20231106-topic-sm8650-upstream-clocks-v3-7-761a6fadb4c0@linaro.org
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Neil Armstrong and committed by
Bjorn Andersson
aa381a2b c58225b7

+345
+9
drivers/clk/qcom/Kconfig
··· 947 947 Say Y if you want to use peripheral devices such as UART, 948 948 SPI, I2C, USB, SD/UFS, PCIe etc. 949 949 950 + config SM_GCC_8650 951 + tristate "SM8650 Global Clock Controller" 952 + depends on ARM64 || COMPILE_TEST 953 + select QCOM_GDSC 954 + help 955 + Support for the global clock controller on SM8650 devices. 956 + Say Y if you want to use peripheral devices such as UART, 957 + SPI, I2C, USB, SD/UFS, PCIe etc. 958 + 950 959 config SM_GPUCC_6115 951 960 tristate "SM6115 Graphics Clock Controller" 952 961 select SM_GCC_6115
+1
drivers/clk/qcom/Makefile
··· 122 122 obj-$(CONFIG_SM_GCC_8350) += gcc-sm8350.o 123 123 obj-$(CONFIG_SM_GCC_8450) += gcc-sm8450.o 124 124 obj-$(CONFIG_SM_GCC_8550) += gcc-sm8550.o 125 + obj-$(CONFIG_SM_GCC_8650) += gcc-sm8650.o 125 126 obj-$(CONFIG_SM_GPUCC_6115) += gpucc-sm6115.o 126 127 obj-$(CONFIG_SM_GPUCC_6125) += gpucc-sm6125.o 127 128 obj-$(CONFIG_SM_GPUCC_6350) += gpucc-sm6350.o
+335
drivers/clk/qcom/gcc-sm8650.c
··· 3510 3510 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 3511 3511 }; 3512 3512 3513 + static struct clk_regmap *gcc_sm8650_clocks[] = { 3514 + [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr, 3515 + [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr, 3516 + [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr, 3517 + [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr, 3518 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3519 + [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr, 3520 + [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr, 3521 + [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr, 3522 + [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 3523 + [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr, 3524 + [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, 3525 + [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr, 3526 + [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, 3527 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3528 + [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 3529 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3530 + [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 3531 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3532 + [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 3533 + [GCC_GPLL0] = &gcc_gpll0.clkr, 3534 + [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr, 3535 + [GCC_GPLL1] = &gcc_gpll1.clkr, 3536 + [GCC_GPLL3] = &gcc_gpll3.clkr, 3537 + [GCC_GPLL4] = &gcc_gpll4.clkr, 3538 + [GCC_GPLL6] = &gcc_gpll6.clkr, 3539 + [GCC_GPLL7] = &gcc_gpll7.clkr, 3540 + [GCC_GPLL9] = &gcc_gpll9.clkr, 3541 + [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr, 3542 + [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr, 3543 + [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr, 3544 + [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr, 3545 + [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3546 + [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 3547 + [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3548 + [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3549 + [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr, 3550 + [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr, 3551 + [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3552 + [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 3553 + [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3554 + [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 3555 + [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3556 + [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr, 3557 + [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3558 + [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3559 + [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr, 3560 + [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr, 3561 + [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr, 3562 + [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr, 3563 + [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3564 + [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr, 3565 + [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3566 + [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr, 3567 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3568 + [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 3569 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3570 + [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 3571 + [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr, 3572 + [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr, 3573 + [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr, 3574 + [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr, 3575 + [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr, 3576 + [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr, 3577 + [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr, 3578 + [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr, 3579 + [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr, 3580 + [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr, 3581 + [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr, 3582 + [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr, 3583 + [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr, 3584 + [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr, 3585 + [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr, 3586 + [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr, 3587 + [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr, 3588 + [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr, 3589 + [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr, 3590 + [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr, 3591 + [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr, 3592 + [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr, 3593 + [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr, 3594 + [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr, 3595 + [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr, 3596 + [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr, 3597 + [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr, 3598 + [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr, 3599 + [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr, 3600 + [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr, 3601 + [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr, 3602 + [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 3603 + [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 3604 + [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr, 3605 + [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr, 3606 + [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 3607 + [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 3608 + [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 3609 + [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 3610 + [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 3611 + [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 3612 + [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 3613 + [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 3614 + [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 3615 + [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 3616 + [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 3617 + [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 3618 + [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr, 3619 + [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr, 3620 + [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr, 3621 + [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr, 3622 + [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr, 3623 + [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr, 3624 + [GCC_QUPV3_WRAP2_IBI_CTRL_0_CLK_SRC] = &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr, 3625 + [GCC_QUPV3_WRAP2_IBI_CTRL_2_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_2_clk.clkr, 3626 + [GCC_QUPV3_WRAP2_IBI_CTRL_3_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_3_clk.clkr, 3627 + [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr, 3628 + [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr, 3629 + [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr, 3630 + [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr, 3631 + [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr, 3632 + [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr, 3633 + [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr, 3634 + [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr, 3635 + [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr, 3636 + [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr, 3637 + [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr, 3638 + [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr, 3639 + [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr, 3640 + [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr, 3641 + [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr, 3642 + [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr, 3643 + [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr, 3644 + [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr, 3645 + [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr, 3646 + [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr, 3647 + [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr, 3648 + [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr, 3649 + [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 3650 + [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 3651 + [GCC_QUPV3_WRAP_2_IBI_2_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_2_ahb_clk.clkr, 3652 + [GCC_QUPV3_WRAP_2_IBI_3_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_3_ahb_clk.clkr, 3653 + [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr, 3654 + [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr, 3655 + [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr, 3656 + [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr, 3657 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3658 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3659 + [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr, 3660 + [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3661 + [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3662 + [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, 3663 + [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr, 3664 + [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr, 3665 + [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr, 3666 + [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr, 3667 + [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr, 3668 + [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr, 3669 + [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr, 3670 + [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr, 3671 + [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr, 3672 + [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr, 3673 + [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr, 3674 + [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr, 3675 + [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr, 3676 + [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr, 3677 + [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr, 3678 + [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr, 3679 + [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr, 3680 + [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr, 3681 + [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr, 3682 + [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 3683 + [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 3684 + [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 3685 + [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 3686 + [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 3687 + [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 3688 + [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 3689 + [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 3690 + [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 3691 + [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 3692 + [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 3693 + [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr, 3694 + [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr, 3695 + [GCC_GPLL0_AO] = &gcc_gpll0_ao.clkr, 3696 + [GCC_GPLL0_OUT_EVEN_AO] = &gcc_gpll0_out_even_ao.clkr, 3697 + [GCC_GPLL1_AO] = &gcc_gpll1_ao.clkr, 3698 + [GCC_GPLL3_AO] = &gcc_gpll3_ao.clkr, 3699 + [GCC_GPLL4_AO] = &gcc_gpll4_ao.clkr, 3700 + [GCC_GPLL6_AO] = &gcc_gpll6_ao.clkr, 3701 + }; 3702 + 3703 + static const struct qcom_reset_map gcc_sm8650_resets[] = { 3704 + [GCC_CAMERA_BCR] = { 0x26000 }, 3705 + [GCC_DISPLAY_BCR] = { 0x27000 }, 3706 + [GCC_GPU_BCR] = { 0x71000 }, 3707 + [GCC_PCIE_0_BCR] = { 0x6b000 }, 3708 + [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 }, 3709 + [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 }, 3710 + [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3711 + [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 }, 3712 + [GCC_PCIE_1_BCR] = { 0x8d000 }, 3713 + [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 }, 3714 + [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 }, 3715 + [GCC_PCIE_1_PHY_BCR] = { 0x8e01c }, 3716 + [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 }, 3717 + [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3718 + [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c }, 3719 + [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 }, 3720 + [GCC_PDM_BCR] = { 0x33000 }, 3721 + [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 }, 3722 + [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 }, 3723 + [GCC_QUPV3_WRAPPER_3_BCR] = { 0x19000 }, 3724 + [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 }, 3725 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 }, 3726 + [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 }, 3727 + [GCC_SDCC2_BCR] = { 0x14000 }, 3728 + [GCC_SDCC4_BCR] = { 0x16000 }, 3729 + [GCC_UFS_PHY_BCR] = { 0x77000 }, 3730 + [GCC_USB30_PRIM_BCR] = { 0x39000 }, 3731 + [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 }, 3732 + [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 }, 3733 + [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 }, 3734 + [GCC_USB3_PHY_SEC_BCR] = { 0x5000c }, 3735 + [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 }, 3736 + [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 }, 3737 + [GCC_VIDEO_AXI0_CLK_ARES] = { 0x32018, 2 }, 3738 + [GCC_VIDEO_AXI1_CLK_ARES] = { 0x32024, 2 }, 3739 + [GCC_VIDEO_BCR] = { 0x32000 }, 3740 + }; 3741 + 3742 + static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 3743 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src), 3744 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 3745 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 3746 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 3747 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 3748 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 3749 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), 3750 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), 3751 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src), 3752 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src), 3753 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src), 3754 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src), 3755 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src), 3756 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src), 3757 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src), 3758 + DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src), 3759 + DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src), 3760 + }; 3761 + 3762 + static struct gdsc *gcc_sm8650_gdscs[] = { 3763 + [PCIE_0_GDSC] = &pcie_0_gdsc, 3764 + [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc, 3765 + [PCIE_1_GDSC] = &pcie_1_gdsc, 3766 + [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc, 3767 + [UFS_PHY_GDSC] = &ufs_phy_gdsc, 3768 + [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc, 3769 + [USB30_PRIM_GDSC] = &usb30_prim_gdsc, 3770 + [USB3_PHY_GDSC] = &usb3_phy_gdsc, 3771 + }; 3772 + 3773 + static const struct regmap_config gcc_sm8650_regmap_config = { 3774 + .reg_bits = 32, 3775 + .reg_stride = 4, 3776 + .val_bits = 32, 3777 + .max_register = 0x1f41f0, 3778 + .fast_io = true, 3779 + }; 3780 + 3781 + static const struct qcom_cc_desc gcc_sm8650_desc = { 3782 + .config = &gcc_sm8650_regmap_config, 3783 + .clks = gcc_sm8650_clocks, 3784 + .num_clks = ARRAY_SIZE(gcc_sm8650_clocks), 3785 + .resets = gcc_sm8650_resets, 3786 + .num_resets = ARRAY_SIZE(gcc_sm8650_resets), 3787 + .gdscs = gcc_sm8650_gdscs, 3788 + .num_gdscs = ARRAY_SIZE(gcc_sm8650_gdscs), 3789 + }; 3790 + 3791 + static const struct of_device_id gcc_sm8650_match_table[] = { 3792 + { .compatible = "qcom,sm8650-gcc" }, 3793 + { } 3794 + }; 3795 + MODULE_DEVICE_TABLE(of, gcc_sm8650_match_table); 3796 + 3797 + static int gcc_sm8650_probe(struct platform_device *pdev) 3798 + { 3799 + struct regmap *regmap; 3800 + int ret; 3801 + 3802 + regmap = qcom_cc_map(pdev, &gcc_sm8650_desc); 3803 + if (IS_ERR(regmap)) 3804 + return PTR_ERR(regmap); 3805 + 3806 + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 3807 + ARRAY_SIZE(gcc_dfs_clocks)); 3808 + if (ret) 3809 + return ret; 3810 + 3811 + /* Keep the critical clock always-On */ 3812 + regmap_update_bits(regmap, 0x26004, BIT(0), BIT(0)); /* gcc_camera_ahb_clk */ 3813 + regmap_update_bits(regmap, 0x26028, BIT(0), BIT(0)); /* gcc_camera_xo_clk */ 3814 + regmap_update_bits(regmap, 0x27004, BIT(0), BIT(0)); /* gcc_disp_ahb_clk */ 3815 + regmap_update_bits(regmap, 0x27018, BIT(0), BIT(0)); /* gcc_disp_xo_clk */ 3816 + regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0)); /* gcc_gpu_cfg_ahb_clk */ 3817 + regmap_update_bits(regmap, 0x32004, BIT(0), BIT(0)); /* gcc_video_ahb_clk */ 3818 + regmap_update_bits(regmap, 0x32030, BIT(0), BIT(0)); /* gcc_video_xo_clk */ 3819 + 3820 + qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true); 3821 + 3822 + /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */ 3823 + regmap_write(regmap, 0x52150, 0x0); 3824 + 3825 + return qcom_cc_really_probe(pdev, &gcc_sm8650_desc, regmap); 3826 + } 3827 + 3828 + static struct platform_driver gcc_sm8650_driver = { 3829 + .probe = gcc_sm8650_probe, 3830 + .driver = { 3831 + .name = "gcc-sm8650", 3832 + .of_match_table = gcc_sm8650_match_table, 3833 + }, 3834 + }; 3835 + 3836 + static int __init gcc_sm8650_init(void) 3837 + { 3838 + return platform_driver_register(&gcc_sm8650_driver); 3839 + } 3840 + subsys_initcall(gcc_sm8650_init); 3841 + 3842 + static void __exit gcc_sm8650_exit(void) 3843 + { 3844 + platform_driver_unregister(&gcc_sm8650_driver); 3845 + } 3846 + module_exit(gcc_sm8650_exit); 3847 + 3513 3848 MODULE_DESCRIPTION("QTI GCC SM8650 Driver"); 3514 3849 MODULE_LICENSE("GPL");