xref: /openbmc/linux/Documentation/virt/kvm/devices/vcpu.rst (revision 72ef5e52b3f74c0be47b20f5c434b7ecc830cf40)
1e777a5bdSMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0
2e777a5bdSMauro Carvalho Chehab
3e777a5bdSMauro Carvalho Chehab======================
4e777a5bdSMauro Carvalho ChehabGeneric vcpu interface
5e777a5bdSMauro Carvalho Chehab======================
6e777a5bdSMauro Carvalho Chehab
7e777a5bdSMauro Carvalho ChehabThe virtual cpu "device" also accepts the ioctls KVM_SET_DEVICE_ATTR,
8e777a5bdSMauro Carvalho ChehabKVM_GET_DEVICE_ATTR, and KVM_HAS_DEVICE_ATTR. The interface uses the same struct
9e777a5bdSMauro Carvalho Chehabkvm_device_attr as other devices, but targets VCPU-wide settings and controls.
10e777a5bdSMauro Carvalho Chehab
11e777a5bdSMauro Carvalho ChehabThe groups and attributes per virtual cpu, if any, are architecture specific.
12e777a5bdSMauro Carvalho Chehab
13e777a5bdSMauro Carvalho Chehab1. GROUP: KVM_ARM_VCPU_PMU_V3_CTRL
14e777a5bdSMauro Carvalho Chehab==================================
15e777a5bdSMauro Carvalho Chehab
16e777a5bdSMauro Carvalho Chehab:Architectures: ARM64
17e777a5bdSMauro Carvalho Chehab
18e777a5bdSMauro Carvalho Chehab1.1. ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_IRQ
19e777a5bdSMauro Carvalho Chehab---------------------------------------
20e777a5bdSMauro Carvalho Chehab
21e777a5bdSMauro Carvalho Chehab:Parameters: in kvm_device_attr.addr the address for PMU overflow interrupt is a
22e777a5bdSMauro Carvalho Chehab	     pointer to an int
23e777a5bdSMauro Carvalho Chehab
24e777a5bdSMauro Carvalho ChehabReturns:
25e777a5bdSMauro Carvalho Chehab
26e777a5bdSMauro Carvalho Chehab	 =======  ========================================================
27e777a5bdSMauro Carvalho Chehab	 -EBUSY   The PMU overflow interrupt is already set
28e777a5bdSMauro Carvalho Chehab	 -ENXIO   The overflow interrupt not set when attempting to get it
29e777a5bdSMauro Carvalho Chehab	 -ENODEV  PMUv3 not supported
30e777a5bdSMauro Carvalho Chehab	 -EINVAL  Invalid PMU overflow interrupt number supplied or
31e777a5bdSMauro Carvalho Chehab		  trying to set the IRQ number without using an in-kernel
32e777a5bdSMauro Carvalho Chehab		  irqchip.
33e777a5bdSMauro Carvalho Chehab	 =======  ========================================================
34e777a5bdSMauro Carvalho Chehab
35e777a5bdSMauro Carvalho ChehabA value describing the PMUv3 (Performance Monitor Unit v3) overflow interrupt
36e777a5bdSMauro Carvalho Chehabnumber for this vcpu. This interrupt could be a PPI or SPI, but the interrupt
37e777a5bdSMauro Carvalho Chehabtype must be same for each vcpu. As a PPI, the interrupt number is the same for
38e777a5bdSMauro Carvalho Chehaball vcpus, while as an SPI it must be a separate number per vcpu.
39e777a5bdSMauro Carvalho Chehab
40e777a5bdSMauro Carvalho Chehab1.2 ATTRIBUTE: KVM_ARM_VCPU_PMU_V3_INIT
41e777a5bdSMauro Carvalho Chehab---------------------------------------
42e777a5bdSMauro Carvalho Chehab
43e777a5bdSMauro Carvalho Chehab:Parameters: no additional parameter in kvm_device_attr.addr
44e777a5bdSMauro Carvalho Chehab
45e777a5bdSMauro Carvalho ChehabReturns:
46e777a5bdSMauro Carvalho Chehab
47e777a5bdSMauro Carvalho Chehab	 =======  ======================================================
48e777a5bdSMauro Carvalho Chehab	 -ENODEV  PMUv3 not supported or GIC not initialized
49e777a5bdSMauro Carvalho Chehab	 -ENXIO   PMUv3 not properly configured or in-kernel irqchip not
50e777a5bdSMauro Carvalho Chehab		  configured as required prior to calling this attribute
51e777a5bdSMauro Carvalho Chehab	 -EBUSY   PMUv3 already initialized
52e777a5bdSMauro Carvalho Chehab	 =======  ======================================================
53e777a5bdSMauro Carvalho Chehab
54e777a5bdSMauro Carvalho ChehabRequest the initialization of the PMUv3.  If using the PMUv3 with an in-kernel
55e777a5bdSMauro Carvalho Chehabvirtual GIC implementation, this must be done after initializing the in-kernel
56e777a5bdSMauro Carvalho Chehabirqchip.
57e777a5bdSMauro Carvalho Chehab
58e777a5bdSMauro Carvalho Chehab
59e777a5bdSMauro Carvalho Chehab2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
60e777a5bdSMauro Carvalho Chehab=================================
61e777a5bdSMauro Carvalho Chehab
62e777a5bdSMauro Carvalho Chehab:Architectures: ARM, ARM64
63e777a5bdSMauro Carvalho Chehab
64e777a5bdSMauro Carvalho Chehab2.1. ATTRIBUTES: KVM_ARM_VCPU_TIMER_IRQ_VTIMER, KVM_ARM_VCPU_TIMER_IRQ_PTIMER
65e777a5bdSMauro Carvalho Chehab-----------------------------------------------------------------------------
66e777a5bdSMauro Carvalho Chehab
67e777a5bdSMauro Carvalho Chehab:Parameters: in kvm_device_attr.addr the address for the timer interrupt is a
68e777a5bdSMauro Carvalho Chehab	     pointer to an int
69e777a5bdSMauro Carvalho Chehab
70e777a5bdSMauro Carvalho ChehabReturns:
71e777a5bdSMauro Carvalho Chehab
72e777a5bdSMauro Carvalho Chehab	 =======  =================================
73e777a5bdSMauro Carvalho Chehab	 -EINVAL  Invalid timer interrupt number
74e777a5bdSMauro Carvalho Chehab	 -EBUSY   One or more VCPUs has already run
75e777a5bdSMauro Carvalho Chehab	 =======  =================================
76e777a5bdSMauro Carvalho Chehab
77e777a5bdSMauro Carvalho ChehabA value describing the architected timer interrupt number when connected to an
78e777a5bdSMauro Carvalho Chehabin-kernel virtual GIC.  These must be a PPI (16 <= intid < 32).  Setting the
79e777a5bdSMauro Carvalho Chehabattribute overrides the default values (see below).
80e777a5bdSMauro Carvalho Chehab
81e777a5bdSMauro Carvalho Chehab=============================  ==========================================
82e777a5bdSMauro Carvalho ChehabKVM_ARM_VCPU_TIMER_IRQ_VTIMER  The EL1 virtual timer intid (default: 27)
83e777a5bdSMauro Carvalho ChehabKVM_ARM_VCPU_TIMER_IRQ_PTIMER  The EL1 physical timer intid (default: 30)
84e777a5bdSMauro Carvalho Chehab=============================  ==========================================
85e777a5bdSMauro Carvalho Chehab
86e777a5bdSMauro Carvalho ChehabSetting the same PPI for different timers will prevent the VCPUs from running.
87e777a5bdSMauro Carvalho ChehabSetting the interrupt number on a VCPU configures all VCPUs created at that
88e777a5bdSMauro Carvalho Chehabtime to use the number provided for a given timer, overwriting any previously
89e777a5bdSMauro Carvalho Chehabconfigured values on other VCPUs.  Userspace should configure the interrupt
90e777a5bdSMauro Carvalho Chehabnumbers on at least one VCPU after creating all VCPUs and before running any
91e777a5bdSMauro Carvalho ChehabVCPUs.
92e777a5bdSMauro Carvalho Chehab
93e777a5bdSMauro Carvalho Chehab3. GROUP: KVM_ARM_VCPU_PVTIME_CTRL
94e777a5bdSMauro Carvalho Chehab==================================
95e777a5bdSMauro Carvalho Chehab
96e777a5bdSMauro Carvalho Chehab:Architectures: ARM64
97e777a5bdSMauro Carvalho Chehab
98e777a5bdSMauro Carvalho Chehab3.1 ATTRIBUTE: KVM_ARM_VCPU_PVTIME_IPA
99e777a5bdSMauro Carvalho Chehab--------------------------------------
100e777a5bdSMauro Carvalho Chehab
101e777a5bdSMauro Carvalho Chehab:Parameters: 64-bit base address
102e777a5bdSMauro Carvalho Chehab
103e777a5bdSMauro Carvalho ChehabReturns:
104e777a5bdSMauro Carvalho Chehab
105e777a5bdSMauro Carvalho Chehab	 =======  ======================================
106e777a5bdSMauro Carvalho Chehab	 -ENXIO   Stolen time not implemented
107e777a5bdSMauro Carvalho Chehab	 -EEXIST  Base address already set for this VCPU
108e777a5bdSMauro Carvalho Chehab	 -EINVAL  Base address not 64 byte aligned
109e777a5bdSMauro Carvalho Chehab	 =======  ======================================
110e777a5bdSMauro Carvalho Chehab
111e777a5bdSMauro Carvalho ChehabSpecifies the base address of the stolen time structure for this VCPU. The
112e777a5bdSMauro Carvalho Chehabbase address must be 64 byte aligned and exist within a valid guest memory
113*72ef5e52SMauro Carvalho Chehabregion. See Documentation/virt/kvm/arm/pvtime.rst for more information
114e777a5bdSMauro Carvalho Chehabincluding the layout of the stolen time structure.
115