From: David Kiarie <davidkiarie4@gmail.com>
To: qemu-devel@nongnu.org
Cc: jan.kiszka@web.de, mst@redhat.com, rkrcmar@redhat.com,
peterx@redhat.com, ehabkost@redhat.com, pbonzini@redhat.com,
alex.williamson@redhat.com, David Kiarie <davidkiarie4@gmail.com>
Subject: [Qemu-devel] [v4 3/6] hw/iommu: Prepare for AMD IOMMU interrupt remapping
Date: Mon, 12 Sep 2016 13:08:06 +0300 [thread overview]
Message-ID: <1473674889-2727-4-git-send-email-davidkiarie4@gmail.com> (raw)
In-Reply-To: <1473674889-2727-1-git-send-email-davidkiarie4@gmail.com>
Introduce macros and trace events for use in AMD IOMMU
interrupt remapping
Signed-off-by: David Kiarie <davidkiarie4@gmail.com>
---
hw/i386/amd_iommu.h | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++
hw/i386/trace-events | 7 +++++
2 files changed, 87 insertions(+)
diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h
index 884926e..5c4a13b 100644
--- a/hw/i386/amd_iommu.h
+++ b/hw/i386/amd_iommu.h
@@ -177,6 +177,68 @@
#define AMDVI_IOTLB_MAX_SIZE 1024
#define AMDVI_DEVID_SHIFT 36
+/* interrupt types */
+#define AMDVI_MT_FIXED 0x0
+#define AMDVI_MT_ARBIT 0x1
+#define AMDVI_MT_SMI 0x2
+#define AMDVI_MT_NMI 0x3
+#define AMDVI_MT_INIT 0x4
+#define AMDVI_MT_EXTINT 0x6
+#define AMDVI_MT_LINT1 0xb
+#define AMDVI_MT_LINT0 0xe
+
+/* MSI interrupt type mask */
+#define AMDVI_IR_TYPE_MASK 0x300
+
+/* interrupt destination mode */
+#define AMDVI_IRDEST_MODE_MASK 0x2
+
+/* select MSI data 10:0 bits */
+#define AMDVI_IRTE_INDEX_MASK 0x7ff
+
+/* bits determining whether specific interrupts should be passed
+ * split DTE into 64-bit chunks
+ */
+#define AMDVI_DTE_INTPASS_LSHIFT 56
+#define AMDVI_DTE_EINTPASS_LSHIFT 57
+#define AMDVI_DTE_NMIPASS_LSHIFT 58
+#define AMDVI_DTE_INTCTL_RSHIFT 60
+#define AMDVI_DTE_LINT0PASS_LSHIFT 62
+#define AMDVI_DTE_LINT1PASS_LSHIFT 63
+
+/* INTCTL expected values */
+#define AMDVI_INTCTL_ABORT 0x0
+#define AMDVI_INTCTL_PASS 0x1
+#define AMDVI_INTCTL_REMAP 0x2
+#define AMDVI_INTCTL_RSVD 0x3
+
+/* interrupt data valid */
+#define AMDVI_IR_VALID (1UL << 0)
+
+/* interrupt root table mask */
+#define AMDVI_IRTEROOT_MASK 0xffffffffffffc0
+
+/* default IRTE size */
+#define AMDVI_DEFAULT_IRTE_SIZE 0x4
+
+#define AMDVI_IR_TABLE_SIZE_MASK 0xfe
+
+/* offsets into MSI data */
+#define AMDVI_MSI_DATA_DM_RSHIFT 0x8
+#define AMDVI_MSI_DATA_LEVEL_RSHIFT 0xe
+#define AMDVI_MSI_DATA_TRM_RSHIFT 0xf
+
+/* offsets into MSI address */
+#define AMDVI_MSI_ADDR_DM_RSHIFT 0x2
+#define AMDVI_MSI_ADDR_RH_RSHIFT 0x3
+#define AMDVI_MSI_ADDR_DEST_RSHIFT 0xc
+
+#define AMDVI_BUS_NUM 0x0
+/* AMD-Vi specific IOAPIC Device function */
+#define AMDVI_DEVFN_IOAPIC 0xa0
+
+#define AMDVI_LOCAL_APIC_ADDR 0xfee00000
+
/* extended feature support */
#define AMDVI_EXT_FEATURES (AMDVI_FEATURE_PREFETCH | AMDVI_FEATURE_PPR | \
AMDVI_FEATURE_IA | AMDVI_FEATURE_GT | AMDVI_FEATURE_HE | \
@@ -214,6 +276,24 @@
#define AMDVI_INT_ADDR_FIRST 0xfee00000
#define AMDVI_INT_ADDR_LAST 0xfeefffff
+#define AMDVI_INT_ADDR_SIZE ((AMDVI_INT_ADDR_LAST - \
+ AMDVI_INT_ADDR_FIRST) + 1)
+/* AMD IOMMU errors */
+#define AMDVI_ILLEG_DEV_TAB 0x1
+#define AMDVI_IOPF_ 0x2
+#define AMDVI_DEV_TAB_HW 0x3
+#define AMDVI_PAGE_TAB_HW 0x4
+#define AMDVI_ILLEG_COM 0x5
+#define AMDVI_COM_HW 0x6
+#define AMDVI_IOTLB_TIMEOUT 0x7
+#define AMDVI_INVAL_DEV_REQ 0x8
+#define AMDVI_INVAL_PPR_REQ 0x9
+#define AMDVI_EVT_COUNT_ZERO 0xa
+
+/* represent target and master aborts error state */
+#define AMDVI_TARGET_ABORT 0xb
+#define AMDVI_MASTER_ABORT 0xc
+
#define TYPE_AMD_IOMMU_DEVICE "amd-iommu"
#define AMD_IOMMU_DEVICE(obj)\
OBJECT_CHECK(AMDVIState, (obj), TYPE_AMD_IOMMU_DEVICE)
diff --git a/hw/i386/trace-events b/hw/i386/trace-events
index 60bdf6a..344c2f6 100644
--- a/hw/i386/trace-events
+++ b/hw/i386/trace-events
@@ -42,3 +42,10 @@ amdvi_mode_invalid(unsigned level, uint64_t addr)"error: translation level 0x%"P
amdvi_page_fault(uint64_t addr) "error: page fault accessing guest physical address 0x%"PRIx64
amdvi_iotlb_hit(uint16_t bus, uint16_t slot, uint16_t func, uint64_t addr, uint64_t txaddr) "hit iotlb devid %02x:%02x.%x gpa 0x%"PRIx64 " hpa 0x%"PRIx64
amdvi_translation_result(uint16_t bus, uint16_t slot, uint16_t func, uint64_t addr, uint64_t txaddr) "devid: %02x:%02x.%x gpa 0x%"PRIx64 " hpa 0x%"PRIx64
+amdvi_irte_get_fail(uint64_t addr, uint64_t offset) "couldn't access device table entry 0x%"PRIx64" + offset 0x%"PRIx64
+amdvi_invalid_irte_entry(uint16_t devid, uint64_t offset) "devid %x requested IRTE offset 0x%"PRIx64" Outside IR table range"
+amdvi_ir_request(uint32_t data, uint64_t addr, uint16_t sid) "IR request data 0x%"PRIx32" address 0x%"PRIx64" SID %x"
+amdvi_ir_remap(uint32_t data, uint64_t addr, uint16_t sid) "IR remap data 0x%"PRIx32" address 0x%"PRIx64" SID %x"
+amdvi_ir_target_abort(uint32_t data, uint64_t addr, uint16_t sid) "IR target abort data 0x%"PRIx32" address 0x%"PRIx64" SID %x"
+amdvi_ir_write_fail(uint64_t addr, uint32_t data) "fail to write to addr 0x%"PRIx64 " value 0x%"PRIx32
+amdvi_ir_read_fail(uint64_t addr) " fail to read from addr 0x%"PRIx64
--
2.1.4
next prev parent reply other threads:[~2016-09-12 10:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-12 10:08 [Qemu-devel] [v4 0/6] AMD IOMMU Interrupt remapping David Kiarie
2016-09-12 10:08 ` [Qemu-devel] [v4 1/6] hw/msi: Allow platform devices to use explicit SID David Kiarie
2016-09-12 11:02 ` Peter Xu
2016-09-12 11:26 ` David Kiarie
2016-09-12 11:54 ` Peter Xu
2016-09-12 10:08 ` [Qemu-devel] [v4 2/6] hw/i386: enforce SID verification David Kiarie
2016-09-12 11:09 ` Peter Xu
2016-09-12 11:12 ` David Kiarie
2016-09-12 11:13 ` Peter Xu
2016-09-12 10:08 ` David Kiarie [this message]
2016-09-12 10:08 ` [Qemu-devel] [v4 4/6] hw/iommu: AMD IOMMU interrupt remapping David Kiarie
2016-09-12 11:34 ` Peter Xu
2016-09-12 11:51 ` David Kiarie
2016-09-12 12:11 ` Peter Xu
2016-09-12 12:45 ` David Kiarie
2016-09-13 7:38 ` Peter Xu
2016-09-13 14:11 ` Michael S. Tsirkin
2016-09-13 14:13 ` Michael S. Tsirkin
2016-09-14 10:12 ` David Kiarie
2016-09-12 10:08 ` [Qemu-devel] [v4 5/6] hw/acpi: report IOAPIC on IVRS David Kiarie
2016-09-12 10:08 ` [Qemu-devel] [v4 6/6] hw/iommu: share common code between IOMMUs David Kiarie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1473674889-2727-4-git-send-email-davidkiarie4@gmail.com \
--to=davidkiarie4@gmail.com \
--cc=alex.williamson@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jan.kiszka@web.de \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkrcmar@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.