setup.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * BRIEF MODULE DESCRIPTION
  4.  * Au1000-based board setup.
  5.  *
  6.  * Copyright 2000 MontaVista Software Inc.
  7.  * Author: MontaVista Software, Inc.
  8.  *          ppopov@mvista.com or source@mvista.com
  9.  *
  10.  *  This program is free software; you can redistribute  it and/or modify it
  11.  *  under  the terms of  the GNU General  Public License as published by the
  12.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  13.  *  option) any later version.
  14.  *
  15.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  16.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  17.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  18.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  19.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  20.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  21.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  22.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  23.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  24.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  *
  26.  *  You should have received a copy of the  GNU General Public License along
  27.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  28.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  29.  */
  30. #include <linux/config.h>
  31. #include <linux/init.h>
  32. #include <linux/sched.h>
  33. #include <linux/ioport.h>
  34. #include <linux/console.h>
  35. #include <linux/mc146818rtc.h>
  36. #include <asm/cpu.h>
  37. #include <asm/bootinfo.h>
  38. #include <asm/irq.h>
  39. #include <asm/mipsregs.h>
  40. #include <asm/reboot.h>
  41. #include <asm/au1000.h>
  42. #if defined(CONFIG_AU1000_SERIAL_CONSOLE)
  43. extern void console_setup(char *, int *);
  44. char serial_console[20];
  45. #endif
  46. void (*__wbflush) (void);
  47. extern struct rtc_ops no_rtc_ops;
  48. extern char * __init prom_getcmdline(void);
  49. extern void au1000_restart(void);
  50. extern void au1000_halt(void);
  51. extern void au1000_power_off(void);
  52. struct {
  53.     struct resource ram;
  54.     struct resource io;
  55.     struct resource sram;
  56.     struct resource flash;
  57.     struct resource boot;
  58.     struct resource pcmcia;
  59.     struct resource lcd;
  60. } au1000_resources = {
  61.     { "RAM",           0,          0x3FFFFFF,  IORESOURCE_MEM },
  62.     { "I/O",           0x10000000, 0x119FFFFF                 },
  63.     { "SRAM",          0x1e000000, 0x1E03FFFF                 },
  64.     { "System Flash",  0x1F800000, 0x1FBFFFFF                 },
  65.     { "Boot ROM",      0x1FC00000, 0x1FFFFFFF                 },
  66.     { "PCMCIA",        0x20000000, 0x27FFFFFF                 },
  67.     { "LCD",           0x60000000, 0x603FFFFF                 },
  68. };
  69. void au1000_wbflush(void)
  70. {
  71. __asm__ volatile ("sync");
  72. }
  73. void __init au1000_setup(void)
  74. {
  75. char *argptr;
  76. argptr = prom_getcmdline();
  77. #ifdef CONFIG_AU1000_SERIAL_CONSOLE
  78. if ((argptr = strstr(argptr, "console=ttyS0")) == NULL) {
  79. argptr = prom_getcmdline();
  80. strcat(argptr, " console=ttyS0,115200");
  81. }
  82. #endif   
  83. //set_cp0_status(ST0_FR,0);
  84. rtc_ops = &no_rtc_ops;
  85.         __wbflush = au1000_wbflush;
  86. _machine_restart = au1000_restart;
  87. _machine_halt = au1000_halt;
  88. _machine_power_off = au1000_power_off;
  89. /*
  90.  * IO/MEM resources. 
  91.  */
  92. mips_io_port_base = KSEG1;
  93. ioport_resource.start = au1000_resources.io.start;
  94. ioport_resource.end = au1000_resources.lcd.end;
  95. #ifdef CONFIG_BLK_DEV_INITRD
  96. ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
  97. #endif
  98. outl(PC_CNTRL_E0 | PC_CNTRL_EN0 | PC_CNTRL_EN0, PC_COUNTER_CNTRL);
  99. while (inl(PC_COUNTER_CNTRL) & PC_CNTRL_T0S);
  100. outl(0x8000-1, PC0_TRIM);
  101. printk("Alchemy Semi PB1000 Boardn");
  102. printk("Au1000/PB1000 port (C) 2001 MontaVista Software, Inc. (source@mvista.com)n");
  103. }