aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-dove/common.c57
-rw-r--r--arch/arm/mach-dove/include/mach/pm.h54
2 files changed, 92 insertions, 19 deletions
diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c
index 8629e3043acd..38e2cc3b206b 100644
--- a/arch/arm/mach-dove/common.c
+++ b/arch/arm/mach-dove/common.c
@@ -24,6 +24,7 @@
24#include <asm/mach/time.h> 24#include <asm/mach/time.h>
25#include <asm/mach/pci.h> 25#include <asm/mach/pci.h>
26#include <mach/dove.h> 26#include <mach/dove.h>
27#include <mach/pm.h>
27#include <mach/bridge-regs.h> 28#include <mach/bridge-regs.h>
28#include <asm/mach/arch.h> 29#include <asm/mach/arch.h>
29#include <linux/irq.h> 30#include <linux/irq.h>
@@ -69,14 +70,68 @@ void __init dove_map_io(void)
69 * CLK tree 70 * CLK tree
70 ****************************************************************************/ 71 ****************************************************************************/
71static int dove_tclk; 72static int dove_tclk;
73
74static DEFINE_SPINLOCK(gating_lock);
72static struct clk *tclk; 75static struct clk *tclk;
73 76
77static struct clk __init *dove_register_gate(const char *name,
78 const char *parent, u8 bit_idx)
79{
80 return clk_register_gate(NULL, name, parent, 0,
81 (void __iomem *)CLOCK_GATING_CONTROL,
82 bit_idx, 0, &gating_lock);
83}
84
74static void __init dove_clk_init(void) 85static void __init dove_clk_init(void)
75{ 86{
87 struct clk *usb0, *usb1, *sata, *pex0, *pex1, *sdio0, *sdio1;
88 struct clk *nand, *camera, *i2s0, *i2s1, *crypto, *ac97, *pdma;
89 struct clk *xor0, *xor1, *ge, *gephy;
90
76 tclk = clk_register_fixed_rate(NULL, "tclk", NULL, CLK_IS_ROOT, 91 tclk = clk_register_fixed_rate(NULL, "tclk", NULL, CLK_IS_ROOT,
77 dove_tclk); 92 dove_tclk);
78 93
79 orion_clkdev_init(tclk); 94 usb0 = dove_register_gate("usb0", "tclk", CLOCK_GATING_BIT_USB0);
95 usb1 = dove_register_gate("usb1", "tclk", CLOCK_GATING_BIT_USB1);
96 sata = dove_register_gate("sata", "tclk", CLOCK_GATING_BIT_SATA);
97 pex0 = dove_register_gate("pex0", "tclk", CLOCK_GATING_BIT_PCIE0);
98 pex1 = dove_register_gate("pex1", "tclk", CLOCK_GATING_BIT_PCIE1);
99 sdio0 = dove_register_gate("sdio0", "tclk", CLOCK_GATING_BIT_SDIO0);
100 sdio1 = dove_register_gate("sdio1", "tclk", CLOCK_GATING_BIT_SDIO1);
101 nand = dove_register_gate("nand", "tclk", CLOCK_GATING_BIT_NAND);
102 camera = dove_register_gate("camera", "tclk", CLOCK_GATING_BIT_CAMERA);
103 i2s0 = dove_register_gate("i2s0", "tclk", CLOCK_GATING_BIT_I2S0);
104 i2s1 = dove_register_gate("i2s1", "tclk", CLOCK_GATING_BIT_I2S1);
105 crypto = dove_register_gate("crypto", "tclk", CLOCK_GATING_BIT_CRYPTO);
106 ac97 = dove_register_gate("ac97", "tclk", CLOCK_GATING_BIT_AC97);
107 pdma = dove_register_gate("pdma", "tclk", CLOCK_GATING_BIT_PDMA);
108 xor0 = dove_register_gate("xor0", "tclk", CLOCK_GATING_BIT_XOR0);
109 xor1 = dove_register_gate("xor1", "tclk", CLOCK_GATING_BIT_XOR1);
110 gephy = dove_register_gate("gephy", "tclk", CLOCK_GATING_BIT_GIGA_PHY);
111 ge = dove_register_gate("ge", "gephy", CLOCK_GATING_BIT_GBE);
112
113 orion_clkdev_add(NULL, "orion_spi.0", tclk);
114 orion_clkdev_add(NULL, "orion_spi.1", tclk);
115 orion_clkdev_add(NULL, "orion_wdt", tclk);
116 orion_clkdev_add(NULL, "mv64xxx_i2c.0", tclk);
117
118 orion_clkdev_add(NULL, "orion-ehci.0", usb0);
119 orion_clkdev_add(NULL, "orion-ehci.1", usb1);
120 orion_clkdev_add(NULL, "mv643xx_eth.0", ge);
121 orion_clkdev_add("0", "sata_mv.0", sata);
122 orion_clkdev_add("0", "pcie", pex0);
123 orion_clkdev_add("1", "pcie", pex1);
124 orion_clkdev_add(NULL, "sdhci-dove.0", sdio0);
125 orion_clkdev_add(NULL, "sdhci-dove.1", sdio1);
126 orion_clkdev_add(NULL, "orion_nand", nand);
127 orion_clkdev_add(NULL, "cafe1000-ccic.0", camera);
128 orion_clkdev_add(NULL, "kirkwood-i2s.0", i2s0);
129 orion_clkdev_add(NULL, "kirkwood-i2s.1", i2s1);
130 orion_clkdev_add(NULL, "mv_crypto", crypto);
131 orion_clkdev_add(NULL, "dove-ac97", ac97);
132 orion_clkdev_add(NULL, "dove-pdma", pdma);
133 orion_clkdev_add(NULL, "mv_xor_shared.0", xor0);
134 orion_clkdev_add(NULL, "mv_xor_shared.1", xor1);
80} 135}
81 136
82/***************************************************************************** 137/*****************************************************************************
diff --git a/arch/arm/mach-dove/include/mach/pm.h b/arch/arm/mach-dove/include/mach/pm.h
index 3ad9f946a9e8..7bcd0dfce4b1 100644
--- a/arch/arm/mach-dove/include/mach/pm.h
+++ b/arch/arm/mach-dove/include/mach/pm.h
@@ -13,24 +13,42 @@
13#include <mach/irqs.h> 13#include <mach/irqs.h>
14 14
15#define CLOCK_GATING_CONTROL (DOVE_PMU_VIRT_BASE + 0x38) 15#define CLOCK_GATING_CONTROL (DOVE_PMU_VIRT_BASE + 0x38)
16#define CLOCK_GATING_USB0_MASK (1 << 0) 16#define CLOCK_GATING_BIT_USB0 0
17#define CLOCK_GATING_USB1_MASK (1 << 1) 17#define CLOCK_GATING_BIT_USB1 1
18#define CLOCK_GATING_GBE_MASK (1 << 2) 18#define CLOCK_GATING_BIT_GBE 2
19#define CLOCK_GATING_SATA_MASK (1 << 3) 19#define CLOCK_GATING_BIT_SATA 3
20#define CLOCK_GATING_PCIE0_MASK (1 << 4) 20#define CLOCK_GATING_BIT_PCIE0 4
21#define CLOCK_GATING_PCIE1_MASK (1 << 5) 21#define CLOCK_GATING_BIT_PCIE1 5
22#define CLOCK_GATING_SDIO0_MASK (1 << 8) 22#define CLOCK_GATING_BIT_SDIO0 8
23#define CLOCK_GATING_SDIO1_MASK (1 << 9) 23#define CLOCK_GATING_BIT_SDIO1 9
24#define CLOCK_GATING_NAND_MASK (1 << 10) 24#define CLOCK_GATING_BIT_NAND 10
25#define CLOCK_GATING_CAMERA_MASK (1 << 11) 25#define CLOCK_GATING_BIT_CAMERA 11
26#define CLOCK_GATING_I2S0_MASK (1 << 12) 26#define CLOCK_GATING_BIT_I2S0 12
27#define CLOCK_GATING_I2S1_MASK (1 << 13) 27#define CLOCK_GATING_BIT_I2S1 13
28#define CLOCK_GATING_CRYPTO_MASK (1 << 15) 28#define CLOCK_GATING_BIT_CRYPTO 15
29#define CLOCK_GATING_AC97_MASK (1 << 21) 29#define CLOCK_GATING_BIT_AC97 21
30#define CLOCK_GATING_PDMA_MASK (1 << 22) 30#define CLOCK_GATING_BIT_PDMA 22
31#define CLOCK_GATING_XOR0_MASK (1 << 23) 31#define CLOCK_GATING_BIT_XOR0 23
32#define CLOCK_GATING_XOR1_MASK (1 << 24) 32#define CLOCK_GATING_BIT_XOR1 24
33#define CLOCK_GATING_GIGA_PHY_MASK (1 << 30) 33#define CLOCK_GATING_BIT_GIGA_PHY 30
34#define CLOCK_GATING_USB0_MASK (1 << CLOCK_GATING_BIT_USB0)
35#define CLOCK_GATING_USB1_MASK (1 << CLOCK_GATING_BIT_USB1)
36#define CLOCK_GATING_GBE_MASK (1 << CLOCK_GATING_BIT_GBE)
37#define CLOCK_GATING_SATA_MASK (1 << CLOCK_GATING_BIT_SATA)
38#define CLOCK_GATING_PCIE0_MASK (1 << CLOCK_GATING_BIT_PCIE0)
39#define CLOCK_GATING_PCIE1_MASK (1 << CLOCK_GATING_BIT_PCIE1)
40#define CLOCK_GATING_SDIO0_MASK (1 << CLOCK_GATING_BIT_SDIO0)
41#define CLOCK_GATING_SDIO1_MASK (1 << CLOCK_GATING_BIT_SDIO1)
42#define CLOCK_GATING_NAND_MASK (1 << CLOCK_GATING_BIT_NAND)
43#define CLOCK_GATING_CAMERA_MASK (1 << CLOCK_GATING_BIT_CAMERA)
44#define CLOCK_GATING_I2S0_MASK (1 << CLOCK_GATING_BIT_I2S0)
45#define CLOCK_GATING_I2S1_MASK (1 << CLOCK_GATING_BIT_I2S1)
46#define CLOCK_GATING_CRYPTO_MASK (1 << CLOCK_GATING_BIT_CRYPTO)
47#define CLOCK_GATING_AC97_MASK (1 << CLOCK_GATING_BIT_AC97)
48#define CLOCK_GATING_PDMA_MASK (1 << CLOCK_GATING_BIT_PDMA)
49#define CLOCK_GATING_XOR0_MASK (1 << CLOCK_GATING_BIT_XOR0)
50#define CLOCK_GATING_XOR1_MASK (1 << CLOCK_GATING_BIT_XOR1)
51#define CLOCK_GATING_GIGA_PHY_MASK (1 << CLOCK_GATING_BIT_GIGA_PHY)
34 52
35#define PMU_INTERRUPT_CAUSE (DOVE_PMU_VIRT_BASE + 0x50) 53#define PMU_INTERRUPT_CAUSE (DOVE_PMU_VIRT_BASE + 0x50)
36#define PMU_INTERRUPT_MASK (DOVE_PMU_VIRT_BASE + 0x54) 54#define PMU_INTERRUPT_MASK (DOVE_PMU_VIRT_BASE + 0x54)