2 * PowerPC implementation of KVM hooks
4 * Copyright IBM Corp. 2007
5 * Copyright (C) 2011 Freescale Semiconductor, Inc.
8 * Jerone Young <jyoung5@us.ibm.com>
9 * Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
10 * Hollis Blanchard <hollisb@us.ibm.com>
12 * This work is licensed under the terms of the GNU GPL, version 2 or later.
13 * See the COPYING file in the top-level directory.
18 #include <sys/types.h>
19 #include <sys/ioctl.h>
22 #include <linux/kvm.h>
24 #include "qemu-common.h"
25 #include "qemu-timer.h"
31 #include "device_tree.h"
32 #include "hw/sysbus.h"
35 #include "hw/sysbus.h"
37 #include "hw/spapr_vio.h"
42 #define dprintf(fmt, ...) \
43 do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
45 #define dprintf(fmt, ...) \
49 #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/"
51 const KVMCapabilityInfo kvm_arch_required_capabilities
[] = {
55 static int cap_interrupt_unset
= false;
56 static int cap_interrupt_level
= false;
57 static int cap_segstate
;
58 static int cap_booke_sregs
;
59 static int cap_ppc_smt
;
60 static int cap_ppc_rma
;
61 static int cap_spapr_tce
;
63 /* XXX We have a race condition where we actually have a level triggered
64 * interrupt, but the infrastructure can't expose that yet, so the guest
65 * takes but ignores it, goes to sleep and never gets notified that there's
66 * still an interrupt pending.
68 * As a quick workaround, let's just wake up again 20 ms after we injected
69 * an interrupt. That way we can assure that we're always reinjecting
70 * interrupts in case the guest swallowed them.
72 static QEMUTimer
*idle_timer
;
74 static void kvm_kick_env(void *env
)
79 int kvm_arch_init(KVMState
*s
)
81 cap_interrupt_unset
= kvm_check_extension(s
, KVM_CAP_PPC_UNSET_IRQ
);
82 cap_interrupt_level
= kvm_check_extension(s
, KVM_CAP_PPC_IRQ_LEVEL
);
83 cap_segstate
= kvm_check_extension(s
, KVM_CAP_PPC_SEGSTATE
);
84 cap_booke_sregs
= kvm_check_extension(s
, KVM_CAP_PPC_BOOKE_SREGS
);
85 cap_ppc_smt
= kvm_check_extension(s
, KVM_CAP_PPC_SMT
);
86 cap_ppc_rma
= kvm_check_extension(s
, KVM_CAP_PPC_RMA
);
87 cap_spapr_tce
= kvm_check_extension(s
, KVM_CAP_SPAPR_TCE
);
89 if (!cap_interrupt_level
) {
90 fprintf(stderr
, "KVM: Couldn't find level irq capability. Expect the "
91 "VM to stall at times!\n");
97 static int kvm_arch_sync_sregs(CPUPPCState
*cenv
)
99 struct kvm_sregs sregs
;
102 if (cenv
->excp_model
== POWERPC_EXCP_BOOKE
) {
103 /* What we're really trying to say is "if we're on BookE, we use
104 the native PVR for now". This is the only sane way to check
105 it though, so we potentially confuse users that they can run
106 BookE guests on BookS. Let's hope nobody dares enough :) */
110 fprintf(stderr
, "kvm error: missing PVR setting capability\n");
115 ret
= kvm_vcpu_ioctl(cenv
, KVM_GET_SREGS
, &sregs
);
120 sregs
.pvr
= cenv
->spr
[SPR_PVR
];
121 return kvm_vcpu_ioctl(cenv
, KVM_SET_SREGS
, &sregs
);
124 /* Set up a shared TLB array with KVM */
125 static int kvm_booke206_tlb_init(CPUPPCState
*env
)
127 struct kvm_book3e_206_tlb_params params
= {};
128 struct kvm_config_tlb cfg
= {};
129 struct kvm_enable_cap encap
= {};
130 unsigned int entries
= 0;
133 if (!kvm_enabled() ||
134 !kvm_check_extension(env
->kvm_state
, KVM_CAP_SW_TLB
)) {
138 assert(ARRAY_SIZE(params
.tlb_sizes
) == BOOKE206_MAX_TLBN
);
140 for (i
= 0; i
< BOOKE206_MAX_TLBN
; i
++) {
141 params
.tlb_sizes
[i
] = booke206_tlb_size(env
, i
);
142 params
.tlb_ways
[i
] = booke206_tlb_ways(env
, i
);
143 entries
+= params
.tlb_sizes
[i
];
146 assert(entries
== env
->nb_tlb
);
147 assert(sizeof(struct kvm_book3e_206_tlb_entry
) == sizeof(ppcmas_tlb_t
));
149 env
->tlb_dirty
= true;
151 cfg
.array
= (uintptr_t)env
->tlb
.tlbm
;
152 cfg
.array_len
= sizeof(ppcmas_tlb_t
) * entries
;
153 cfg
.params
= (uintptr_t)¶ms
;
154 cfg
.mmu_type
= KVM_MMU_FSL_BOOKE_NOHV
;
156 encap
.cap
= KVM_CAP_SW_TLB
;
157 encap
.args
[0] = (uintptr_t)&cfg
;
159 ret
= kvm_vcpu_ioctl(env
, KVM_ENABLE_CAP
, &encap
);
161 fprintf(stderr
, "%s: couldn't enable KVM_CAP_SW_TLB: %s\n",
162 __func__
, strerror(-ret
));
166 env
->kvm_sw_tlb
= true;
170 int kvm_arch_init_vcpu(CPUPPCState
*cenv
)
174 ret
= kvm_arch_sync_sregs(cenv
);
179 idle_timer
= qemu_new_timer_ns(vm_clock
, kvm_kick_env
, cenv
);
181 /* Some targets support access to KVM's guest TLB. */
182 switch (cenv
->mmu_model
) {
183 case POWERPC_MMU_BOOKE206
:
184 ret
= kvm_booke206_tlb_init(cenv
);
193 void kvm_arch_reset_vcpu(CPUPPCState
*env
)
197 static void kvm_sw_tlb_put(CPUPPCState
*env
)
199 struct kvm_dirty_tlb dirty_tlb
;
200 unsigned char *bitmap
;
203 if (!env
->kvm_sw_tlb
) {
207 bitmap
= g_malloc((env
->nb_tlb
+ 7) / 8);
208 memset(bitmap
, 0xFF, (env
->nb_tlb
+ 7) / 8);
210 dirty_tlb
.bitmap
= (uintptr_t)bitmap
;
211 dirty_tlb
.num_dirty
= env
->nb_tlb
;
213 ret
= kvm_vcpu_ioctl(env
, KVM_DIRTY_TLB
, &dirty_tlb
);
215 fprintf(stderr
, "%s: KVM_DIRTY_TLB: %s\n",
216 __func__
, strerror(-ret
));
222 int kvm_arch_put_registers(CPUPPCState
*env
, int level
)
224 struct kvm_regs regs
;
228 ret
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
238 regs
.srr0
= env
->spr
[SPR_SRR0
];
239 regs
.srr1
= env
->spr
[SPR_SRR1
];
241 regs
.sprg0
= env
->spr
[SPR_SPRG0
];
242 regs
.sprg1
= env
->spr
[SPR_SPRG1
];
243 regs
.sprg2
= env
->spr
[SPR_SPRG2
];
244 regs
.sprg3
= env
->spr
[SPR_SPRG3
];
245 regs
.sprg4
= env
->spr
[SPR_SPRG4
];
246 regs
.sprg5
= env
->spr
[SPR_SPRG5
];
247 regs
.sprg6
= env
->spr
[SPR_SPRG6
];
248 regs
.sprg7
= env
->spr
[SPR_SPRG7
];
250 regs
.pid
= env
->spr
[SPR_BOOKE_PID
];
252 for (i
= 0;i
< 32; i
++)
253 regs
.gpr
[i
] = env
->gpr
[i
];
255 ret
= kvm_vcpu_ioctl(env
, KVM_SET_REGS
, ®s
);
259 if (env
->tlb_dirty
) {
261 env
->tlb_dirty
= false;
267 int kvm_arch_get_registers(CPUPPCState
*env
)
269 struct kvm_regs regs
;
270 struct kvm_sregs sregs
;
274 ret
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
279 for (i
= 7; i
>= 0; i
--) {
280 env
->crf
[i
] = cr
& 15;
290 env
->spr
[SPR_SRR0
] = regs
.srr0
;
291 env
->spr
[SPR_SRR1
] = regs
.srr1
;
293 env
->spr
[SPR_SPRG0
] = regs
.sprg0
;
294 env
->spr
[SPR_SPRG1
] = regs
.sprg1
;
295 env
->spr
[SPR_SPRG2
] = regs
.sprg2
;
296 env
->spr
[SPR_SPRG3
] = regs
.sprg3
;
297 env
->spr
[SPR_SPRG4
] = regs
.sprg4
;
298 env
->spr
[SPR_SPRG5
] = regs
.sprg5
;
299 env
->spr
[SPR_SPRG6
] = regs
.sprg6
;
300 env
->spr
[SPR_SPRG7
] = regs
.sprg7
;
302 env
->spr
[SPR_BOOKE_PID
] = regs
.pid
;
304 for (i
= 0;i
< 32; i
++)
305 env
->gpr
[i
] = regs
.gpr
[i
];
307 if (cap_booke_sregs
) {
308 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
313 if (sregs
.u
.e
.features
& KVM_SREGS_E_BASE
) {
314 env
->spr
[SPR_BOOKE_CSRR0
] = sregs
.u
.e
.csrr0
;
315 env
->spr
[SPR_BOOKE_CSRR1
] = sregs
.u
.e
.csrr1
;
316 env
->spr
[SPR_BOOKE_ESR
] = sregs
.u
.e
.esr
;
317 env
->spr
[SPR_BOOKE_DEAR
] = sregs
.u
.e
.dear
;
318 env
->spr
[SPR_BOOKE_MCSR
] = sregs
.u
.e
.mcsr
;
319 env
->spr
[SPR_BOOKE_TSR
] = sregs
.u
.e
.tsr
;
320 env
->spr
[SPR_BOOKE_TCR
] = sregs
.u
.e
.tcr
;
321 env
->spr
[SPR_DECR
] = sregs
.u
.e
.dec
;
322 env
->spr
[SPR_TBL
] = sregs
.u
.e
.tb
& 0xffffffff;
323 env
->spr
[SPR_TBU
] = sregs
.u
.e
.tb
>> 32;
324 env
->spr
[SPR_VRSAVE
] = sregs
.u
.e
.vrsave
;
327 if (sregs
.u
.e
.features
& KVM_SREGS_E_ARCH206
) {
328 env
->spr
[SPR_BOOKE_PIR
] = sregs
.u
.e
.pir
;
329 env
->spr
[SPR_BOOKE_MCSRR0
] = sregs
.u
.e
.mcsrr0
;
330 env
->spr
[SPR_BOOKE_MCSRR1
] = sregs
.u
.e
.mcsrr1
;
331 env
->spr
[SPR_BOOKE_DECAR
] = sregs
.u
.e
.decar
;
332 env
->spr
[SPR_BOOKE_IVPR
] = sregs
.u
.e
.ivpr
;
335 if (sregs
.u
.e
.features
& KVM_SREGS_E_64
) {
336 env
->spr
[SPR_BOOKE_EPCR
] = sregs
.u
.e
.epcr
;
339 if (sregs
.u
.e
.features
& KVM_SREGS_E_SPRG8
) {
340 env
->spr
[SPR_BOOKE_SPRG8
] = sregs
.u
.e
.sprg8
;
343 if (sregs
.u
.e
.features
& KVM_SREGS_E_IVOR
) {
344 env
->spr
[SPR_BOOKE_IVOR0
] = sregs
.u
.e
.ivor_low
[0];
345 env
->spr
[SPR_BOOKE_IVOR1
] = sregs
.u
.e
.ivor_low
[1];
346 env
->spr
[SPR_BOOKE_IVOR2
] = sregs
.u
.e
.ivor_low
[2];
347 env
->spr
[SPR_BOOKE_IVOR3
] = sregs
.u
.e
.ivor_low
[3];
348 env
->spr
[SPR_BOOKE_IVOR4
] = sregs
.u
.e
.ivor_low
[4];
349 env
->spr
[SPR_BOOKE_IVOR5
] = sregs
.u
.e
.ivor_low
[5];
350 env
->spr
[SPR_BOOKE_IVOR6
] = sregs
.u
.e
.ivor_low
[6];
351 env
->spr
[SPR_BOOKE_IVOR7
] = sregs
.u
.e
.ivor_low
[7];
352 env
->spr
[SPR_BOOKE_IVOR8
] = sregs
.u
.e
.ivor_low
[8];
353 env
->spr
[SPR_BOOKE_IVOR9
] = sregs
.u
.e
.ivor_low
[9];
354 env
->spr
[SPR_BOOKE_IVOR10
] = sregs
.u
.e
.ivor_low
[10];
355 env
->spr
[SPR_BOOKE_IVOR11
] = sregs
.u
.e
.ivor_low
[11];
356 env
->spr
[SPR_BOOKE_IVOR12
] = sregs
.u
.e
.ivor_low
[12];
357 env
->spr
[SPR_BOOKE_IVOR13
] = sregs
.u
.e
.ivor_low
[13];
358 env
->spr
[SPR_BOOKE_IVOR14
] = sregs
.u
.e
.ivor_low
[14];
359 env
->spr
[SPR_BOOKE_IVOR15
] = sregs
.u
.e
.ivor_low
[15];
361 if (sregs
.u
.e
.features
& KVM_SREGS_E_SPE
) {
362 env
->spr
[SPR_BOOKE_IVOR32
] = sregs
.u
.e
.ivor_high
[0];
363 env
->spr
[SPR_BOOKE_IVOR33
] = sregs
.u
.e
.ivor_high
[1];
364 env
->spr
[SPR_BOOKE_IVOR34
] = sregs
.u
.e
.ivor_high
[2];
367 if (sregs
.u
.e
.features
& KVM_SREGS_E_PM
) {
368 env
->spr
[SPR_BOOKE_IVOR35
] = sregs
.u
.e
.ivor_high
[3];
371 if (sregs
.u
.e
.features
& KVM_SREGS_E_PC
) {
372 env
->spr
[SPR_BOOKE_IVOR36
] = sregs
.u
.e
.ivor_high
[4];
373 env
->spr
[SPR_BOOKE_IVOR37
] = sregs
.u
.e
.ivor_high
[5];
377 if (sregs
.u
.e
.features
& KVM_SREGS_E_ARCH206_MMU
) {
378 env
->spr
[SPR_BOOKE_MAS0
] = sregs
.u
.e
.mas0
;
379 env
->spr
[SPR_BOOKE_MAS1
] = sregs
.u
.e
.mas1
;
380 env
->spr
[SPR_BOOKE_MAS2
] = sregs
.u
.e
.mas2
;
381 env
->spr
[SPR_BOOKE_MAS3
] = sregs
.u
.e
.mas7_3
& 0xffffffff;
382 env
->spr
[SPR_BOOKE_MAS4
] = sregs
.u
.e
.mas4
;
383 env
->spr
[SPR_BOOKE_MAS6
] = sregs
.u
.e
.mas6
;
384 env
->spr
[SPR_BOOKE_MAS7
] = sregs
.u
.e
.mas7_3
>> 32;
385 env
->spr
[SPR_MMUCFG
] = sregs
.u
.e
.mmucfg
;
386 env
->spr
[SPR_BOOKE_TLB0CFG
] = sregs
.u
.e
.tlbcfg
[0];
387 env
->spr
[SPR_BOOKE_TLB1CFG
] = sregs
.u
.e
.tlbcfg
[1];
390 if (sregs
.u
.e
.features
& KVM_SREGS_EXP
) {
391 env
->spr
[SPR_BOOKE_EPR
] = sregs
.u
.e
.epr
;
394 if (sregs
.u
.e
.features
& KVM_SREGS_E_PD
) {
395 env
->spr
[SPR_BOOKE_EPLC
] = sregs
.u
.e
.eplc
;
396 env
->spr
[SPR_BOOKE_EPSC
] = sregs
.u
.e
.epsc
;
399 if (sregs
.u
.e
.impl_id
== KVM_SREGS_E_IMPL_FSL
) {
400 env
->spr
[SPR_E500_SVR
] = sregs
.u
.e
.impl
.fsl
.svr
;
401 env
->spr
[SPR_Exxx_MCAR
] = sregs
.u
.e
.impl
.fsl
.mcar
;
402 env
->spr
[SPR_HID0
] = sregs
.u
.e
.impl
.fsl
.hid0
;
404 if (sregs
.u
.e
.impl
.fsl
.features
& KVM_SREGS_E_FSL_PIDn
) {
405 env
->spr
[SPR_BOOKE_PID1
] = sregs
.u
.e
.impl
.fsl
.pid1
;
406 env
->spr
[SPR_BOOKE_PID2
] = sregs
.u
.e
.impl
.fsl
.pid2
;
412 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
417 ppc_store_sdr1(env
, sregs
.u
.s
.sdr1
);
421 for (i
= 0; i
< 64; i
++) {
422 ppc_store_slb(env
, sregs
.u
.s
.ppc64
.slb
[i
].slbe
,
423 sregs
.u
.s
.ppc64
.slb
[i
].slbv
);
428 for (i
= 0; i
< 16; i
++) {
429 env
->sr
[i
] = sregs
.u
.s
.ppc32
.sr
[i
];
433 for (i
= 0; i
< 8; i
++) {
434 env
->DBAT
[0][i
] = sregs
.u
.s
.ppc32
.dbat
[i
] & 0xffffffff;
435 env
->DBAT
[1][i
] = sregs
.u
.s
.ppc32
.dbat
[i
] >> 32;
436 env
->IBAT
[0][i
] = sregs
.u
.s
.ppc32
.ibat
[i
] & 0xffffffff;
437 env
->IBAT
[1][i
] = sregs
.u
.s
.ppc32
.ibat
[i
] >> 32;
444 int kvmppc_set_interrupt(CPUPPCState
*env
, int irq
, int level
)
446 unsigned virq
= level
? KVM_INTERRUPT_SET_LEVEL
: KVM_INTERRUPT_UNSET
;
448 if (irq
!= PPC_INTERRUPT_EXT
) {
452 if (!kvm_enabled() || !cap_interrupt_unset
|| !cap_interrupt_level
) {
456 kvm_vcpu_ioctl(env
, KVM_INTERRUPT
, &virq
);
461 #if defined(TARGET_PPCEMB)
462 #define PPC_INPUT_INT PPC40x_INPUT_INT
463 #elif defined(TARGET_PPC64)
464 #define PPC_INPUT_INT PPC970_INPUT_INT
466 #define PPC_INPUT_INT PPC6xx_INPUT_INT
469 void kvm_arch_pre_run(CPUPPCState
*env
, struct kvm_run
*run
)
474 /* PowerPC QEMU tracks the various core input pins (interrupt, critical
475 * interrupt, reset, etc) in PPC-specific env->irq_input_state. */
476 if (!cap_interrupt_level
&&
477 run
->ready_for_interrupt_injection
&&
478 (env
->interrupt_request
& CPU_INTERRUPT_HARD
) &&
479 (env
->irq_input_state
& (1<<PPC_INPUT_INT
)))
481 /* For now KVM disregards the 'irq' argument. However, in the
482 * future KVM could cache it in-kernel to avoid a heavyweight exit
483 * when reading the UIC.
485 irq
= KVM_INTERRUPT_SET
;
487 dprintf("injected interrupt %d\n", irq
);
488 r
= kvm_vcpu_ioctl(env
, KVM_INTERRUPT
, &irq
);
490 printf("cpu %d fail inject %x\n", env
->cpu_index
, irq
);
492 /* Always wake up soon in case the interrupt was level based */
493 qemu_mod_timer(idle_timer
, qemu_get_clock_ns(vm_clock
) +
494 (get_ticks_per_sec() / 50));
497 /* We don't know if there are more interrupts pending after this. However,
498 * the guest will return to userspace in the course of handling this one
499 * anyways, so we will get a chance to deliver the rest. */
502 void kvm_arch_post_run(CPUPPCState
*env
, struct kvm_run
*run
)
506 int kvm_arch_process_async_events(CPUPPCState
*env
)
511 static int kvmppc_handle_halt(CPUPPCState
*env
)
513 if (!(env
->interrupt_request
& CPU_INTERRUPT_HARD
) && (msr_ee
)) {
515 env
->exception_index
= EXCP_HLT
;
521 /* map dcr access to existing qemu dcr emulation */
522 static int kvmppc_handle_dcr_read(CPUPPCState
*env
, uint32_t dcrn
, uint32_t *data
)
524 if (ppc_dcr_read(env
->dcr_env
, dcrn
, data
) < 0)
525 fprintf(stderr
, "Read to unhandled DCR (0x%x)\n", dcrn
);
530 static int kvmppc_handle_dcr_write(CPUPPCState
*env
, uint32_t dcrn
, uint32_t data
)
532 if (ppc_dcr_write(env
->dcr_env
, dcrn
, data
) < 0)
533 fprintf(stderr
, "Write to unhandled DCR (0x%x)\n", dcrn
);
538 int kvm_arch_handle_exit(CPUPPCState
*env
, struct kvm_run
*run
)
542 switch (run
->exit_reason
) {
544 if (run
->dcr
.is_write
) {
545 dprintf("handle dcr write\n");
546 ret
= kvmppc_handle_dcr_write(env
, run
->dcr
.dcrn
, run
->dcr
.data
);
548 dprintf("handle dcr read\n");
549 ret
= kvmppc_handle_dcr_read(env
, run
->dcr
.dcrn
, &run
->dcr
.data
);
553 dprintf("handle halt\n");
554 ret
= kvmppc_handle_halt(env
);
556 #ifdef CONFIG_PSERIES
557 case KVM_EXIT_PAPR_HCALL
:
558 dprintf("handle PAPR hypercall\n");
559 run
->papr_hcall
.ret
= spapr_hypercall(env
, run
->papr_hcall
.nr
,
560 run
->papr_hcall
.args
);
565 fprintf(stderr
, "KVM: unknown exit reason %d\n", run
->exit_reason
);
573 static int read_cpuinfo(const char *field
, char *value
, int len
)
577 int field_len
= strlen(field
);
580 f
= fopen("/proc/cpuinfo", "r");
586 if(!fgets(line
, sizeof(line
), f
)) {
589 if (!strncmp(line
, field
, field_len
)) {
590 strncpy(value
, line
, len
);
601 uint32_t kvmppc_get_tbfreq(void)
605 uint32_t retval
= get_ticks_per_sec();
607 if (read_cpuinfo("timebase", line
, sizeof(line
))) {
611 if (!(ns
= strchr(line
, ':'))) {
621 /* Try to find a device tree node for a CPU with clock-frequency property */
622 static int kvmppc_find_cpu_dt(char *buf
, int buf_len
)
627 if ((dp
= opendir(PROC_DEVTREE_CPU
)) == NULL
) {
628 printf("Can't open directory " PROC_DEVTREE_CPU
"\n");
633 while ((dirp
= readdir(dp
)) != NULL
) {
635 snprintf(buf
, buf_len
, "%s%s/clock-frequency", PROC_DEVTREE_CPU
,
639 snprintf(buf
, buf_len
, "%s%s", PROC_DEVTREE_CPU
, dirp
->d_name
);
646 if (buf
[0] == '\0') {
647 printf("Unknown host!\n");
654 /* Read a CPU node property from the host device tree that's a single
655 * integer (32-bit or 64-bit). Returns 0 if anything goes wrong
656 * (can't find or open the property, or doesn't understand the
658 static uint64_t kvmppc_read_int_cpu_dt(const char *propname
)
668 if (kvmppc_find_cpu_dt(buf
, sizeof(buf
))) {
672 strncat(buf
, "/", sizeof(buf
) - strlen(buf
));
673 strncat(buf
, propname
, sizeof(buf
) - strlen(buf
));
675 f
= fopen(buf
, "rb");
680 len
= fread(&u
, 1, sizeof(u
), f
);
684 /* property is a 32-bit quantity */
685 return be32_to_cpu(u
.v32
);
687 return be64_to_cpu(u
.v64
);
693 uint64_t kvmppc_get_clockfreq(void)
695 return kvmppc_read_int_cpu_dt("clock-frequency");
698 uint32_t kvmppc_get_vmx(void)
700 return kvmppc_read_int_cpu_dt("ibm,vmx");
703 uint32_t kvmppc_get_dfp(void)
705 return kvmppc_read_int_cpu_dt("ibm,dfp");
708 int kvmppc_get_hypercall(CPUPPCState
*env
, uint8_t *buf
, int buf_len
)
710 uint32_t *hc
= (uint32_t*)buf
;
712 struct kvm_ppc_pvinfo pvinfo
;
714 if (kvm_check_extension(env
->kvm_state
, KVM_CAP_PPC_GET_PVINFO
) &&
715 !kvm_vm_ioctl(env
->kvm_state
, KVM_PPC_GET_PVINFO
, &pvinfo
)) {
716 memcpy(buf
, pvinfo
.hcall
, buf_len
);
722 * Fallback to always fail hypercalls:
738 void kvmppc_set_papr(CPUPPCState
*env
)
740 struct kvm_enable_cap cap
= {};
741 struct kvm_one_reg reg
= {};
742 struct kvm_sregs sregs
= {};
744 uint64_t hior
= env
->spr
[SPR_HIOR
];
746 cap
.cap
= KVM_CAP_PPC_PAPR
;
747 ret
= kvm_vcpu_ioctl(env
, KVM_ENABLE_CAP
, &cap
);
754 * XXX We set HIOR here. It really should be a qdev property of
755 * the CPU node, but we don't have CPUs converted to qdev yet.
757 * Once we have qdev CPUs, move HIOR to a qdev property and
760 reg
.id
= KVM_REG_PPC_HIOR
;
761 reg
.addr
= (uintptr_t)&hior
;
762 ret
= kvm_vcpu_ioctl(env
, KVM_SET_ONE_REG
, ®
);
764 fprintf(stderr
, "Couldn't set HIOR. Maybe you're running an old \n"
765 "kernel with support for HV KVM but no PAPR PR \n"
766 "KVM in which case things will work. If they don't \n"
767 "please update your host kernel!\n");
770 /* Set SDR1 so kernel space finds the HTAB */
771 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
776 sregs
.u
.s
.sdr1
= env
->spr
[SPR_SDR1
];
778 ret
= kvm_vcpu_ioctl(env
, KVM_SET_SREGS
, &sregs
);
786 cpu_abort(env
, "This KVM version does not support PAPR\n");
789 int kvmppc_smt_threads(void)
791 return cap_ppc_smt
? cap_ppc_smt
: 1;
794 off_t
kvmppc_alloc_rma(const char *name
, MemoryRegion
*sysmem
)
799 struct kvm_allocate_rma ret
;
800 MemoryRegion
*rma_region
;
802 /* If cap_ppc_rma == 0, contiguous RMA allocation is not supported
803 * if cap_ppc_rma == 1, contiguous RMA allocation is supported, but
804 * not necessary on this hardware
805 * if cap_ppc_rma == 2, contiguous RMA allocation is needed on this hardware
807 * FIXME: We should allow the user to force contiguous RMA
808 * allocation in the cap_ppc_rma==1 case.
810 if (cap_ppc_rma
< 2) {
814 fd
= kvm_vm_ioctl(kvm_state
, KVM_ALLOCATE_RMA
, &ret
);
816 fprintf(stderr
, "KVM: Error on KVM_ALLOCATE_RMA: %s\n",
821 size
= MIN(ret
.rma_size
, 256ul << 20);
823 rma
= mmap(NULL
, size
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0);
824 if (rma
== MAP_FAILED
) {
825 fprintf(stderr
, "KVM: Error mapping RMA: %s\n", strerror(errno
));
829 rma_region
= g_new(MemoryRegion
, 1);
830 memory_region_init_ram_ptr(rma_region
, name
, size
, rma
);
831 vmstate_register_ram_global(rma_region
);
832 memory_region_add_subregion(sysmem
, 0, rma_region
);
837 void *kvmppc_create_spapr_tce(uint32_t liobn
, uint32_t window_size
, int *pfd
)
839 struct kvm_create_spapr_tce args
= {
841 .window_size
= window_size
,
847 /* Must set fd to -1 so we don't try to munmap when called for
848 * destroying the table, which the upper layers -will- do
851 if (!cap_spapr_tce
) {
855 fd
= kvm_vm_ioctl(kvm_state
, KVM_CREATE_SPAPR_TCE
, &args
);
857 fprintf(stderr
, "KVM: Failed to create TCE table for liobn 0x%x\n",
862 len
= (window_size
/ SPAPR_VIO_TCE_PAGE_SIZE
) * sizeof(VIOsPAPR_RTCE
);
863 /* FIXME: round this up to page size */
865 table
= mmap(NULL
, len
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0);
866 if (table
== MAP_FAILED
) {
867 fprintf(stderr
, "KVM: Failed to map TCE table for liobn 0x%x\n",
877 int kvmppc_remove_spapr_tce(void *table
, int fd
, uint32_t window_size
)
885 len
= (window_size
/ SPAPR_VIO_TCE_PAGE_SIZE
)*sizeof(VIOsPAPR_RTCE
);
886 if ((munmap(table
, len
) < 0) ||
888 fprintf(stderr
, "KVM: Unexpected error removing TCE table: %s",
896 static inline uint32_t mfpvr(void)
905 static void alter_insns(uint64_t *word
, uint64_t flags
, bool on
)
914 const ppc_def_t
*kvmppc_host_cpu_def(void)
916 uint32_t host_pvr
= mfpvr();
917 const ppc_def_t
*base_spec
;
919 uint32_t vmx
= kvmppc_get_vmx();
920 uint32_t dfp
= kvmppc_get_dfp();
922 base_spec
= ppc_find_by_pvr(host_pvr
);
924 spec
= g_malloc0(sizeof(*spec
));
925 memcpy(spec
, base_spec
, sizeof(*spec
));
927 /* Now fix up the spec with information we can query from the host */
930 /* Only override when we know what the host supports */
931 alter_insns(&spec
->insns_flags
, PPC_ALTIVEC
, vmx
> 0);
932 alter_insns(&spec
->insns_flags2
, PPC2_VSX
, vmx
> 1);
935 /* Only override when we know what the host supports */
936 alter_insns(&spec
->insns_flags2
, PPC2_DFP
, dfp
);
942 int kvmppc_fixup_cpu(CPUPPCState
*env
)
946 /* Adjust cpu index for SMT */
947 smt
= kvmppc_smt_threads();
948 env
->cpu_index
= (env
->cpu_index
/ smp_threads
) * smt
949 + (env
->cpu_index
% smp_threads
);
955 bool kvm_arch_stop_on_emulation_error(CPUPPCState
*env
)
960 int kvm_arch_on_sigbus_vcpu(CPUPPCState
*env
, int code
, void *addr
)
965 int kvm_arch_on_sigbus(int code
, void *addr
)