7 Kernel_thread::free_initcall_section()
9 //memset( &_initcall_start, 0, &_initcall_end - &_initcall_start );
14 Kernel_thread::bootstrap_arch()
21 //--------------------------------------------------------------------------
26 Kernel_thread::boot_app_cpus()
30 //--------------------------------------------------------------------------
34 #include "platform_control.h"
35 #include "outer_cache.h"
41 Kernel_thread::boot_app_cpus()
43 if (Config::Max_num_cpus <= 1)
46 extern char _tramp_mp_entry[];
47 extern volatile Mword _tramp_mp_startup_cp15_c1;
48 extern volatile Mword _tramp_mp_startup_pdbr;
49 extern volatile Mword _tramp_mp_startup_dcr;
50 extern volatile Mword _tramp_mp_startup_ttbcr;
51 extern volatile Mword _tramp_mp_startup_mair0;
52 extern volatile Mword _tramp_mp_startup_mair1;
56 unsigned num_ap_cpus = Cpu::scu->config() & 3;
57 printf("Number of CPUs: %d\n", num_ap_cpus + 1);
60 _tramp_mp_startup_cp15_c1 = Config::Cache_enabled
61 ? Cpu::Cp15_c1_cache_enabled : Cpu::Cp15_c1_cache_disabled;
62 _tramp_mp_startup_pdbr
63 = Kmem_space::kdir()->virt_to_phys((Address)Kmem_space::kdir()) | Page::Ttbr_bits;
64 _tramp_mp_startup_ttbcr = Page::Ttbcr_bits;
65 _tramp_mp_startup_mair0 = Page::Mair0_prrr_bits;
66 _tramp_mp_startup_mair1 = Page::Mair1_nmrr_bits;
67 _tramp_mp_startup_dcr = 0x55555555;
69 __asm__ __volatile__ ("" : : : "memory");
70 Mem_unit::clean_dcache();
72 Outer_cache::clean(Kmem_space::kdir()->virt_to_phys((Address)&_tramp_mp_startup_cp15_c1));
73 Outer_cache::clean(Kmem_space::kdir()->virt_to_phys((Address)&_tramp_mp_startup_pdbr));
74 Outer_cache::clean(Kmem_space::kdir()->virt_to_phys((Address)&_tramp_mp_startup_dcr));
75 Outer_cache::clean(Kmem_space::kdir()->virt_to_phys((Address)&_tramp_mp_startup_ttbcr));
76 Outer_cache::clean(Kmem_space::kdir()->virt_to_phys((Address)&_tramp_mp_startup_mair0));
78 Platform_control::boot_ap_cpus(Kmem_space::kdir()->virt_to_phys((Address)_tramp_mp_entry));
81 //--------------------------------------------------------------------------
82 IMPLEMENTATION [arm && generic_tickless_idle]:
85 #include "processor.h"
87 PROTECTED inline NEEDS["processor.h", "mem_unit.h"]
89 Kernel_thread::arch_tickless_idle(unsigned)
91 Mem_unit::tlb_flush();
95 PROTECTED inline NEEDS["processor.h"]
97 Kernel_thread::arch_idle(unsigned)