]> Git Repo - J-linux.git/commitdiff
Merge branch 'clk-qcom' into clk-next
authorStephen Boyd <[email protected]>
Wed, 30 Aug 2023 21:39:58 +0000 (14:39 -0700)
committerStephen Boyd <[email protected]>
Wed, 30 Aug 2023 21:39:58 +0000 (14:39 -0700)
* clk-qcom: (87 commits)
  clk: qcom: Fix SM_GPUCC_8450 dependencies
  clk: qcom: smd-rpm: Set XO rate and CLK_IS_CRITICAL on PCNoC
  clk: qcom: smd-rpm: Add a way to define bus clocks with rate and flags
  clk: qcom: gcc-ipq5018: change some variable static
  clk: qcom: gcc-ipq4019: add missing networking resets
  dt-bindings: clock: qcom: ipq4019: add missing networking resets
  clk: qcom: gcc-msm8917: Enable GPLL0_SLEEP_CLK_SRC
  dt-bindings: clock: gcc-msm8917: Add definition for GPLL0_SLEEP_CLK_SRC
  clk: qcom: gcc-qdu1000: Update the RCGs ops
  clk: qcom: gcc-qdu1000: Update the SDCC clock RCG ops
  clk: qcom: gcc-qdu1000: Add support for GDSCs
  clk: qcom: gcc-qdu1000: Add gcc_ddrss_ecpri_gsi_clk support
  clk: qcom: gcc-qdu1000: Register gcc_gpll1_out_even clock
  clk: qcom: gcc-qdu1000: Fix clkref clocks handling
  clk: qcom: gcc-qdu1000: Fix gcc_pcie_0_pipe_clk_src clock handling
  dt-bindings: clock: Update GCC clocks for QDU1000 and QRU1000 SoCs
  clk: qcom: gcc-sm8450: Use floor ops for SDCC RCGs
  clk: qcom: ipq5332: drop the gcc_apss_axi_clk_src clock
  clk: qcom: ipq5332: drop the mem noc clocks
  clk: qcom: gcc-msm8998: Don't check halt bit on some branch clks
  ...

19 files changed:
1  2 
drivers/clk/qcom/camcc-sc7180.c
drivers/clk/qcom/clk-smd-rpm.c
drivers/clk/qcom/dispcc-sm8450.c
drivers/clk/qcom/dispcc-sm8550.c
drivers/clk/qcom/gcc-ipq4019.c
drivers/clk/qcom/gcc-ipq5332.c
drivers/clk/qcom/gcc-mdm9615.c
drivers/clk/qcom/gcc-msm8917.c
drivers/clk/qcom/gcc-msm8998.c
drivers/clk/qcom/gcc-qdu1000.c
drivers/clk/qcom/gcc-sc7180.c
drivers/clk/qcom/gcc-sc8280xp.c
drivers/clk/qcom/gcc-sm7150.c
drivers/clk/qcom/gcc-sm8250.c
drivers/clk/qcom/gcc-sm8450.c
drivers/clk/qcom/gpucc-msm8998.c
drivers/clk/qcom/lcc-msm8960.c
drivers/clk/qcom/mmcc-msm8974.c
drivers/clk/qcom/mmcc-msm8998.c

index cbffc44c4d322aa5df9c6cc1df79a734fd97e97c,6f56bdbf020473c9281952f853d2686229e1f492..0a9a6df3ddaceb7eebf26fecf88eabcc6947e4f1
@@@ -7,7 -7,7 +7,7 @@@
  #include <linux/err.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
 +#include <linux/platform_device.h>
  #include <linux/pm_clock.h>
  #include <linux/pm_runtime.h>
  #include <linux/regmap.h>
@@@ -1664,7 -1664,7 +1664,7 @@@ static int cam_cc_sc7180_probe(struct p
                return ret;
        }
  
-       ret = pm_runtime_get(&pdev->dev);
+       ret = pm_runtime_resume_and_get(&pdev->dev);
        if (ret)
                return ret;
  
index 4bcf2e9498774d2e4632863f18baee116020ab51,c8d59e0f25f2b70122a09c96197efe8054180bae..0191fc0dd7dac1f87a9c44fcb6b9e59850aee57a
  #include <linux/module.h>
  #include <linux/mutex.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/platform_device.h>
  #include <linux/soc/qcom/smd-rpm.h>
  
  #include <dt-bindings/clock/qcom,rpmcc.h>
  
- #define QCOM_RPM_KEY_SOFTWARE_ENABLE                  0x6e657773
- #define QCOM_RPM_KEY_PIN_CTRL_CLK_BUFFER_ENABLE_KEY   0x62636370
- #define QCOM_RPM_SMD_KEY_RATE                         0x007a484b
- #define QCOM_RPM_SMD_KEY_ENABLE                               0x62616e45
- #define QCOM_RPM_SMD_KEY_STATE                                0x54415453
- #define QCOM_RPM_SCALING_ENABLE_ID                    0x2
  #define __DEFINE_CLK_SMD_RPM_PREFIX(_prefix, _name, _active,                \
-                                   type, r_id, key)                          \
+                                   type, r_id, key, ao_rate, ao_flags)                       \
        static struct clk_smd_rpm clk_smd_rpm_##_prefix##_active;             \
        static struct clk_smd_rpm clk_smd_rpm_##_prefix##_name = {            \
                .rpm_res_type = (type),                                       \
@@@ -49,7 -43,7 +42,7 @@@
                .active_only = true,                                          \
                .rpm_key = (key),                                             \
                .peer = &clk_smd_rpm_##_prefix##_name,                        \
-               .rate = INT_MAX,                                              \
+               .rate = (ao_rate),                                            \
                .hw.init = &(struct clk_init_data){                           \
                        .ops = &clk_smd_rpm_ops,                              \
                        .name = #_active,                                     \
                                        .name = "xo_board",                   \
                        },                                                    \
                        .num_parents = 1,                                     \
+                       .flags = (ao_flags),                                  \
                },                                                            \
        }
  
- #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key)               \
+ #define __DEFINE_CLK_SMD_RPM(_name, _active, type, r_id, key,\
+                            ao_rate, ao_flags)                               \
        __DEFINE_CLK_SMD_RPM_PREFIX(/* empty */, _name, _active,              \
-                                   type, r_id, key)
+                                   type, r_id, key, ao_rate, ao_flags)
  
  #define __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(_prefix, _name, _active,\
                                           type, r_id, r, key, ao_flags)      \
  
  #define DEFINE_CLK_SMD_RPM(_name, type, r_id)                               \
                __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk,              \
-               type, r_id, QCOM_RPM_SMD_KEY_RATE)
+               type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0)
  
  #define DEFINE_CLK_SMD_RPM_BUS(_name, r_id)                                 \
                __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_,                    \
                _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id,       \
-               QCOM_RPM_SMD_KEY_RATE)
+               QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0)
+ #define DEFINE_CLK_SMD_RPM_BUS_A(_name, r_id, ao_rate, ao_flags)                    \
+               __DEFINE_CLK_SMD_RPM_PREFIX(bus_##r_id##_,                    \
+               _name##_clk, _name##_a_clk, QCOM_SMD_RPM_BUS_CLK, r_id,       \
+               QCOM_RPM_SMD_KEY_RATE, ao_rate, ao_flags)
  
  #define DEFINE_CLK_SMD_RPM_CLK_SRC(_name, type, r_id)                       \
                __DEFINE_CLK_SMD_RPM(                                         \
                _name##_clk_src, _name##_a_clk_src,                           \
-               type, r_id, QCOM_RPM_SMD_KEY_RATE)
+               type, r_id, QCOM_RPM_SMD_KEY_RATE, INT_MAX, 0)
  
  #define DEFINE_CLK_SMD_RPM_BRANCH(_name, type, r_id, r)                             \
                __DEFINE_CLK_SMD_RPM_BRANCH_PREFIX(branch_,                   \
  
  #define DEFINE_CLK_SMD_RPM_QDSS(_name, type, r_id)                          \
                __DEFINE_CLK_SMD_RPM(_name##_clk, _name##_a_clk,              \
-               type, r_id, QCOM_RPM_SMD_KEY_STATE)
+               type, r_id, QCOM_RPM_SMD_KEY_STATE, INT_MAX, 0)
  
  #define DEFINE_CLK_SMD_RPM_XO_BUFFER(_name, r_id, r)                        \
                __DEFINE_CLK_SMD_RPM_BRANCH(_name, _name##_a,                 \
@@@ -170,21 -171,23 +170,23 @@@ struct clk_smd_rpm 
        unsigned long rate;
  };
  
- struct clk_smd_rpm_req {
-       __le32 key;
-       __le32 nbytes;
-       __le32 value;
- };
  struct rpm_smd_clk_desc {
        struct clk_smd_rpm **clks;
        size_t num_clks;
+       /*
+        * Interconnect clocks are managed by the icc framework, this driver
+        * only kickstarts them so that they don't get gated between
+        * clk_smd_rpm_enable_scaling() and interconnect driver initialization.
+        */
+       const struct clk_smd_rpm ** const icc_clks;
+       size_t num_icc_clks;
        bool scaling_before_handover;
  };
  
  static DEFINE_MUTEX(rpm_smd_clk_lock);
  
- static int clk_smd_rpm_handoff(struct clk_smd_rpm *r)
+ static int clk_smd_rpm_handoff(const struct clk_smd_rpm *r)
  {
        int ret;
        struct clk_smd_rpm_req req = {
@@@ -453,7 -456,7 +455,7 @@@ DEFINE_CLK_SMD_RPM_BRANCH(aggre2_noc, Q
  DEFINE_CLK_SMD_RPM(aggre1_noc, QCOM_SMD_RPM_AGGR_CLK, 1);
  DEFINE_CLK_SMD_RPM(aggre2_noc, QCOM_SMD_RPM_AGGR_CLK, 2);
  
- DEFINE_CLK_SMD_RPM_BUS(pcnoc, 0);
+ DEFINE_CLK_SMD_RPM_BUS_A(pcnoc, 0, 19200000, CLK_IS_CRITICAL);
  DEFINE_CLK_SMD_RPM_BUS(snoc, 1);
  DEFINE_CLK_SMD_RPM_BUS(sysmmnoc, 2);
  DEFINE_CLK_SMD_RPM_BUS(cnoc, 2);
@@@ -510,13 -513,69 +512,69 @@@ DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk1, 
  DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk2, 12, 19200000);
  DEFINE_CLK_SMD_RPM_XO_BUFFER(div_clk3, 13, 19200000);
  
+ static const struct clk_smd_rpm *bimc_pcnoc_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_0_pcnoc_clk,
+ };
+ static const struct clk_smd_rpm *bimc_pcnoc_snoc_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_0_pcnoc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+ };
+ static const struct clk_smd_rpm *bimc_pcnoc_snoc_smmnoc_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_0_pcnoc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+       &clk_smd_rpm_bus_2_sysmmnoc_clk,
+ };
+ static const struct clk_smd_rpm *bimc_pcnoc_snoc_cnoc_ocmem_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_0_pcnoc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+       &clk_smd_rpm_bus_2_cnoc_clk,
+       &clk_smd_rpm_ocmemgx_clk,
+ };
+ static const struct clk_smd_rpm *msm8996_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_branch_aggre1_noc_clk,
+       &clk_smd_rpm_branch_aggre2_noc_clk,
+       &clk_smd_rpm_bus_0_pcnoc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+       &clk_smd_rpm_bus_2_cnoc_clk,
+       &clk_smd_rpm_mmssnoc_axi_rpm_clk,
+ };
+ static const struct clk_smd_rpm *msm8998_icc_clks[] = {
+       &clk_smd_rpm_aggre1_noc_clk,
+       &clk_smd_rpm_aggre2_noc_clk,
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+       &clk_smd_rpm_bus_2_cnoc_clk,
+       &clk_smd_rpm_mmssnoc_axi_rpm_clk,
+ };
+ static const struct clk_smd_rpm *sdm660_icc_clks[] = {
+       &clk_smd_rpm_aggre2_noc_clk,
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_1_snoc_clk,
+       &clk_smd_rpm_bus_2_cnoc_clk,
+       &clk_smd_rpm_mmssnoc_axi_rpm_clk,
+ };
+ static const struct clk_smd_rpm *sm_qnoc_icc_clks[] = {
+       &clk_smd_rpm_bimc_clk,
+       &clk_smd_rpm_bus_1_cnoc_clk,
+       &clk_smd_rpm_mmnrt_clk,
+       &clk_smd_rpm_mmrt_clk,
+       &clk_smd_rpm_qup_clk,
+       &clk_smd_rpm_bus_2_snoc_clk,
+ };
  static struct clk_smd_rpm *msm8909_clks[] = {
-       [RPM_SMD_PCNOC_CLK]             = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK]           = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QPIC_CLK]              = &clk_smd_rpm_qpic_clk,
        [RPM_SMD_QPIC_CLK_A]            = &clk_smd_rpm_qpic_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
  static const struct rpm_smd_clk_desc rpm_clk_msm8909 = {
        .clks = msm8909_clks,
        .num_clks = ARRAY_SIZE(msm8909_clks),
+       .icc_clks = bimc_pcnoc_snoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8916_clks[] = {
-       [RPM_SMD_PCNOC_CLK]             = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK]           = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK]            = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1]               = &clk_smd_rpm_bb_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8916 = {
        .clks = msm8916_clks,
        .num_clks = ARRAY_SIZE(msm8916_clks),
+       .icc_clks = bimc_pcnoc_snoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8917_clks[] = {
        [RPM_SMD_XO_CLK_SRC]            = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC]          = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PNOC_CLK]              = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PNOC_A_CLK]            = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_BIMC_GPU_CLK]          = &clk_smd_rpm_bimc_gpu_clk,
        [RPM_SMD_BIMC_GPU_A_CLK]        = &clk_smd_rpm_bimc_gpu_a_clk,
-       [RPM_SMD_SYSMMNOC_CLK]          = &clk_smd_rpm_bus_2_sysmmnoc_clk,
-       [RPM_SMD_SYSMMNOC_A_CLK]        = &clk_smd_rpm_bus_2_sysmmnoc_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK]            = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1]               = &clk_smd_rpm_bb_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8917 = {
        .clks = msm8917_clks,
        .num_clks = ARRAY_SIZE(msm8917_clks),
+       .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8936_clks[] = {
        [RPM_SMD_XO_CLK_SRC]            = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC]          = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PCNOC_CLK]             = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK]           = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_SYSMMNOC_CLK]          = &clk_smd_rpm_bus_2_sysmmnoc_clk,
-       [RPM_SMD_SYSMMNOC_A_CLK]        = &clk_smd_rpm_bus_2_sysmmnoc_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK]            = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1]               = &clk_smd_rpm_bb_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8936 = {
                .clks = msm8936_clks,
                .num_clks = ARRAY_SIZE(msm8936_clks),
+               .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks,
+               .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8974_clks[] = {
        [RPM_SMD_XO_CLK_SRC]            = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC]          = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PNOC_CLK]              = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PNOC_A_CLK]            = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_CNOC_CLK]              = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK]            = &clk_smd_rpm_bus_2_cnoc_a_clk,
        [RPM_SMD_MMSSNOC_AHB_CLK]       = &clk_smd_rpm_bus_3_mmssnoc_ahb_clk,
        [RPM_SMD_MMSSNOC_AHB_A_CLK]     = &clk_smd_rpm_bus_3_mmssnoc_ahb_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
        [RPM_SMD_GFX3D_CLK_SRC]         = &clk_smd_rpm_gfx3d_clk_src,
        [RPM_SMD_GFX3D_A_CLK_SRC]       = &clk_smd_rpm_gfx3d_a_clk_src,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_OCMEMGX_CLK]           = &clk_smd_rpm_ocmemgx_clk,
-       [RPM_SMD_OCMEMGX_A_CLK]         = &clk_smd_rpm_ocmemgx_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK]            = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_CXO_D0]                = &clk_smd_rpm_cxo_d0,
  static const struct rpm_smd_clk_desc rpm_clk_msm8974 = {
        .clks = msm8974_clks,
        .num_clks = ARRAY_SIZE(msm8974_clks),
+       .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks),
        .scaling_before_handover = true,
  };
  
  static struct clk_smd_rpm *msm8976_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_SYSMMNOC_CLK]  = &clk_smd_rpm_bus_2_sysmmnoc_clk,
-       [RPM_SMD_SYSMMNOC_A_CLK] = &clk_smd_rpm_bus_2_sysmmnoc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1,
  
  static const struct rpm_smd_clk_desc rpm_clk_msm8976 = {
        .clks = msm8976_clks,
-       .num_clks = ARRAY_SIZE(msm8976_clks),
+       .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8992_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_OCMEMGX_CLK] = &clk_smd_rpm_ocmemgx_clk,
-       [RPM_SMD_OCMEMGX_A_CLK] = &clk_smd_rpm_ocmemgx_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk,
        [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src,
        [RPM_SMD_GFX3D_A_CLK_SRC] = &clk_smd_rpm_gfx3d_a_clk_src,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
        [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1,
        [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a,
        [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin,
  static const struct rpm_smd_clk_desc rpm_clk_msm8992 = {
        .clks = msm8992_clks,
        .num_clks = ARRAY_SIZE(msm8992_clks),
+       .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8994_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_OCMEMGX_CLK] = &clk_smd_rpm_ocmemgx_clk,
-       [RPM_SMD_OCMEMGX_A_CLK] = &clk_smd_rpm_ocmemgx_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk,
        [RPM_SMD_GFX3D_CLK_SRC] = &clk_smd_rpm_gfx3d_clk_src,
        [RPM_SMD_GFX3D_A_CLK_SRC] = &clk_smd_rpm_gfx3d_a_clk_src,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
        [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1,
        [RPM_SMD_BB_CLK1_A] = &clk_smd_rpm_bb_clk1_a,
        [RPM_SMD_BB_CLK1_PIN] = &clk_smd_rpm_bb_clk1_pin,
  static const struct rpm_smd_clk_desc rpm_clk_msm8994 = {
        .clks = msm8994_clks,
        .num_clks = ARRAY_SIZE(msm8994_clks),
+       .icc_clks = bimc_pcnoc_snoc_cnoc_ocmem_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_cnoc_ocmem_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8996_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_MMAXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk,
-       [RPM_SMD_MMAXI_A_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
        [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk,
        [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk,
-       [RPM_SMD_AGGR1_NOC_CLK] = &clk_smd_rpm_branch_aggre1_noc_clk,
-       [RPM_SMD_AGGR1_NOC_A_CLK] = &clk_smd_rpm_branch_aggre1_noc_a_clk,
-       [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_branch_aggre2_noc_clk,
-       [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_branch_aggre2_noc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1] = &clk_smd_rpm_bb_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8996 = {
        .clks = msm8996_clks,
        .num_clks = ARRAY_SIZE(msm8996_clks),
+       .icc_clks = msm8996_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(msm8996_icc_clks),
  };
  
  static struct clk_smd_rpm *qcs404_clks[] = {
  static const struct rpm_smd_clk_desc rpm_clk_qcs404 = {
        .clks = qcs404_clks,
        .num_clks = ARRAY_SIZE(qcs404_clks),
+       .icc_clks = bimc_pcnoc_snoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8998_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_PCNOC_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
        [RPM_SMD_PCNOC_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk,
        [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk,
        [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk,
        [RPM_SMD_DIV_CLK1] = &clk_smd_rpm_div_clk1,
        [RPM_SMD_LN_BB_CLK2_A_PIN] = &clk_smd_rpm_ln_bb_clk2_a_pin,
        [RPM_SMD_LN_BB_CLK3_PIN] = &clk_smd_rpm_ln_bb_clk3_pin,
        [RPM_SMD_LN_BB_CLK3_A_PIN] = &clk_smd_rpm_ln_bb_clk3_a_pin,
-       [RPM_SMD_MMAXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk,
-       [RPM_SMD_MMAXI_A_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk,
-       [RPM_SMD_AGGR1_NOC_CLK] = &clk_smd_rpm_aggre1_noc_clk,
-       [RPM_SMD_AGGR1_NOC_A_CLK] = &clk_smd_rpm_aggre1_noc_a_clk,
-       [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_aggre2_noc_clk,
-       [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_aggre2_noc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8998 = {
        .clks = msm8998_clks,
        .num_clks = ARRAY_SIZE(msm8998_clks),
+       .icc_clks = msm8998_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(msm8998_icc_clks),
  };
  
  static struct clk_smd_rpm *sdm660_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_2_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_2_cnoc_a_clk,
        [RPM_SMD_CNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_pcnoc_clk,
        [RPM_SMD_CNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
-       [RPM_SMD_MMSSNOC_AXI_CLK] = &clk_smd_rpm_mmssnoc_axi_rpm_clk,
-       [RPM_SMD_MMSSNOC_AXI_CLK_A] = &clk_smd_rpm_mmssnoc_axi_rpm_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
        [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk,
        [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk,
-       [RPM_SMD_AGGR2_NOC_CLK] = &clk_smd_rpm_aggre2_noc_clk,
-       [RPM_SMD_AGGR2_NOC_A_CLK] = &clk_smd_rpm_aggre2_noc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_sdm660 = {
        .clks = sdm660_clks,
        .num_clks = ARRAY_SIZE(sdm660_clks),
+       .icc_clks = sdm660_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(sdm660_icc_clks),
  };
  
  static struct clk_smd_rpm *mdm9607_clks[] = {
        [RPM_SMD_XO_CLK_SRC]            = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC]          = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PCNOC_CLK]             = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK]           = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QPIC_CLK]              = &clk_smd_rpm_qpic_clk,
        [RPM_SMD_QPIC_CLK_A]            = &clk_smd_rpm_qpic_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
  static const struct rpm_smd_clk_desc rpm_clk_mdm9607 = {
        .clks = mdm9607_clks,
        .num_clks = ARRAY_SIZE(mdm9607_clks),
+       .icc_clks = bimc_pcnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_icc_clks),
  };
  
  static struct clk_smd_rpm *msm8953_clks[] = {
        [RPM_SMD_XO_CLK_SRC]            = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC]          = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_PCNOC_CLK]             = &clk_smd_rpm_bus_0_pcnoc_clk,
-       [RPM_SMD_PCNOC_A_CLK]           = &clk_smd_rpm_bus_0_pcnoc_a_clk,
-       [RPM_SMD_SNOC_CLK]              = &clk_smd_rpm_bus_1_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK]            = &clk_smd_rpm_bus_1_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK]              = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK]            = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_IPA_CLK]               = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK]             = &clk_smd_rpm_ipa_a_clk,
-       [RPM_SMD_SYSMMNOC_CLK]          = &clk_smd_rpm_bus_2_sysmmnoc_clk,
-       [RPM_SMD_SYSMMNOC_A_CLK]        = &clk_smd_rpm_bus_2_sysmmnoc_a_clk,
        [RPM_SMD_QDSS_CLK]              = &clk_smd_rpm_qdss_clk,
        [RPM_SMD_QDSS_A_CLK]            = &clk_smd_rpm_qdss_a_clk,
        [RPM_SMD_BB_CLK1]               = &clk_smd_rpm_bb_clk1,
  static const struct rpm_smd_clk_desc rpm_clk_msm8953 = {
        .clks = msm8953_clks,
        .num_clks = ARRAY_SIZE(msm8953_clks),
+       .icc_clks = bimc_pcnoc_snoc_smmnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(bimc_pcnoc_snoc_smmnoc_icc_clks),
  };
  
  static struct clk_smd_rpm *sm6125_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk,
        [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1,
        [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a,
        [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2,
        [RPM_SMD_RF_CLK2_A] = &clk_smd_rpm_rf_clk2_a,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
        [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk,
        [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a,
        [RPM_SMD_LN_BB_CLK3] = &clk_smd_rpm_ln_bb_clk3,
        [RPM_SMD_LN_BB_CLK3_A] = &clk_smd_rpm_ln_bb_clk3_a,
-       [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk,
-       [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk,
-       [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk,
-       [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk,
-       [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk,
-       [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk,
        [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk,
        [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk,
        [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk,
  static const struct rpm_smd_clk_desc rpm_clk_sm6125 = {
        .clks = sm6125_clks,
        .num_clks = ARRAY_SIZE(sm6125_clks),
+       .icc_clks = sm_qnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks)
  };
  
  /* SM6115 */
  static struct clk_smd_rpm *sm6115_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk,
        [RPM_SMD_RF_CLK1] = &clk_smd_rpm_rf_clk1,
        [RPM_SMD_RF_CLK1_A] = &clk_smd_rpm_rf_clk1_a,
        [RPM_SMD_RF_CLK2] = &clk_smd_rpm_rf_clk2,
        [RPM_SMD_RF_CLK2_A] = &clk_smd_rpm_rf_clk2_a,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
        [RPM_SMD_CE1_CLK] = &clk_smd_rpm_ce1_clk,
        [RPM_SMD_CE1_A_CLK] = &clk_smd_rpm_ce1_a_clk,
-       [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk,
-       [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk,
-       [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk,
-       [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk,
-       [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk,
-       [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk,
        [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk,
        [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk,
        [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk,
  static const struct rpm_smd_clk_desc rpm_clk_sm6115 = {
        .clks = sm6115_clks,
        .num_clks = ARRAY_SIZE(sm6115_clks),
+       .icc_clks = sm_qnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks)
  };
  
  static struct clk_smd_rpm *sm6375_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
-       [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk,
-       [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk,
-       [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk,
-       [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk,
-       [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk,
-       [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk,
        [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk,
        [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk,
        [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk,
  static const struct rpm_smd_clk_desc rpm_clk_sm6375 = {
        .clks = sm6375_clks,
        .num_clks = ARRAY_SIZE(sm6375_clks),
+       .icc_clks = sm_qnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks)
  };
  
  static struct clk_smd_rpm *qcm2290_clks[] = {
        [RPM_SMD_XO_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo,
        [RPM_SMD_XO_A_CLK_SRC] = &clk_smd_rpm_branch_bi_tcxo_a,
-       [RPM_SMD_SNOC_CLK] = &clk_smd_rpm_bus_2_snoc_clk,
-       [RPM_SMD_SNOC_A_CLK] = &clk_smd_rpm_bus_2_snoc_a_clk,
-       [RPM_SMD_BIMC_CLK] = &clk_smd_rpm_bimc_clk,
-       [RPM_SMD_BIMC_A_CLK] = &clk_smd_rpm_bimc_a_clk,
        [RPM_SMD_QDSS_CLK] = &clk_smd_rpm_branch_qdss_clk,
        [RPM_SMD_QDSS_A_CLK] = &clk_smd_rpm_branch_qdss_a_clk,
        [RPM_SMD_LN_BB_CLK2] = &clk_smd_rpm_ln_bb_clk2,
        [RPM_SMD_LN_BB_CLK2_A] = &clk_smd_rpm_ln_bb_clk2_a,
        [RPM_SMD_RF_CLK3] = &clk_smd_rpm_38m4_rf_clk3,
        [RPM_SMD_RF_CLK3_A] = &clk_smd_rpm_38m4_rf_clk3_a,
-       [RPM_SMD_CNOC_CLK] = &clk_smd_rpm_bus_1_cnoc_clk,
-       [RPM_SMD_CNOC_A_CLK] = &clk_smd_rpm_bus_1_cnoc_a_clk,
        [RPM_SMD_IPA_CLK] = &clk_smd_rpm_ipa_clk,
        [RPM_SMD_IPA_A_CLK] = &clk_smd_rpm_ipa_a_clk,
-       [RPM_SMD_QUP_CLK] = &clk_smd_rpm_qup_clk,
-       [RPM_SMD_QUP_A_CLK] = &clk_smd_rpm_qup_a_clk,
-       [RPM_SMD_MMRT_CLK] = &clk_smd_rpm_mmrt_clk,
-       [RPM_SMD_MMRT_A_CLK] = &clk_smd_rpm_mmrt_a_clk,
-       [RPM_SMD_MMNRT_CLK] = &clk_smd_rpm_mmnrt_clk,
-       [RPM_SMD_MMNRT_A_CLK] = &clk_smd_rpm_mmnrt_a_clk,
        [RPM_SMD_SNOC_PERIPH_CLK] = &clk_smd_rpm_bus_0_snoc_periph_clk,
        [RPM_SMD_SNOC_PERIPH_A_CLK] = &clk_smd_rpm_bus_0_snoc_periph_a_clk,
        [RPM_SMD_SNOC_LPASS_CLK] = &clk_smd_rpm_bus_5_snoc_lpass_clk,
  static const struct rpm_smd_clk_desc rpm_clk_qcm2290 = {
        .clks = qcm2290_clks,
        .num_clks = ARRAY_SIZE(qcm2290_clks),
+       .icc_clks = sm_qnoc_icc_clks,
+       .num_icc_clks = ARRAY_SIZE(sm_qnoc_icc_clks)
  };
  
  static const struct of_device_id rpm_smd_clk_match_table[] = {
@@@ -1301,12 -1239,20 +1238,20 @@@ static struct clk_hw *qcom_smdrpm_clk_h
        return desc->clks[idx] ? &desc->clks[idx]->hw : ERR_PTR(-ENOENT);
  }
  
+ static void rpm_smd_unregister_icc(void *data)
+ {
+       struct platform_device *icc_pdev = data;
+       platform_device_unregister(icc_pdev);
+ }
  static int rpm_smd_clk_probe(struct platform_device *pdev)
  {
        int ret;
        size_t num_clks, i;
        struct clk_smd_rpm **rpm_smd_clks;
        const struct rpm_smd_clk_desc *desc;
+       struct platform_device *icc_pdev;
  
        rpmcc_smd_rpm = dev_get_drvdata(pdev->dev.parent);
        if (!rpmcc_smd_rpm) {
                        goto err;
        }
  
+       for (i = 0; i < desc->num_icc_clks; i++) {
+               if (!desc->icc_clks[i])
+                       continue;
+               ret = clk_smd_rpm_handoff(desc->icc_clks[i]);
+               if (ret)
+                       goto err;
+       }
        if (!desc->scaling_before_handover) {
                ret = clk_smd_rpm_enable_scaling();
                if (ret)
        if (ret)
                goto err;
  
+       icc_pdev = platform_device_register_data(pdev->dev.parent,
+                                                "icc_smd_rpm", -1, NULL, 0);
+       if (IS_ERR(icc_pdev)) {
+               dev_err(&pdev->dev, "Failed to register icc_smd_rpm device: %pE\n",
+                       icc_pdev);
+               /* No need to unregister clocks because of this */
+       } else {
+               ret = devm_add_action_or_reset(&pdev->dev, rpm_smd_unregister_icc,
+                                              icc_pdev);
+               if (ret)
+                       goto err;
+       }
        return 0;
  err:
        dev_err(&pdev->dev, "Error registering SMD clock driver (%d)\n", ret);
index 3643af36d7551ee3e71aa37f98175cef6e8e9fde,84db4ff5485aa4a4087bb372d8ec762fca96a127..2c4aecd75186b0d6e777bd280204076d4af1c843
@@@ -9,8 -9,8 +9,8 @@@
  #include <linux/err.h>
  #include <linux/kernel.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
  #include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  #include <linux/pm_runtime.h>
  
@@@ -1776,8 -1776,10 +1776,10 @@@ static int disp_cc_sm8450_probe(struct 
                return ret;
  
        regmap = qcom_cc_map(pdev, &disp_cc_sm8450_desc);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
+       if (IS_ERR(regmap)) {
+               ret = PTR_ERR(regmap);
+               goto err_put_rpm;
+       }
  
        clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
        clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
        regmap_update_bits(regmap, 0xe05c, BIT(0), BIT(0));
  
        ret = qcom_cc_really_probe(pdev, &disp_cc_sm8450_desc, regmap);
+       if (ret)
+               goto err_put_rpm;
  
        pm_runtime_put(&pdev->dev);
  
+       return 0;
+ err_put_rpm:
+       pm_runtime_put_sync(&pdev->dev);
        return ret;
  }
  
index 2a74be35452f4ac83b701328fdbb8edc73dcadab,b2fae9001ff23be5f366d2ed6d79b8a6cb0a7a2d..aefa19f3c2c514df404c1f6469e8db7d4a48d940
@@@ -9,8 -9,8 +9,8 @@@
  #include <linux/err.h>
  #include <linux/kernel.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
  #include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  #include <linux/pm_runtime.h>
  
@@@ -1761,8 -1761,10 +1761,10 @@@ static int disp_cc_sm8550_probe(struct 
                return ret;
  
        regmap = qcom_cc_map(pdev, &disp_cc_sm8550_desc);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
+       if (IS_ERR(regmap)) {
+               ret = PTR_ERR(regmap);
+               goto err_put_rpm;
+       }
  
        clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
        clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
        regmap_update_bits(regmap, 0xe054, BIT(0), BIT(0));
  
        ret = qcom_cc_really_probe(pdev, &disp_cc_sm8550_desc, regmap);
+       if (ret)
+               goto err_put_rpm;
  
        pm_runtime_put(&pdev->dev);
  
+       return 0;
+ err_put_rpm:
+       pm_runtime_put_sync(&pdev->dev);
        return ret;
  }
  
index 9c75682a391504672894811b6dfb25a872b496b6,b1a8af01ef7da49a6dded1c38c50246eb76d01b8..d38628b5226898b6a556a1fe16806cb79c4735da
@@@ -8,6 -8,7 +8,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -1685,6 -1686,12 +1685,12 @@@ static const struct qcom_reset_map gcc_
        [GCC_TCSR_BCR] = {0x22000, 0},
        [GCC_MPM_BCR] = {0x24000, 0},
        [GCC_SPDM_BCR] = {0x25000, 0},
+       [ESS_MAC1_ARES] = {0x1200C, 0},
+       [ESS_MAC2_ARES] = {0x1200C, 1},
+       [ESS_MAC3_ARES] = {0x1200C, 2},
+       [ESS_MAC4_ARES] = {0x1200C, 3},
+       [ESS_MAC5_ARES] = {0x1200C, 4},
+       [ESS_PSGMII_ARES] = {0x1200C, 5},
  };
  
  static const struct regmap_config gcc_ipq4019_regmap_config = {
index ce6dc6e99a29fdfd0a07b8dd548b168031eb2b0c,40d8e8d5956f0a4c19f0c1501e983b658f4a7028..b02026f8549b2f3459b09aedda520bc0fbbe5606
@@@ -4,9 -4,8 +4,9 @@@
   */
  
  #include <linux/clk-provider.h>
 +#include <linux/mod_devicetable.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,ipq5332-gcc.h>
@@@ -225,38 -224,20 +225,20 @@@ static const struct clk_parent_data gcc
  };
  
  static const struct parent_map gcc_parent_map_5[] = {
-       { P_XO, 0 },
-       { P_GPLL0_OUT_MAIN, 1 },
-       { P_GPLL2_OUT_AUX, 2 },
-       { P_GPLL4_OUT_AUX, 3 },
-       { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 },
-       { P_GPLL0_OUT_AUX, 5 },
- };
- static const struct clk_parent_data gcc_parent_data_5[] = {
-       { .index = DT_XO },
-       { .hw = &gpll0.clkr.hw },
-       { .hw = &gpll2.clkr.hw },
-       { .hw = &gpll4.clkr.hw },
-       { .hw = &gpll0_div2.hw },
-       { .hw = &gpll0.clkr.hw },
- };
- static const struct parent_map gcc_parent_map_6[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_MAIN, 1 },
        { P_GPLL0_OUT_AUX, 2 },
        { P_SLEEP_CLK, 6 },
  };
  
- static const struct clk_parent_data gcc_parent_data_6[] = {
+ static const struct clk_parent_data gcc_parent_data_5[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .hw = &gpll0.clkr.hw },
        { .index = DT_SLEEP_CLK },
  };
  
- static const struct parent_map gcc_parent_map_7[] = {
+ static const struct parent_map gcc_parent_map_6[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_MAIN, 1 },
        { P_GPLL2_OUT_AUX, 2 },
        { P_SLEEP_CLK, 6 },
  };
  
- static const struct clk_parent_data gcc_parent_data_7[] = {
+ static const struct clk_parent_data gcc_parent_data_6[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .hw = &gpll2.clkr.hw },
        { .index = DT_SLEEP_CLK },
  };
  
- static const struct parent_map gcc_parent_map_8[] = {
+ static const struct parent_map gcc_parent_map_7[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_MAIN, 1 },
        { P_GPLL2_OUT_AUX, 2 },
  };
  
- static const struct clk_parent_data gcc_parent_data_8[] = {
+ static const struct clk_parent_data gcc_parent_data_7[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .hw = &gpll2.clkr.hw },
  };
  
- static const struct parent_map gcc_parent_map_9[] = {
+ static const struct parent_map gcc_parent_map_8[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_MAIN, 1 },
        { P_GPLL2_OUT_MAIN, 2 },
        { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 },
  };
  
- static const struct clk_parent_data gcc_parent_data_9[] = {
+ static const struct clk_parent_data gcc_parent_data_8[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .hw = &gpll2.clkr.hw },
        { .hw = &gpll0_div2.hw },
  };
  
- static const struct parent_map gcc_parent_map_10[] = {
+ static const struct parent_map gcc_parent_map_9[] = {
        { P_SLEEP_CLK, 6 },
  };
  
- static const struct clk_parent_data gcc_parent_data_10[] = {
+ static const struct clk_parent_data gcc_parent_data_9[] = {
        { .index = DT_SLEEP_CLK },
  };
  
- static const struct parent_map gcc_parent_map_11[] = {
+ static const struct parent_map gcc_parent_map_10[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_MAIN, 1 },
        { P_GPLL4_OUT_MAIN, 2 },
        { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 3 },
  };
  
- static const struct clk_parent_data gcc_parent_data_11[] = {
+ static const struct clk_parent_data gcc_parent_data_10[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .hw = &gpll4.clkr.hw },
        { .hw = &gpll0_div2.hw },
  };
  
- static const struct parent_map gcc_parent_map_12[] = {
+ static const struct parent_map gcc_parent_map_11[] = {
        { P_XO, 0 },
        { P_GPLL0_OUT_AUX, 2 },
        { P_SLEEP_CLK, 6 },
  };
  
- static const struct clk_parent_data gcc_parent_data_12[] = {
+ static const struct clk_parent_data gcc_parent_data_11[] = {
        { .index = DT_XO },
        { .hw = &gpll0.clkr.hw },
        { .index = DT_SLEEP_CLK },
  };
  
- static const struct parent_map gcc_parent_map_13[] = {
+ static const struct parent_map gcc_parent_map_12[] = {
        { P_XO, 0 },
        { P_GPLL4_OUT_AUX, 1 },
        { P_GPLL0_OUT_MAIN, 3 },
        { P_GCC_GPLL0_OUT_MAIN_DIV_CLK_SRC, 4 },
  };
  
- static const struct clk_parent_data gcc_parent_data_13[] = {
+ static const struct clk_parent_data gcc_parent_data_12[] = {
        { .index = DT_XO },
        { .hw = &gpll4.clkr.hw },
        { .hw = &gpll0.clkr.hw },
@@@ -372,20 -353,6 +354,6 @@@ static const struct freq_tbl ftbl_gcc_a
        { }
  };
  
- static struct clk_rcg2 gcc_apss_axi_clk_src = {
-       .cmd_rcgr = 0x24004,
-       .mnd_width = 0,
-       .hid_width = 5,
-       .parent_map = gcc_parent_map_5,
-       .freq_tbl = ftbl_gcc_apss_axi_clk_src,
-       .clkr.hw.init = &(const struct clk_init_data) {
-               .name = "gcc_apss_axi_clk_src",
-               .parent_data = gcc_parent_data_5,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_5),
-               .ops = &clk_rcg2_ops,
-       },
- };
  static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = {
        F(960000, P_XO, 1, 1, 25),
        F(4800000, P_XO, 5, 0, 0),
@@@ -734,12 -701,12 +702,12 @@@ static struct clk_rcg2 gcc_pcie_aux_clk
        .cmd_rcgr = 0x28004,
        .mnd_width = 16,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_6,
+       .parent_map = gcc_parent_map_5,
        .freq_tbl = ftbl_gcc_pcie_aux_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_pcie_aux_clk_src",
-               .parent_data = gcc_parent_data_6,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_6),
+               .parent_data = gcc_parent_data_5,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_5),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -811,12 -778,12 +779,12 @@@ static struct clk_rcg2 gcc_q6_axim_clk_
        .cmd_rcgr = 0x25004,
        .mnd_width = 0,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_7,
+       .parent_map = gcc_parent_map_6,
        .freq_tbl = ftbl_gcc_apss_axi_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_q6_axim_clk_src",
-               .parent_data = gcc_parent_data_7,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_7),
+               .parent_data = gcc_parent_data_6,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_6),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -932,12 -899,12 +900,12 @@@ static struct clk_rcg2 gcc_qpic_io_macr
        .cmd_rcgr = 0x32004,
        .mnd_width = 0,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_8,
+       .parent_map = gcc_parent_map_7,
        .freq_tbl = ftbl_gcc_qpic_io_macro_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_qpic_io_macro_clk_src",
-               .parent_data = gcc_parent_data_8,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_8),
+               .parent_data = gcc_parent_data_7,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_7),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -958,12 -925,12 +926,12 @@@ static struct clk_rcg2 gcc_sdcc1_apps_c
        .cmd_rcgr = 0x33004,
        .mnd_width = 8,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_9,
+       .parent_map = gcc_parent_map_8,
        .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_sdcc1_apps_clk_src",
-               .parent_data = gcc_parent_data_9,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_9),
+               .parent_data = gcc_parent_data_8,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_8),
                .ops = &clk_rcg2_floor_ops,
        },
  };
@@@ -977,12 -944,12 +945,12 @@@ static struct clk_rcg2 gcc_sleep_clk_sr
        .cmd_rcgr = 0x3400c,
        .mnd_width = 0,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_10,
+       .parent_map = gcc_parent_map_9,
        .freq_tbl = ftbl_gcc_sleep_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_sleep_clk_src",
-               .parent_data = gcc_parent_data_10,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_10),
+               .parent_data = gcc_parent_data_9,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_9),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -999,12 -966,12 +967,12 @@@ static struct clk_rcg2 gcc_system_noc_b
        .cmd_rcgr = 0x2e004,
        .mnd_width = 0,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_11,
+       .parent_map = gcc_parent_map_10,
        .freq_tbl = ftbl_gcc_system_noc_bfdcd_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_system_noc_bfdcd_clk_src",
-               .parent_data = gcc_parent_data_11,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_11),
+               .parent_data = gcc_parent_data_10,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_10),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -1040,12 -1007,12 +1008,12 @@@ static struct clk_rcg2 gcc_usb0_aux_clk
        .cmd_rcgr = 0x2c018,
        .mnd_width = 16,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_12,
+       .parent_map = gcc_parent_map_11,
        .freq_tbl = ftbl_gcc_pcie_aux_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_usb0_aux_clk_src",
-               .parent_data = gcc_parent_data_12,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_12),
+               .parent_data = gcc_parent_data_11,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_11),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -1092,12 -1059,12 +1060,12 @@@ static struct clk_rcg2 gcc_usb0_mock_ut
        .cmd_rcgr = 0x2c02c,
        .mnd_width = 8,
        .hid_width = 5,
-       .parent_map = gcc_parent_map_13,
+       .parent_map = gcc_parent_map_12,
        .freq_tbl = ftbl_gcc_usb0_mock_utmi_clk_src,
        .clkr.hw.init = &(const struct clk_init_data) {
                .name = "gcc_usb0_mock_utmi_clk_src",
-               .parent_data = gcc_parent_data_13,
-               .num_parents = ARRAY_SIZE(gcc_parent_data_13),
+               .parent_data = gcc_parent_data_12,
+               .num_parents = ARRAY_SIZE(gcc_parent_data_12),
                .ops = &clk_rcg2_ops,
        },
  };
@@@ -1636,42 -1603,6 +1604,6 @@@ static struct clk_branch gcc_mdio_slave
        },
  };
  
- static struct clk_branch gcc_mem_noc_q6_axi_clk = {
-       .halt_reg = 0x19010,
-       .halt_check = BRANCH_HALT,
-       .clkr = {
-               .enable_reg = 0x19010,
-               .enable_mask = BIT(0),
-               .hw.init = &(const struct clk_init_data) {
-                       .name = "gcc_mem_noc_q6_axi_clk",
-                       .parent_hws = (const struct clk_hw*[]) {
-                               &gcc_q6_axim_clk_src.clkr.hw,
-                       },
-                       .num_parents = 1,
-                       .flags = CLK_SET_RATE_PARENT,
-                       .ops = &clk_branch2_ops,
-               },
-       },
- };
- static struct clk_branch gcc_mem_noc_ts_clk = {
-       .halt_reg = 0x19028,
-       .halt_check = BRANCH_HALT_VOTED,
-       .clkr = {
-               .enable_reg = 0x19028,
-               .enable_mask = BIT(0),
-               .hw.init = &(const struct clk_init_data) {
-                       .name = "gcc_mem_noc_ts_clk",
-                       .parent_hws = (const struct clk_hw*[]) {
-                               &gcc_qdss_tsctr_div8_clk_src.hw,
-                       },
-                       .num_parents = 1,
-                       .flags = CLK_SET_RATE_PARENT,
-                       .ops = &clk_branch2_ops,
-               },
-       },
- };
  static struct clk_branch gcc_nss_ts_clk = {
        .halt_reg = 0x17018,
        .halt_check = BRANCH_HALT_VOTED,
@@@ -3340,42 -3271,6 +3272,6 @@@ static struct clk_branch gcc_nssnoc_pcn
        },
  };
  
- static struct clk_branch gcc_mem_noc_ahb_clk = {
-       .halt_reg = 0x1900c,
-       .halt_check = BRANCH_HALT,
-       .clkr = {
-               .enable_reg = 0x1900c,
-               .enable_mask = BIT(0),
-               .hw.init = &(const struct clk_init_data) {
-                       .name = "gcc_mem_noc_ahb_clk",
-                       .parent_hws = (const struct clk_hw*[]) {
-                               &gcc_pcnoc_bfdcd_clk_src.clkr.hw,
-                       },
-                       .num_parents = 1,
-                       .flags = CLK_SET_RATE_PARENT,
-                       .ops = &clk_branch2_ops,
-               },
-       },
- };
- static struct clk_branch gcc_mem_noc_apss_axi_clk = {
-       .halt_reg = 0x1901c,
-       .halt_check = BRANCH_HALT_VOTED,
-       .clkr = {
-               .enable_reg = 0xb004,
-               .enable_mask = BIT(6),
-               .hw.init = &(const struct clk_init_data) {
-                       .name = "gcc_mem_noc_apss_axi_clk",
-                       .parent_hws = (const struct clk_hw*[]) {
-                               &gcc_apss_axi_clk_src.clkr.hw,
-                       },
-                       .num_parents = 1,
-                       .flags = CLK_SET_RATE_PARENT,
-                       .ops = &clk_branch2_ops,
-               },
-       },
- };
  static struct clk_regmap_div gcc_snoc_qosgen_extref_div_clk_src = {
        .reg = 0x2e010,
        .shift = 0,
        },
  };
  
- static struct clk_branch gcc_mem_noc_qosgen_extref_clk = {
-       .halt_reg = 0x19024,
-       .halt_check = BRANCH_HALT,
-       .clkr = {
-               .enable_reg = 0x19024,
-               .enable_mask = BIT(0),
-               .hw.init = &(const struct clk_init_data) {
-                       .name = "gcc_mem_noc_qosgen_extref_clk",
-                       .parent_hws = (const struct clk_hw*[]) {
-                               &gcc_snoc_qosgen_extref_div_clk_src.clkr.hw,
-                       },
-                       .num_parents = 1,
-                       .flags = CLK_SET_RATE_PARENT,
-                       .ops = &clk_branch2_ops,
-               },
-       },
- };
  static struct clk_regmap *gcc_ipq5332_clocks[] = {
        [GPLL0_MAIN] = &gpll0_main.clkr,
        [GPLL0] = &gpll0.clkr,
        [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
        [GCC_ADSS_PWM_CLK_SRC] = &gcc_adss_pwm_clk_src.clkr,
        [GCC_AHB_CLK] = &gcc_ahb_clk.clkr,
-       [GCC_APSS_AXI_CLK_SRC] = &gcc_apss_axi_clk_src.clkr,
        [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
        [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
        [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
        [GCC_LPASS_SWAY_CLK_SRC] = &gcc_lpass_sway_clk_src.clkr,
        [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
        [GCC_MDIO_SLAVE_AHB_CLK] = &gcc_mdio_slave_ahb_clk.clkr,
-       [GCC_MEM_NOC_Q6_AXI_CLK] = &gcc_mem_noc_q6_axi_clk.clkr,
-       [GCC_MEM_NOC_TS_CLK] = &gcc_mem_noc_ts_clk.clkr,
        [GCC_NSS_TS_CLK] = &gcc_nss_ts_clk.clkr,
        [GCC_NSS_TS_CLK_SRC] = &gcc_nss_ts_clk_src.clkr,
        [GCC_NSSCC_CLK] = &gcc_nsscc_clk.clkr,
        [GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr,
        [GCC_IM_SLEEP_CLK] = &gcc_im_sleep_clk.clkr,
        [GCC_NSSNOC_PCNOC_1_CLK] = &gcc_nssnoc_pcnoc_1_clk.clkr,
-       [GCC_MEM_NOC_AHB_CLK] = &gcc_mem_noc_ahb_clk.clkr,
-       [GCC_MEM_NOC_APSS_AXI_CLK] = &gcc_mem_noc_apss_axi_clk.clkr,
        [GCC_SNOC_QOSGEN_EXTREF_DIV_CLK_SRC] = &gcc_snoc_qosgen_extref_div_clk_src.clkr,
-       [GCC_MEM_NOC_QOSGEN_EXTREF_CLK] = &gcc_mem_noc_qosgen_extref_clk.clkr,
        [GCC_PCIE3X2_PIPE_CLK_SRC] = &gcc_pcie3x2_pipe_clk_src.clkr,
        [GCC_PCIE3X1_0_PIPE_CLK_SRC] = &gcc_pcie3x1_0_pipe_clk_src.clkr,
        [GCC_PCIE3X1_1_PIPE_CLK_SRC] = &gcc_pcie3x1_1_pipe_clk_src.clkr,
index 8513cb5af7c6c6e24cebf3e127484d123922a8e3,64d4f508e43a81d69de17ebca69569de99d02aea..aec7c4a1d3dea8fffdefec4fe82782b3cc8da180
@@@ -11,6 -11,7 +11,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
  #include "clk-branch.h"
  #include "reset.h"
  
- static struct clk_fixed_factor cxo = {
-       .mult = 1,
-       .div = 1,
-       .hw.init = &(struct clk_init_data){
-               .name = "cxo",
-               .parent_names = (const char *[]){ "cxo_board" },
-               .num_parents = 1,
-               .ops = &clk_fixed_factor_ops,
-       },
+ enum {
+       DT_CXO,
+       DT_PLL4,
+ };
+ enum {
+       P_CXO,
+       P_PLL8,
+       P_PLL14,
+ };
+ static const struct parent_map gcc_cxo_map[] = {
+       { P_CXO, 0 },
+ };
+ static const struct clk_parent_data gcc_cxo[] = {
+       { .index = DT_CXO, .name = "cxo_board" },
  };
  
  static struct clk_pll pll0 = {
@@@ -46,8 -55,8 +54,8 @@@
        .status_bit = 16,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "pll0",
-               .parent_names = (const char *[]){ "cxo" },
-               .num_parents = 1,
+               .parent_data = gcc_cxo,
+               .num_parents = ARRAY_SIZE(gcc_cxo),
                .ops = &clk_pll_ops,
        },
  };
@@@ -57,7 -66,9 +65,9 @@@ static struct clk_regmap pll0_vote = 
        .enable_mask = BIT(0),
        .hw.init = &(struct clk_init_data){
                .name = "pll0_vote",
-               .parent_names = (const char *[]){ "pll8" },
+               .parent_hws = (const struct clk_hw*[]) {
+                       &pll0.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_pll_vote_ops,
        },
@@@ -68,7 -79,9 +78,9 @@@ static struct clk_regmap pll4_vote = 
        .enable_mask = BIT(4),
        .hw.init = &(struct clk_init_data){
                .name = "pll4_vote",
-               .parent_names = (const char *[]){ "pll4" },
+               .parent_data = &(const struct clk_parent_data) {
+                       .index = DT_PLL4, .name = "pll4",
+               },
                .num_parents = 1,
                .ops = &clk_pll_vote_ops,
        },
@@@ -84,8 -97,8 +96,8 @@@ static struct clk_pll pll8 = 
        .status_bit = 16,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "pll8",
-               .parent_names = (const char *[]){ "cxo" },
-               .num_parents = 1,
+               .parent_data = gcc_cxo,
+               .num_parents = ARRAY_SIZE(gcc_cxo),
                .ops = &clk_pll_ops,
        },
  };
@@@ -95,7 -108,9 +107,9 @@@ static struct clk_regmap pll8_vote = 
        .enable_mask = BIT(8),
        .hw.init = &(struct clk_init_data){
                .name = "pll8_vote",
-               .parent_names = (const char *[]){ "pll8" },
+               .parent_hws = (const struct clk_hw*[]) {
+                       &pll8.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_pll_vote_ops,
        },
@@@ -111,8 -126,8 +125,8 @@@ static struct clk_pll pll14 = 
        .status_bit = 16,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "pll14",
-               .parent_names = (const char *[]){ "cxo" },
-               .num_parents = 1,
+               .parent_data = gcc_cxo,
+               .num_parents = ARRAY_SIZE(gcc_cxo),
                .ops = &clk_pll_ops,
        },
  };
@@@ -122,26 -137,22 +136,22 @@@ static struct clk_regmap pll14_vote = 
        .enable_mask = BIT(11),
        .hw.init = &(struct clk_init_data){
                .name = "pll14_vote",
-               .parent_names = (const char *[]){ "pll14" },
+               .parent_hws = (const struct clk_hw*[]) {
+                       &pll14.clkr.hw,
+               },
                .num_parents = 1,
                .ops = &clk_pll_vote_ops,
        },
  };
  
- enum {
-       P_CXO,
-       P_PLL8,
-       P_PLL14,
- };
  static const struct parent_map gcc_cxo_pll8_map[] = {
        { P_CXO, 0 },
        { P_PLL8, 3 }
  };
  
- static const char * const gcc_cxo_pll8[] = {
-       "cxo",
-       "pll8_vote",
+ static const struct clk_parent_data gcc_cxo_pll8[] = {
+       { .index = DT_CXO, .name = "cxo_board" },
+       { .hw = &pll8_vote.hw },
  };
  
  static const struct parent_map gcc_cxo_pll14_map[] = {
        { P_PLL14, 4 }
  };
  
- static const char * const gcc_cxo_pll14[] = {
-       "cxo",
-       "pll14_vote",
- };
- static const struct parent_map gcc_cxo_map[] = {
-       { P_CXO, 0 },
- };
- static const char * const gcc_cxo[] = {
-       "cxo",
+ static const struct clk_parent_data gcc_cxo_pll14[] = {
+       { .index = DT_CXO, .name = "cxo_board" },
+       { .hw = &pll14_vote.hw },
  };
  
  static struct freq_tbl clk_tbl_gsbi_uart[] = {
@@@ -205,8 -208,8 +207,8 @@@ static struct clk_rcg gsbi1_uart_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_uart_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -221,8 -224,8 +223,8 @@@ static struct clk_branch gsbi1_uart_cl
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_uart_clk",
-                       .parent_names = (const char *[]){
-                               "gsbi1_uart_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi1_uart_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@@ -256,8 -259,8 +258,8 @@@ static struct clk_rcg gsbi2_uart_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi2_uart_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -272,8 -275,8 +274,8 @@@ static struct clk_branch gsbi2_uart_cl
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi2_uart_clk",
-                       .parent_names = (const char *[]){
-                               "gsbi2_uart_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi2_uart_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@@ -307,8 -310,8 +309,8 @@@ static struct clk_rcg gsbi3_uart_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi3_uart_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -323,8 -326,8 +325,8 @@@ static struct clk_branch gsbi3_uart_cl
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi3_uart_clk",
-                       .parent_names = (const char *[]){
-                               "gsbi3_uart_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi3_uart_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@@ -358,8 -361,8 +360,8 @@@ static struct clk_rcg gsbi4_uart_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi4_uart_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -374,8 -377,8 +376,8 @@@ static struct clk_branch gsbi4_uart_cl
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi4_uart_clk",
-                       .parent_names = (const char *[]){
-                               "gsbi4_uart_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi4_uart_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@@ -409,8 -412,8 +411,8 @@@ static struct clk_rcg gsbi5_uart_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi5_uart_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -425,8 -428,8 +427,8 @@@ static struct clk_branch gsbi5_uart_cl
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi5_uart_clk",
-                       .parent_names = (const char *[]){
-                               "gsbi5_uart_src",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi5_uart_src.clkr.hw,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@@ -472,8 -475,8 +474,8 @@@ static struct clk_rcg gsbi1_qup_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_qup_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -488,7 -491,9 +490,9 @@@ static struct clk_branch gsbi1_qup_clk 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_qup_clk",
-                       .parent_names = (const char *[]){ "gsbi1_qup_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi1_qup_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -521,8 -526,8 +525,8 @@@ static struct clk_rcg gsbi2_qup_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi2_qup_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -537,7 -542,9 +541,9 @@@ static struct clk_branch gsbi2_qup_clk 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi2_qup_clk",
-                       .parent_names = (const char *[]){ "gsbi2_qup_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi2_qup_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -570,8 -577,8 +576,8 @@@ static struct clk_rcg gsbi3_qup_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi3_qup_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -586,7 -593,9 +592,9 @@@ static struct clk_branch gsbi3_qup_clk 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi3_qup_clk",
-                       .parent_names = (const char *[]){ "gsbi3_qup_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi3_qup_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -619,8 -628,8 +627,8 @@@ static struct clk_rcg gsbi4_qup_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi4_qup_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -635,7 -644,9 +643,9 @@@ static struct clk_branch gsbi4_qup_clk 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi4_qup_clk",
-                       .parent_names = (const char *[]){ "gsbi4_qup_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi4_qup_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -668,8 -679,8 +678,8 @@@ static struct clk_rcg gsbi5_qup_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi5_qup_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -684,7 -695,9 +694,9 @@@ static struct clk_branch gsbi5_qup_clk 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi5_qup_clk",
-                       .parent_names = (const char *[]){ "gsbi5_qup_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gsbi5_qup_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -723,8 -736,8 +735,8 @@@ static struct clk_rcg gp0_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gp0_src",
-                       .parent_names = gcc_cxo,
-                       .num_parents = 1,
+                       .parent_data = gcc_cxo,
+                       .num_parents = ARRAY_SIZE(gcc_cxo),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_PARENT_GATE,
                },
@@@ -739,7 -752,9 +751,9 @@@ static struct clk_branch gp0_clk = 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gp0_clk",
-                       .parent_names = (const char *[]){ "gp0_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp0_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -772,8 -787,8 +786,8 @@@ static struct clk_rcg gp1_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gp1_src",
-                       .parent_names = gcc_cxo,
-                       .num_parents = 1,
+                       .parent_data = gcc_cxo,
+                       .num_parents = ARRAY_SIZE(gcc_cxo),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -788,7 -803,9 +802,9 @@@ static struct clk_branch gp1_clk = 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gp1_clk",
-                       .parent_names = (const char *[]){ "gp1_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp1_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -821,8 -838,8 +837,8 @@@ static struct clk_rcg gp2_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "gp2_src",
-                       .parent_names = gcc_cxo,
-                       .num_parents = 1,
+                       .parent_data = gcc_cxo,
+                       .num_parents = ARRAY_SIZE(gcc_cxo),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -837,7 -854,9 +853,9 @@@ static struct clk_branch gp2_clk = 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "gp2_clk",
-                       .parent_names = (const char *[]){ "gp2_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gp2_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -873,8 -892,8 +891,8 @@@ static struct clk_rcg prng_src = 
        .clkr = {
                .hw.init = &(struct clk_init_data){
                        .name = "prng_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                },
        },
@@@ -889,7 -908,9 +907,9 @@@ static struct clk_branch prng_clk = 
                .enable_mask = BIT(10),
                .hw.init = &(struct clk_init_data){
                        .name = "prng_clk",
-                       .parent_names = (const char *[]){ "prng_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &prng_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                },
@@@ -935,8 -956,8 +955,8 @@@ static struct clk_rcg sdc1_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "sdc1_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                },
        }
@@@ -950,7 -971,9 +970,9 @@@ static struct clk_branch sdc1_clk = 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "sdc1_clk",
-                       .parent_names = (const char *[]){ "sdc1_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &sdc1_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -983,8 -1006,8 +1005,8 @@@ static struct clk_rcg sdc2_src = 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "sdc2_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                },
        }
@@@ -998,7 -1021,9 +1020,9 @@@ static struct clk_branch sdc2_clk = 
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "sdc2_clk",
-                       .parent_names = (const char *[]){ "sdc2_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &sdc2_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -1036,8 -1061,8 +1060,8 @@@ static struct clk_rcg usb_hs1_xcvr_src 
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hs1_xcvr_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -1052,7 -1077,9 +1076,9 @@@ static struct clk_branch usb_hs1_xcvr_c
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hs1_xcvr_clk",
-                       .parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb_hs1_xcvr_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -1085,8 -1112,8 +1111,8 @@@ static struct clk_rcg usb_hsic_xcvr_fs_
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hsic_xcvr_fs_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -1101,8 -1128,9 +1127,9 @@@ static struct clk_branch usb_hsic_xcvr_
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hsic_xcvr_fs_clk",
-                       .parent_names =
-                               (const char *[]){ "usb_hsic_xcvr_fs_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb_hsic_xcvr_fs_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        .flags = CLK_SET_RATE_PARENT,
@@@ -1140,8 -1168,8 +1167,8 @@@ static struct clk_rcg usb_hs1_system_sr
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hs1_system_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -1155,8 -1183,9 +1182,9 @@@ static struct clk_branch usb_hs1_system
                .enable_reg = 0x36a4,
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
-                       .parent_names =
-                               (const char *[]){ "usb_hs1_system_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb_hs1_system_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .name = "usb_hs1_system_clk",
                        .ops = &clk_branch_ops,
@@@ -1195,8 -1224,8 +1223,8 @@@ static struct clk_rcg usb_hsic_system_s
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hsic_system_src",
-                       .parent_names = gcc_cxo_pll8,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll8,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll8),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -1210,8 -1239,9 +1238,9 @@@ static struct clk_branch usb_hsic_syste
                .enable_reg = 0x2b58,
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
-                       .parent_names =
-                               (const char *[]){ "usb_hsic_system_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb_hsic_system_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .name = "usb_hsic_system_clk",
                        .ops = &clk_branch_ops,
@@@ -1250,8 -1280,8 +1279,8 @@@ static struct clk_rcg usb_hsic_hsic_sr
                .enable_mask = BIT(11),
                .hw.init = &(struct clk_init_data){
                        .name = "usb_hsic_hsic_src",
-                       .parent_names = gcc_cxo_pll14,
-                       .num_parents = 2,
+                       .parent_data = gcc_cxo_pll14,
+                       .num_parents = ARRAY_SIZE(gcc_cxo_pll14),
                        .ops = &clk_rcg_ops,
                        .flags = CLK_SET_RATE_GATE,
                },
@@@ -1264,7 -1294,9 +1293,9 @@@ static struct clk_branch usb_hsic_hsic_
                .enable_reg = 0x2b50,
                .enable_mask = BIT(9),
                .hw.init = &(struct clk_init_data){
-                       .parent_names = (const char *[]){ "usb_hsic_hsic_src" },
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &usb_hsic_hsic_src.clkr.hw,
+                       },
                        .num_parents = 1,
                        .name = "usb_hsic_hsic_clk",
                        .ops = &clk_branch_ops,
@@@ -1280,8 -1312,8 +1311,8 @@@ static struct clk_branch usb_hsic_hsio_
                .enable_reg = 0x2b48,
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
-                       .parent_names = (const char *[]){ "cxo" },
-                       .num_parents = 1,
+                       .parent_data = gcc_cxo,
+                       .num_parents = ARRAY_SIZE(gcc_cxo),
                        .name = "usb_hsic_hsio_cal_clk",
                        .ops = &clk_branch_ops,
                },
@@@ -1580,10 -1612,6 +1611,6 @@@ static struct clk_branch ebi2_aon_clk 
        },
  };
  
- static struct clk_hw *gcc_mdm9615_hws[] = {
-       &cxo.hw,
- };
  static struct clk_regmap *gcc_mdm9615_clks[] = {
        [PLL0] = &pll0.clkr,
        [PLL0_VOTE] = &pll0_vote,
@@@ -1693,8 -1721,6 +1720,6 @@@ static const struct qcom_cc_desc gcc_md
        .num_clks = ARRAY_SIZE(gcc_mdm9615_clks),
        .resets = gcc_mdm9615_resets,
        .num_resets = ARRAY_SIZE(gcc_mdm9615_resets),
-       .clk_hws = gcc_mdm9615_hws,
-       .num_clk_hws = ARRAY_SIZE(gcc_mdm9615_hws),
  };
  
  static const struct of_device_id gcc_mdm9615_match_table[] = {
index 5ec14480e068b4bb0dc0cfa279dc34de838b6808,b2cbdb351fcf9135830fc8f984b775f2848d0d92..f2dd132e2fb1c1efc7537a6e7f3d0f011224cd33
@@@ -18,6 -18,7 +18,6 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/platform_device.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -63,7 -64,7 +63,7 @@@ static struct clk_alpha_pll gpll0_sleep
                                .index = DT_XO,
                        },
                        .num_parents = 1,
-                       .ops = &clk_alpha_pll_ops,
+                       .ops = &clk_branch_simple_ops,
                },
        },
  };
@@@ -3041,6 -3042,7 +3041,7 @@@ static struct gdsc cpp_gdsc = 
  static struct clk_regmap *gcc_msm8917_clocks[] = {
        [GPLL0] = &gpll0.clkr,
        [GPLL0_EARLY] = &gpll0_early.clkr,
+       [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
        [GPLL3] = &gpll3.clkr,
        [GPLL3_EARLY] = &gpll3_early.clkr,
        [GPLL4] = &gpll4.clkr,
index 1ba516a0c0f3787d8d0522f8a61f398617c8f0c8,ef410f52f09f197e7f7f107f2a3d7732034c478e..cad7f1c7789cfc7ad7bd72e723b23530c5e99b3a
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -24,6 -25,9 +24,9 @@@
  #include "reset.h"
  #include "gdsc.h"
  
+ #define GCC_MMSS_MISC 0x0902C
+ #define GCC_GPU_MISC  0x71028
  static struct pll_vco fabia_vco[] = {
        { 250000000, 2000000000, 0 },
        { 125000000, 1000000000, 1 },
@@@ -1366,6 -1370,22 +1369,22 @@@ static struct clk_branch gcc_boot_rom_a
        },
  };
  
+ static struct clk_branch gcc_mmss_gpll0_div_clk = {
+       .halt_check = BRANCH_HALT_DELAY,
+       .clkr = {
+               .enable_reg = 0x5200c,
+               .enable_mask = BIT(0),
+               .hw.init = &(struct clk_init_data){
+                       .name = "gcc_mmss_gpll0_div_clk",
+                       .parent_hws = (const struct clk_hw *[]) {
+                               &gpll0_out_main.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .ops = &clk_branch2_ops,
+               },
+       },
+ };
  static struct clk_branch gcc_mmss_gpll0_clk = {
        .halt_check = BRANCH_HALT_DELAY,
        .clkr = {
@@@ -1394,6 -1414,38 +1413,38 @@@ static struct clk_branch gcc_mss_gpll0_
        },
  };
  
+ static struct clk_branch gcc_gpu_gpll0_div_clk = {
+       .halt_check = BRANCH_HALT_DELAY,
+       .clkr = {
+               .enable_reg = 0x5200c,
+               .enable_mask = BIT(3),
+               .hw.init = &(struct clk_init_data){
+                       .name = "gcc_gpu_gpll0_div_clk",
+                       .parent_hws = (const struct clk_hw *[]) {
+                               &gpll0_out_main.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .ops = &clk_branch2_ops,
+               },
+       },
+ };
+ static struct clk_branch gcc_gpu_gpll0_clk = {
+       .halt_check = BRANCH_HALT_DELAY,
+       .clkr = {
+               .enable_reg = 0x5200c,
+               .enable_mask = BIT(4),
+               .hw.init = &(struct clk_init_data){
+                       .name = "gcc_gpu_gpll0_clk",
+                       .parent_hws = (const struct clk_hw *[]) {
+                               &gpll0_out_main.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .ops = &clk_branch2_ops,
+               },
+       },
+ };
  static struct clk_branch gcc_blsp1_ahb_clk = {
        .halt_reg = 0x17004,
        .halt_check = BRANCH_HALT_VOTED,
@@@ -2060,7 -2112,7 +2111,7 @@@ static struct clk_branch gcc_gp3_clk = 
  
  static struct clk_branch gcc_bimc_gfx_clk = {
        .halt_reg = 0x46040,
-       .halt_check = BRANCH_HALT,
+       .halt_check = BRANCH_HALT_SKIP,
        .clkr = {
                .enable_reg = 0x46040,
                .enable_mask = BIT(0),
  
  static struct clk_branch gcc_gpu_bimc_gfx_clk = {
        .halt_reg = 0x71010,
-       .halt_check = BRANCH_HALT,
+       .halt_check = BRANCH_HALT_SKIP,
        .clkr = {
                .enable_reg = 0x71010,
                .enable_mask = BIT(0),
@@@ -2099,7 -2151,7 +2150,7 @@@ static struct clk_branch gcc_gpu_bimc_g
  
  static struct clk_branch gcc_gpu_cfg_ahb_clk = {
        .halt_reg = 0x71004,
-       .halt_check = BRANCH_HALT,
+       .halt_check = BRANCH_HALT_SKIP,
        .clkr = {
                .enable_reg = 0x71004,
                .enable_mask = BIT(0),
@@@ -3079,6 -3131,9 +3130,9 @@@ static struct clk_regmap *gcc_msm8998_c
        [AGGRE2_SNOC_NORTH_AXI] = &aggre2_snoc_north_axi_clk.clkr,
        [SSC_XO] = &ssc_xo_clk.clkr,
        [SSC_CNOC_AHBS_CLK] = &ssc_cnoc_ahbs_clk.clkr,
+       [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
+       [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
+       [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
  };
  
  static struct gdsc *gcc_msm8998_gdscs[] = {
@@@ -3234,6 -3289,10 +3288,10 @@@ static int gcc_msm8998_probe(struct pla
        if (ret)
                return ret;
  
+       /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */
+       regmap_write(regmap, GCC_MMSS_MISC, 0x10003);
+       regmap_write(regmap, GCC_GPU_MISC, 0x10003);
        return qcom_cc_really_probe(pdev, &gcc_msm8998_desc, regmap);
  }
  
index 328b306297efbd06cf55950a4bbdbc765f56ccf1,de35cdc937328d2793f014338c89ac9b13405d49..9f42d2601464e7ebf4b03e883925694f67598edf
@@@ -1,12 -1,11 +1,12 @@@
  // SPDX-License-Identifier: GPL-2.0-only
  /*
-  * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
+  * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
   */
  
  #include <linux/clk-provider.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,qdu1000-gcc.h>
@@@ -18,6 -17,7 +18,7 @@@
  #include "clk-regmap-divider.h"
  #include "clk-regmap-mux.h"
  #include "clk-regmap-phy-mux.h"
+ #include "gdsc.h"
  #include "reset.h"
  
  enum {
@@@ -371,16 -371,6 +372,6 @@@ static const struct clk_parent_data gcc
        { .index = DT_TCXO_IDX },
  };
  
- static const struct parent_map gcc_parent_map_7[] = {
-       { P_PCIE_0_PIPE_CLK, 0 },
-       { P_BI_TCXO, 2 },
- };
- static const struct clk_parent_data gcc_parent_data_7[] = {
-       { .index = DT_PCIE_0_PIPE_CLK_IDX },
-       { .index = DT_TCXO_IDX },
- };
  static const struct parent_map gcc_parent_map_8[] = {
        { P_BI_TCXO, 0 },
        { P_GCC_GPLL0_OUT_MAIN, 1 },
@@@ -440,16 -430,15 +431,15 @@@ static struct clk_regmap_mux gcc_pcie_0
        },
  };
  
- static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
+ static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
        .reg = 0x9d064,
-       .shift = 0,
-       .width = 2,
-       .parent_map = gcc_parent_map_7,
        .clkr = {
                .hw.init = &(const struct clk_init_data) {
                        .name = "gcc_pcie_0_pipe_clk_src",
-                       .parent_data = gcc_parent_data_7,
-                       .num_parents = ARRAY_SIZE(gcc_parent_data_7),
+                       .parent_data = &(const struct clk_parent_data){
+                               .index = DT_PCIE_0_PIPE_CLK_IDX,
+                       },
+                       .num_parents = 1,
                        .ops = &clk_regmap_phy_mux_ops,
                },
        },
@@@ -486,7 -475,7 +476,7 @@@ static struct clk_rcg2 gcc_aggre_noc_ec
                .name = "gcc_aggre_noc_ecpri_dma_clk_src",
                .parent_data = gcc_parent_data_4,
                .num_parents = ARRAY_SIZE(gcc_parent_data_4),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -506,7 -495,7 +496,7 @@@ static struct clk_rcg2 gcc_aggre_noc_ec
                .name = "gcc_aggre_noc_ecpri_gsi_clk_src",
                .parent_data = gcc_parent_data_5,
                .num_parents = ARRAY_SIZE(gcc_parent_data_5),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -525,7 -514,7 +515,7 @@@ static struct clk_rcg2 gcc_gp1_clk_src 
                .name = "gcc_gp1_clk_src",
                .parent_data = gcc_parent_data_1,
                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -539,7 -528,7 +529,7 @@@ static struct clk_rcg2 gcc_gp2_clk_src 
                .name = "gcc_gp2_clk_src",
                .parent_data = gcc_parent_data_1,
                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -553,7 -542,7 +543,7 @@@ static struct clk_rcg2 gcc_gp3_clk_src 
                .name = "gcc_gp3_clk_src",
                .parent_data = gcc_parent_data_1,
                .num_parents = ARRAY_SIZE(gcc_parent_data_1),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -572,7 -561,7 +562,7 @@@ static struct clk_rcg2 gcc_pcie_0_aux_c
                .name = "gcc_pcie_0_aux_clk_src",
                .parent_data = gcc_parent_data_3,
                .num_parents = ARRAY_SIZE(gcc_parent_data_3),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -592,7 -581,7 +582,7 @@@ static struct clk_rcg2 gcc_pcie_0_phy_r
                .name = "gcc_pcie_0_phy_rchng_clk_src",
                .parent_data = gcc_parent_data_0,
                .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -611,7 -600,7 +601,7 @@@ static struct clk_rcg2 gcc_pdm2_clk_sr
                .name = "gcc_pdm2_clk_src",
                .parent_data = gcc_parent_data_0,
                .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -633,7 -622,7 +623,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s0_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
@@@ -649,7 -638,7 +639,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s1_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
@@@ -665,7 -654,7 +655,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s2_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
@@@ -681,7 -670,7 +671,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s3_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
@@@ -697,7 -686,7 +687,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s4_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
@@@ -718,7 -707,7 +708,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s5_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
@@@ -734,7 -723,7 +724,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s6_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
@@@ -750,7 -739,7 +740,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap0_s7_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
@@@ -766,7 -755,7 +756,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s0_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
@@@ -782,7 -771,7 +772,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s1_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
@@@ -798,7 -787,7 +788,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s2_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
@@@ -814,7 -803,7 +804,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s3_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
@@@ -830,7 -819,7 +820,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s4_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
@@@ -846,7 -835,7 +836,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s5_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
@@@ -862,7 -851,7 +852,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s6_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
@@@ -878,7 -867,7 +868,7 @@@ static struct clk_init_data gcc_qupv3_w
        .name = "gcc_qupv3_wrap1_s7_clk_src",
        .parent_data = gcc_parent_data_0,
        .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-       .ops = &clk_rcg2_ops,
+       .ops = &clk_rcg2_shared_ops,
  };
  
  static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
@@@ -914,7 -903,7 +904,7 @@@ static struct clk_rcg2 gcc_sdcc5_apps_c
                .name = "gcc_sdcc5_apps_clk_src",
                .parent_data = gcc_parent_data_8,
                .num_parents = ARRAY_SIZE(gcc_parent_data_8),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_floor_ops,
        },
  };
  
@@@ -933,7 -922,7 +923,7 @@@ static struct clk_rcg2 gcc_sdcc5_ice_co
                .name = "gcc_sdcc5_ice_core_clk_src",
                .parent_data = gcc_parent_data_2,
                .num_parents = ARRAY_SIZE(gcc_parent_data_2),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_floor_ops,
        },
  };
  
@@@ -947,7 -936,7 +937,7 @@@ static struct clk_rcg2 gcc_sm_bus_xo_cl
                .name = "gcc_sm_bus_xo_clk_src",
                .parent_data = gcc_parent_data_2,
                .num_parents = ARRAY_SIZE(gcc_parent_data_2),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -966,7 -955,7 +956,7 @@@ static struct clk_rcg2 gcc_tsc_clk_src 
                .name = "gcc_tsc_clk_src",
                .parent_data = gcc_parent_data_9,
                .num_parents = ARRAY_SIZE(gcc_parent_data_9),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -986,7 -975,7 +976,7 @@@ static struct clk_rcg2 gcc_usb30_prim_m
                .name = "gcc_usb30_prim_master_clk_src",
                .parent_data = gcc_parent_data_0,
                .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -1000,7 -989,7 +990,7 @@@ static struct clk_rcg2 gcc_usb30_prim_m
                .name = "gcc_usb30_prim_mock_utmi_clk_src",
                .parent_data = gcc_parent_data_0,
                .num_parents = ARRAY_SIZE(gcc_parent_data_0),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -1014,7 -1003,7 +1004,7 @@@ static struct clk_rcg2 gcc_usb3_prim_ph
                .name = "gcc_usb3_prim_phy_aux_clk_src",
                .parent_data = gcc_parent_data_3,
                .num_parents = ARRAY_SIZE(gcc_parent_data_3),
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_shared_ops,
        },
  };
  
@@@ -1143,6 -1132,26 +1133,26 @@@ static struct clk_branch gcc_ddrss_ecpr
        },
  };
  
+ static struct clk_branch gcc_ddrss_ecpri_gsi_clk = {
+       .halt_reg = 0x54298,
+       .halt_check = BRANCH_HALT_VOTED,
+       .hwcg_reg = 0x54298,
+       .hwcg_bit = 1,
+       .clkr = {
+               .enable_reg = 0x54298,
+               .enable_mask = BIT(0),
+               .hw.init = &(const struct clk_init_data) {
+                       .name = "gcc_ddrss_ecpri_gsi_clk",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
+                       .ops = &clk_branch2_aon_ops,
+               },
+       },
+ };
  static struct clk_branch gcc_ecpri_ahb_clk = {
        .halt_reg = 0x3a008,
        .halt_check = BRANCH_HALT_VOTED,
@@@ -1459,14 -1468,13 +1469,13 @@@ static struct clk_branch gcc_pcie_0_cfg
  
  static struct clk_branch gcc_pcie_0_clkref_en = {
        .halt_reg = 0x9c004,
-       .halt_bit = 31,
-       .halt_check = BRANCH_HALT_ENABLE,
+       .halt_check = BRANCH_HALT,
        .clkr = {
                .enable_reg = 0x9c004,
                .enable_mask = BIT(0),
                .hw.init = &(const struct clk_init_data) {
                        .name = "gcc_pcie_0_clkref_en",
-                       .ops = &clk_branch_ops,
+                       .ops = &clk_branch2_ops,
                },
        },
  };
@@@ -2286,14 -2294,13 +2295,13 @@@ static struct clk_branch gcc_tsc_etu_cl
  
  static struct clk_branch gcc_usb2_clkref_en = {
        .halt_reg = 0x9c008,
-       .halt_bit = 31,
-       .halt_check = BRANCH_HALT_ENABLE,
+       .halt_check = BRANCH_HALT,
        .clkr = {
                .enable_reg = 0x9c008,
                .enable_mask = BIT(0),
                .hw.init = &(const struct clk_init_data) {
                        .name = "gcc_usb2_clkref_en",
-                       .ops = &clk_branch_ops,
+                       .ops = &clk_branch2_ops,
                },
        },
  };
@@@ -2403,6 -2410,39 +2411,39 @@@ static struct clk_branch gcc_usb3_prim_
        },
  };
  
+ static struct gdsc pcie_0_gdsc = {
+       .gdscr = 0x9d004,
+       .en_rest_wait_val = 0x2,
+       .en_few_wait_val = 0x2,
+       .clk_dis_wait_val = 0xf,
+       .pd = {
+               .name = "gcc_pcie_0_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+ };
+ static struct gdsc pcie_0_phy_gdsc = {
+       .gdscr = 0x7c004,
+       .en_rest_wait_val = 0x2,
+       .en_few_wait_val = 0x2,
+       .clk_dis_wait_val = 0x2,
+       .pd = {
+               .name = "gcc_pcie_0_phy_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+ };
+ static struct gdsc usb30_prim_gdsc = {
+       .gdscr = 0x49004,
+       .en_rest_wait_val = 0x2,
+       .en_few_wait_val = 0x2,
+       .clk_dis_wait_val = 0xf,
+       .pd = {
+               .name = "gcc_usb30_prim_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+ };
  static struct clk_regmap *gcc_qdu1000_clocks[] = {
        [GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr,
        [GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr,
        [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr,
        [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
        [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
+       [GCC_GPLL1_OUT_EVEN] = &gcc_gpll1_out_even.clkr,
+       [GCC_DDRSS_ECPRI_GSI_CLK] = &gcc_ddrss_ecpri_gsi_clk.clkr,
+ };
+ static struct gdsc *gcc_qdu1000_gdscs[] = {
+       [PCIE_0_GDSC] = &pcie_0_gdsc,
+       [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
+       [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
  };
  
  static const struct qcom_reset_map gcc_qdu1000_resets[] = {
@@@ -2598,6 -2646,8 +2647,8 @@@ static const struct qcom_cc_desc gcc_qd
        .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks),
        .resets = gcc_qdu1000_resets,
        .num_resets = ARRAY_SIZE(gcc_qdu1000_resets),
+       .gdscs = gcc_qdu1000_gdscs,
+       .num_gdscs = ARRAY_SIZE(gcc_qdu1000_gdscs),
  };
  
  static const struct of_device_id gcc_qdu1000_match_table[] = {
index ede83c644716e673ee45d2d318cb8adf9ff92422,49f36e1df4fa8f8248fb22738d320133763969d3..a3406aadbd17076d85f2558af0f1bf6bf3cd4acc
@@@ -8,7 -8,7 +8,7 @@@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,gcc-sc7180.h>
@@@ -651,6 -651,7 +651,7 @@@ static struct clk_rcg2 gcc_sdcc2_apps_c
                .name = "gcc_sdcc2_apps_clk_src",
                .parent_data = gcc_parent_data_5,
                .num_parents = ARRAY_SIZE(gcc_parent_data_5),
+               .flags = CLK_OPS_PARENT_ENABLE,
                .ops = &clk_rcg2_floor_ops,
        },
  };
index 1ab119b3702a2f5dfe905bd629e9809d5e5c2344,ac6f8c0c1ccb8b2b9568bcd263b55c59b7ce6dea..bfb77931e8686d8258854cdd131792aa9c82e715
@@@ -8,9 -8,9 +8,9 @@@
  #include <linux/err.h>
  #include <linux/kernel.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
  #include <linux/pm_runtime.h>
  #include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,gcc-sc8280xp.h>
@@@ -6761,7 -6761,7 +6761,7 @@@ static struct gdsc pcie_0_tunnel_gdsc 
                .name = "pcie_0_tunnel_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc pcie_1_tunnel_gdsc = {
                .name = "pcie_1_tunnel_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  /*
@@@ -6786,8 -6786,8 +6786,8 @@@ static struct gdsc pcie_2a_gdsc = 
        .pd = {
                .name = "pcie_2a_gdsc",
        },
-       .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE | ALWAYS_ON,
+       .pwrsts = PWRSTS_RET_ON,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc pcie_2b_gdsc = {
        .pd = {
                .name = "pcie_2b_gdsc",
        },
-       .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE | ALWAYS_ON,
+       .pwrsts = PWRSTS_RET_ON,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc pcie_3a_gdsc = {
        .pd = {
                .name = "pcie_3a_gdsc",
        },
-       .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE | ALWAYS_ON,
+       .pwrsts = PWRSTS_RET_ON,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc pcie_3b_gdsc = {
        .pd = {
                .name = "pcie_3b_gdsc",
        },
-       .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE | ALWAYS_ON,
+       .pwrsts = PWRSTS_RET_ON,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc pcie_4_gdsc = {
        .pd = {
                .name = "pcie_4_gdsc",
        },
-       .pwrsts = PWRSTS_OFF_ON,
-       .flags = VOTABLE | ALWAYS_ON,
+       .pwrsts = PWRSTS_RET_ON,
+       .flags = VOTABLE | RETAIN_FF_ENABLE,
  };
  
  static struct gdsc ufs_card_gdsc = {
                .name = "ufs_card_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc ufs_phy_gdsc = {
                .name = "ufs_phy_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc usb30_mp_gdsc = {
                .name = "usb30_mp_gdsc",
        },
        .pwrsts = PWRSTS_RET_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc usb30_prim_gdsc = {
                .name = "usb30_prim_gdsc",
        },
        .pwrsts = PWRSTS_RET_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc usb30_sec_gdsc = {
                .name = "usb30_sec_gdsc",
        },
        .pwrsts = PWRSTS_RET_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc emac_0_gdsc = {
                .name = "emac_0_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
  };
  
  static struct gdsc emac_1_gdsc = {
                .name = "emac_1_gdsc",
        },
        .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
+ };
+ static struct gdsc usb4_1_gdsc = {
+       .gdscr = 0xb8004,
+       .pd = {
+               .name = "usb4_1_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
+ };
+ static struct gdsc usb4_gdsc = {
+       .gdscr = 0x2a004,
+       .pd = {
+               .name = "usb4_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = RETAIN_FF_ENABLE,
+ };
+ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
+       .gdscr = 0x7d050,
+       .pd = {
+               .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
+       .gdscr = 0x7d058,
+       .pd = {
+               .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = {
+       .gdscr = 0x7d054,
+       .pd = {
+               .name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc = {
+       .gdscr = 0x7d06c,
+       .pd = {
+               .name = "hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
+       .gdscr = 0x7d05c,
+       .pd = {
+               .name = "hlos1_vote_turing_mmu_tbu0_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
+       .gdscr = 0x7d060,
+       .pd = {
+               .name = "hlos1_vote_turing_mmu_tbu1_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_turing_mmu_tbu2_gdsc = {
+       .gdscr = 0x7d0a0,
+       .pd = {
+               .name = "hlos1_vote_turing_mmu_tbu2_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
+ };
+ static struct gdsc hlos1_vote_turing_mmu_tbu3_gdsc = {
+       .gdscr = 0x7d0a4,
+       .pd = {
+               .name = "hlos1_vote_turing_mmu_tbu3_gdsc",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+       .flags = VOTABLE,
  };
  
  static struct clk_regmap *gcc_sc8280xp_clocks[] = {
@@@ -7370,6 -7467,16 +7467,16 @@@ static struct gdsc *gcc_sc8280xp_gdscs[
        [USB30_SEC_GDSC] = &usb30_sec_gdsc,
        [EMAC_0_GDSC] = &emac_0_gdsc,
        [EMAC_1_GDSC] = &emac_1_gdsc,
+       [USB4_1_GDSC] = &usb4_1_gdsc,
+       [USB4_GDSC] = &usb4_gdsc,
+       [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
+       [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
+       [HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc,
+       [HLOS1_VOTE_MMNOC_MMU_TBU_SF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf1_gdsc,
+       [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
+       [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
+       [HLOS1_VOTE_TURING_MMU_TBU2_GDSC] = &hlos1_vote_turing_mmu_tbu2_gdsc,
+       [HLOS1_VOTE_TURING_MMU_TBU3_GDSC] = &hlos1_vote_turing_mmu_tbu3_gdsc,
  };
  
  static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
@@@ -7432,8 -7539,8 +7539,8 @@@ static int gcc_sc8280xp_probe(struct pl
  
        regmap = qcom_cc_map(pdev, &gcc_sc8280xp_desc);
        if (IS_ERR(regmap)) {
-               pm_runtime_put(&pdev->dev);
-               return PTR_ERR(regmap);
+               ret = PTR_ERR(regmap);
+               goto err_put_rpm;
        }
  
        /*
  
        ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
        if (ret)
-               return ret;
+               goto err_put_rpm;
  
        ret = qcom_cc_really_probe(pdev, &gcc_sc8280xp_desc, regmap);
+       if (ret)
+               goto err_put_rpm;
        pm_runtime_put(&pdev->dev);
  
+       return 0;
+ err_put_rpm:
+       pm_runtime_put_sync(&pdev->dev);
        return ret;
  }
  
index 973142a1b404b60ac300ff2b953ed6d9ba948a82,6da87f0436d0ce6500394c555e986e0bbe21f086..d9983bb27475648944c329a121d57dca80fc3f58
@@@ -8,9 -8,9 +8,9 @@@
  #include <linux/clk-provider.h>
  #include <linux/err.h>
  #include <linux/kernel.h>
 +#include <linux/mod_devicetable.h>
  #include <linux/module.h>
 -#include <linux/of.h>
 -#include <linux/of_device.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,sm7150-gcc.h>
@@@ -739,6 -739,7 +739,7 @@@ static struct clk_rcg2 gcc_sdcc2_apps_c
                .parent_data = gcc_parent_data_6,
                .num_parents = ARRAY_SIZE(gcc_parent_data_6),
                .ops = &clk_rcg2_floor_ops,
+               .flags = CLK_OPS_PARENT_ENABLE,
        },
  };
  
index ee0ce6582e858f2d8ee64ff9261a594e04489221,d3c75bb55946a0504b43d81071b1cce8ca153639..c6c5261264f118f691dbb65f08b9b7a169bfdc9b
@@@ -7,8 -7,8 +7,8 @@@
  #include <linux/err.h>
  #include <linux/kernel.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
  #include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,gcc-sm8250.h>
@@@ -721,6 -721,7 +721,7 @@@ static struct clk_rcg2 gcc_sdcc2_apps_c
                .name = "gcc_sdcc2_apps_clk_src",
                .parent_data = gcc_parent_data_4,
                .num_parents = ARRAY_SIZE(gcc_parent_data_4),
+               .flags = CLK_OPS_PARENT_ENABLE,
                .ops = &clk_rcg2_floor_ops,
        },
  };
index 86ad085260dbad142d26d6d3f947145729f85113,9f4f72553ecf24b9040018689bc19cc6c11bc4c5..563542982551601cd2bb1acda4b0e8e38eec6f85
@@@ -6,8 -6,7 +6,8 @@@
  
  #include <linux/clk-provider.h>
  #include <linux/module.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  #include <linux/regmap.h>
  
  #include <dt-bindings/clock/qcom,gcc-sm8450.h>
@@@ -936,7 -935,7 +936,7 @@@ static struct clk_rcg2 gcc_sdcc2_apps_c
                .parent_data = gcc_parent_data_7,
                .num_parents = ARRAY_SIZE(gcc_parent_data_7),
                .flags = CLK_SET_RATE_PARENT,
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_floor_ops,
        },
  };
  
@@@ -959,7 -958,7 +959,7 @@@ static struct clk_rcg2 gcc_sdcc4_apps_c
                .parent_data = gcc_parent_data_0,
                .num_parents = ARRAY_SIZE(gcc_parent_data_0),
                .flags = CLK_SET_RATE_PARENT,
-               .ops = &clk_rcg2_ops,
+               .ops = &clk_rcg2_floor_ops,
        },
  };
  
index 0b6e1d6d884e578fac45b7b6495ef3b34134a72c,cc0b4335478731f1c9676bab42f592f3e4139a49..9a4fdff719ec5b16cfac1cb913d3d6784d6cef05
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -97,7 -98,7 +97,7 @@@ static const struct parent_map gpu_xo_g
  
  static const struct clk_parent_data gpu_xo_gpll0[] = {
        { .hw = &gpucc_cxo_clk.clkr.hw },
-       { .fw_name = "gpll0" },
+       { .fw_name = "gpll0", .name = "gcc_gpu_gpll0_clk" },
  };
  
  static const struct parent_map gpu_xo_gpupll0_map[] = {
index 35a30c793f92e9903483de07cc502b5f327d625f,d96767e1fbe9577e4dbd087f754f3b89321def34..e725e7b9c456d216e0d62d2f342eb8efe9d69171
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  
  #include "clk-regmap-divider.h"
  #include "clk-regmap-mux.h"
  
+ static struct clk_parent_data pxo_parent_data = {
+       .fw_name = "pxo", .name = "pxo_board",
+ };
  static struct clk_pll pll4 = {
        .l_reg = 0x4,
        .m_reg = 0x8,
@@@ -32,9 -37,7 +36,7 @@@
        .status_bit = 16,
        .clkr.hw.init = &(struct clk_init_data){
                .name = "pll4",
-               .parent_data = (const struct clk_parent_data[]){
-                       { .fw_name = "pxo", .name = "pxo_board" },
-               },
+               .parent_data = &pxo_parent_data,
                .num_parents = 1,
                .ops = &clk_pll_ops,
        },
@@@ -50,7 -53,7 +52,7 @@@ static const struct parent_map lcc_pxo_
        { P_PLL4, 2 }
  };
  
- static const struct clk_parent_data lcc_pxo_pll4[] = {
+ static struct clk_parent_data lcc_pxo_pll4[] = {
        { .fw_name = "pxo", .name = "pxo_board" },
        { .fw_name = "pll4_vote", .name = "pll4_vote" },
  };
@@@ -443,6 -446,7 +445,7 @@@ static const struct qcom_cc_desc lcc_ms
  static const struct of_device_id lcc_msm8960_match_table[] = {
        { .compatible = "qcom,lcc-msm8960" },
        { .compatible = "qcom,lcc-apq8064" },
+       { .compatible = "qcom,lcc-mdm9615" },
        { }
  };
  MODULE_DEVICE_TABLE(of, lcc_msm8960_match_table);
@@@ -452,6 -456,14 +455,14 @@@ static int lcc_msm8960_probe(struct pla
        u32 val;
        struct regmap *regmap;
  
+       /* patch for the cxo <-> pxo difference */
+       if (of_device_is_compatible(pdev->dev.of_node, "qcom,lcc-mdm9615")) {
+               pxo_parent_data.fw_name = "cxo";
+               pxo_parent_data.name = "cxo_board";
+               lcc_pxo_pll4[0].fw_name = "cxo";
+               lcc_pxo_pll4[0].name = "cxo_board";
+       }
        regmap = qcom_cc_map(pdev, &lcc_msm8960_desc);
        if (IS_ERR(regmap))
                return PTR_ERR(regmap);
index a7acdef5a14e4cac5c6fb82b1a101443629c7ee6,c37524d55d8e2ef3a7c0290c8477777ef0b626b6..1f3bd302fe6ed4b7540a380723a39d56f2636570
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -2425,6 -2426,16 +2425,16 @@@ static struct gdsc oxilicx_gdsc = 
        .pwrsts = PWRSTS_OFF_ON,
  };
  
+ static struct gdsc oxili_cx_gdsc_msm8226 = {
+       .gdscr = 0x4034,
+       .cxcs = (unsigned int []){ 0x4028 },
+       .cxc_count = 1,
+       .pd = {
+               .name = "oxili_cx",
+       },
+       .pwrsts = PWRSTS_OFF_ON,
+ };
  static struct clk_regmap *mmcc_msm8226_clocks[] = {
        [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
        [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
@@@ -2514,6 -2525,7 +2524,7 @@@ static struct gdsc *mmcc_msm8226_gdscs[
        [MDSS_GDSC] = &mdss_gdsc,
        [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
        [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
+       [OXILICX_GDSC] = &oxili_cx_gdsc_msm8226,
  };
  
  static const struct regmap_config mmcc_msm8226_regmap_config = {
index c62aa270af1c21527efde1d670d06433ad17e8a3,040c495e91e47156735707f6f8c7a46561618fe7..a023c4374be96a76fcd65b3ded74d2a856c7d67d
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/platform_device.h>
  #include <linux/module.h>
  #include <linux/of.h>
 -#include <linux/of_device.h>
  #include <linux/clk-provider.h>
  #include <linux/regmap.h>
  #include <linux/reset-controller.h>
@@@ -45,19 -46,6 +45,6 @@@ enum 
        P_DPLINK,
  };
  
- static struct clk_fixed_factor gpll0_div = {
-       .mult = 1,
-       .div = 2,
-       .hw.init = &(struct clk_init_data){
-               .name = "mmss_gpll0_div",
-               .parent_data = &(const struct clk_parent_data){
-                       .fw_name = "gpll0"
-               },
-               .num_parents = 1,
-               .ops = &clk_fixed_factor_ops,
-       },
- };
  static const struct clk_div_table post_div_table_fabia_even[] = {
        { 0x0, 1 },
        { 0x1, 2 },
@@@ -353,7 -341,7 +340,7 @@@ static const struct parent_map mmss_xo_
  static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = {
        { .fw_name = "xo" },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
@@@ -367,7 -355,7 +354,7 @@@ static const struct clk_parent_data mms
        { .fw_name = "xo" },
        { .hw = &mmpll0_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
@@@ -383,7 -371,7 +370,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll0_out_even.clkr.hw },
        { .hw = &mmpll1_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
@@@ -399,7 -387,7 +386,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll0_out_even.clkr.hw },
        { .hw = &mmpll5_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = {
@@@ -417,7 -405,7 +404,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll3_out_even.clkr.hw },
        { .hw = &mmpll6_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
@@@ -435,7 -423,7 +422,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll7_out_even.clkr.hw },
        { .hw = &mmpll10_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
@@@ -453,7 -441,7 +440,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll7_out_even.clkr.hw },
        { .hw = &mmpll10_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = {
@@@ -473,7 -461,7 +460,7 @@@ static const struct clk_parent_data mms
        { .hw = &mmpll7_out_even.clkr.hw },
        { .hw = &mmpll10_out_even.clkr.hw },
        { .fw_name = "gpll0" },
-       { .hw = &gpll0_div.hw },
+       { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" },
  };
  
  static struct clk_rcg2 byte0_clk_src = {
@@@ -2543,10 -2531,6 +2530,6 @@@ static struct clk_branch vmem_ahb_clk 
        },
  };
  
- static struct clk_hw *mmcc_msm8998_hws[] = {
-       &gpll0_div.hw,
- };
  static struct gdsc video_top_gdsc = {
        .gdscr = 0x1024,
        .pd = {
@@@ -2854,8 -2838,6 +2837,6 @@@ static const struct qcom_cc_desc mmcc_m
        .num_resets = ARRAY_SIZE(mmcc_msm8998_resets),
        .gdscs = mmcc_msm8998_gdscs,
        .num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs),
-       .clk_hws = mmcc_msm8998_hws,
-       .num_clk_hws = ARRAY_SIZE(mmcc_msm8998_hws),
  };
  
  static const struct of_device_id mmcc_msm8998_match_table[] = {
This page took 0.205632 seconds and 4 git commands to generate.