]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/startup-arm.cpp
56f772583d779c27d96e5c9990611ad57357c105
[l4.git] / kernel / fiasco / src / kern / arm / startup-arm.cpp
1 IMPLEMENTATION [arm]:
2
3 #include "boot_info.h"
4 #include "config.h"
5 #include "cpu.h"
6 #include "fpu.h"
7 #include "ipi.h"
8 #include "kern_lib_page.h"
9 #include "kernel_task.h"
10 #include "kip_init.h"
11 #include "kmem_alloc.h"
12 #include "kmem_space.h"
13 #include "per_cpu_data.h"
14 #include "per_cpu_data_alloc.h"
15 #include "perf_cnt.h"
16 #include "pic.h"
17 #include "platform_control.h"
18 #include "processor.h"
19 #include "static_init.h"
20 #include "thread.h"
21 #include "timer.h"
22 #include "utcb_init.h"
23
24 #include <cstdlib>
25 #include <cstdio>
26
27 IMPLEMENT FIASCO_INIT FIASCO_NOINLINE
28 void
29 Startup::stage1()
30 {
31   Proc::cli();
32   Boot_info::init();
33   Cpu::early_init();
34   Config::init();
35 }
36
37 IMPLEMENT FIASCO_INIT FIASCO_NOINLINE
38 void
39 Startup::stage2()
40 {
41   puts("Hello from Startup::stage2");
42
43   // The first 4MB of phys memory are always mapped to Map_base
44   Mem_layout::add_pmem(Mem_layout::Sdram_phys_base, Mem_layout::Map_base,
45                        4 << 20);
46   Kip_init::init();
47   Kmem_alloc::init();
48
49   // Initialize cpu-local data management and run constructors for CPU 0
50   Per_cpu_data::init_ctors();
51   Per_cpu_data_alloc::alloc(0);
52   Per_cpu_data::run_ctors(0);
53
54   Kmem_space::init();
55   Kernel_task::init();
56   Mem_space::kernel_space(Kernel_task::kernel_task());
57   Pic::init();
58   Thread::init_per_cpu(0);
59
60   Cpu::init_mmu();
61   Cpu::cpus.cpu(0).init(true);
62   Platform_control::init(0);
63   Fpu::init(0);
64   Ipi::init(0);
65   Timer::init(0);
66   Kern_lib_page::init();
67   Utcb_init::init();
68 }