diff options
Diffstat (limited to 'arch/powerpc/sysdev/mpic_u3msi.c')
-rw-r--r-- | arch/powerpc/sysdev/mpic_u3msi.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c index 9a7aa0ed9c1c..623d7fba15b4 100644 --- a/arch/powerpc/sysdev/mpic_u3msi.c +++ b/arch/powerpc/sysdev/mpic_u3msi.c | |||
@@ -105,22 +105,6 @@ static u64 find_u4_magic_addr(struct pci_dev *pdev, unsigned int hwirq) | |||
105 | return 0; | 105 | return 0; |
106 | } | 106 | } |
107 | 107 | ||
108 | static int u3msi_msi_check_device(struct pci_dev *pdev, int nvec, int type) | ||
109 | { | ||
110 | if (type == PCI_CAP_ID_MSIX) | ||
111 | pr_debug("u3msi: MSI-X untested, trying anyway.\n"); | ||
112 | |||
113 | /* If we can't find a magic address then MSI ain't gonna work */ | ||
114 | if (find_ht_magic_addr(pdev, 0) == 0 && | ||
115 | find_u4_magic_addr(pdev, 0) == 0) { | ||
116 | pr_debug("u3msi: no magic address found for %s\n", | ||
117 | pci_name(pdev)); | ||
118 | return -ENXIO; | ||
119 | } | ||
120 | |||
121 | return 0; | ||
122 | } | ||
123 | |||
124 | static void u3msi_teardown_msi_irqs(struct pci_dev *pdev) | 108 | static void u3msi_teardown_msi_irqs(struct pci_dev *pdev) |
125 | { | 109 | { |
126 | struct msi_desc *entry; | 110 | struct msi_desc *entry; |
@@ -146,6 +130,17 @@ static int u3msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
146 | u64 addr; | 130 | u64 addr; |
147 | int hwirq; | 131 | int hwirq; |
148 | 132 | ||
133 | if (type == PCI_CAP_ID_MSIX) | ||
134 | pr_debug("u3msi: MSI-X untested, trying anyway.\n"); | ||
135 | |||
136 | /* If we can't find a magic address then MSI ain't gonna work */ | ||
137 | if (find_ht_magic_addr(pdev, 0) == 0 && | ||
138 | find_u4_magic_addr(pdev, 0) == 0) { | ||
139 | pr_debug("u3msi: no magic address found for %s\n", | ||
140 | pci_name(pdev)); | ||
141 | return -ENXIO; | ||
142 | } | ||
143 | |||
149 | list_for_each_entry(entry, &pdev->msi_list, list) { | 144 | list_for_each_entry(entry, &pdev->msi_list, list) { |
150 | hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, 1); | 145 | hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, 1); |
151 | if (hwirq < 0) { | 146 | if (hwirq < 0) { |
@@ -202,7 +197,6 @@ int mpic_u3msi_init(struct mpic *mpic) | |||
202 | WARN_ON(ppc_md.setup_msi_irqs); | 197 | WARN_ON(ppc_md.setup_msi_irqs); |
203 | ppc_md.setup_msi_irqs = u3msi_setup_msi_irqs; | 198 | ppc_md.setup_msi_irqs = u3msi_setup_msi_irqs; |
204 | ppc_md.teardown_msi_irqs = u3msi_teardown_msi_irqs; | 199 | ppc_md.teardown_msi_irqs = u3msi_teardown_msi_irqs; |
205 | ppc_md.msi_check_device = u3msi_msi_check_device; | ||
206 | 200 | ||
207 | return 0; | 201 | return 0; |
208 | } | 202 | } |