{ .hw = &gpll4.clkr.hw },
 };
 
+static struct clk_rcg2 system_noc_clk_src = {
+       .cmd_rcgr = 0x0120,
+       .hid_width = 5,
+       .parent_map = gcc_xo_gpll0_map,
+       .clkr.hw.init = &(struct clk_init_data){
+               .name = "system_noc_clk_src",
+               .parent_data = gcc_xo_gpll0,
+               .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
+               .ops = &clk_rcg2_ops,
+       },
+};
+
+static struct clk_rcg2 config_noc_clk_src = {
+       .cmd_rcgr = 0x0150,
+       .hid_width = 5,
+       .parent_map = gcc_xo_gpll0_map,
+       .clkr.hw.init = &(struct clk_init_data){
+               .name = "config_noc_clk_src",
+               .parent_data = gcc_xo_gpll0,
+               .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
+               .ops = &clk_rcg2_ops,
+       },
+};
+
+static struct clk_rcg2 periph_noc_clk_src = {
+       .cmd_rcgr = 0x0190,
+       .hid_width = 5,
+       .parent_map = gcc_xo_gpll0_map,
+       .clkr.hw.init = &(struct clk_init_data){
+               .name = "periph_noc_clk_src",
+               .parent_data = gcc_xo_gpll0,
+               .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
+               .ops = &clk_rcg2_ops,
+       },
+};
+
 static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
        F(50000000, P_GPLL0, 12, 0, 0),
        F(100000000, P_GPLL0, 6, 0, 0),
                .enable_mask = BIT(17),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp1_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(15),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_blsp2_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_lpass_q6_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_mss_q6_bimc_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_0_cfg_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &config_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_0_mstr_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_0_slv_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_1_cfg_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &config_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_1_mstr_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pcie_1_slv_axi_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_pdm_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc1_ahb_clk",
-                       .parent_names = (const char *[]){
-                               "periph_noc_clk_src",
-                       },
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
                        .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc2_ahb_clk",
-                       .parent_names = (const char *[]){
-                               "periph_noc_clk_src",
-                       },
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
                        .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc3_ahb_clk",
-                       .parent_names = (const char *[]){
-                               "periph_noc_clk_src",
-                       },
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
                        .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_sdcc4_ahb_clk",
-                       .parent_names = (const char *[]){
-                               "periph_noc_clk_src",
-                       },
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
                        .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_tsif_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &config_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_rx_symbol_0_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_rx_symbol_1_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_tx_symbol_0_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_ufs_tx_symbol_1_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &system_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
                .enable_mask = BIT(0),
                .hw.init = &(struct clk_init_data){
                        .name = "gcc_usb_hs_ahb_clk",
+                       .parent_hws = (const struct clk_hw *[]){ &periph_noc_clk_src.clkr.hw },
+                       .num_parents = 1,
                        .ops = &clk_branch2_ops,
                },
        },
        [GPLL0] = &gpll0.clkr,
        [GPLL4_EARLY] = &gpll4_early.clkr,
        [GPLL4] = &gpll4.clkr,
+       [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
+       [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
+       [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
        [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
        [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
        [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,