|
25 | 25 | #include <linux/notifier.h>
|
26 | 26 | #include <linux/export.h>
|
27 | 27 | #include <linux/irq.h>
|
| 28 | +#include <linux/irqchip/irq-msi-lib.h> |
28 | 29 | #include <linux/msi.h>
|
29 | 30 | #include <linux/irqdomain.h>
|
30 | 31 | #include <linux/percpu.h>
|
@@ -3970,29 +3971,30 @@ static struct irq_chip amd_ir_chip = {
|
3970 | 3971 |
|
3971 | 3972 | static const struct msi_parent_ops amdvi_msi_parent_ops = {
|
3972 | 3973 | .supported_flags = X86_VECTOR_MSI_FLAGS_SUPPORTED | MSI_FLAG_MULTI_PCI_MSI,
|
| 3974 | + .bus_select_token = DOMAIN_BUS_AMDVI, |
| 3975 | + .bus_select_mask = MATCH_PCI_MSI, |
3973 | 3976 | .prefix = "IR-",
|
3974 | 3977 | .init_dev_msi_info = msi_parent_init_dev_msi_info,
|
3975 | 3978 | };
|
3976 | 3979 |
|
3977 | 3980 | int amd_iommu_create_irq_domain(struct amd_iommu *iommu)
|
3978 | 3981 | {
|
3979 |
| - struct fwnode_handle *fn; |
| 3982 | + struct irq_domain_info info = { |
| 3983 | + .fwnode = irq_domain_alloc_named_id_fwnode("AMD-IR", iommu->index), |
| 3984 | + .ops = &amd_ir_domain_ops, |
| 3985 | + .domain_flags = IRQ_DOMAIN_FLAG_ISOLATED_MSI, |
| 3986 | + .host_data = iommu, |
| 3987 | + .parent = arch_get_ir_parent_domain(), |
| 3988 | + }; |
3980 | 3989 |
|
3981 |
| - fn = irq_domain_alloc_named_id_fwnode("AMD-IR", iommu->index); |
3982 |
| - if (!fn) |
| 3990 | + if (!info.fwnode) |
3983 | 3991 | return -ENOMEM;
|
3984 |
| - iommu->ir_domain = irq_domain_create_hierarchy(arch_get_ir_parent_domain(), 0, 0, |
3985 |
| - fn, &amd_ir_domain_ops, iommu); |
| 3992 | + |
| 3993 | + iommu->ir_domain = msi_create_parent_irq_domain(&info, &amdvi_msi_parent_ops); |
3986 | 3994 | if (!iommu->ir_domain) {
|
3987 |
| - irq_domain_free_fwnode(fn); |
| 3995 | + irq_domain_free_fwnode(info.fwnode); |
3988 | 3996 | return -ENOMEM;
|
3989 | 3997 | }
|
3990 |
| - |
3991 |
| - irq_domain_update_bus_token(iommu->ir_domain, DOMAIN_BUS_AMDVI); |
3992 |
| - iommu->ir_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT | |
3993 |
| - IRQ_DOMAIN_FLAG_ISOLATED_MSI; |
3994 |
| - iommu->ir_domain->msi_parent_ops = &amdvi_msi_parent_ops; |
3995 |
| - |
3996 | 3998 | return 0;
|
3997 | 3999 | }
|
3998 | 4000 |
|
|
0 commit comments