Loading arch/arm64/include/asm/kvm_tmi.h +1 −0 Original line number Diff line number Diff line Loading @@ -413,6 +413,7 @@ u64 tmi_kae_init(void); u64 tmi_kae_enable(u64 rd, u64 numa_set, u64 is_enable); u64 mmio_va_to_pa(void *addr); int virtcca_io_mem_abort(struct kvm_vcpu *vcpu, unsigned long hva, phys_addr_t fault_ipa); void kvm_cvm_vcpu_put(struct kvm_vcpu *vcpu); int kvm_load_user_data(struct kvm *kvm, unsigned long arg); unsigned long cvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu, Loading arch/arm64/include/asm/kvm_tmm.h +11 −0 Original line number Diff line number Diff line Loading @@ -75,8 +75,19 @@ struct virtcca_cvm { u32 cvm_vmid; u64 rd; u64 loader_start; #ifndef __GENKSYMS__ union { u64 image_end; u64 mmio_start; }; union { u64 initrd_start; u64 mmio_end; }; #else u64 image_end; u64 initrd_start; #endif u64 dtb_end; u64 ram_size; struct kvm_numa_info numa_info; Loading arch/arm64/include/asm/virtcca_coda.h +17 −0 Original line number Diff line number Diff line Loading @@ -88,5 +88,22 @@ u32 virtcca_tmi_dev_attach(struct arm_smmu_domain *arm_smmu_domain, struct kvm * void virtcca_iommu_dma_get_msi_page(void *cookie, dma_addr_t *iova, phys_addr_t *phys); int virtcca_msi_map(struct vfio_pci_core_device *vdev); static inline u8 virtcca_readb(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_8_BIT, pci_dev_id(pdev)); } static inline u16 virtcca_readw(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_16_BIT, pci_dev_id(pdev)); } static inline u32 virtcca_readl(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_32_BIT, pci_dev_id(pdev)); } size_t virtcca_pci_get_rom_size(void *pdev, void __iomem *rom, size_t size); #endif #endif arch/arm64/include/asm/virtcca_cvm_host.h +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,9 @@ #ifdef CONFIG_HISI_VIRTCCA_HOST #define UEFI_LOADER_START 0x0 #define UEFI_SIZE 0x8000000 bool is_virtcca_cvm_enable(void); #else Loading arch/arm64/kvm/mmu.c +6 −0 Original line number Diff line number Diff line Loading @@ -1763,6 +1763,12 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu) goto out_unlock; } #ifdef CONFIG_HISI_VIRTCCA_CODA ret = virtcca_io_mem_abort(vcpu, hva, fault_ipa); if (ret != -EPERM) goto out_unlock; #endif /* Userspace should not be able to register out-of-bounds IPAs */ VM_BUG_ON(fault_ipa >= kvm_phys_size(vcpu->kvm)); Loading Loading
arch/arm64/include/asm/kvm_tmi.h +1 −0 Original line number Diff line number Diff line Loading @@ -413,6 +413,7 @@ u64 tmi_kae_init(void); u64 tmi_kae_enable(u64 rd, u64 numa_set, u64 is_enable); u64 mmio_va_to_pa(void *addr); int virtcca_io_mem_abort(struct kvm_vcpu *vcpu, unsigned long hva, phys_addr_t fault_ipa); void kvm_cvm_vcpu_put(struct kvm_vcpu *vcpu); int kvm_load_user_data(struct kvm *kvm, unsigned long arg); unsigned long cvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu, Loading
arch/arm64/include/asm/kvm_tmm.h +11 −0 Original line number Diff line number Diff line Loading @@ -75,8 +75,19 @@ struct virtcca_cvm { u32 cvm_vmid; u64 rd; u64 loader_start; #ifndef __GENKSYMS__ union { u64 image_end; u64 mmio_start; }; union { u64 initrd_start; u64 mmio_end; }; #else u64 image_end; u64 initrd_start; #endif u64 dtb_end; u64 ram_size; struct kvm_numa_info numa_info; Loading
arch/arm64/include/asm/virtcca_coda.h +17 −0 Original line number Diff line number Diff line Loading @@ -88,5 +88,22 @@ u32 virtcca_tmi_dev_attach(struct arm_smmu_domain *arm_smmu_domain, struct kvm * void virtcca_iommu_dma_get_msi_page(void *cookie, dma_addr_t *iova, phys_addr_t *phys); int virtcca_msi_map(struct vfio_pci_core_device *vdev); static inline u8 virtcca_readb(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_8_BIT, pci_dev_id(pdev)); } static inline u16 virtcca_readw(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_16_BIT, pci_dev_id(pdev)); } static inline u32 virtcca_readl(void __iomem *addr, struct pci_dev *pdev) { return tmi_mmio_read(mmio_va_to_pa(addr), CVM_RW_32_BIT, pci_dev_id(pdev)); } size_t virtcca_pci_get_rom_size(void *pdev, void __iomem *rom, size_t size); #endif #endif
arch/arm64/include/asm/virtcca_cvm_host.h +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,9 @@ #ifdef CONFIG_HISI_VIRTCCA_HOST #define UEFI_LOADER_START 0x0 #define UEFI_SIZE 0x8000000 bool is_virtcca_cvm_enable(void); #else Loading
arch/arm64/kvm/mmu.c +6 −0 Original line number Diff line number Diff line Loading @@ -1763,6 +1763,12 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu) goto out_unlock; } #ifdef CONFIG_HISI_VIRTCCA_CODA ret = virtcca_io_mem_abort(vcpu, hva, fault_ipa); if (ret != -EPERM) goto out_unlock; #endif /* Userspace should not be able to register out-of-bounds IPAs */ VM_BUG_ON(fault_ipa >= kvm_phys_size(vcpu->kvm)); Loading