From 25640f65c91ae5d4a7d70dde50bb34c2d1a37447 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Fri, 15 Jan 2021 11:37:21 +0100 Subject: [PATCH] drivers/interrupt_controller: VT-D IRTE table should be 4kb aligned As specified by the IRTA location. Signed-off-by: Tomasz Bursztyka --- drivers/interrupt_controller/intc_intel_vtd.h | 2 +- include/arch/x86/intel_vtd.h | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/interrupt_controller/intc_intel_vtd.h b/drivers/interrupt_controller/intc_intel_vtd.h index 22caea61613..c11baacb6dd 100644 --- a/drivers/interrupt_controller/intc_intel_vtd.h +++ b/drivers/interrupt_controller/intc_intel_vtd.h @@ -103,7 +103,7 @@ union qi_wait_descriptor { #define QI_WAIT_STATUS_COMPLETE 0x1UL struct vtd_ictl_data { - struct vtd_irte irte[IRTE_NUM]; + struct vtd_irte irte[IRTE_NUM] __aligned(0x1000); struct qi_descriptor qi[QI_NUM] __aligned(0x1000); int irqs[IRTE_NUM]; int vectors[IRTE_NUM]; diff --git a/include/arch/x86/intel_vtd.h b/include/arch/x86/intel_vtd.h index 2fe005cb327..78ef29097e6 100644 --- a/include/arch/x86/intel_vtd.h +++ b/include/arch/x86/intel_vtd.h @@ -119,14 +119,11 @@ #define VTD_GSTS_TES 31 /* Interrupt Remapping Table Address Register details */ -#define VTD_IRTA_SIZE_MASK 0x00000000000000FF +#define VTD_IRTA_SIZE_MASK 0x000000000000000FUL #define VTD_IRTA_EIME BIT(11) -#define VTD_IRTA_ADDR_SHIFT 12 -#define VTD_IRTA_REG_GEN_CONTENT(addr, size, mode) \ - (0 | \ - (addr << VTD_IRTA_ADDR_SHIFT) | \ - (mode) | (size & VTD_IRTA_SIZE_MASK)) +#define VTD_IRTA_REG_GEN_CONTENT(addr, size, mode) \ + ((uint64_t)(addr) | (mode) | (size & VTD_IRTA_SIZE_MASK)) /* Fault event control register details */ #define VTD_FECTL_REG_IP 30