aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/cpu/sh4a
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/kernel/cpu/sh4a')
-rw-r--r--arch/sh/kernel/cpu/sh4a/clock-sh7785.c63
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7785.c18
2 files changed, 75 insertions, 6 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
index b7a32dd1b2db..cf042b53b3ae 100644
--- a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
@@ -228,12 +228,75 @@ static struct clk *clks[] = {
228 &umem_clk, 228 &umem_clk,
229}; 229};
230 230
231static int mstpcr_clk_enable(struct clk *clk)
232{
233 __raw_writel(__raw_readl(clk->enable_reg) & ~(1 << clk->enable_bit),
234 clk->enable_reg);
235 return 0;
236}
237
238static void mstpcr_clk_disable(struct clk *clk)
239{
240 __raw_writel(__raw_readl(clk->enable_reg) | (1 << clk->enable_bit),
241 clk->enable_reg);
242}
243
244static struct clk_ops mstpcr_clk_ops = {
245 .enable = mstpcr_clk_enable,
246 .disable = mstpcr_clk_disable,
247 .recalc = followparent_recalc,
248};
249
250#define MSTPCR0 0xffc80030
251#define MSTPCR1 0xffc80034
252
253#define CLK(_name, _id, _parent, _enable_reg, \
254 _enable_bit, _flags) \
255{ \
256 .name = _name, \
257 .id = _id, \
258 .parent = _parent, \
259 .enable_reg = (void __iomem *)_enable_reg, \
260 .enable_bit = _enable_bit, \
261 .flags = _flags, \
262 .ops = &mstpcr_clk_ops, \
263}
264
265static struct clk mstpcr_clks[] = {
266 /* MSTPCR0 */
267 CLK("scif_fck", 5, &peripheral_clk, MSTPCR0, 29, 0),
268 CLK("scif_fck", 4, &peripheral_clk, MSTPCR0, 28, 0),
269 CLK("scif_fck", 3, &peripheral_clk, MSTPCR0, 27, 0),
270 CLK("scif_fck", 2, &peripheral_clk, MSTPCR0, 26, 0),
271 CLK("scif_fck", 1, &peripheral_clk, MSTPCR0, 25, 0),
272 CLK("scif_fck", 0, &peripheral_clk, MSTPCR0, 24, 0),
273 CLK("ssi_fck", 1, &peripheral_clk, MSTPCR0, 21, 0),
274 CLK("ssi_fck", 0, &peripheral_clk, MSTPCR0, 20, 0),
275 CLK("hac_fck", 1, &peripheral_clk, MSTPCR0, 17, 0),
276 CLK("hac_fck", 0, &peripheral_clk, MSTPCR0, 16, 0),
277 CLK("mmcif_fck", -1, &peripheral_clk, MSTPCR0, 13, 0),
278 CLK("flctl_fck", -1, &peripheral_clk, MSTPCR0, 12, 0),
279 CLK("tmu345_fck", -1, &peripheral_clk, MSTPCR0, 9, 0),
280 CLK("tmu012_fck", -1, &peripheral_clk, MSTPCR0, 8, 0),
281 CLK("siof_fck", -1, &peripheral_clk, MSTPCR0, 3, 0),
282 CLK("hspi_fck", -1, &peripheral_clk, MSTPCR0, 2, 0),
283
284 /* MSTPCR1 */
285 CLK("hudi_fck", -1, NULL, MSTPCR1, 19, 0),
286 CLK("ubc_fck", -1, NULL, MSTPCR1, 17, 0),
287 CLK("dmac_11_6_fck", -1, NULL, MSTPCR1, 5, 0),
288 CLK("dmac_5_0_fck", -1, NULL, MSTPCR1, 4, 0),
289 CLK("gdta_fck", -1, NULL, MSTPCR1, 0, 0),
290};
291
231int __init arch_clk_init(void) 292int __init arch_clk_init(void)
232{ 293{
233 int i, ret = 0; 294 int i, ret = 0;
234 295
235 for (i = 0; i < ARRAY_SIZE(clks); i++) 296 for (i = 0; i < ARRAY_SIZE(clks); i++)
236 ret |= clk_register(clks[i]); 297 ret |= clk_register(clks[i]);
298 for (i = 0; i < ARRAY_SIZE(mstpcr_clks); i++)
299 ret |= clk_register(&mstpcr_clks[i]);
237 300
238 return ret; 301 return ret;
239} 302}
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
index d7e77bc77e28..af561402570b 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
@@ -20,7 +20,7 @@ static struct sh_timer_config tmu0_platform_data = {
20 .name = "TMU0", 20 .name = "TMU0",
21 .channel_offset = 0x04, 21 .channel_offset = 0x04,
22 .timer_bit = 0, 22 .timer_bit = 0,
23 .clk = "peripheral_clk", 23 .clk = "tmu012_fck",
24 .clockevent_rating = 200, 24 .clockevent_rating = 200,
25}; 25};
26 26
@@ -51,7 +51,7 @@ static struct sh_timer_config tmu1_platform_data = {
51 .name = "TMU1", 51 .name = "TMU1",
52 .channel_offset = 0x10, 52 .channel_offset = 0x10,
53 .timer_bit = 1, 53 .timer_bit = 1,
54 .clk = "peripheral_clk", 54 .clk = "tmu012_fck",
55 .clocksource_rating = 200, 55 .clocksource_rating = 200,
56}; 56};
57 57
@@ -82,7 +82,7 @@ static struct sh_timer_config tmu2_platform_data = {
82 .name = "TMU2", 82 .name = "TMU2",
83 .channel_offset = 0x1c, 83 .channel_offset = 0x1c,
84 .timer_bit = 2, 84 .timer_bit = 2,
85 .clk = "peripheral_clk", 85 .clk = "tmu012_fck",
86}; 86};
87 87
88static struct resource tmu2_resources[] = { 88static struct resource tmu2_resources[] = {
@@ -112,7 +112,7 @@ static struct sh_timer_config tmu3_platform_data = {
112 .name = "TMU3", 112 .name = "TMU3",
113 .channel_offset = 0x04, 113 .channel_offset = 0x04,
114 .timer_bit = 0, 114 .timer_bit = 0,
115 .clk = "peripheral_clk", 115 .clk = "tmu345_fck",
116}; 116};
117 117
118static struct resource tmu3_resources[] = { 118static struct resource tmu3_resources[] = {
@@ -142,7 +142,7 @@ static struct sh_timer_config tmu4_platform_data = {
142 .name = "TMU4", 142 .name = "TMU4",
143 .channel_offset = 0x10, 143 .channel_offset = 0x10,
144 .timer_bit = 1, 144 .timer_bit = 1,
145 .clk = "peripheral_clk", 145 .clk = "tmu345_fck",
146}; 146};
147 147
148static struct resource tmu4_resources[] = { 148static struct resource tmu4_resources[] = {
@@ -172,7 +172,7 @@ static struct sh_timer_config tmu5_platform_data = {
172 .name = "TMU5", 172 .name = "TMU5",
173 .channel_offset = 0x1c, 173 .channel_offset = 0x1c,
174 .timer_bit = 2, 174 .timer_bit = 2,
175 .clk = "peripheral_clk", 175 .clk = "tmu345_fck",
176}; 176};
177 177
178static struct resource tmu5_resources[] = { 178static struct resource tmu5_resources[] = {
@@ -204,31 +204,37 @@ static struct plat_sci_port sci_platform_data[] = {
204 .flags = UPF_BOOT_AUTOCONF, 204 .flags = UPF_BOOT_AUTOCONF,
205 .type = PORT_SCIF, 205 .type = PORT_SCIF,
206 .irqs = { 40, 40, 40, 40 }, 206 .irqs = { 40, 40, 40, 40 },
207 .clk = "scif_fck",
207 }, { 208 }, {
208 .mapbase = 0xffeb0000, 209 .mapbase = 0xffeb0000,
209 .flags = UPF_BOOT_AUTOCONF, 210 .flags = UPF_BOOT_AUTOCONF,
210 .type = PORT_SCIF, 211 .type = PORT_SCIF,
211 .irqs = { 44, 44, 44, 44 }, 212 .irqs = { 44, 44, 44, 44 },
213 .clk = "scif_fck",
212 }, { 214 }, {
213 .mapbase = 0xffec0000, 215 .mapbase = 0xffec0000,
214 .flags = UPF_BOOT_AUTOCONF, 216 .flags = UPF_BOOT_AUTOCONF,
215 .type = PORT_SCIF, 217 .type = PORT_SCIF,
216 .irqs = { 60, 60, 60, 60 }, 218 .irqs = { 60, 60, 60, 60 },
219 .clk = "scif_fck",
217 }, { 220 }, {
218 .mapbase = 0xffed0000, 221 .mapbase = 0xffed0000,
219 .flags = UPF_BOOT_AUTOCONF, 222 .flags = UPF_BOOT_AUTOCONF,
220 .type = PORT_SCIF, 223 .type = PORT_SCIF,
221 .irqs = { 61, 61, 61, 61 }, 224 .irqs = { 61, 61, 61, 61 },
225 .clk = "scif_fck",
222 }, { 226 }, {
223 .mapbase = 0xffee0000, 227 .mapbase = 0xffee0000,
224 .flags = UPF_BOOT_AUTOCONF, 228 .flags = UPF_BOOT_AUTOCONF,
225 .type = PORT_SCIF, 229 .type = PORT_SCIF,
226 .irqs = { 62, 62, 62, 62 }, 230 .irqs = { 62, 62, 62, 62 },
231 .clk = "scif_fck",
227 }, { 232 }, {
228 .mapbase = 0xffef0000, 233 .mapbase = 0xffef0000,
229 .flags = UPF_BOOT_AUTOCONF, 234 .flags = UPF_BOOT_AUTOCONF,
230 .type = PORT_SCIF, 235 .type = PORT_SCIF,
231 .irqs = { 63, 63, 63, 63 }, 236 .irqs = { 63, 63, 63, 63 },
237 .clk = "scif_fck",
232 }, { 238 }, {
233 .flags = 0, 239 .flags = 0,
234 } 240 }