|
@@ -391,6 +391,22 @@ static int kvmppc_e500_gtlbe_invalidate(struct kvmppc_vcpu_e500 *vcpu_e500,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int kvmppc_e500_emul_mt_mmucsr0(struct kvmppc_vcpu_e500 *vcpu_e500, ulong value)
|
|
|
+{
|
|
|
+ int esel;
|
|
|
+
|
|
|
+ if (value & MMUCSR0_TLB0FI)
|
|
|
+ for (esel = 0; esel < vcpu_e500->guest_tlb_size[0]; esel++)
|
|
|
+ kvmppc_e500_gtlbe_invalidate(vcpu_e500, 0, esel);
|
|
|
+ if (value & MMUCSR0_TLB1FI)
|
|
|
+ for (esel = 0; esel < vcpu_e500->guest_tlb_size[1]; esel++)
|
|
|
+ kvmppc_e500_gtlbe_invalidate(vcpu_e500, 1, esel);
|
|
|
+
|
|
|
+ _tlbil_all();
|
|
|
+
|
|
|
+ return EMULATE_DONE;
|
|
|
+}
|
|
|
+
|
|
|
int kvmppc_e500_emul_tlbivax(struct kvm_vcpu *vcpu, int ra, int rb)
|
|
|
{
|
|
|
struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
|