Message ID | 1465884747-1517-2-git-send-email-po.liu@nxp.com |
---|---|
State | Superseded |
Headers | show |
On Tue, Jun 14, 2016 at 02:12:27PM +0800, Po Liu wrote: > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > When chip support the aer interrupt with none MSI/MSI-X/INTx mode, > maybe there is interrupt line for aer pme etc. Search the interrupt > number in the fdt file. Then fixup the dev->irq with it. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for V2: > - Move to the quirk file > > drivers/pci/quirks.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..909d479 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c Is there any possibility of this part being used on different arches, or will it only ever be on arm64 (or whatever it is)? If the latter, it could go somewhere like arch/arm64/kernel/quirks.c (which doesn't exist yet). > @@ -25,6 +25,7 @@ > #include <linux/sched.h> > #include <linux/ktime.h> > #include <linux/mm.h> > +#include <linux/of_irq.h> > #include <asm/dma.h> /* isa_dma_bridge_buggy */ > #include "pci.h" > > @@ -4419,3 +4420,25 @@ static void quirk_intel_qat_vf_cap(struct pci_dev *pdev) > } > } > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x443, quirk_intel_qat_vf_cap); > + > +/* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * but use standalone irq. Read the device tree for the aer > + * interrupt number. > + */ > +static void quirk_aer_interrupt(struct pci_dev *dev) > +{ > + int ret; > + struct device_node *np = NULL; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + if (IS_ENABLED(CONFIG_OF_IRQ) && np) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + dev->no_msi = 1; > + dev->irq = ret; > + } > + } What does this mean for the other PCIe services, e.g., PME? I guess this makes the existing AER code work unchanged. But I thought PME had a similar situation and was connected up to a different interrupt than AER was. > +} > +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_aer_interrupt); > -- > 2.1.0.27.g96db324 > > -- > 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 -- 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
> -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, June 16, 2016 9:54 PM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Bjorn Helgaas; > Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; Mingkai Hu; Stuart Yoder; > Yang-Leo Li; Arnd Bergmann; Minghuan Lian; Murali Karicheri > Subject: Re: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk > > On Tue, Jun 14, 2016 at 02:12:27PM +0800, Po Liu wrote: > > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > > When chip support the aer interrupt with none MSI/MSI-X/INTx mode, > > maybe there is interrupt line for aer pme etc. Search the interrupt > > number in the fdt file. Then fixup the dev->irq with it. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for V2: > > - Move to the quirk file > > > > drivers/pci/quirks.c | 23 +++++++++++++++++++++++ > > 1 file changed, 23 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..909d479 100644 > > --- a/drivers/pci/quirks.c > > +++ b/drivers/pci/quirks.c > > Is there any possibility of this part being used on different arches, or > will it only ever be on arm64 (or whatever it is)? If the latter, it > could go somewhere like arch/arm64/kernel/quirks.c (which doesn't exist > yet). NXP Layerscape1 is base on the arm 32bit design. Also need the fixup. > > > @@ -25,6 +25,7 @@ > > #include <linux/sched.h> > > #include <linux/ktime.h> > > #include <linux/mm.h> > > +#include <linux/of_irq.h> > > #include <asm/dma.h> /* isa_dma_bridge_buggy */ > > #include "pci.h" > > > > @@ -4419,3 +4420,25 @@ static void quirk_intel_qat_vf_cap(struct > pci_dev *pdev) > > } > > } > > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x443, > > quirk_intel_qat_vf_cap); > > + > > +/* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * but use standalone irq. Read the device tree for the aer > > + * interrupt number. > > + */ > > +static void quirk_aer_interrupt(struct pci_dev *dev) { > > + int ret; > > + struct device_node *np = NULL; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + dev->no_msi = 1; > > + dev->irq = ret; > > + } > > + } > > What does this mean for the other PCIe services, e.g., PME? I guess > this makes the existing AER code work unchanged. But I thought PME had > a similar situation and was connected up to a different interrupt than > AER was. Yes, PME is similar, HP is not support. I think better to disable the PME service irq in the quirk. But seems it is no use because quirk fixup is only running in init phase time(except suspend, resume). > > > +} > > +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, > > +quirk_aer_interrupt); > > -- > > 2.1.0.27.g96db324 > > > > -- > > 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
SGkgQmpvcm4sDQoNClNvIGNvdWxkIHdlIGtlZXAgaXQgaW4gdGhlIHBjaS9xdWlyay5jID8gDQpJ ZiB5ZXMsIEkgd291bGQgb25seSBtb3ZlIHRoZSBiaW5kaW5nIGRlc2NyaXB0aW9uIGluIHRoZSBk b2N1bWVudGF0aW9uIGludG8gdGhpcyBkcml2ZXIgdGhlIG5leHQgdmVyc2lvbi4NCg0KPiAgLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gIEZyb206IFBvIExpdQ0KPiAgU2VudDogRnJpZGF5 LCBKdW5lIDE3LCAyMDE2IDExOjMxIEFNDQo+ICBUbzogJ0Jqb3JuIEhlbGdhYXMnDQo+ICBDYzog bGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnOw0KPiAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgZGV2aWNldHJlZUB2Z2Vy Lmtlcm5lbC5vcmc7IEJqb3JuIEhlbGdhYXM7DQo+ICBTaGF3biBHdW87IE1hcmMgWnluZ2llcjsg Um9iIEhlcnJpbmc7IFJveSBaYW5nOyBNaW5na2FpIEh1OyBTdHVhcnQgWW9kZXI7DQo+ICBZYW5n LUxlbyBMaTsgQXJuZCBCZXJnbWFubjsgTWluZ2h1YW4gTGlhbjsgTXVyYWxpIEthcmljaGVyaQ0K PiAgU3ViamVjdDogUkU6IFtQQVRDSCB2MiAyLzJdIHBjaS9hZXI6IGludGVycnVwdCBmaXh1cCBp biB0aGUgcXVpcmsNCj4gIA0KPiAgDQo+ICANCj4gID4gIC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+ICA+ICBGcm9tOiBCam9ybiBIZWxnYWFzIFttYWlsdG86aGVsZ2Fhc0BrZXJuZWwub3Jn XQ0KPiAgPiAgU2VudDogVGh1cnNkYXksIEp1bmUgMTYsIDIwMTYgOTo1NCBQTQ0KPiAgPiAgVG86 IFBvIExpdQ0KPiAgPiAgQ2M6IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gID4gIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5l bC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBCam9ybg0KPiAgPiBIZWxnYWFzOyAg U2hhd24gR3VvOyBNYXJjIFp5bmdpZXI7IFJvYiBIZXJyaW5nOyBSb3kgWmFuZzsgTWluZ2thaSBI dTsNCj4gID4gU3R1YXJ0IFlvZGVyOyAgWWFuZy1MZW8gTGk7IEFybmQgQmVyZ21hbm47IE1pbmdo dWFuIExpYW47IE11cmFsaQ0KPiAgPiBLYXJpY2hlcmkNCj4gID4gIFN1YmplY3Q6IFJlOiBbUEFU Q0ggdjIgMi8yXSBwY2kvYWVyOiBpbnRlcnJ1cHQgZml4dXAgaW4gdGhlIHF1aXJrDQo+ICA+DQo+ ICA+ICBPbiBUdWUsIEp1biAxNCwgMjAxNiBhdCAwMjoxMjoyN1BNICswODAwLCBQbyBMaXUgd3Jv dGU6DQo+ICA+ICA+IE9uIHNvbWUgcGxhdGZvcm1zLCByb290IHBvcnQgZG9lc24ndCBzdXBwb3J0 IE1TSS9NU0ktWC9JTlR4IGluIFJDDQo+ICBtb2RlLg0KPiAgPiAgPiBXaGVuIGNoaXAgc3VwcG9y dCB0aGUgYWVyIGludGVycnVwdCB3aXRoIG5vbmUgTVNJL01TSS1YL0lOVHggbW9kZSwNCj4gID4g PiBtYXliZSB0aGVyZSBpcyBpbnRlcnJ1cHQgbGluZSBmb3IgYWVyIHBtZSBldGMuIFNlYXJjaCB0 aGUgaW50ZXJydXB0DQo+ICA+ID4gbnVtYmVyIGluIHRoZSBmZHQgZmlsZS4gVGhlbiBmaXh1cCB0 aGUgZGV2LT5pcnEgd2l0aCBpdC4NCj4gID4gID4NCj4gID4gID4gU2lnbmVkLW9mZi1ieTogUG8g TGl1IDxwby5saXVAbnhwLmNvbT4gID4gLS0tICA+IGNoYW5nZXMgZm9yIFYyOg0KPiAgPiAgPiAJ LSBNb3ZlIHRvIHRoZSBxdWlyayBmaWxlDQo+ICA+ICA+DQo+ICA+ICA+ICBkcml2ZXJzL3BjaS9x dWlya3MuYyB8IDIzICsrKysrKysrKysrKysrKysrKysrKysrICA+ICAxIGZpbGUNCj4gID4gY2hh bmdlZCwgMjMgaW5zZXJ0aW9ucygrKSAgPiAgPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVp cmtzLmMNCj4gID4gYi9kcml2ZXJzL3BjaS9xdWlya3MuYyBpbmRleCAgPiBlZTcyZWJlLi45MDlk NDc5IDEwMDY0NCAgPiAtLS0NCj4gID4gYS9kcml2ZXJzL3BjaS9xdWlya3MuYyAgPiArKysgYi9k cml2ZXJzL3BjaS9xdWlya3MuYw0KPiAgPg0KPiAgPiAgSXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5 IG9mIHRoaXMgcGFydCBiZWluZyB1c2VkIG9uIGRpZmZlcmVudCBhcmNoZXMsDQo+ICA+IG9yICB3 aWxsIGl0IG9ubHkgZXZlciBiZSBvbiBhcm02NCAob3Igd2hhdGV2ZXIgaXQgaXMpPyAgSWYgdGhl IGxhdHRlciwNCj4gID4gaXQgIGNvdWxkIGdvIHNvbWV3aGVyZSBsaWtlIGFyY2gvYXJtNjQva2Vy bmVsL3F1aXJrcy5jICh3aGljaCBkb2Vzbid0DQo+ICA+IGV4aXN0ICB5ZXQpLg0KPiAgDQo+ICBO WFAgTGF5ZXJzY2FwZTEgaXMgYmFzZSBvbiB0aGUgYXJtIDMyYml0IGRlc2lnbi4gQWxzbyBuZWVk IHRoZSBmaXh1cC4NCj4gIA0KPiAgPg0KPiAgPiAgPiBAQCAtMjUsNiArMjUsNyBAQA0KPiAgPiAg PiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQo+ICA+ICA+ICAjaW5jbHVkZSA8bGludXgva3Rp bWUuaD4NCj4gID4gID4gICNpbmNsdWRlIDxsaW51eC9tbS5oPg0KPiAgPiAgPiArI2luY2x1ZGUg PGxpbnV4L29mX2lycS5oPg0KPiAgPiAgPiAgI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2Rt YV9icmlkZ2VfYnVnZ3kgKi8NCj4gID4gID4gICNpbmNsdWRlICJwY2kuaCINCj4gID4gID4NCj4g ID4gID4gQEAgLTQ0MTksMyArNDQyMCwyNSBAQCBzdGF0aWMgdm9pZCBxdWlya19pbnRlbF9xYXRf dmZfY2FwKHN0cnVjdA0KPiAgPiBwY2lfZGV2ICpwZGV2KQ0KPiAgPiAgPiAgCX0NCj4gID4gID4g IH0NCj4gID4gID4gIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSU5URUws IDB4NDQzLCAgPg0KPiAgPiBxdWlya19pbnRlbF9xYXRfdmZfY2FwKTsgID4gKyAgPiArLyogSWYg cm9vdCBwb3J0IGRvZXNuJ3Qgc3VwcG9ydA0KPiAgPiBNU0kvTVNJLVgvSU5UeCBpbiBSQyBtb2Rl LCAgPiArICogYnV0IHVzZSBzdGFuZGFsb25lIGlycS4gUmVhZCB0aGUNCj4gID4gZGV2aWNlIHRy ZWUgZm9yIHRoZSBhZXIgID4gKyAqIGludGVycnVwdCBudW1iZXIuDQo+ICA+ICA+ICsgKi8NCj4g ID4gID4gK3N0YXRpYyB2b2lkIHF1aXJrX2Flcl9pbnRlcnJ1cHQoc3RydWN0IHBjaV9kZXYgKmRl dikgew0KPiAgPiAgPiArCWludCByZXQ7DQo+ICA+ICA+ICsJc3RydWN0IGRldmljZV9ub2RlICpu cCA9IE5VTEw7DQo+ICA+ICA+ICsNCj4gID4gID4gKwlpZiAoZGV2LT5idXMtPmRldi5vZl9ub2Rl KQ0KPiAgPiAgPiArCQlucCA9IGRldi0+YnVzLT5kZXYub2Zfbm9kZTsNCj4gID4gID4gKw0KPiAg PiAgPiArCWlmIChJU19FTkFCTEVEKENPTkZJR19PRl9JUlEpICYmIG5wKSB7DQo+ICA+ICA+ICsJ CXJldCA9IG9mX2lycV9nZXRfYnluYW1lKG5wLCAiYWVyIik7DQo+ICA+ICA+ICsJCWlmIChyZXQg PiAwKSB7DQo+ICA+ICA+ICsJCQlkZXYtPm5vX21zaSA9IDE7DQo+ICA+ICA+ICsJCQlkZXYtPmly cSA9IHJldDsNCj4gID4gID4gKwkJfQ0KPiAgPiAgPiArCX0NCj4gID4NCj4gID4gIFdoYXQgZG9l cyB0aGlzIG1lYW4gZm9yIHRoZSBvdGhlciBQQ0llIHNlcnZpY2VzLCBlLmcuLCBQTUU/ICBJIGd1 ZXNzDQo+ICA+IHRoaXMgbWFrZXMgdGhlIGV4aXN0aW5nIEFFUiBjb2RlIHdvcmsgdW5jaGFuZ2Vk LiAgQnV0IEkgdGhvdWdodCBQTUUNCj4gID4gaGFkICBhIHNpbWlsYXIgc2l0dWF0aW9uIGFuZCB3 YXMgY29ubmVjdGVkIHVwIHRvIGEgZGlmZmVyZW50IGludGVycnVwdA0KPiAgPiB0aGFuICBBRVIg d2FzLg0KPiAgDQo+ICBZZXMsIFBNRSBpcyBzaW1pbGFyLCBIUCBpcyBub3Qgc3VwcG9ydC4gSSB0 aGluayBiZXR0ZXIgdG8gZGlzYWJsZSB0aGUNCj4gIFBNRSBzZXJ2aWNlIGlycSBpbiB0aGUgcXVp cmsuDQo+ICBCdXQgc2VlbXMgaXQgaXMgbm8gdXNlIGJlY2F1c2UgcXVpcmsgZml4dXAgaXMgb25s eSBydW5uaW5nIGluIGluaXQgcGhhc2UNCj4gIHRpbWUoZXhjZXB0IHN1c3BlbmQsIHJlc3VtZSku DQo+ICANCj4gID4NCj4gID4gID4gK30NCj4gID4gID4gK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFM KFBDSV9WRU5ET1JfSURfRlJFRVNDQUxFLCBQQ0lfQU5ZX0lELCAgPg0KPiAgPiArcXVpcmtfYWVy X2ludGVycnVwdCk7ICA+IC0tICA+IDIuMS4wLjI3Lmc5NmRiMzI0ICA+ICA+IC0tICA+IFRvDQo+ ICA+IHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli ZSBsaW51eC1wY2kiDQo+ICA+ICA+IGluIHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv bW9Admdlci5rZXJuZWwub3JnIE1vcmUNCj4gID4gbWFqb3Jkb21vICA+IGluZm8gYXQgIGh0dHA6 Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K -- 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 --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ee72ebe..909d479 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -25,6 +25,7 @@ #include <linux/sched.h> #include <linux/ktime.h> #include <linux/mm.h> +#include <linux/of_irq.h> #include <asm/dma.h> /* isa_dma_bridge_buggy */ #include "pci.h" @@ -4419,3 +4420,25 @@ static void quirk_intel_qat_vf_cap(struct pci_dev *pdev) } } DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x443, quirk_intel_qat_vf_cap); + +/* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * but use standalone irq. Read the device tree for the aer + * interrupt number. + */ +static void quirk_aer_interrupt(struct pci_dev *dev) +{ + int ret; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (IS_ENABLED(CONFIG_OF_IRQ) && np) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + dev->no_msi = 1; + dev->irq = ret; + } + } +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_aer_interrupt);
On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. When chip support the aer interrupt with none MSI/MSI-X/INTx mode, maybe there is interrupt line for aer pme etc. Search the interrupt number in the fdt file. Then fixup the dev->irq with it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for V2: - Move to the quirk file drivers/pci/quirks.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)