Blame view

arch/mips/sgi-ip32/ip32-setup.c 2.35 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /*
   * IP32 basic setup
   *
   * This file is subject to the terms and conditions of the GNU General Public
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
   * Copyright (C) 2000 Harald Koerfgen
   * Copyright (C) 2002, 2003, 2005 Ilya A. Volynets
54d0a216f   Ralf Baechle   [MIPS] Replace bo...
10
   * Copyright (C) 2006 Ralf Baechle <ralf@linux-mips.org>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  #include <linux/console.h>
  #include <linux/init.h>
  #include <linux/interrupt.h>
  #include <linux/mc146818rtc.h>
  #include <linux/param.h>
  #include <linux/sched.h>
  
  #include <asm/bootinfo.h>
  #include <asm/mc146818-time.h>
  #include <asm/mipsregs.h>
  #include <asm/mmu_context.h>
  #include <asm/sgialib.h>
  #include <asm/time.h>
  #include <asm/traps.h>
  #include <asm/io.h>
  #include <asm/ip32/crime.h>
  #include <asm/ip32/mace.h>
  #include <asm/ip32/ip32_ints.h>
  
  extern void ip32_be_init(void);
  extern void crime_init(void);
  
  #ifdef CONFIG_SGI_O2MACE_ETH
  /*
   * This is taken care of in here 'cause they say using Arc later on is
   * problematic
   */
  extern char o2meth_eaddr[8];
  static inline unsigned char str2hexnum(unsigned char c)
  {
  	if (c >= '0' && c <= '9')
  		return c - '0';
  	if (c >= 'a' && c <= 'f')
  		return c - 'a' + 10;
  	return 0; /* foo */
  }
  
  static inline void str2eaddr(unsigned char *ea, unsigned char *str)
  {
  	int i;
  
  	for (i = 0; i < 6; i++) {
  		unsigned char num;
  
  		if(*str == ':')
  			str++;
  		num = str2hexnum(*str++) << 4;
  		num |= (str2hexnum(*str++));
  		ea[i] = num;
  	}
  }
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
  /* An arbitrary time; this can be decreased if reliability looks good */
  #define WAIT_MS 10
4b550488f   Ralf Baechle   [MIPS] Deforest t...
66
  void __init plat_time_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
70
71
72
73
74
75
  {
  	printk(KERN_INFO "Calibrating system timer... ");
  	write_c0_count(0);
  	crime->timer = 0;
  	while (crime->timer < CRIME_MASTER_FREQ * WAIT_MS / 1000) ;
  	mips_hpt_frequency = read_c0_count() * 1000 / WAIT_MS;
  	printk("%d MHz CPU detected
  ", mips_hpt_frequency * 2 / 1000000);
  }
2925aba42   Ralf Baechle   [MIPS] Cleanup me...
76
  void __init plat_mem_setup(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
77
78
  {
  	board_be_init = ip32_be_init;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
79
80
81
82
83
84
85
86
87
88
89
  #ifdef CONFIG_SGI_O2MACE_ETH
  	{
  		char *mac = ArcGetEnvironmentVariable("eaddr");
  		str2eaddr(o2meth_eaddr, mac);
  	}
  #endif
  
  #if defined(CONFIG_SERIAL_CORE_CONSOLE)
  	{
  		char* con = ArcGetEnvironmentVariable("console");
  		if (con && *con == 'd') {
599a89459   Dmitri Vorobiev   MIPS: Move severa...
90
  			static char options[8] __initdata;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91
92
93
94
95
96
97
98
  			char *baud = ArcGetEnvironmentVariable("dbaud");
  			if (baud)
  				strcpy(options, baud);
  			add_preferred_console("ttyS", *(con + 1) == '2' ? 1 : 0,
  					      baud ? options : NULL);
  		}
  	}
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
99
  }