1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/init.h>
14#include <linux/mm.h>
15#include <linux/bootmem.h>
16#include <asm/pgtable.h>
17#include <linux/seq_file.h>
18#include <linux/screen_info.h>
19#include <linux/utsname.h>
20#include <linux/pfn.h>
21#include <linux/cpu.h>
22#include <linux/of.h>
23#include <linux/of_fdt.h>
24#include <asm/setup.h>
25#include <arch/system.h>
26
27
28
29
30struct screen_info screen_info;
31
32extern int root_mountflags;
33extern char _etext, _edata, _end;
34
35char __initdata cris_command_line[COMMAND_LINE_SIZE] = { 0, };
36
37extern const unsigned long text_start, edata;
38extern unsigned long dram_start, dram_end;
39
40extern unsigned long romfs_start, romfs_length, romfs_in_flash;
41
42static struct cpu cpu_devices[NR_CPUS];
43
44extern void show_etrax_copyright(void);
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62void __init setup_arch(char **cmdline_p)
63{
64 extern void init_etrax_debug(void);
65 unsigned long bootmap_size;
66 unsigned long start_pfn, max_pfn;
67 unsigned long memory_start;
68
69#ifdef CONFIG_OF
70 early_init_dt_scan(__dtb_start);
71#endif
72
73
74
75 init_etrax_debug();
76
77
78
79 high_memory = &dram_end;
80
81 if(romfs_in_flash || !romfs_length) {
82
83
84
85 memory_start = (unsigned long) &_end;
86 } else {
87
88 printk("ROM fs in RAM, size %lu bytes\n", romfs_length);
89 memory_start = romfs_start + romfs_length;
90 }
91
92
93
94 init_mm.start_code = (unsigned long) &text_start;
95 init_mm.end_code = (unsigned long) &_etext;
96 init_mm.end_data = (unsigned long) &_edata;
97 init_mm.brk = (unsigned long) &_end;
98
99
100
101
102
103
104
105
106
107
108
109 start_pfn = PFN_UP(memory_start);
110 max_pfn = PFN_DOWN((unsigned long)high_memory);
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 max_low_pfn = max_pfn;
129 min_low_pfn = PAGE_OFFSET >> PAGE_SHIFT;
130
131 bootmap_size = init_bootmem_node(NODE_DATA(0), start_pfn,
132 min_low_pfn,
133 max_low_pfn);
134
135
136
137 free_bootmem(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn - start_pfn));
138
139
140
141
142
143
144
145
146
147
148 reserve_bootmem(PFN_PHYS(start_pfn), bootmap_size, BOOTMEM_DEFAULT);
149
150 unflatten_and_copy_device_tree();
151
152
153
154 paging_init();
155
156 *cmdline_p = cris_command_line;
157
158#ifdef CONFIG_ETRAX_CMDLINE
159 if (!strcmp(cris_command_line, "")) {
160 strlcpy(cris_command_line, CONFIG_ETRAX_CMDLINE, COMMAND_LINE_SIZE);
161 cris_command_line[COMMAND_LINE_SIZE - 1] = '\0';
162 }
163#endif
164
165
166 memcpy(boot_command_line, cris_command_line, COMMAND_LINE_SIZE);
167 boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
168
169
170 show_etrax_copyright();
171
172
173 strcpy(init_utsname()->machine, cris_machine_name);
174}
175
176#ifdef CONFIG_PROC_FS
177static void *c_start(struct seq_file *m, loff_t *pos)
178{
179 return *pos < nr_cpu_ids ? (void *)(int)(*pos + 1) : NULL;
180}
181
182static void *c_next(struct seq_file *m, void *v, loff_t *pos)
183{
184 ++*pos;
185 return c_start(m, pos);
186}
187
188static void c_stop(struct seq_file *m, void *v)
189{
190}
191
192extern int show_cpuinfo(struct seq_file *m, void *v);
193
194const struct seq_operations cpuinfo_op = {
195 .start = c_start,
196 .next = c_next,
197 .stop = c_stop,
198 .show = show_cpuinfo,
199};
200#endif
201
202static int __init topology_init(void)
203{
204 int i;
205
206 for_each_possible_cpu(i) {
207 return register_cpu(&cpu_devices[i], i);
208 }
209
210 return 0;
211}
212
213subsys_initcall(topology_init);
214