diff mbox

[v4,5/7] PCI: irqdomain: Look up IRQ domain by fwnode_handle

Message ID 1446162376-43419-6-git-send-email-jakeo@microsoft.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Jake Oshins Oct. 29, 2015, 11:46 p.m. UTC
From: Jake Oshins <jakeo@microsoft.com>

This patch adds a second way of finding an IRQ domain associated with
a root PCI bus.  After looking to see if one can be found through
the OF tree, it attempts to look up the IRQ domain through an
fwnode_handle stored in the pci_sysdata struct.

Signed-off-by: Jake Oshins <jakeo@microsoft.com>
---
 drivers/pci/probe.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Andy Shevchenko Oct. 30, 2015, 12:28 a.m. UTC | #1
On Fri, Oct 30, 2015 at 1:46 AM,  <jakeo@microsoft.com> wrote:
> From: Jake Oshins <jakeo@microsoft.com>
>
> This patch adds a second way of finding an IRQ domain associated with
> a root PCI bus.  After looking to see if one can be found through
> the OF tree, it attempts to look up the IRQ domain through an
> fwnode_handle stored in the pci_sysdata struct.


> +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> +       /*
> +        * If no IRQ domain was found via the OF tree, try looking it up
> +        * directly through the fwnode_handle.
> +        */
> +       if (!d) {
> +               if (pci_fwnode(bus)) {

Isn't it the same to
if (!d && pci_fwnode(bus))
 d = ...

?

> +                       d = irq_find_matching_fwnode(pci_fwnode(bus),
> +                                                    DOMAIN_BUS_PCI_MSI);
> +               }
> +       }
> +#endif
Jake Oshins Oct. 30, 2015, 3:58 p.m. UTC | #2
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmR5IFNoZXZjaGVua28gW21h
aWx0bzphbmR5LnNoZXZjaGVua29AZ21haWwuY29tXQ0KPiBTZW50OiBUaHVyc2RheSwgT2N0b2Jl
ciAyOSwgMjAxNSA1OjI4IFBNDQo+IFRvOiBKYWtlIE9zaGlucyA8amFrZW9AbWljcm9zb2Z0LmNv
bT4NCj4gQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+
OyBLWSBTcmluaXZhc2FuDQo+IDxreXNAbWljcm9zb2Z0LmNvbT47IGxpbnV4LWtlcm5lbEB2Z2Vy
Lmtlcm5lbC5vcmc7DQo+IGRldmVsQGxpbnV4ZHJpdmVycHJvamVjdC5vcmc7IG9sYWZAYWVwZmxl
LmRlOyBhcHdAY2Fub25pY2FsLmNvbTsgVml0YWx5DQo+IEt1em5ldHNvdiA8dmt1em5ldHNAcmVk
aGF0LmNvbT47IHRnbHhAcmVkaGF0LmNvbTsgSGFpeWFuZyBaaGFuZw0KPiA8aGFpeWFuZ3pAbWlj
cm9zb2Z0LmNvbT47IG1hcmMuenluZ2llckBhcm0uY29tOyBKaWFuZyBMaXUNCj4gPGppYW5nLmxp
dUBsaW51eC5pbnRlbC5jb20+OyBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPjsg
bGludXgtDQo+IHBjaUB2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NCA1
LzddIFBDSTogaXJxZG9tYWluOiBMb29rIHVwIElSUSBkb21haW4gYnkNCj4gZndub2RlX2hhbmRs
ZQ0KPiANCj4gT24gRnJpLCBPY3QgMzAsIDIwMTUgYXQgMTo0NiBBTSwgIDxqYWtlb0BtaWNyb3Nv
ZnQuY29tPiB3cm90ZToNCj4gPiBGcm9tOiBKYWtlIE9zaGlucyA8amFrZW9AbWljcm9zb2Z0LmNv
bT4NCj4gPg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyBhIHNlY29uZCB3YXkgb2YgZmluZGluZyBhbiBJ
UlEgZG9tYWluIGFzc29jaWF0ZWQgd2l0aA0KPiA+IGEgcm9vdCBQQ0kgYnVzLiAgQWZ0ZXIgbG9v
a2luZyB0byBzZWUgaWYgb25lIGNhbiBiZSBmb3VuZCB0aHJvdWdoDQo+ID4gdGhlIE9GIHRyZWUs
IGl0IGF0dGVtcHRzIHRvIGxvb2sgdXAgdGhlIElSUSBkb21haW4gdGhyb3VnaCBhbg0KPiA+IGZ3
bm9kZV9oYW5kbGUgc3RvcmVkIGluIHRoZSBwY2lfc3lzZGF0YSBzdHJ1Y3QuDQo+IA0KPiANCj4g
PiArI2lmZGVmIENPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU4NCj4gPiArICAgICAgIC8qDQo+ID4g
KyAgICAgICAgKiBJZiBubyBJUlEgZG9tYWluIHdhcyBmb3VuZCB2aWEgdGhlIE9GIHRyZWUsIHRy
eSBsb29raW5nIGl0IHVwDQo+ID4gKyAgICAgICAgKiBkaXJlY3RseSB0aHJvdWdoIHRoZSBmd25v
ZGVfaGFuZGxlLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICBpZiAoIWQpIHsNCj4gPiAr
ICAgICAgICAgICAgICAgaWYgKHBjaV9md25vZGUoYnVzKSkgew0KPiANCj4gSXNuJ3QgaXQgdGhl
IHNhbWUgdG8NCj4gaWYgKCFkICYmIHBjaV9md25vZGUoYnVzKSkNCj4gIGQgPSAuLi4NCj4gDQoN
ClRoYW5rcy4gIEknbGwgbWFrZSB0aGlzIGNoYW5nZSBhbmQgcmVzZW5kLg0KDQotLSBKYWtlIE9z
aGlucw0K
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index f441d1b..3d5d7d6 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -671,6 +671,19 @@  static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
 	 */
 	d = pci_host_bridge_of_msi_domain(bus);
 
+#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
+	/*
+	 * If no IRQ domain was found via the OF tree, try looking it up
+	 * directly through the fwnode_handle.
+	 */
+	if (!d) {
+		if (pci_fwnode(bus)) {
+			d = irq_find_matching_fwnode(pci_fwnode(bus),
+						     DOMAIN_BUS_PCI_MSI);
+		}
+	}
+#endif
+
 	return d;
 }