setup.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  arch/mips/philips/nino/setup.c
  3.  *
  4.  *  Copyright (C) 2001 Steven J. Hill (sjhill@realitydiluted.com)
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  *
  10.  *  Interrupt and exception initialization for Philips Nino
  11.  */
  12. #include <linux/console.h>
  13. #include <linux/init.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/sched.h>
  16. #include <asm/addrspace.h>
  17. #include <asm/io.h>
  18. #include <asm/irq.h>
  19. #include <asm/reboot.h>
  20. #include <asm/time.h>
  21. #include <asm/tx3912.h>
  22. static void nino_machine_restart(char *command)
  23. {
  24. static void (*back_to_prom)(void) = (void (*)(void)) 0xbfc00000;
  25. /* Reboot */
  26. back_to_prom();
  27. }
  28. static void nino_machine_halt(void)
  29. {
  30. printk("Nino halted.n");
  31. while(1);
  32. }
  33. static void nino_machine_power_off(void)
  34. {
  35. printk("Nino halted. Please turn off power.n");
  36. while(1);
  37. }
  38. static void __init nino_board_init()
  39. {
  40. /*
  41.  * Set up the master clock module. The value set in
  42.  * the Clock Control Register by WindowsCE is 0x00432ba.
  43.  * We set a few values here and let the device drivers
  44.  * handle the rest.
  45.  *
  46.  * NOTE: The UART clocks must be enabled here to provide
  47.  *       enough time for them to settle.
  48.  */
  49. outl(0x00000000, TX3912_CLK_CTRL);
  50. outl((TX3912_CLK_CTRL_SIBMCLKDIR | TX3912_CLK_CTRL_SIBMCLKDIV_2 |
  51. TX3912_CLK_CTRL_ENSIBMCLK | TX3912_CLK_CTRL_CSERSEL |
  52. TX3912_CLK_CTRL_CSERDIV_3 | TX3912_CLK_CTRL_ENCSERCLK |
  53. TX3912_CLK_CTRL_ENUARTACLK | TX3912_CLK_CTRL_ENUARTBCLK),
  54. TX3912_CLK_CTRL);
  55. }
  56. static __init void nino_time_init(void)
  57. {
  58. /* Load the counter and enable the timer */
  59. outl(TX3912_SYS_TIMER_VALUE, TX3912_TIMER_PERIOD);
  60. outl(TX3912_TIMER_CTRL_ENPERTIMER, TX3912_TIMER_CTRL);
  61. /* Enable the master timer clock */
  62. outl(inl(TX3912_CLK_CTRL) | TX3912_CLK_CTRL_ENTIMERCLK,
  63. TX3912_CLK_CTRL);
  64. /* Enable the interrupt */
  65. outl(inl(TX3912_INT5_ENABLE) | TX3912_INT5_PERINT,
  66. TX3912_INT5_ENABLE);
  67. }
  68. static __init void nino_timer_setup(struct irqaction *irq)
  69. {
  70. irq->dev_id = (void *) irq;
  71. setup_irq(0, irq);
  72. }
  73. void __init nino_setup(void)
  74. {
  75. extern void nino_irq_setup(void);
  76. extern void nino_wait(void);
  77. irq_setup = nino_irq_setup;
  78. set_io_port_base(KSEG1ADDR(0x10c00000));
  79. _machine_restart = nino_machine_restart;
  80. _machine_halt = nino_machine_halt;
  81. _machine_power_off = nino_machine_power_off;
  82. board_time_init = nino_time_init;
  83. board_timer_setup = nino_timer_setup;
  84. cpu_wait = nino_wait;
  85. #ifdef CONFIG_FB
  86. conswitchp = &dummy_con;
  87. #endif
  88. nino_board_init();
  89. }