diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2008-09-01 09:22:36 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2008-10-11 11:18:47 -0400 |
commit | f6d9831bb11eb465f95fb1736b866d405d9c7cbf (patch) | |
tree | fb3a2c4dc2d31f7b085583ebeb4994c4c2816130 /arch/mips/txx9 | |
parent | 9bed90c6a46f10c2d3052c0585057a5cb7392b92 (diff) |
MIPS: TXx9: stop_unused_modules
TXx9 SoCs have pin multiplex. Stop some controller modules which can
not be used due to pin configurations.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/txx9')
-rw-r--r-- | arch/mips/txx9/generic/setup_tx4927.c | 31 | ||||
-rw-r--r-- | arch/mips/txx9/generic/setup_tx4938.c | 56 |
2 files changed, 87 insertions, 0 deletions
diff --git a/arch/mips/txx9/generic/setup_tx4927.c b/arch/mips/txx9/generic/setup_tx4927.c index c4248cbbd84a..914e93c62639 100644 --- a/arch/mips/txx9/generic/setup_tx4927.c +++ b/arch/mips/txx9/generic/setup_tx4927.c | |||
@@ -252,3 +252,34 @@ void __init tx4927_mtd_init(int ch) | |||
252 | return; /* disabled */ | 252 | return; /* disabled */ |
253 | txx9_physmap_flash_init(ch, start, size, &pdata); | 253 | txx9_physmap_flash_init(ch, start, size, &pdata); |
254 | } | 254 | } |
255 | |||
256 | static void __init tx4927_stop_unused_modules(void) | ||
257 | { | ||
258 | __u64 pcfg, rst = 0, ckd = 0; | ||
259 | char buf[128]; | ||
260 | |||
261 | buf[0] = '\0'; | ||
262 | local_irq_disable(); | ||
263 | pcfg = ____raw_readq(&tx4927_ccfgptr->pcfg); | ||
264 | if (!(pcfg & TX4927_PCFG_SEL2)) { | ||
265 | rst |= TX4927_CLKCTR_ACLRST; | ||
266 | ckd |= TX4927_CLKCTR_ACLCKD; | ||
267 | strcat(buf, " ACLC"); | ||
268 | } | ||
269 | if (rst | ckd) { | ||
270 | txx9_set64(&tx4927_ccfgptr->clkctr, rst); | ||
271 | txx9_set64(&tx4927_ccfgptr->clkctr, ckd); | ||
272 | } | ||
273 | local_irq_enable(); | ||
274 | if (buf[0]) | ||
275 | pr_info("%s: stop%s\n", txx9_pcode_str, buf); | ||
276 | } | ||
277 | |||
278 | static int __init tx4927_late_init(void) | ||
279 | { | ||
280 | if (txx9_pcode != 0x4927) | ||
281 | return -ENODEV; | ||
282 | tx4927_stop_unused_modules(); | ||
283 | return 0; | ||
284 | } | ||
285 | late_initcall(tx4927_late_init); | ||
diff --git a/arch/mips/txx9/generic/setup_tx4938.c b/arch/mips/txx9/generic/setup_tx4938.c index 0d8517ad3ad0..af724e53ef91 100644 --- a/arch/mips/txx9/generic/setup_tx4938.c +++ b/arch/mips/txx9/generic/setup_tx4938.c | |||
@@ -334,3 +334,59 @@ void __init tx4938_mtd_init(int ch) | |||
334 | return; /* disabled */ | 334 | return; /* disabled */ |
335 | txx9_physmap_flash_init(ch, start, size, &pdata); | 335 | txx9_physmap_flash_init(ch, start, size, &pdata); |
336 | } | 336 | } |
337 | |||
338 | static void __init tx4938_stop_unused_modules(void) | ||
339 | { | ||
340 | __u64 pcfg, rst = 0, ckd = 0; | ||
341 | char buf[128]; | ||
342 | |||
343 | buf[0] = '\0'; | ||
344 | local_irq_disable(); | ||
345 | pcfg = ____raw_readq(&tx4938_ccfgptr->pcfg); | ||
346 | switch (txx9_pcode) { | ||
347 | case 0x4937: | ||
348 | if (!(pcfg & TX4938_PCFG_SEL2)) { | ||
349 | rst |= TX4938_CLKCTR_ACLRST; | ||
350 | ckd |= TX4938_CLKCTR_ACLCKD; | ||
351 | strcat(buf, " ACLC"); | ||
352 | } | ||
353 | break; | ||
354 | case 0x4938: | ||
355 | if (!(pcfg & TX4938_PCFG_SEL2) || | ||
356 | (pcfg & TX4938_PCFG_ETH0_SEL)) { | ||
357 | rst |= TX4938_CLKCTR_ACLRST; | ||
358 | ckd |= TX4938_CLKCTR_ACLCKD; | ||
359 | strcat(buf, " ACLC"); | ||
360 | } | ||
361 | if ((pcfg & | ||
362 | (TX4938_PCFG_ATA_SEL | TX4938_PCFG_ISA_SEL | | ||
363 | TX4938_PCFG_NDF_SEL)) | ||
364 | != TX4938_PCFG_NDF_SEL) { | ||
365 | rst |= TX4938_CLKCTR_NDFRST; | ||
366 | ckd |= TX4938_CLKCTR_NDFCKD; | ||
367 | strcat(buf, " NDFMC"); | ||
368 | } | ||
369 | if (!(pcfg & TX4938_PCFG_SPI_SEL)) { | ||
370 | rst |= TX4938_CLKCTR_SPIRST; | ||
371 | ckd |= TX4938_CLKCTR_SPICKD; | ||
372 | strcat(buf, " SPI"); | ||
373 | } | ||
374 | break; | ||
375 | } | ||
376 | if (rst | ckd) { | ||
377 | txx9_set64(&tx4938_ccfgptr->clkctr, rst); | ||
378 | txx9_set64(&tx4938_ccfgptr->clkctr, ckd); | ||
379 | } | ||
380 | local_irq_enable(); | ||
381 | if (buf[0]) | ||
382 | pr_info("%s: stop%s\n", txx9_pcode_str, buf); | ||
383 | } | ||
384 | |||
385 | static int __init tx4938_late_init(void) | ||
386 | { | ||
387 | if (txx9_pcode != 0x4937 && txx9_pcode != 0x4938) | ||
388 | return -ENODEV; | ||
389 | tx4938_stop_unused_modules(); | ||
390 | return 0; | ||
391 | } | ||
392 | late_initcall(tx4938_late_init); | ||