hw & arm_v7: enable branch prediction

fix #474
This commit is contained in:
Martin Stein 2014-08-07 11:50:13 +02:00 committed by Norman Feske
parent 9da42dde2f
commit c03b277a34
3 changed files with 10 additions and 2 deletions

View File

@ -224,6 +224,7 @@ class Genode::Arm_v7 : public Arm
access_t v = 0; access_t v = 0;
init_common(v); init_common(v);
Arm::Sctlr::init_virt_kernel(v); Arm::Sctlr::init_virt_kernel(v);
Z::set(v, 1);
return v; return v;
} }
@ -264,6 +265,12 @@ class Genode::Arm_v7 : public Arm
} }
}; };
/**
* Invalidate all branch predictions
*/
static void inval_branch_predicts() {
asm volatile ("mcr p15, 0, r0, c7, c5, 6" ::: "r0"); };
/** /**
* Switch to the virtual mode in kernel * Switch to the virtual mode in kernel
* *
@ -278,6 +285,7 @@ class Genode::Arm_v7 : public Arm
Ttbr0::write(Ttbr0::init(table)); Ttbr0::write(Ttbr0::init(table));
Ttbcr::write(Ttbcr::init_virt_kernel()); Ttbcr::write(Ttbcr::init_virt_kernel());
Sctlr::write(Sctlr::init_virt_kernel()); Sctlr::write(Sctlr::init_virt_kernel());
inval_branch_predicts();
} }
inline static void finish_init_phys_kernel(); inline static void finish_init_phys_kernel();

View File

@ -59,7 +59,7 @@ class Genode::Cpu : public Arm_v7
** Dummies ** ** Dummies **
*************/ *************/
static void tlb_insertions() { } static void tlb_insertions() { inval_branch_predicts(); }
static void translation_added(addr_t, size_t) { } static void translation_added(addr_t, size_t) { }
static void prepare_proceeding(Cpu_lazy_state *, Cpu_lazy_state *) { } static void prepare_proceeding(Cpu_lazy_state *, Cpu_lazy_state *) { }
}; };

View File

@ -303,7 +303,7 @@ class Genode::Cpu : public Arm_v7
*************/ *************/
static void translation_added(addr_t, size_t) { } static void translation_added(addr_t, size_t) { }
static void tlb_insertions() { } static void tlb_insertions() { inval_branch_predicts(); }
}; };
void Genode::Arm_v7::finish_init_phys_kernel() { Cpu::init_advanced_fp_simd(); } void Genode::Arm_v7::finish_init_phys_kernel() { Cpu::init_advanced_fp_simd(); }