linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt
@ 2012-07-16  3:31 Shengzhou Liu
  2012-07-16  3:31 ` [PATCH 2/2 v2] powerpc/fsl: PCI: add quirk_enable_non_msi_intx_interrupt Shengzhou Liu
  2012-07-16 15:47 ` [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Scott Wood
  0 siblings, 2 replies; 4+ messages in thread
From: Shengzhou Liu @ 2012-07-16  3:31 UTC (permalink / raw)
  To: bhelgaas, linux-pci; +Cc: linuxppc-dev, Shengzhou Liu

On some platforms, in RC mode, root port has neither MSI/MSI-X nor INTx
interrupt generated, which are available only in EP mode on those platform.
In this case, we try to use other interrupt for port service driver to have
AER, Hot-plug, etc, services to work.

Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
---
v2: separated platform-specific part to arch/powerpc/sysdev.

 drivers/pci/pcie/portdrv_core.c |   10 ++++++++--
 drivers/pci/quirks.c            |    9 +++++++++
 include/linux/pci.h             |    5 +++++
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index 75915b3..837ad15 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -212,8 +212,14 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask)
 	if (!pcie_port_enable_msix(dev, irqs, mask))
 		return 0;
 
-	/* We're not going to use MSI-X, so try MSI and fall back to INTx */
-	if (!pci_enable_msi(dev) || dev->pin)
+	/*
+	 * We're not going to use MSI-X, so try MSI and fall back to INTx.
+	 * Eventually, if neither MSI/MSI-X nor INTx available, try other
+	 * interrupt. (On some platforms, root port doesn't support generating
+	 * MSI/MSI-X/INTx in RC mode)
+	 */
+	if (!pci_enable_msi(dev) || dev->pin || ((dev->dev_flags &
+			PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ) && dev->irq))
 		irq = dev->irq;
 
  no_msi:
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 2a75216..2922cb8 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2640,6 +2640,15 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1083,
 			quirk_msi_intx_disable_bug);
 #endif /* CONFIG_PCI_MSI */
 
+/*
+ * Under some circumstances, root port has neither MSI/MSI-X nor INTx generated,
+ * so try other interrupt if supported.
+ */
+void __devinit quirk_enable_non_msi_intx_interrupt(struct pci_dev *dev)
+{
+	dev->dev_flags |= PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ;
+}
+
 /* Allow manual resource allocation for PCI hotplug bridges
  * via pci=hpmemsize=nnM and pci=hpiosize=nnM parameters. For
  * some PCI-PCI hotplug bridges, like PLX 6254 (former HINT HB6),
diff --git a/include/linux/pci.h b/include/linux/pci.h
index d8c379d..f051a66 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -176,6 +176,11 @@ enum pci_dev_flags {
 	PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
 	/* Provide indication device is assigned by a Virtual Machine Manager */
 	PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
+	/*
+	 * Use other interrupt (i.e. system shared interrupt) when MSI/MSI-X
+	 * and INTx are not supported in RC mode on some platforms.
+	 */
+	PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ = (__force pci_dev_flags_t) 8,
 };
 
 enum pci_irq_reroute_variant {
-- 
1.6.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2 v2] powerpc/fsl: PCI: add quirk_enable_non_msi_intx_interrupt
  2012-07-16  3:31 [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Shengzhou Liu
@ 2012-07-16  3:31 ` Shengzhou Liu
  2012-07-16 15:47 ` [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Scott Wood
  1 sibling, 0 replies; 4+ messages in thread
From: Shengzhou Liu @ 2012-07-16  3:31 UTC (permalink / raw)
  To: bhelgaas, linux-pci; +Cc: linuxppc-dev, Shengzhou Liu

On current fsl powerpc platforms, the PCIe root port doesn't support
generating MSI/MSI-X and INTx interrupt in RC mode (those interrupts
are supported only in EP mode). So we use the shared error interrupt
by flag PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ for PCIe port driver to
support AER, Hot-plug etc, services.

Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
---
v2: separated platform-specific part to arch/powerpc/sysdev.

 arch/powerpc/sysdev/fsl_pci.c |    2 ++
 arch/powerpc/sysdev/fsl_pci.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 6073288..fb8862f 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -498,6 +498,8 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary)
 #endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
 
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_fsl_pcie_header);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID,
+			quirk_enable_non_msi_intx_interrupt);
 
 #if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
 struct mpc83xx_pcie_priv {
diff --git a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h
index a39ed5c..a98c6d8 100644
--- a/arch/powerpc/sysdev/fsl_pci.h
+++ b/arch/powerpc/sysdev/fsl_pci.h
@@ -91,6 +91,7 @@ struct ccsr_pci {
 extern int fsl_add_bridge(struct device_node *dev, int is_primary);
 extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
 extern int mpc83xx_add_bridge(struct device_node *dev);
+extern void __devinit quirk_enable_non_msi_intx_interrupt(struct pci_dev *dev);
 u64 fsl_pci_immrbar_base(struct pci_controller *hose);
 
 #endif /* __POWERPC_FSL_PCI_H */
-- 
1.6.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt
  2012-07-16  3:31 [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Shengzhou Liu
  2012-07-16  3:31 ` [PATCH 2/2 v2] powerpc/fsl: PCI: add quirk_enable_non_msi_intx_interrupt Shengzhou Liu
@ 2012-07-16 15:47 ` Scott Wood
  2012-07-17  3:01   ` Liu Shengzhou-B36685
  1 sibling, 1 reply; 4+ messages in thread
From: Scott Wood @ 2012-07-16 15:47 UTC (permalink / raw)
  To: Shengzhou Liu; +Cc: bhelgaas, linux-pci, linuxppc-dev

On 07/15/2012 10:31 PM, Shengzhou Liu wrote:
> On some platforms, in RC mode, root port has neither MSI/MSI-X nor INTx
> interrupt generated, which are available only in EP mode on those platform.
> In this case, we try to use other interrupt for port service driver to have
> AER, Hot-plug, etc, services to work.
> 
> Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
> ---
> v2: separated platform-specific part to arch/powerpc/sysdev.
> 
>  drivers/pci/pcie/portdrv_core.c |   10 ++++++++--
>  drivers/pci/quirks.c            |    9 +++++++++
>  include/linux/pci.h             |    5 +++++
>  3 files changed, 22 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
> index 75915b3..837ad15 100644
> --- a/drivers/pci/pcie/portdrv_core.c
> +++ b/drivers/pci/pcie/portdrv_core.c
> @@ -212,8 +212,14 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask)
>  	if (!pcie_port_enable_msix(dev, irqs, mask))
>  		return 0;
>  
> -	/* We're not going to use MSI-X, so try MSI and fall back to INTx */
> -	if (!pci_enable_msi(dev) || dev->pin)
> +	/*
> +	 * We're not going to use MSI-X, so try MSI and fall back to INTx.
> +	 * Eventually, if neither MSI/MSI-X nor INTx available, try other
> +	 * interrupt. (On some platforms, root port doesn't support generating
> +	 * MSI/MSI-X/INTx in RC mode)
> +	 */
> +	if (!pci_enable_msi(dev) || dev->pin || ((dev->dev_flags &
> +			PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ) && dev->irq))
>  		irq = dev->irq;

I didn't see a response on the question about what would happen if we
did this unconditionally (i.e. just s/dev->pin/dev->irq/ in the original
code).  We should avoid introducing flags like this unless there's a
good reason.

Maybe submit a patch that does it unconditionally, and see if that draws
a complaint.

-Scott


^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt
  2012-07-16 15:47 ` [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Scott Wood
@ 2012-07-17  3:01   ` Liu Shengzhou-B36685
  0 siblings, 0 replies; 4+ messages in thread
From: Liu Shengzhou-B36685 @ 2012-07-17  3:01 UTC (permalink / raw)
  To: Wood Scott-B07421; +Cc: bhelgaas, linux-pci, linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogTW9uZGF5LCBKdWx5IDE2LCAyMDEyIDExOjQ3IFBNDQo+IFRvOiBMaXUgU2hl
bmd6aG91LUIzNjY4NQ0KPiBDYzogYmhlbGdhYXNAZ29vZ2xlLmNvbTsgbGludXgtcGNpQHZnZXIu
a2VybmVsLm9yZzsgbGludXhwcGMtDQo+IGRldkBsaXN0cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6
IFJlOiBbUEFUQ0ggMS8yIHYyXSBQQ0k6IEFkZCBQQ0lfREVWX0ZMQUdTX1VTRV9OT05fTVNJX0lO
VFhfSVJRIHRvDQo+IGVuYWJsZSBub24gTVNJL0lOVHggaW50ZXJydXB0DQo+IA0KPiBPbiAwNy8x
NS8yMDEyIDEwOjMxIFBNLCBTaGVuZ3pob3UgTGl1IHdyb3RlOg0KPiA+IE9uIHNvbWUgcGxhdGZv
cm1zLCBpbiBSQyBtb2RlLCByb290IHBvcnQgaGFzIG5laXRoZXIgTVNJL01TSS1YIG5vcg0KPiA+
IElOVHggaW50ZXJydXB0IGdlbmVyYXRlZCwgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbmx5IGluIEVQ
IG1vZGUgb24gdGhvc2UNCj4gcGxhdGZvcm0uDQo+ID4gSW4gdGhpcyBjYXNlLCB3ZSB0cnkgdG8g
dXNlIG90aGVyIGludGVycnVwdCBmb3IgcG9ydCBzZXJ2aWNlIGRyaXZlciB0bw0KPiA+IGhhdmUg
QUVSLCBIb3QtcGx1ZywgZXRjLCBzZXJ2aWNlcyB0byB3b3JrLg0KPiA+DQo+ID4gU2lnbmVkLW9m
Zi1ieTogU2hlbmd6aG91IExpdSA8U2hlbmd6aG91LkxpdUBmcmVlc2NhbGUuY29tPg0KPiA+IC0t
LQ0KPiA+IHYyOiBzZXBhcmF0ZWQgcGxhdGZvcm0tc3BlY2lmaWMgcGFydCB0byBhcmNoL3Bvd2Vy
cGMvc3lzZGV2Lg0KPiA+DQo+ID4gIGRyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgfCAg
IDEwICsrKysrKysrLS0NCj4gPiAgZHJpdmVycy9wY2kvcXVpcmtzLmMgICAgICAgICAgICB8ICAg
IDkgKysrKysrKysrDQo+ID4gIGluY2x1ZGUvbGludXgvcGNpLmggICAgICAgICAgICAgfCAgICA1
ICsrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv
bnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29y
ZS5jDQo+ID4gYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIGluZGV4IDc1OTE1YjMu
LjgzN2FkMTUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUu
Yw0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMNCj4gPiBAQCAtMjEy
LDggKzIxMiwxNCBAQCBzdGF0aWMgaW50IGluaXRfc2VydmljZV9pcnFzKHN0cnVjdCBwY2lfZGV2
ICpkZXYsIGludA0KPiAqaXJxcywgaW50IG1hc2spDQo+ID4gIAlpZiAoIXBjaWVfcG9ydF9lbmFi
bGVfbXNpeChkZXYsIGlycXMsIG1hc2spKQ0KPiA+ICAJCXJldHVybiAwOw0KPiA+DQo+ID4gLQkv
KiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sg
dG8gSU5UeCAqLw0KPiA+IC0JaWYgKCFwY2lfZW5hYmxlX21zaShkZXYpIHx8IGRldi0+cGluKQ0K
PiA+ICsJLyoNCj4gPiArCSAqIFdlJ3JlIG5vdCBnb2luZyB0byB1c2UgTVNJLVgsIHNvIHRyeSBN
U0kgYW5kIGZhbGwgYmFjayB0byBJTlR4Lg0KPiA+ICsJICogRXZlbnR1YWxseSwgaWYgbmVpdGhl
ciBNU0kvTVNJLVggbm9yIElOVHggYXZhaWxhYmxlLCB0cnkgb3RoZXINCj4gPiArCSAqIGludGVy
cnVwdC4gKE9uIHNvbWUgcGxhdGZvcm1zLCByb290IHBvcnQgZG9lc24ndCBzdXBwb3J0IGdlbmVy
YXRpbmcNCj4gPiArCSAqIE1TSS9NU0ktWC9JTlR4IGluIFJDIG1vZGUpDQo+ID4gKwkgKi8NCj4g
PiArCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSB8fCBkZXYtPnBpbiB8fCAoKGRldi0+ZGV2X2Zs
YWdzICYNCj4gPiArCQkJUENJX0RFVl9GTEFHU19VU0VfTk9OX01TSV9JTlRYX0lSUSkgJiYgZGV2
LT5pcnEpKQ0KPiA+ICAJCWlycSA9IGRldi0+aXJxOw0KPiANCj4gSSBkaWRuJ3Qgc2VlIGEgcmVz
cG9uc2Ugb24gdGhlIHF1ZXN0aW9uIGFib3V0IHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIGRpZCB0
aGlzDQo+IHVuY29uZGl0aW9uYWxseSAoaS5lLiBqdXN0IHMvZGV2LT5waW4vZGV2LT5pcnEvIGlu
IHRoZSBvcmlnaW5hbCBjb2RlKS4gIFdlDQo+IHNob3VsZCBhdm9pZCBpbnRyb2R1Y2luZyBmbGFn
cyBsaWtlIHRoaXMgdW5sZXNzIHRoZXJlJ3MgYSBnb29kIHJlYXNvbi4NCj4gDQo+IE1heWJlIHN1
Ym1pdCBhIHBhdGNoIHRoYXQgZG9lcyBpdCB1bmNvbmRpdGlvbmFsbHksIGFuZCBzZWUgaWYgdGhh
dCBkcmF3cyBhDQo+IGNvbXBsYWludC4NCj4gDQo+IC1TY290dA0KW1NoZW5nemhvdV0gDQpXZWxs
LCB0aGUgcGF0Y2ggd2l0aG91dCBmbGFnIGNvbmRpdGlvbiBoYXZlIGJlZW4gcG9zdGVkIHRvIGRy
YXcgbW9yZSBjb21tZW50cy4NCg==


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-17  3:01 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-16  3:31 [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Shengzhou Liu
2012-07-16  3:31 ` [PATCH 2/2 v2] powerpc/fsl: PCI: add quirk_enable_non_msi_intx_interrupt Shengzhou Liu
2012-07-16 15:47 ` [PATCH 1/2 v2] PCI: Add PCI_DEV_FLAGS_USE_NON_MSI_INTX_IRQ to enable non MSI/INTx interrupt Scott Wood
2012-07-17  3:01   ` Liu Shengzhou-B36685

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).