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;
|
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();
|
||||||
|
@ -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 *) { }
|
||||||
};
|
};
|
||||||
|
@ -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(); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user