diff options
Diffstat (limited to 'arch/mips/ddb5xxx/common/prom.c')
-rw-r--r-- | arch/mips/ddb5xxx/common/prom.c | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/arch/mips/ddb5xxx/common/prom.c b/arch/mips/ddb5xxx/common/prom.c deleted file mode 100644 index 54a857b5e3ba..000000000000 --- a/arch/mips/ddb5xxx/common/prom.c +++ /dev/null | |||
@@ -1,132 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2001 MontaVista Software Inc. | ||
3 | * Author: jsun@mvista.com or jsun@junsun.net | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License as published by the | ||
7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
8 | * option) any later version. | ||
9 | */ | ||
10 | #include <linux/init.h> | ||
11 | #include <linux/mm.h> | ||
12 | #include <linux/sched.h> | ||
13 | #include <linux/bootmem.h> | ||
14 | |||
15 | #include <asm/addrspace.h> | ||
16 | #include <asm/bootinfo.h> | ||
17 | #include <asm/ddb5xxx/ddb5xxx.h> | ||
18 | #include <asm/debug.h> | ||
19 | |||
20 | const char *get_system_type(void) | ||
21 | { | ||
22 | switch (mips_machtype) { | ||
23 | case MACH_NEC_DDB5477: return "NEC DDB Vrc-5477"; | ||
24 | case MACH_NEC_ROCKHOPPER: return "NEC Rockhopper"; | ||
25 | case MACH_NEC_ROCKHOPPERII: return "NEC RockhopperII"; | ||
26 | default: return "Unknown NEC board"; | ||
27 | } | ||
28 | } | ||
29 | |||
30 | #if defined(CONFIG_DDB5477) | ||
31 | void ddb5477_runtime_detection(void); | ||
32 | #endif | ||
33 | |||
34 | /* [jsun@junsun.net] PMON passes arguments in C main() style */ | ||
35 | void __init prom_init(void) | ||
36 | { | ||
37 | int argc = fw_arg0; | ||
38 | char **arg = (char**) fw_arg1; | ||
39 | int i; | ||
40 | |||
41 | /* if user passes kernel args, ignore the default one */ | ||
42 | if (argc > 1) | ||
43 | arcs_cmdline[0] = '\0'; | ||
44 | |||
45 | /* arg[0] is "g", the rest is boot parameters */ | ||
46 | for (i = 1; i < argc; i++) { | ||
47 | if (strlen(arcs_cmdline) + strlen(arg[i] + 1) | ||
48 | >= sizeof(arcs_cmdline)) | ||
49 | break; | ||
50 | strcat(arcs_cmdline, arg[i]); | ||
51 | strcat(arcs_cmdline, " "); | ||
52 | } | ||
53 | |||
54 | mips_machgroup = MACH_GROUP_NEC_DDB; | ||
55 | |||
56 | #if defined(CONFIG_DDB5477) | ||
57 | ddb5477_runtime_detection(); | ||
58 | add_memory_region(0, board_ram_size, BOOT_MEM_RAM); | ||
59 | #endif | ||
60 | } | ||
61 | |||
62 | void __init prom_free_prom_memory(void) | ||
63 | { | ||
64 | } | ||
65 | |||
66 | #if defined(CONFIG_DDB5477) | ||
67 | |||
68 | #define DEFAULT_LCS1_BASE 0x19000000 | ||
69 | #define TESTVAL1 'K' | ||
70 | #define TESTVAL2 'S' | ||
71 | |||
72 | int board_ram_size; | ||
73 | void ddb5477_runtime_detection(void) | ||
74 | { | ||
75 | volatile char *test_offset; | ||
76 | char saved_test_byte; | ||
77 | |||
78 | /* Determine if this is a DDB5477 board, or a BSB-VR0300 | ||
79 | base board. We can tell by checking for the location of | ||
80 | the NVRAM. It lives at the beginning of LCS1 on the DDB5477, | ||
81 | and the beginning of LCS1 on the BSB-VR0300 is flash memory. | ||
82 | The first 2K of the NVRAM are reserved, so don't we'll poke | ||
83 | around just after that. | ||
84 | */ | ||
85 | |||
86 | /* We can only use the PCI bus to distinquish between | ||
87 | the Rockhopper and RockhopperII backplanes and this must | ||
88 | wait until ddb5477_board_init() in setup.c after the 5477 | ||
89 | is initialized. So, until then handle | ||
90 | both Rockhopper and RockhopperII backplanes as Rockhopper 1 | ||
91 | */ | ||
92 | |||
93 | test_offset = (char *)KSEG1ADDR(DEFAULT_LCS1_BASE + 0x800); | ||
94 | saved_test_byte = *test_offset; | ||
95 | |||
96 | *test_offset = TESTVAL1; | ||
97 | if (*test_offset != TESTVAL1) { | ||
98 | /* We couldn't set our test value, so it must not be NVRAM, | ||
99 | so it's a BSB_VR0300 */ | ||
100 | mips_machtype = MACH_NEC_ROCKHOPPER; | ||
101 | } else { | ||
102 | /* We may have gotten lucky, and the TESTVAL1 was already | ||
103 | stored at the test location, so we must check a second | ||
104 | test value */ | ||
105 | *test_offset = TESTVAL2; | ||
106 | if (*test_offset != TESTVAL2) { | ||
107 | /* OK, we couldn't set this value either, so it must | ||
108 | definately be a BSB_VR0300 */ | ||
109 | mips_machtype = MACH_NEC_ROCKHOPPER; | ||
110 | } else { | ||
111 | /* We could change the value twice, so it must be | ||
112 | NVRAM, so it's a DDB_VRC5477 */ | ||
113 | mips_machtype = MACH_NEC_DDB5477; | ||
114 | } | ||
115 | } | ||
116 | /* Restore the original byte */ | ||
117 | *test_offset = saved_test_byte; | ||
118 | |||
119 | /* before we know a better way, we will trust PMON for getting | ||
120 | * RAM size | ||
121 | */ | ||
122 | board_ram_size = 1 << (36 - (ddb_in32(DDB_SDRAM0) & 0xf)); | ||
123 | |||
124 | db_run(printk("DDB run-time detection : %s, %d MB RAM\n", | ||
125 | mips_machtype == MACH_NEC_DDB5477 ? | ||
126 | "DDB5477" : "Rockhopper", | ||
127 | board_ram_size >> 20)); | ||
128 | |||
129 | /* we can't handle ram size > 128 MB */ | ||
130 | db_assert(board_ram_size <= (128 << 20)); | ||
131 | } | ||
132 | #endif | ||