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;
init_common(v);
Arm::Sctlr::init_virt_kernel(v);
Z::set(v, 1);
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
*
@ -278,6 +285,7 @@ class Genode::Arm_v7 : public Arm
Ttbr0::write(Ttbr0::init(table));
Ttbcr::write(Ttbcr::init_virt_kernel());
Sctlr::write(Sctlr::init_virt_kernel());
inval_branch_predicts();
}
inline static void finish_init_phys_kernel();

View File

@ -59,7 +59,7 @@ class Genode::Cpu : public Arm_v7
** Dummies **
*************/
static void tlb_insertions() { }
static void tlb_insertions() { inval_branch_predicts(); }
static void translation_added(addr_t, size_t) { }
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 tlb_insertions() { }
static void tlb_insertions() { inval_branch_predicts(); }
};
void Genode::Arm_v7::finish_init_phys_kernel() { Cpu::init_advanced_fp_simd(); }