|
@@ -1076,3 +1076,85 @@ static struct clk_hw_omap ipss_ick_hw = {
|
|
|
.clk = &ipss_ick,
|
|
|
},
|
|
|
.ops = &clkhwops_am35xx_ipss_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
|
|
|
+ .enable_bit = AM35XX_EN_IPSS_SHIFT,
|
|
|
+ .clkdm_name = "core_l3_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(ipss_ick, ipss_ick_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static struct clk emac_ick;
|
|
|
+
|
|
|
+static const char *emac_ick_parent_names[] = {
|
|
|
+ "ipss_ick",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap emac_ick_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &emac_ick,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_am35xx_ipss_module_wait,
|
|
|
+ .enable_reg = OMAP343X_CTRL_REGADDR(AM35XX_CONTROL_IPSS_CLK_CTRL),
|
|
|
+ .enable_bit = AM35XX_CPGMAC_VBUSP_CLK_SHIFT,
|
|
|
+ .clkdm_name = "core_l3_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(emac_ick, emac_ick_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static struct clk emu_core_alwon_ck;
|
|
|
+
|
|
|
+static const char *emu_core_alwon_ck_parent_names[] = {
|
|
|
+ "dpll3_m3x2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(emu_core_alwon_ck, "dpll3_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(emu_core_alwon_ck, emu_core_alwon_ck_parent_names,
|
|
|
+ core_l4_ick_ops);
|
|
|
+
|
|
|
+static struct clk emu_mpu_alwon_ck;
|
|
|
+
|
|
|
+static const char *emu_mpu_alwon_ck_parent_names[] = {
|
|
|
+ "mpu_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(emu_mpu_alwon_ck, NULL);
|
|
|
+DEFINE_STRUCT_CLK(emu_mpu_alwon_ck, emu_mpu_alwon_ck_parent_names, core_ck_ops);
|
|
|
+
|
|
|
+static struct clk emu_per_alwon_ck;
|
|
|
+
|
|
|
+static const char *emu_per_alwon_ck_parent_names[] = {
|
|
|
+ "dpll4_m6x2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(emu_per_alwon_ck, "dpll4_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(emu_per_alwon_ck, emu_per_alwon_ck_parent_names,
|
|
|
+ core_l4_ick_ops);
|
|
|
+
|
|
|
+static const char *emu_src_ck_parent_names[] = {
|
|
|
+ "sys_ck", "emu_core_alwon_ck", "emu_per_alwon_ck", "emu_mpu_alwon_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate emu_src_sys_rates[] = {
|
|
|
+ { .div = 1, .val = 0, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate emu_src_core_rates[] = {
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate emu_src_per_rates[] = {
|
|
|
+ { .div = 1, .val = 2, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate emu_src_mpu_rates[] = {
|
|
|
+ { .div = 1, .val = 3, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel emu_src_clksel[] = {
|
|
|
+ { .parent = &sys_ck, .rates = emu_src_sys_rates },
|
|
|
+ { .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
|
|
|
+ { .parent = &emu_per_alwon_ck, .rates = emu_src_per_rates },
|