aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/mpic_u3msi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/sysdev/mpic_u3msi.c')
-rw-r--r--arch/powerpc/sysdev/mpic_u3msi.c28
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
108static 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
124static void u3msi_teardown_msi_irqs(struct pci_dev *pdev) 108static 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}