diff mbox

[v2,2/2] pci/aer: interrupt fixup in the quirk

Message ID 1465884747-1517-2-git-send-email-po.liu@nxp.com
State Superseded
Headers show

Commit Message

Po Liu June 14, 2016, 6:12 a.m. UTC
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(+)

Comments

Bjorn Helgaas June 16, 2016, 1:54 p.m. UTC | #1
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
Po Liu June 17, 2016, 3:30 a.m. UTC | #2
>  -----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
Po Liu July 1, 2016, 8:46 a.m. UTC | #3
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 mbox

Patch

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);