|
@@ -159,3 +159,129 @@ static struct clkdm_dep neon_wkdeps[] = {
|
|
|
{ NULL },
|
|
|
};
|
|
|
|
|
|
+/* Sleep dependency source arrays for OMAP3-specific clkdms */
|
|
|
+
|
|
|
+/* 3430: CM_SLEEPDEP_DSS: MPU, IVA */
|
|
|
+static struct clkdm_dep dss_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { .clkdm_name = "iva2_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clkdm_dep dss_am35x_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+/* 3430: CM_SLEEPDEP_PER: MPU, IVA */
|
|
|
+static struct clkdm_dep per_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { .clkdm_name = "iva2_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clkdm_dep per_am35x_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+/* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */
|
|
|
+static struct clkdm_dep usbhost_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { .clkdm_name = "iva2_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clkdm_dep usbhost_am35x_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+/* 3430: CM_SLEEPDEP_CAM: MPU */
|
|
|
+static struct clkdm_dep cam_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * 3430ES1: CM_SLEEPDEP_GFX: MPU
|
|
|
+ * 3430ES2: CM_SLEEPDEP_SGX: MPU
|
|
|
+ * These can share data since they will never be present simultaneously
|
|
|
+ * on the same device.
|
|
|
+ */
|
|
|
+static struct clkdm_dep gfx_sgx_sleepdeps[] = {
|
|
|
+ { .clkdm_name = "mpu_clkdm" },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * OMAP3 clockdomains
|
|
|
+ */
|
|
|
+
|
|
|
+static struct clockdomain mpu_3xxx_clkdm = {
|
|
|
+ .name = "mpu_clkdm",
|
|
|
+ .pwrdm = { .name = "mpu_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
|
|
|
+ .dep_bit = OMAP3430_EN_MPU_SHIFT,
|
|
|
+ .wkdep_srcs = mpu_3xxx_wkdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain mpu_am35x_clkdm = {
|
|
|
+ .name = "mpu_clkdm",
|
|
|
+ .pwrdm = { .name = "mpu_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
|
|
|
+ .dep_bit = OMAP3430_EN_MPU_SHIFT,
|
|
|
+ .wkdep_srcs = mpu_am35x_wkdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain neon_clkdm = {
|
|
|
+ .name = "neon_clkdm",
|
|
|
+ .pwrdm = { .name = "neon_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .wkdep_srcs = neon_wkdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain iva2_clkdm = {
|
|
|
+ .name = "iva2_clkdm",
|
|
|
+ .pwrdm = { .name = "iva2_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
|
|
|
+ .wkdep_srcs = iva2_wkdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain gfx_3430es1_clkdm = {
|
|
|
+ .name = "gfx_clkdm",
|
|
|
+ .pwrdm = { .name = "gfx_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .wkdep_srcs = gfx_sgx_3xxx_wkdeps,
|
|
|
+ .sleepdep_srcs = gfx_sgx_sleepdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain sgx_clkdm = {
|
|
|
+ .name = "sgx_clkdm",
|
|
|
+ .pwrdm = { .name = "sgx_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .wkdep_srcs = gfx_sgx_3xxx_wkdeps,
|
|
|
+ .sleepdep_srcs = gfx_sgx_sleepdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clockdomain sgx_am35x_clkdm = {
|
|
|
+ .name = "sgx_clkdm",
|
|
|
+ .pwrdm = { .name = "sgx_pwrdm" },
|
|
|
+ .flags = CLKDM_CAN_HWSUP_SWSUP,
|
|
|
+ .wkdep_srcs = gfx_sgx_am35x_wkdeps,
|
|
|
+ .sleepdep_srcs = gfx_sgx_sleepdeps,
|
|
|
+ .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
|
|
|
+ * then that information was removed from the 34xx ES2+ TRM. It is
|
|
|
+ * unclear whether the core is still there, but the clockdomain logic
|
|
|
+ * is there, and must be programmed to an appropriate state if the
|