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