mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-01 08:48:20 +00:00
parent
9da42dde2f
commit
c03b277a34
@ -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();
|
||||
|
@ -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 *) { }
|
||||
};
|
||||
|
@ -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(); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user