diff options
author | Hollis Blanchard <hollisb@us.ibm.com> | 2009-01-03 17:23:13 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-03-24 05:02:59 -0400 |
commit | bb3a8a178dec1e46df3138a30f76acf67fe12397 (patch) | |
tree | 175effadbcdc3efb79e6b96a9f307052afaba46b /arch/powerpc/kvm/e500_emulate.c | |
parent | bdc89f13ec955c14777d5caf02dfca3f51d639bd (diff) |
KVM: ppc: Add extra E500 exceptions
e500 has additional interrupt vectors (and corresponding IVORs) for SPE and
performance monitoring interrupts.
Signed-off-by: Liu Yu <yu.liu@freescale.com>
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kvm/e500_emulate.c')
-rw-r--r-- | arch/powerpc/kvm/e500_emulate.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c index a47f44cd2cfd..d3c0c7c7f209 100644 --- a/arch/powerpc/kvm/e500_emulate.c +++ b/arch/powerpc/kvm/e500_emulate.c | |||
@@ -107,6 +107,20 @@ int kvmppc_core_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs) | |||
107 | case SPRN_HID1: | 107 | case SPRN_HID1: |
108 | vcpu_e500->hid1 = vcpu->arch.gpr[rs]; break; | 108 | vcpu_e500->hid1 = vcpu->arch.gpr[rs]; break; |
109 | 109 | ||
110 | /* extra exceptions */ | ||
111 | case SPRN_IVOR32: | ||
112 | vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL] = vcpu->arch.gpr[rs]; | ||
113 | break; | ||
114 | case SPRN_IVOR33: | ||
115 | vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA] = vcpu->arch.gpr[rs]; | ||
116 | break; | ||
117 | case SPRN_IVOR34: | ||
118 | vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND] = vcpu->arch.gpr[rs]; | ||
119 | break; | ||
120 | case SPRN_IVOR35: | ||
121 | vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR] = vcpu->arch.gpr[rs]; | ||
122 | break; | ||
123 | |||
110 | default: | 124 | default: |
111 | emulated = kvmppc_booke_emulate_mtspr(vcpu, sprn, rs); | 125 | emulated = kvmppc_booke_emulate_mtspr(vcpu, sprn, rs); |
112 | } | 126 | } |
@@ -160,6 +174,19 @@ int kvmppc_core_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt) | |||
160 | case SPRN_HID1: | 174 | case SPRN_HID1: |
161 | vcpu->arch.gpr[rt] = vcpu_e500->hid1; break; | 175 | vcpu->arch.gpr[rt] = vcpu_e500->hid1; break; |
162 | 176 | ||
177 | /* extra exceptions */ | ||
178 | case SPRN_IVOR32: | ||
179 | vcpu->arch.gpr[rt] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_UNAVAIL]; | ||
180 | break; | ||
181 | case SPRN_IVOR33: | ||
182 | vcpu->arch.gpr[rt] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_DATA]; | ||
183 | break; | ||
184 | case SPRN_IVOR34: | ||
185 | vcpu->arch.gpr[rt] = vcpu->arch.ivor[BOOKE_IRQPRIO_SPE_FP_ROUND]; | ||
186 | break; | ||
187 | case SPRN_IVOR35: | ||
188 | vcpu->arch.gpr[rt] = vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR]; | ||
189 | break; | ||
163 | default: | 190 | default: |
164 | emulated = kvmppc_booke_emulate_mfspr(vcpu, sprn, rt); | 191 | emulated = kvmppc_booke_emulate_mfspr(vcpu, sprn, rt); |
165 | } | 192 | } |