From: Joerg Roedel <joerg.roedel@amd.com> To: <iommu@lists.linux-foundation.org> Cc: <linux-kernel@vger.kernel.org>, Joerg Roedel <joerg.roedel@amd.com> Subject: [PATCH 23/27] iommu/amd: Add initialization routines for AMD interrupt remapping Date: Wed, 11 Jul 2012 15:39:08 +0200 [thread overview] Message-ID: <1342013952-10174-24-git-send-email-joerg.roedel@amd.com> (raw) In-Reply-To: <1342013952-10174-1-git-send-email-joerg.roedel@amd.com> Add the six routines required to setup interrupt remapping with the AMD IOMMU. Also put it all together into the AMD specific irq_remap_ops. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> --- drivers/iommu/amd_iommu.c | 18 +++++++++++++++++ drivers/iommu/amd_iommu_init.c | 42 +++++++++++++++++++++++++++++++++++++++ drivers/iommu/amd_iommu_proto.h | 8 ++++++++ drivers/iommu/irq_remapping.h | 1 + 4 files changed, 69 insertions(+) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index ac6e731..439f03c 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -45,6 +45,7 @@ #include "amd_iommu_proto.h" #include "amd_iommu_types.h" +#include "irq_remapping.h" #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28)) @@ -4154,4 +4155,21 @@ static int setup_hpet_msi(unsigned int irq, unsigned int id) return 0; } +struct irq_remap_ops amd_iommu_irq_ops = { + .supported = amd_iommu_supported, + .prepare = amd_iommu_prepare, + .enable = amd_iommu_enable, + .disable = amd_iommu_disable, + .reenable = amd_iommu_reenable, + .enable_faulting = amd_iommu_enable_faulting, + .setup_ioapic_entry = setup_ioapic_entry, +#ifdef CONFIG_SMP + .set_affinity = set_affinity, +#endif + .free_irq = free_irq, + .compose_msi_msg = compose_msi_msg, + .msi_alloc_irq = msi_alloc_irq, + .msi_setup_irq = msi_setup_irq, + .setup_hpet_msi = setup_hpet_msi, +}; #endif diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 820f688..d195d22 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -34,6 +34,7 @@ #include <asm/x86_init.h> #include <asm/iommu_table.h> #include <asm/io_apic.h> +#include <asm/irq_remapping.h> #include "amd_iommu_proto.h" #include "amd_iommu_types.h" @@ -1894,7 +1895,48 @@ static int __init iommu_go_to_state(enum iommu_init_state state) return ret; } +#ifdef CONFIG_IRQ_REMAP +int __init amd_iommu_prepare(void) +{ + return iommu_go_to_state(IOMMU_ACPI_FINISHED); +} + +int __init amd_iommu_supported(void) +{ + return amd_iommu_irq_remap ? 1 : 0; +} + +int __init amd_iommu_enable(void) +{ + int ret; + + ret = iommu_go_to_state(IOMMU_ENABLED); + if (ret) + return ret; + irq_remapping_enabled = 1; + + return 0; +} + +void amd_iommu_disable(void) +{ + amd_iommu_suspend(); +} + +int amd_iommu_reenable(int mode) +{ + amd_iommu_resume(); + + return 0; +} + +int __init amd_iommu_enable_faulting(void) +{ + /* We enable MSI later when PCI is initialized */ + return 0; +} +#endif /* * This is the core init function for AMD IOMMU hardware in the system. diff --git a/drivers/iommu/amd_iommu_proto.h b/drivers/iommu/amd_iommu_proto.h index 1a7f41c..c294961 100644 --- a/drivers/iommu/amd_iommu_proto.h +++ b/drivers/iommu/amd_iommu_proto.h @@ -32,6 +32,14 @@ extern void amd_iommu_uninit_devices(void); extern void amd_iommu_init_notifier(void); extern void amd_iommu_init_api(void); +/* Needed for interrupt remapping */ +extern int amd_iommu_supported(void); +extern int amd_iommu_prepare(void); +extern int amd_iommu_enable(void); +extern void amd_iommu_disable(void); +extern int amd_iommu_reenable(int); +extern int amd_iommu_enable_faulting(void); + /* IOMMUv2 specific functions */ struct iommu_domain; diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h index b3f70c9..915a247 100644 --- a/drivers/iommu/irq_remapping.h +++ b/drivers/iommu/irq_remapping.h @@ -84,6 +84,7 @@ struct irq_remap_ops { }; extern struct irq_remap_ops intel_irq_remap_ops; +extern struct irq_remap_ops amd_iommu_irq_ops; #else /* CONFIG_IRQ_REMAP */ -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joerg.roedel-5C7GfCeVMHo@public.gmane.org> To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: [PATCH 23/27] iommu/amd: Add initialization routines for AMD interrupt remapping Date: Wed, 11 Jul 2012 15:39:08 +0200 [thread overview] Message-ID: <1342013952-10174-24-git-send-email-joerg.roedel@amd.com> (raw) In-Reply-To: <1342013952-10174-1-git-send-email-joerg.roedel-5C7GfCeVMHo@public.gmane.org> Add the six routines required to setup interrupt remapping with the AMD IOMMU. Also put it all together into the AMD specific irq_remap_ops. Signed-off-by: Joerg Roedel <joerg.roedel-5C7GfCeVMHo@public.gmane.org> --- drivers/iommu/amd_iommu.c | 18 +++++++++++++++++ drivers/iommu/amd_iommu_init.c | 42 +++++++++++++++++++++++++++++++++++++++ drivers/iommu/amd_iommu_proto.h | 8 ++++++++ drivers/iommu/irq_remapping.h | 1 + 4 files changed, 69 insertions(+) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index ac6e731..439f03c 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -45,6 +45,7 @@ #include "amd_iommu_proto.h" #include "amd_iommu_types.h" +#include "irq_remapping.h" #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28)) @@ -4154,4 +4155,21 @@ static int setup_hpet_msi(unsigned int irq, unsigned int id) return 0; } +struct irq_remap_ops amd_iommu_irq_ops = { + .supported = amd_iommu_supported, + .prepare = amd_iommu_prepare, + .enable = amd_iommu_enable, + .disable = amd_iommu_disable, + .reenable = amd_iommu_reenable, + .enable_faulting = amd_iommu_enable_faulting, + .setup_ioapic_entry = setup_ioapic_entry, +#ifdef CONFIG_SMP + .set_affinity = set_affinity, +#endif + .free_irq = free_irq, + .compose_msi_msg = compose_msi_msg, + .msi_alloc_irq = msi_alloc_irq, + .msi_setup_irq = msi_setup_irq, + .setup_hpet_msi = setup_hpet_msi, +}; #endif diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 820f688..d195d22 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -34,6 +34,7 @@ #include <asm/x86_init.h> #include <asm/iommu_table.h> #include <asm/io_apic.h> +#include <asm/irq_remapping.h> #include "amd_iommu_proto.h" #include "amd_iommu_types.h" @@ -1894,7 +1895,48 @@ static int __init iommu_go_to_state(enum iommu_init_state state) return ret; } +#ifdef CONFIG_IRQ_REMAP +int __init amd_iommu_prepare(void) +{ + return iommu_go_to_state(IOMMU_ACPI_FINISHED); +} + +int __init amd_iommu_supported(void) +{ + return amd_iommu_irq_remap ? 1 : 0; +} + +int __init amd_iommu_enable(void) +{ + int ret; + + ret = iommu_go_to_state(IOMMU_ENABLED); + if (ret) + return ret; + irq_remapping_enabled = 1; + + return 0; +} + +void amd_iommu_disable(void) +{ + amd_iommu_suspend(); +} + +int amd_iommu_reenable(int mode) +{ + amd_iommu_resume(); + + return 0; +} + +int __init amd_iommu_enable_faulting(void) +{ + /* We enable MSI later when PCI is initialized */ + return 0; +} +#endif /* * This is the core init function for AMD IOMMU hardware in the system. diff --git a/drivers/iommu/amd_iommu_proto.h b/drivers/iommu/amd_iommu_proto.h index 1a7f41c..c294961 100644 --- a/drivers/iommu/amd_iommu_proto.h +++ b/drivers/iommu/amd_iommu_proto.h @@ -32,6 +32,14 @@ extern void amd_iommu_uninit_devices(void); extern void amd_iommu_init_notifier(void); extern void amd_iommu_init_api(void); +/* Needed for interrupt remapping */ +extern int amd_iommu_supported(void); +extern int amd_iommu_prepare(void); +extern int amd_iommu_enable(void); +extern void amd_iommu_disable(void); +extern int amd_iommu_reenable(int); +extern int amd_iommu_enable_faulting(void); + /* IOMMUv2 specific functions */ struct iommu_domain; diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h index b3f70c9..915a247 100644 --- a/drivers/iommu/irq_remapping.h +++ b/drivers/iommu/irq_remapping.h @@ -84,6 +84,7 @@ struct irq_remap_ops { }; extern struct irq_remap_ops intel_irq_remap_ops; +extern struct irq_remap_ops amd_iommu_irq_ops; #else /* CONFIG_IRQ_REMAP */ -- 1.7.9.5
next prev parent reply other threads:[~2012-07-11 13:44 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-07-11 13:38 [PATCH 0/27] AMD IOMMU interrupt remapping support v2 Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 01/27] x86/irq: Add data structure to keep AMD specific irq remapping information Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 21:42 ` Yinghai Lu 2012-07-11 21:42 ` Yinghai Lu 2012-07-12 15:40 ` Joerg Roedel 2012-07-12 15:40 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 02/27] x86/irq: Introduce irq_cfg->remapped Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 03/27] iommu/amd: Fix sparse warnings Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-17 10:44 ` Joerg Roedel 2012-07-17 10:44 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 04/27] iommu/amd: Use acpi_get_table instead of acpi_table_parse Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 05/27] iommu/amd: Split out PCI related parts of IOMMU initialization Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 06/27] iommu/amd: Move informational prinks out of iommu_enable Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 07/27] iommu/amd: Introduce early_amd_iommu_init routine Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 08/27] iommu/amd: Split enable_iommus() routine Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 09/27] iommu/amd: Move unmap_flush message to amd_iommu_init_dma_ops() Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 10/27] iommu/amd: Introduce amd_iommu_init_dma routine Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 11/27] iommu/amd: Convert iommu initialization to state machine Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 12/27] iommu/amd: Keep track of HPET and IOAPIC device ids Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 13/27] iommu/amd: Add slab-cache for irq remapping tables Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:38 ` [PATCH 14/27] iommu/amd: Allocate data structures to keep track of " Joerg Roedel 2012-07-11 13:38 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 15/27] iommu/amd: Check if IOAPIC information is correct Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 16/27] iommu/amd: Split device table initialization into irq and dma part Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 17/27] iommu/amd: Make sure IOMMU is not considered to translate itself Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 18/27] iommu/amd: Add IRTE invalidation routine Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 19/27] iommu/amd: Add routines to manage irq remapping tables Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 20/27] iommu/amd: Add IOAPIC remapping routines Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 21/27] iommu/amd: Implement MSI routines for interrupt remapping Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 22/27] iommu/amd: Add call-back routine for HPET MSI Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel [this message] 2012-07-11 13:39 ` [PATCH 23/27] iommu/amd: Add initialization routines for AMD interrupt remapping Joerg Roedel 2012-07-11 13:39 ` [PATCH 24/27] iommu/amd: Make sure irq remapping still works on dma init failure Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 25/27] iommu/irq: Use amd_iommu_irq_ops if supported Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 26/27] iommu/amd: Print message to system log when irq remapping is enabled Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel 2012-07-11 13:39 ` [PATCH 27/27] iommu/amd: Report irq remapping through IOMMU-API Joerg Roedel 2012-07-11 13:39 ` Joerg Roedel
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=1342013952-10174-24-git-send-email-joerg.roedel@amd.com \ --to=joerg.roedel@amd.com \ --cc=iommu@lists.linux-foundation.org \ --cc=linux-kernel@vger.kernel.org \ /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: linkBe 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.