[PATCH v2 3/7] amd_iommu: acpi-build: update PA, GVA and VA size macros
Sairaj Kodilkar <[email protected]>
| Newsgroups | gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Current implementation supports up to 64 bit IOVA and up to 52 bit PA. Modify related macros so that guest can see right size. Also, use these macros to build the IVINFO field in the IVRS. Signed-off-by: Sairaj Kodilkar <[email protected]> Reviewed-by: Alejandro Jimenez <[email protected]> --- hw/i386/acpi-build.c | 4 +++- hw/i386/amd_iommu.c | 2 +- hw/i386/amd_iommu.h | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 8837b69687d1..d8c14644e62e 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1855,7 +1855,9 @@ build_amd_iommu(GArray *table_data, BIOSLinker *linker, const char *oem_id, */ build_append_int_noprefix(table_data, (1UL << 0) | /* EFRSup */ - (40UL << 8), /* PASize */ + AMDVI_GVA_SIZE_48 | /* GVASize: 010b = 48 bits */ + AMDVI_PA_SIZE_52 | /* PASize: 011_0100b = 52 bits */ + AMDVI_VA_SIZE_64, /* VASize: 100_0000b = 64 bits */ 4); /* reserved */ build_append_int_noprefix(table_data, 0, 8); diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 90252c52af47..b840c40d872c 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -2595,7 +2595,7 @@ static void amdvi_pci_realize(PCIDevice *pdev, Error **errp) 0xff000000); pci_set_long(pdev->config + s->capab_offset + AMDVI_CAPAB_MISC, 0); pci_set_long(pdev->config + s->capab_offset + AMDVI_CAPAB_MISC, - AMDVI_MAX_PH_ADDR | AMDVI_MAX_GVA_ADDR | AMDVI_MAX_VA_ADDR); + AMDVI_PA_SIZE_52 | AMDVI_GVA_SIZE_48 | AMDVI_VA_SIZE_64); } static void amdvi_sysbus_reset(DeviceState *dev) diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 687691ec1cce..d01f9b41dfae 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -243,9 +243,14 @@ #define AMDVI_PAGE_SHIFT_4K 12 #define AMDVI_PAGE_MASK_4K GENMASK64(63, 12) -#define AMDVI_MAX_GVA_ADDR (2UL << 5) -#define AMDVI_MAX_PH_ADDR (40UL << 8) -#define AMDVI_MAX_VA_ADDR (48UL << 15) +/* + * IOMMU Capability Offset 10h: Miscellaneous Information Register 0. + * VAsize[21:15], PAsize[14:8], and GVAsize[7:5]. + * These fields use the same layout in the IVRS IVinfo Field. + */ +#define AMDVI_VA_SIZE_64 (64UL << 15) +#define AMDVI_PA_SIZE_52 (52UL << 8) +#define AMDVI_GVA_SIZE_48 (2UL << 5) /* Completion Wait data size */ #define AMDVI_COMPLETION_DATA_SIZE 8 -- 2.34.1