Commit 67773fea authored by gongchangsui's avatar gongchangsui
Browse files

VirtCCA: cvm support UEFI boot

virtcca inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IBQSQW



--------------------------------

VirtCCA Feature:
cvm support UEFI boot

Signed-off-by: default avatargongchangsui <gongchangsui@outlook.com>
parent 37dafafe
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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,
+11 −0
Original line number Diff line number Diff line
@@ -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;
+17 −0
Original line number Diff line number Diff line
@@ -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
+3 −0
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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