|
@@ -366,3 +366,160 @@ static struct clockdomain usbhost_am35x_clkdm = {
|
|
|
.wkdep_srcs = usbhost_am35x_wkdeps,
|
|
|
.sleepdep_srcs = usbhost_am35x_sleepdeps,
|
|
|
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain per_clkdm = {
|
|
|
+ .name = "per_clkdm",
|
|
|
+ .pwrdm = { .name = "per_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .dep_bit = OMAP3430_EN_PER_SHIFT,
|
|
|
+ .wkdep_srcs = per_wkdeps,
|
|
|
+ .sleepdep_srcs = per_sleepdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain per_am35x_clkdm = {
|
|
|
+ .name = "per_clkdm",
|
|
|
+ .pwrdm = { .name = "per_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .dep_bit = OMAP3430_EN_PER_SHIFT,
|
|
|
+ .wkdep_srcs = per_am35x_wkdeps,
|
|
|
+ .sleepdep_srcs = per_am35x_sleepdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain emu_clkdm = {
|
|
|
+ .name = "emu_clkdm",
|
|
|
+ .pwrdm = { .name = "emu_pwrdm" },
|
|
|
+ .flags = (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_SWSUP |
|
|
|
+ CLKDM_MISSING_IDLE_REPORTING),
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain dpll1_clkdm = {
|
|
|
+ .name = "dpll1_clkdm",
|
|
|
+ .pwrdm = { .name = "dpll1_pwrdm" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain dpll2_clkdm = {
|
|
|
+ .name = "dpll2_clkdm",
|
|
|
+ .pwrdm = { .name = "dpll2_pwrdm" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain dpll3_clkdm = {
|
|
|
+ .name = "dpll3_clkdm",
|
|
|
+ .pwrdm = { .name = "dpll3_pwrdm" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain dpll4_clkdm = {
|
|
|
+ .name = "dpll4_clkdm",
|
|
|
+ .pwrdm = { .name = "dpll4_pwrdm" },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain dpll5_clkdm = {
|
|
|
+ .name = "dpll5_clkdm",
|
|
|
+ .pwrdm = { .name = "dpll5_pwrdm" },
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Clockdomain hwsup dependencies
|
|
|
+ */
|
|
|
+
|
|
|
+static struct clkdm_autodep clkdm_autodeps[] = {
|
|
|
+ {
|
|
|
+ .clkdm = { .name = "mpu_clkdm" },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .clkdm = { .name = "iva2_clkdm" },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .clkdm = { .name = NULL },
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static struct clkdm_autodep clkdm_am35x_autodeps[] = {
|
|
|
+ {
|
|
|
+ .clkdm = { .name = "mpu_clkdm" },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .clkdm = { .name = NULL },
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+static struct clockdomain *clockdomains_common[] __initdata = {
|
|
|
+ &wkup_common_clkdm,
|
|
|
+ &neon_clkdm,
|
|
|
+ &core_l3_3xxx_clkdm,
|
|
|
+ &core_l4_3xxx_clkdm,
|
|
|
+ &emu_clkdm,
|
|
|
+ &dpll1_clkdm,
|
|
|
+ &dpll3_clkdm,
|
|
|
+ &dpll4_clkdm,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain *clockdomains_omap3430[] __initdata = {
|
|
|
+ &mpu_3xxx_clkdm,
|
|
|
+ &iva2_clkdm,
|
|
|
+ &d2d_clkdm,
|
|
|
+ &dss_3xxx_clkdm,
|
|
|
+ &cam_clkdm,
|
|
|
+ &per_clkdm,
|
|
|
+ &dpll2_clkdm,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain *clockdomains_omap3430es1[] __initdata = {
|
|
|
+ &gfx_3430es1_clkdm,
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain *clockdomains_omap3430es2plus[] __initdata = {
|
|
|
+ &sgx_clkdm,
|
|
|
+ &dpll5_clkdm,
|
|
|
+ &usbhost_clkdm,
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain *clockdomains_am35x[] __initdata = {
|
|
|
+ &mpu_am35x_clkdm,
|
|
|
+ &sgx_am35x_clkdm,
|
|
|
+ &dss_am35x_clkdm,
|
|
|
+ &per_am35x_clkdm,
|
|
|
+ &usbhost_am35x_clkdm,
|
|
|
+ &dpll5_clkdm,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+void __init omap3xxx_clockdomains_init(void)
|
|
|
+{
|
|
|
+ struct clockdomain **sc;
|
|
|
+ unsigned int rev;
|
|
|
+
|
|
|
+ if (!cpu_is_omap34xx())
|
|
|
+ return;
|
|
|
+
|
|
|
+ clkdm_register_platform_funcs(&omap3_clkdm_operations);
|
|
|
+ clkdm_register_clkdms(clockdomains_common);
|
|
|
+
|
|
|
+ rev = omap_rev();
|
|
|
+
|
|
|
+ if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
|
|
|
+ clkdm_register_clkdms(clockdomains_am35x);
|
|
|
+ clkdm_register_autodeps(clkdm_am35x_autodeps);
|
|
|
+ } else {
|
|
|
+ clkdm_register_clkdms(clockdomains_omap3430);
|
|
|
+
|
|
|
+ sc = (rev == OMAP3430_REV_ES1_0) ?
|
|
|
+ clockdomains_omap3430es1 : clockdomains_omap3430es2plus;
|
|
|
+
|
|
|
+ clkdm_register_clkdms(sc);
|
|
|
+ clkdm_register_autodeps(clkdm_autodeps);
|
|
|
+ }
|
|
|
+
|
|
|
+ clkdm_complete_init();
|
|
|
+}
|