ARM: OMAP2+: clockdomains: make {prm,cm}_clkdm common
authorPaul Walmsley <paul@pwsan.com>
Thu, 19 Apr 2012 19:33:49 +0000 (13:33 -0600)
committerPaul Walmsley <paul@pwsan.com>
Thu, 19 Apr 2012 19:33:49 +0000 (13:33 -0600)
The PRM and CM implicit clockdomains will soon be used by OMAP44xx.
So, make them common to OMAP2+ and modify the OMAP4 clockdomains code
so use of these clockdomains doesn't crash the system.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Rajendra Nayak <rnayak@ti.com>
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/clockdomain44xx.c
arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c
arch/arm/mach-omap2/clockdomains44xx_data.c
arch/arm/mach-omap2/clockdomains_common_data.c [new file with mode: 0644]

index 49f92bc1c311fd41078da192afbb84f2878f4ee7..d8604a3e490e8c7faedb836580048764013288ec 100644 (file)
@@ -118,16 +118,18 @@ obj-$(CONFIG_ARCH_OMAP4)          += $(powerdomain-common) \
                                           powerdomains44xx_data.o
 
 # PRCM clockdomain control
-obj-$(CONFIG_ARCH_OMAP2)               += clockdomain.o \
+clockdomain-common                     += clockdomain.o \
+                                          clockdomains_common_data.o
+obj-$(CONFIG_ARCH_OMAP2)               += $(clockdomain-common) \
                                           clockdomain2xxx_3xxx.o \
                                           clockdomains2xxx_3xxx_data.o
 obj-$(CONFIG_SOC_OMAP2420)             += clockdomains2420_data.o
 obj-$(CONFIG_SOC_OMAP2430)             += clockdomains2430_data.o
-obj-$(CONFIG_ARCH_OMAP3)               += clockdomain.o \
+obj-$(CONFIG_ARCH_OMAP3)               += $(clockdomain-common) \
                                           clockdomain2xxx_3xxx.o \
                                           clockdomains2xxx_3xxx_data.o \
                                           clockdomains3xxx_data.o
-obj-$(CONFIG_ARCH_OMAP4)               += clockdomain.o \
+obj-$(CONFIG_ARCH_OMAP4)               += $(clockdomain-common) \
                                           clockdomain44xx.o \
                                           clockdomains44xx_data.o
 
index 935c7f03dab97b53aced0bf2cd8fbe9a60ac6de1..4f04dd11d65570b5cd1a22d7fa8faae90c1bb058 100644 (file)
@@ -51,6 +51,9 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm)
        struct clkdm_dep *cd;
        u32 mask = 0;
 
+       if (!clkdm->prcm_partition)
+               return 0;
+
        for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
                if (!cd->clkdm)
                        continue; /* only happens if data is erroneous */
@@ -103,6 +106,9 @@ static int omap4_clkdm_clk_disable(struct clockdomain *clkdm)
 {
        bool hwsup = false;
 
+       if (!clkdm->prcm_partition)
+               return 0;
+
        hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
                                        clkdm->cm_inst, clkdm->clkdm_offs);
 
index 0a6a04897d89f41074e64ab403ee42d4e0d84bb6..839145e1cfbea2bcf706e72be39da268e6778247 100644 (file)
@@ -89,13 +89,3 @@ struct clockdomain wkup_common_clkdm = {
        .pwrdm          = { .name = "wkup_pwrdm" },
        .dep_bit        = OMAP_EN_WKUP_SHIFT,
 };
-
-struct clockdomain prm_common_clkdm = {
-       .name           = "prm_clkdm",
-       .pwrdm          = { .name = "wkup_pwrdm" },
-};
-
-struct clockdomain cm_common_clkdm = {
-       .name           = "cm_clkdm",
-       .pwrdm          = { .name = "core_pwrdm" },
-};
index bd7ed13515cc75c78662ef8adb323b693407247f..c534258474939e8efe3b96dd1c5ed096bd30f3ab 100644 (file)
@@ -430,6 +430,8 @@ static struct clockdomain *clockdomains_omap44xx[] __initdata = {
        &l4_wkup_44xx_clkdm,
        &emu_sys_44xx_clkdm,
        &l3_dma_44xx_clkdm,
+       &prm_common_clkdm,
+       &cm_common_clkdm,
        NULL
 };
 
diff --git a/arch/arm/mach-omap2/clockdomains_common_data.c b/arch/arm/mach-omap2/clockdomains_common_data.c
new file mode 100644 (file)
index 0000000..615b1f0
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * OMAP2+-common clockdomain data
+ *
+ * Copyright (C) 2008-2012 Texas Instruments, Inc.
+ * Copyright (C) 2008-2010 Nokia Corporation
+ *
+ * Paul Walmsley, Jouni Högander
+ */
+
+#include <linux/kernel.h>
+#include <linux/io.h>
+
+#include "clockdomain.h"
+
+/* These are implicit clockdomains - they are never defined as such in TRM */
+struct clockdomain prm_common_clkdm = {
+       .name           = "prm_clkdm",
+       .pwrdm          = { .name = "wkup_pwrdm" },
+};
+
+struct clockdomain cm_common_clkdm = {
+       .name           = "cm_clkdm",
+       .pwrdm          = { .name = "core_pwrdm" },
+};