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"
30 #include "device_tree.h"
31 #include "hw/sysbus.h"
34 #include "hw/sysbus.h"
36 #include "hw/spapr_vio.h"
41 #define dprintf(fmt, ...) \
42 do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
44 #define dprintf(fmt, ...) \
48 #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/"
50 const KVMCapabilityInfo kvm_arch_required_capabilities
[] = {
54 static int cap_interrupt_unset
= false;
55 static int cap_interrupt_level
= false;
56 static int cap_segstate
;
57 static int cap_booke_sregs
;
58 static int cap_ppc_smt
;
59 static int cap_ppc_rma
;
60 static int cap_spapr_tce
;
62 /* XXX We have a race condition where we actually have a level triggered
63 * interrupt, but the infrastructure can't expose that yet, so the guest
64 * takes but ignores it, goes to sleep and never gets notified that there's
65 * still an interrupt pending.
67 * As a quick workaround, let's just wake up again 20 ms after we injected
68 * an interrupt. That way we can assure that we're always reinjecting
69 * interrupts in case the guest swallowed them.
71 static QEMUTimer
*idle_timer
;
73 static void kvm_kick_env(void *env
)
78 int kvm_arch_init(KVMState
*s
)
80 cap_interrupt_unset
= kvm_check_extension(s
, KVM_CAP_PPC_UNSET_IRQ
);
81 cap_interrupt_level
= kvm_check_extension(s
, KVM_CAP_PPC_IRQ_LEVEL
);
82 cap_segstate
= kvm_check_extension(s
, KVM_CAP_PPC_SEGSTATE
);
83 cap_booke_sregs
= kvm_check_extension(s
, KVM_CAP_PPC_BOOKE_SREGS
);
84 cap_ppc_smt
= kvm_check_extension(s
, KVM_CAP_PPC_SMT
);
85 cap_ppc_rma
= kvm_check_extension(s
, KVM_CAP_PPC_RMA
);
86 cap_spapr_tce
= kvm_check_extension(s
, KVM_CAP_SPAPR_TCE
);
88 if (!cap_interrupt_level
) {
89 fprintf(stderr
, "KVM: Couldn't find level irq capability. Expect the "
90 "VM to stall at times!\n");
96 static int kvm_arch_sync_sregs(CPUState
*cenv
)
98 struct kvm_sregs sregs
;
101 if (cenv
->excp_model
== POWERPC_EXCP_BOOKE
) {
102 /* What we're really trying to say is "if we're on BookE, we use
103 the native PVR for now". This is the only sane way to check
104 it though, so we potentially confuse users that they can run
105 BookE guests on BookS. Let's hope nobody dares enough :) */
109 fprintf(stderr
, "kvm error: missing PVR setting capability\n");
114 ret
= kvm_vcpu_ioctl(cenv
, KVM_GET_SREGS
, &sregs
);
119 sregs
.pvr
= cenv
->spr
[SPR_PVR
];
120 return kvm_vcpu_ioctl(cenv
, KVM_SET_SREGS
, &sregs
);
123 /* Set up a shared TLB array with KVM */
124 static int kvm_booke206_tlb_init(CPUState
*env
)
126 struct kvm_book3e_206_tlb_params params
= {};
127 struct kvm_config_tlb cfg
= {};
128 struct kvm_enable_cap encap
= {};
129 unsigned int entries
= 0;
132 if (!kvm_enabled() ||
133 !kvm_check_extension(env
->kvm_state
, KVM_CAP_SW_TLB
)) {
137 assert(ARRAY_SIZE(params
.tlb_sizes
) == BOOKE206_MAX_TLBN
);
139 for (i
= 0; i
< BOOKE206_MAX_TLBN
; i
++) {
140 params
.tlb_sizes
[i
] = booke206_tlb_size(env
, i
);
141 params
.tlb_ways
[i
] = booke206_tlb_ways(env
, i
);
142 entries
+= params
.tlb_sizes
[i
];
145 assert(entries
== env
->nb_tlb
);
146 assert(sizeof(struct kvm_book3e_206_tlb_entry
) == sizeof(ppcmas_tlb_t
));
148 env
->tlb_dirty
= true;
150 cfg
.array
= (uintptr_t)env
->tlb
.tlbm
;
151 cfg
.array_len
= sizeof(ppcmas_tlb_t
) * entries
;
152 cfg
.params
= (uintptr_t)¶ms
;
153 cfg
.mmu_type
= KVM_MMU_FSL_BOOKE_NOHV
;
155 encap
.cap
= KVM_CAP_SW_TLB
;
156 encap
.args
[0] = (uintptr_t)&cfg
;
158 ret
= kvm_vcpu_ioctl(env
, KVM_ENABLE_CAP
, &encap
);
160 fprintf(stderr
, "%s: couldn't enable KVM_CAP_SW_TLB: %s\n",
161 __func__
, strerror(-ret
));
165 env
->kvm_sw_tlb
= true;
169 int kvm_arch_init_vcpu(CPUState
*cenv
)
173 ret
= kvm_arch_sync_sregs(cenv
);
178 idle_timer
= qemu_new_timer_ns(vm_clock
, kvm_kick_env
, cenv
);
180 /* Some targets support access to KVM's guest TLB. */
181 switch (cenv
->mmu_model
) {
182 case POWERPC_MMU_BOOKE206
:
183 ret
= kvm_booke206_tlb_init(cenv
);
192 void kvm_arch_reset_vcpu(CPUState
*env
)
196 static void kvm_sw_tlb_put(CPUState
*env
)
198 struct kvm_dirty_tlb dirty_tlb
;
199 unsigned char *bitmap
;
202 if (!env
->kvm_sw_tlb
) {
206 bitmap
= g_malloc((env
->nb_tlb
+ 7) / 8);
207 memset(bitmap
, 0xFF, (env
->nb_tlb
+ 7) / 8);
209 dirty_tlb
.bitmap
= (uintptr_t)bitmap
;
210 dirty_tlb
.num_dirty
= env
->nb_tlb
;
212 ret
= kvm_vcpu_ioctl(env
, KVM_DIRTY_TLB
, &dirty_tlb
);
214 fprintf(stderr
, "%s: KVM_DIRTY_TLB: %s\n",
215 __func__
, strerror(-ret
));
221 int kvm_arch_put_registers(CPUState
*env
, int level
)
223 struct kvm_regs regs
;
227 ret
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
237 regs
.srr0
= env
->spr
[SPR_SRR0
];
238 regs
.srr1
= env
->spr
[SPR_SRR1
];
240 regs
.sprg0
= env
->spr
[SPR_SPRG0
];
241 regs
.sprg1
= env
->spr
[SPR_SPRG1
];
242 regs
.sprg2
= env
->spr
[SPR_SPRG2
];
243 regs
.sprg3
= env
->spr
[SPR_SPRG3
];
244 regs
.sprg4
= env
->spr
[SPR_SPRG4
];
245 regs
.sprg5
= env
->spr
[SPR_SPRG5
];
246 regs
.sprg6
= env
->spr
[SPR_SPRG6
];
247 regs
.sprg7
= env
->spr
[SPR_SPRG7
];
249 regs
.pid
= env
->spr
[SPR_BOOKE_PID
];
251 for (i
= 0;i
< 32; i
++)
252 regs
.gpr
[i
] = env
->gpr
[i
];
254 ret
= kvm_vcpu_ioctl(env
, KVM_SET_REGS
, ®s
);
258 if (env
->tlb_dirty
) {
260 env
->tlb_dirty
= false;
266 int kvm_arch_get_registers(CPUState
*env
)
268 struct kvm_regs regs
;
269 struct kvm_sregs sregs
;
273 ret
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
278 for (i
= 7; i
>= 0; i
--) {
279 env
->crf
[i
] = cr
& 15;
289 env
->spr
[SPR_SRR0
] = regs
.srr0
;
290 env
->spr
[SPR_SRR1
] = regs
.srr1
;
292 env
->spr
[SPR_SPRG0
] = regs
.sprg0
;
293 env
->spr
[SPR_SPRG1
] = regs
.sprg1
;
294 env
->spr
[SPR_SPRG2
] = regs
.sprg2
;
295 env
->spr
[SPR_SPRG3
] = regs
.sprg3
;
296 env
->spr
[SPR_SPRG4
] = regs
.sprg4
;
297 env
->spr
[SPR_SPRG5
] = regs
.sprg5
;
298 env
->spr
[SPR_SPRG6
] = regs
.sprg6
;
299 env
->spr
[SPR_SPRG7
] = regs
.sprg7
;
301 env
->spr
[SPR_BOOKE_PID
] = regs
.pid
;
303 for (i
= 0;i
< 32; i
++)
304 env
->gpr
[i
] = regs
.gpr
[i
];
306 if (cap_booke_sregs
) {
307 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
312 if (sregs
.u
.e
.features
& KVM_SREGS_E_BASE
) {
313 env
->spr
[SPR_BOOKE_CSRR0
] = sregs
.u
.e
.csrr0
;
314 env
->spr
[SPR_BOOKE_CSRR1
] = sregs
.u
.e
.csrr1
;
315 env
->spr
[SPR_BOOKE_ESR
] = sregs
.u
.e
.esr
;
316 env
->spr
[SPR_BOOKE_DEAR
] = sregs
.u
.e
.dear
;
317 env
->spr
[SPR_BOOKE_MCSR
] = sregs
.u
.e
.mcsr
;
318 env
->spr
[SPR_BOOKE_TSR
] = sregs
.u
.e
.tsr
;
319 env
->spr
[SPR_BOOKE_TCR
] = sregs
.u
.e
.tcr
;
320 env
->spr
[SPR_DECR
] = sregs
.u
.e
.dec
;
321 env
->spr
[SPR_TBL
] = sregs
.u
.e
.tb
& 0xffffffff;
322 env
->spr
[SPR_TBU
] = sregs
.u
.e
.tb
>> 32;
323 env
->spr
[SPR_VRSAVE
] = sregs
.u
.e
.vrsave
;
326 if (sregs
.u
.e
.features
& KVM_SREGS_E_ARCH206
) {
327 env
->spr
[SPR_BOOKE_PIR
] = sregs
.u
.e
.pir
;
328 env
->spr
[SPR_BOOKE_MCSRR0
] = sregs
.u
.e
.mcsrr0
;
329 env
->spr
[SPR_BOOKE_MCSRR1
] = sregs
.u
.e
.mcsrr1
;
330 env
->spr
[SPR_BOOKE_DECAR
] = sregs
.u
.e
.decar
;
331 env
->spr
[SPR_BOOKE_IVPR
] = sregs
.u
.e
.ivpr
;
334 if (sregs
.u
.e
.features
& KVM_SREGS_E_64
) {
335 env
->spr
[SPR_BOOKE_EPCR
] = sregs
.u
.e
.epcr
;
338 if (sregs
.u
.e
.features
& KVM_SREGS_E_SPRG8
) {
339 env
->spr
[SPR_BOOKE_SPRG8
] = sregs
.u
.e
.sprg8
;
342 if (sregs
.u
.e
.features
& KVM_SREGS_E_IVOR
) {
343 env
->spr
[SPR_BOOKE_IVOR0
] = sregs
.u
.e
.ivor_low
[0];
344 env
->spr
[SPR_BOOKE_IVOR1
] = sregs
.u
.e
.ivor_low
[1];
345 env
->spr
[SPR_BOOKE_IVOR2
] = sregs
.u
.e
.ivor_low
[2];
346 env
->spr
[SPR_BOOKE_IVOR3
] = sregs
.u
.e
.ivor_low
[3];
347 env
->spr
[SPR_BOOKE_IVOR4
] = sregs
.u
.e
.ivor_low
[4];
348 env
->spr
[SPR_BOOKE_IVOR5
] = sregs
.u
.e
.ivor_low
[5];
349 env
->spr
[SPR_BOOKE_IVOR6
] = sregs
.u
.e
.ivor_low
[6];
350 env
->spr
[SPR_BOOKE_IVOR7
] = sregs
.u
.e
.ivor_low
[7];
351 env
->spr
[SPR_BOOKE_IVOR8
] = sregs
.u
.e
.ivor_low
[8];
352 env
->spr
[SPR_BOOKE_IVOR9
] = sregs
.u
.e
.ivor_low
[9];
353 env
->spr
[SPR_BOOKE_IVOR10
] = sregs
.u
.e
.ivor_low
[10];
354 env
->spr
[SPR_BOOKE_IVOR11
] = sregs
.u
.e
.ivor_low
[11];
355 env
->spr
[SPR_BOOKE_IVOR12
] = sregs
.u
.e
.ivor_low
[12];
356 env
->spr
[SPR_BOOKE_IVOR13
] = sregs
.u
.e
.ivor_low
[13];
357 env
->spr
[SPR_BOOKE_IVOR14
] = sregs
.u
.e
.ivor_low
[14];
358 env
->spr
[SPR_BOOKE_IVOR15
] = sregs
.u
.e
.ivor_low
[15];
360 if (sregs
.u
.e
.features
& KVM_SREGS_E_SPE
) {
361 env
->spr
[SPR_BOOKE_IVOR32
] = sregs
.u
.e
.ivor_high
[0];
362 env
->spr
[SPR_BOOKE_IVOR33
] = sregs
.u
.e
.ivor_high
[1];
363 env
->spr
[SPR_BOOKE_IVOR34
] = sregs
.u
.e
.ivor_high
[2];
366 if (sregs
.u
.e
.features
& KVM_SREGS_E_PM
) {
367 env
->spr
[SPR_BOOKE_IVOR35
] = sregs
.u
.e
.ivor_high
[3];
370 if (sregs
.u
.e
.features
& KVM_SREGS_E_PC
) {
371 env
->spr
[SPR_BOOKE_IVOR36
] = sregs
.u
.e
.ivor_high
[4];
372 env
->spr
[SPR_BOOKE_IVOR37
] = sregs
.u
.e
.ivor_high
[5];
376 if (sregs
.u
.e
.features
& KVM_SREGS_E_ARCH206_MMU
) {
377 env
->spr
[SPR_BOOKE_MAS0
] = sregs
.u
.e
.mas0
;
378 env
->spr
[SPR_BOOKE_MAS1
] = sregs
.u
.e
.mas1
;
379 env
->spr
[SPR_BOOKE_MAS2
] = sregs
.u
.e
.mas2
;
380 env
->spr
[SPR_BOOKE_MAS3
] = sregs
.u
.e
.mas7_3
& 0xffffffff;
381 env
->spr
[SPR_BOOKE_MAS4
] = sregs
.u
.e
.mas4
;
382 env
->spr
[SPR_BOOKE_MAS6
] = sregs
.u
.e
.mas6
;
383 env
->spr
[SPR_BOOKE_MAS7
] = sregs
.u
.e
.mas7_3
>> 32;
384 env
->spr
[SPR_MMUCFG
] = sregs
.u
.e
.mmucfg
;
385 env
->spr
[SPR_BOOKE_TLB0CFG
] = sregs
.u
.e
.tlbcfg
[0];
386 env
->spr
[SPR_BOOKE_TLB1CFG
] = sregs
.u
.e
.tlbcfg
[1];
389 if (sregs
.u
.e
.features
& KVM_SREGS_EXP
) {
390 env
->spr
[SPR_BOOKE_EPR
] = sregs
.u
.e
.epr
;
393 if (sregs
.u
.e
.features
& KVM_SREGS_E_PD
) {
394 env
->spr
[SPR_BOOKE_EPLC
] = sregs
.u
.e
.eplc
;
395 env
->spr
[SPR_BOOKE_EPSC
] = sregs
.u
.e
.epsc
;
398 if (sregs
.u
.e
.impl_id
== KVM_SREGS_E_IMPL_FSL
) {
399 env
->spr
[SPR_E500_SVR
] = sregs
.u
.e
.impl
.fsl
.svr
;
400 env
->spr
[SPR_Exxx_MCAR
] = sregs
.u
.e
.impl
.fsl
.mcar
;
401 env
->spr
[SPR_HID0
] = sregs
.u
.e
.impl
.fsl
.hid0
;
403 if (sregs
.u
.e
.impl
.fsl
.features
& KVM_SREGS_E_FSL_PIDn
) {
404 env
->spr
[SPR_BOOKE_PID1
] = sregs
.u
.e
.impl
.fsl
.pid1
;
405 env
->spr
[SPR_BOOKE_PID2
] = sregs
.u
.e
.impl
.fsl
.pid2
;
411 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
416 ppc_store_sdr1(env
, sregs
.u
.s
.sdr1
);
420 for (i
= 0; i
< 64; i
++) {
421 ppc_store_slb(env
, sregs
.u
.s
.ppc64
.slb
[i
].slbe
,
422 sregs
.u
.s
.ppc64
.slb
[i
].slbv
);
427 for (i
= 0; i
< 16; i
++) {
428 env
->sr
[i
] = sregs
.u
.s
.ppc32
.sr
[i
];
432 for (i
= 0; i
< 8; i
++) {
433 env
->DBAT
[0][i
] = sregs
.u
.s
.ppc32
.dbat
[i
] & 0xffffffff;
434 env
->DBAT
[1][i
] = sregs
.u
.s
.ppc32
.dbat
[i
] >> 32;
435 env
->IBAT
[0][i
] = sregs
.u
.s
.ppc32
.ibat
[i
] & 0xffffffff;
436 env
->IBAT
[1][i
] = sregs
.u
.s
.ppc32
.ibat
[i
] >> 32;
443 int kvmppc_set_interrupt(CPUState
*env
, int irq
, int level
)
445 unsigned virq
= level
? KVM_INTERRUPT_SET_LEVEL
: KVM_INTERRUPT_UNSET
;
447 if (irq
!= PPC_INTERRUPT_EXT
) {
451 if (!kvm_enabled() || !cap_interrupt_unset
|| !cap_interrupt_level
) {
455 kvm_vcpu_ioctl(env
, KVM_INTERRUPT
, &virq
);
460 #if defined(TARGET_PPCEMB)
461 #define PPC_INPUT_INT PPC40x_INPUT_INT
462 #elif defined(TARGET_PPC64)
463 #define PPC_INPUT_INT PPC970_INPUT_INT
465 #define PPC_INPUT_INT PPC6xx_INPUT_INT
468 void kvm_arch_pre_run(CPUState
*env
, struct kvm_run
*run
)
473 /* PowerPC Qemu tracks the various core input pins (interrupt, critical
474 * interrupt, reset, etc) in PPC-specific env->irq_input_state. */
475 if (!cap_interrupt_level
&&
476 run
->ready_for_interrupt_injection
&&
477 (env
->interrupt_request
& CPU_INTERRUPT_HARD
) &&
478 (env
->irq_input_state
& (1<<PPC_INPUT_INT
)))
480 /* For now KVM disregards the 'irq' argument. However, in the
481 * future KVM could cache it in-kernel to avoid a heavyweight exit
482 * when reading the UIC.
484 irq
= KVM_INTERRUPT_SET
;
486 dprintf("injected interrupt %d\n", irq
);
487 r
= kvm_vcpu_ioctl(env
, KVM_INTERRUPT
, &irq
);
489 printf("cpu %d fail inject %x\n", env
->cpu_index
, irq
);
491 /* Always wake up soon in case the interrupt was level based */
492 qemu_mod_timer(idle_timer
, qemu_get_clock_ns(vm_clock
) +
493 (get_ticks_per_sec() / 50));
496 /* We don't know if there are more interrupts pending after this. However,
497 * the guest will return to userspace in the course of handling this one
498 * anyways, so we will get a chance to deliver the rest. */
501 void kvm_arch_post_run(CPUState
*env
, struct kvm_run
*run
)
505 int kvm_arch_process_async_events(CPUState
*env
)
510 static int kvmppc_handle_halt(CPUState
*env
)
512 if (!(env
->interrupt_request
& CPU_INTERRUPT_HARD
) && (msr_ee
)) {
514 env
->exception_index
= EXCP_HLT
;
520 /* map dcr access to existing qemu dcr emulation */
521 static int kvmppc_handle_dcr_read(CPUState
*env
, uint32_t dcrn
, uint32_t *data
)
523 if (ppc_dcr_read(env
->dcr_env
, dcrn
, data
) < 0)
524 fprintf(stderr
, "Read to unhandled DCR (0x%x)\n", dcrn
);
529 static int kvmppc_handle_dcr_write(CPUState
*env
, uint32_t dcrn
, uint32_t data
)
531 if (ppc_dcr_write(env
->dcr_env
, dcrn
, data
) < 0)
532 fprintf(stderr
, "Write to unhandled DCR (0x%x)\n", dcrn
);
537 int kvm_arch_handle_exit(CPUState
*env
, struct kvm_run
*run
)
541 switch (run
->exit_reason
) {
543 if (run
->dcr
.is_write
) {
544 dprintf("handle dcr write\n");
545 ret
= kvmppc_handle_dcr_write(env
, run
->dcr
.dcrn
, run
->dcr
.data
);
547 dprintf("handle dcr read\n");
548 ret
= kvmppc_handle_dcr_read(env
, run
->dcr
.dcrn
, &run
->dcr
.data
);
552 dprintf("handle halt\n");
553 ret
= kvmppc_handle_halt(env
);
555 #ifdef CONFIG_PSERIES
556 case KVM_EXIT_PAPR_HCALL
:
557 dprintf("handle PAPR hypercall\n");
558 run
->papr_hcall
.ret
= spapr_hypercall(env
, run
->papr_hcall
.nr
,
559 run
->papr_hcall
.args
);
564 fprintf(stderr
, "KVM: unknown exit reason %d\n", run
->exit_reason
);
572 static int read_cpuinfo(const char *field
, char *value
, int len
)
576 int field_len
= strlen(field
);
579 f
= fopen("/proc/cpuinfo", "r");
585 if(!fgets(line
, sizeof(line
), f
)) {
588 if (!strncmp(line
, field
, field_len
)) {
589 strncpy(value
, line
, len
);
600 uint32_t kvmppc_get_tbfreq(void)
604 uint32_t retval
= get_ticks_per_sec();
606 if (read_cpuinfo("timebase", line
, sizeof(line
))) {
610 if (!(ns
= strchr(line
, ':'))) {
620 /* Try to find a device tree node for a CPU with clock-frequency property */
621 static int kvmppc_find_cpu_dt(char *buf
, int buf_len
)
626 if ((dp
= opendir(PROC_DEVTREE_CPU
)) == NULL
) {
627 printf("Can't open directory " PROC_DEVTREE_CPU
"\n");
632 while ((dirp
= readdir(dp
)) != NULL
) {
634 snprintf(buf
, buf_len
, "%s%s/clock-frequency", PROC_DEVTREE_CPU
,
638 snprintf(buf
, buf_len
, "%s%s", PROC_DEVTREE_CPU
, dirp
->d_name
);
645 if (buf
[0] == '\0') {
646 printf("Unknown host!\n");
653 /* Read a CPU node property from the host device tree that's a single
654 * integer (32-bit or 64-bit). Returns 0 if anything goes wrong
655 * (can't find or open the property, or doesn't understand the
657 static uint64_t kvmppc_read_int_cpu_dt(const char *propname
)
667 if (kvmppc_find_cpu_dt(buf
, sizeof(buf
))) {
671 strncat(buf
, "/", sizeof(buf
) - strlen(buf
));
672 strncat(buf
, propname
, sizeof(buf
) - strlen(buf
));
674 f
= fopen(buf
, "rb");
679 len
= fread(&u
, 1, sizeof(u
), f
);
683 /* property is a 32-bit quantity */
684 return be32_to_cpu(u
.v32
);
686 return be64_to_cpu(u
.v64
);
692 uint64_t kvmppc_get_clockfreq(void)
694 return kvmppc_read_int_cpu_dt("clock-frequency");
697 uint32_t kvmppc_get_vmx(void)
699 return kvmppc_read_int_cpu_dt("ibm,vmx");
702 uint32_t kvmppc_get_dfp(void)
704 return kvmppc_read_int_cpu_dt("ibm,dfp");
707 int kvmppc_get_hypercall(CPUState
*env
, uint8_t *buf
, int buf_len
)
709 uint32_t *hc
= (uint32_t*)buf
;
711 struct kvm_ppc_pvinfo pvinfo
;
713 if (kvm_check_extension(env
->kvm_state
, KVM_CAP_PPC_GET_PVINFO
) &&
714 !kvm_vm_ioctl(env
->kvm_state
, KVM_PPC_GET_PVINFO
, &pvinfo
)) {
715 memcpy(buf
, pvinfo
.hcall
, buf_len
);
721 * Fallback to always fail hypercalls:
737 void kvmppc_set_papr(CPUState
*env
)
739 struct kvm_enable_cap cap
= {};
740 struct kvm_one_reg reg
= {};
741 struct kvm_sregs sregs
= {};
744 cap
.cap
= KVM_CAP_PPC_PAPR
;
745 ret
= kvm_vcpu_ioctl(env
, KVM_ENABLE_CAP
, &cap
);
752 * XXX We set HIOR here. It really should be a qdev property of
753 * the CPU node, but we don't have CPUs converted to qdev yet.
755 * Once we have qdev CPUs, move HIOR to a qdev property and
758 reg
.id
= KVM_ONE_REG_PPC_HIOR
;
759 reg
.u
.reg64
= env
->spr
[SPR_HIOR
];
760 ret
= kvm_vcpu_ioctl(env
, KVM_SET_ONE_REG
, ®
);
765 /* Set SDR1 so kernel space finds the HTAB */
766 ret
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
771 sregs
.u
.s
.sdr1
= env
->spr
[SPR_SDR1
];
773 ret
= kvm_vcpu_ioctl(env
, KVM_SET_SREGS
, &sregs
);
781 cpu_abort(env
, "This KVM version does not support PAPR\n");
784 int kvmppc_smt_threads(void)
786 return cap_ppc_smt
? cap_ppc_smt
: 1;
789 off_t
kvmppc_alloc_rma(const char *name
, MemoryRegion
*sysmem
)
794 struct kvm_allocate_rma ret
;
795 MemoryRegion
*rma_region
;
797 /* If cap_ppc_rma == 0, contiguous RMA allocation is not supported
798 * if cap_ppc_rma == 1, contiguous RMA allocation is supported, but
799 * not necessary on this hardware
800 * if cap_ppc_rma == 2, contiguous RMA allocation is needed on this hardware
802 * FIXME: We should allow the user to force contiguous RMA
803 * allocation in the cap_ppc_rma==1 case.
805 if (cap_ppc_rma
< 2) {
809 fd
= kvm_vm_ioctl(kvm_state
, KVM_ALLOCATE_RMA
, &ret
);
811 fprintf(stderr
, "KVM: Error on KVM_ALLOCATE_RMA: %s\n",
816 size
= MIN(ret
.rma_size
, 256ul << 20);
818 rma
= mmap(NULL
, size
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0);
819 if (rma
== MAP_FAILED
) {
820 fprintf(stderr
, "KVM: Error mapping RMA: %s\n", strerror(errno
));
824 rma_region
= g_new(MemoryRegion
, 1);
825 memory_region_init_ram_ptr(rma_region
, NULL
, name
, size
, rma
);
826 memory_region_add_subregion(sysmem
, 0, rma_region
);
831 void *kvmppc_create_spapr_tce(uint32_t liobn
, uint32_t window_size
, int *pfd
)
833 struct kvm_create_spapr_tce args
= {
835 .window_size
= window_size
,
841 if (!cap_spapr_tce
) {
845 fd
= kvm_vm_ioctl(kvm_state
, KVM_CREATE_SPAPR_TCE
, &args
);
850 len
= (window_size
/ SPAPR_VIO_TCE_PAGE_SIZE
) * sizeof(VIOsPAPR_RTCE
);
851 /* FIXME: round this up to page size */
853 table
= mmap(NULL
, len
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0);
854 if (table
== MAP_FAILED
) {
863 int kvmppc_remove_spapr_tce(void *table
, int fd
, uint32_t window_size
)
871 len
= (window_size
/ SPAPR_VIO_TCE_PAGE_SIZE
)*sizeof(VIOsPAPR_RTCE
);
872 if ((munmap(table
, len
) < 0) ||
874 fprintf(stderr
, "KVM: Unexpected error removing KVM SPAPR TCE "
875 "table: %s", strerror(errno
));
882 static inline uint32_t mfpvr(void)
891 static void alter_insns(uint64_t *word
, uint64_t flags
, bool on
)
900 const ppc_def_t
*kvmppc_host_cpu_def(void)
902 uint32_t host_pvr
= mfpvr();
903 const ppc_def_t
*base_spec
;
905 uint32_t vmx
= kvmppc_get_vmx();
906 uint32_t dfp
= kvmppc_get_dfp();
908 base_spec
= ppc_find_by_pvr(host_pvr
);
910 spec
= g_malloc0(sizeof(*spec
));
911 memcpy(spec
, base_spec
, sizeof(*spec
));
913 /* Now fix up the spec with information we can query from the host */
916 /* Only override when we know what the host supports */
917 alter_insns(&spec
->insns_flags
, PPC_ALTIVEC
, vmx
> 0);
918 alter_insns(&spec
->insns_flags2
, PPC2_VSX
, vmx
> 1);
921 /* Only override when we know what the host supports */
922 alter_insns(&spec
->insns_flags2
, PPC2_DFP
, dfp
);
928 bool kvm_arch_stop_on_emulation_error(CPUState
*env
)
933 int kvm_arch_on_sigbus_vcpu(CPUState
*env
, int code
, void *addr
)
938 int kvm_arch_on_sigbus(int code
, void *addr
)