* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-05-26 6:00 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-05-26 6:00 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Bjorn Helgaas, Minghuan Lian, Po Liu 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. Signed-off-by: Po Liu <po.liu@nxp.com> --- drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -15,6 +15,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-05-26 6:00 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-05-26 6:00 UTC (permalink / raw) To: linux-arm-kernel 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. Signed-off-by: Po Liu <po.liu@nxp.com> --- drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -15,6 +15,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-05-26 6:00 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-05-26 6:00 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Arnd Bergmann, Roy Zang, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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. Signed-off-by: Po Liu <po.liu@nxp.com> --- drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -15,6 +15,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-05-26 6:00 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-05-26 6:00 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Arnd Bergmann, Roy Zang, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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. Signed-off-by: Po Liu <po.liu@nxp.com> --- drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -15,6 +15,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-05-26 6:00 ` Po Liu @ 2016-06-02 3:48 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-02 3:48 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring [+cc Rob] Hi Po, On Thu, May 26, 2016 at 02:00:06PM +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. My understanding is that AER interrupt signaling can be done via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device doesn't support MSI or MSI-X. Are you saying it doesn't support INTx either? How is the interrupt you're requesting here different from INTx? My guess is that your device *does* support INTx, and we should use that. ACPI has the generic _PRT that describes INTx routing. There must be something similar for DT, but I don't know what it is. It seems like this should be described using that DT mechanism (whatever it is), and we shouldn't need special-case code in the portdrv code. > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > 1 file changed, 28 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index 32d4d0a..64833e5 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -15,6 +15,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } > > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 3:48 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-02 3:48 UTC (permalink / raw) To: linux-arm-kernel [+cc Rob] Hi Po, On Thu, May 26, 2016 at 02:00:06PM +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. My understanding is that AER interrupt signaling can be done via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device doesn't support MSI or MSI-X. Are you saying it doesn't support INTx either? How is the interrupt you're requesting here different from INTx? My guess is that your device *does* support INTx, and we should use that. ACPI has the generic _PRT that describes INTx routing. There must be something similar for DT, but I don't know what it is. It seems like this should be described using that DT mechanism (whatever it is), and we shouldn't need special-case code in the portdrv code. > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > 1 file changed, 28 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index 32d4d0a..64833e5 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -15,6 +15,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } > > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-02 3:48 ` Bjorn Helgaas (?) (?) @ 2016-06-02 5:01 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-02 5:01 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, June 02, 2016 11:48 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > [+cc Rob] > > Hi Po, > > On Thu, May 26, 2016 at 02:00:06PM +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. > > My understanding is that AER interrupt signaling can be done via INTx, > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > either? How is the interrupt you're requesting here different from INTx? Layerscape use none of MSI or MSI-X or INTx to indicate the devices or root error in RC mode. But use an independent SPI interrupt(arm interrupt controller) line. And at same time, AER capability list in PCIe register descriptors. And also, The Root Error Command/status register was proper to enable/disable the AER interrupt. This hardware implementation make sense in some platforms, and this was described in the function init_service_irqs() in the drivers/pci/pcie/portdrv_core.c in current kernel as: 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode 244 */ So I think this was the proper place to update the irq number before aer service driver was loaded. > > My guess is that your device *does* support INTx, and we should use that. > ACPI has the generic _PRT that describes INTx routing. There must be > something similar for DT, but I don't know what it is. It seems like > this should be described using that DT mechanism (whatever it is), and > we shouldn't need special-case code in the portdrv code. > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -15,6 +15,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 5:01 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-02 5:01 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Thursday, June 02, 2016 11:48 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > [+cc Rob] > > Hi Po, > > On Thu, May 26, 2016 at 02:00:06PM +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. > > My understanding is that AER interrupt signaling can be done via INTx, > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > either? How is the interrupt you're requesting here different from INTx? Layerscape use none of MSI or MSI-X or INTx to indicate the devices or root error in RC mode. But use an independent SPI interrupt(arm interrupt controller) line. And at same time, AER capability list in PCIe register descriptors. And also, The Root Error Command/status register was proper to enable/disable the AER interrupt. This hardware implementation make sense in some platforms, and this was described in the function init_service_irqs() in the drivers/pci/pcie/portdrv_core.c in current kernel as: 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode 244 */ So I think this was the proper place to update the irq number before aer service driver was loaded. > > My guess is that your device *does* support INTx, and we should use that. > ACPI has the generic _PRT that describes INTx routing. There must be > something similar for DT, but I don't know what it is. It seems like > this should be described using that DT mechanism (whatever it is), and > we shouldn't need special-case code in the portdrv code. > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -15,6 +15,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel at lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 5:01 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-02 5:01 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring SGkgQmpvcm4sDQoNCg0KPiAgLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gIEZyb206IEJq b3JuIEhlbGdhYXMgW21haWx0bzpoZWxnYWFzQGtlcm5lbC5vcmddDQo+ICBTZW50OiBUaHVyc2Rh eSwgSnVuZSAwMiwgMjAxNiAxMTo0OCBBTQ0KPiAgVG86IFBvIExpdQ0KPiAgQ2M6IGxpbnV4LXBj aUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsN Cj4gIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwu b3JnOyBBcm5kIEJlcmdtYW5uOw0KPiAgUm95IFphbmc7IE1hcmMgWnluZ2llcjsgU3R1YXJ0IFlv ZGVyOyBZYW5nLUxlbyBMaTsgTWluZ2h1YW4gTGlhbjsgQmpvcm4NCj4gIEhlbGdhYXM7IFNoYXdu IEd1bzsgTWluZ2thaSBIdTsgUm9iIEhlcnJpbmcNCj4gIFN1YmplY3Q6IFJlOiBbUEFUQ0ggMi8y XSBhZXI6IGFkZCBzdXBwb3J0IGFlciBpbnRlcnJ1cHQgd2l0aCBub25lDQo+ICBNU0kvTVNJLVgv SU5UeCBtb2RlDQo+ICANCj4gIFsrY2MgUm9iXQ0KPiAgDQo+ICBIaSBQbywNCj4gIA0KPiAgT24g VGh1LCBNYXkgMjYsIDIwMTYgYXQgMDI6MDA6MDZQTSArMDgwMCwgUG8gTGl1IHdyb3RlOg0KPiAg PiBPbiBzb21lIHBsYXRmb3Jtcywgcm9vdCBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBNU0kvTVNJLVgv SU5UeCBpbiBSQyBtb2RlLg0KPiAgPiBXaGVuIGNoaXAgc3VwcG9ydCB0aGUgYWVyIGludGVycnVw dCB3aXRoIG5vbmUgTVNJL01TSS1YL0lOVHggbW9kZSwNCj4gID4gbWF5YmUgdGhlcmUgaXMgaW50 ZXJydXB0IGxpbmUgZm9yIGFlciBwbWUgZXRjLiBTZWFyY2ggdGhlIGludGVycnVwdA0KPiAgPiBu dW1iZXIgaW4gdGhlIGZkdCBmaWxlLg0KPiAgDQo+ICBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQg QUVSIGludGVycnVwdCBzaWduYWxpbmcgY2FuIGJlIGRvbmUgdmlhIElOVHgsDQo+ICBNU0ksIG9y IE1TSS1YIChQQ0llIHNwZWMgcjMuMCwgc2VjIDYuMi40LjEuMikuICBBcHBhcmVudGx5IHlvdXIg ZGV2aWNlDQo+ICBkb2Vzbid0IHN1cHBvcnQgTVNJIG9yIE1TSS1YLiAgQXJlIHlvdSBzYXlpbmcg aXQgZG9lc24ndCBzdXBwb3J0IElOVHgNCj4gIGVpdGhlcj8gIEhvdyBpcyB0aGUgaW50ZXJydXB0 IHlvdSdyZSByZXF1ZXN0aW5nIGhlcmUgZGlmZmVyZW50IGZyb20gSU5UeD8NCg0KTGF5ZXJzY2Fw ZSB1c2Ugbm9uZSBvZiBNU0kgb3IgTVNJLVggb3IgSU5UeCB0byBpbmRpY2F0ZSB0aGUgZGV2aWNl cyBvciByb290IGVycm9yDQppbiBSQyBtb2RlLiBCdXQgdXNlIGFuIGluZGVwZW5kZW50IFNQSSBp bnRlcnJ1cHQoYXJtIGludGVycnVwdCBjb250cm9sbGVyKSBsaW5lLg0KQW5kIGF0IHNhbWUgdGlt ZSwgQUVSIGNhcGFiaWxpdHkgbGlzdCBpbiBQQ0llIHJlZ2lzdGVyIGRlc2NyaXB0b3JzLiBBbmQg YWxzbywNClRoZSBSb290IEVycm9yIENvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyIHdhcyBwcm9wZXIg dG8gZW5hYmxlL2Rpc2FibGUgdGhlIEFFUiBpbnRlcnJ1cHQuDQoNClRoaXMgaGFyZHdhcmUgaW1w bGVtZW50YXRpb24gbWFrZSBzZW5zZSBpbiBzb21lIHBsYXRmb3JtcywgYW5kIHRoaXMgd2FzIGRl c2NyaWJlZA0KaW4gdGhlIGZ1bmN0aW9uIGluaXRfc2VydmljZV9pcnFzKCkgaW4gdGhlIGRyaXZl cnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgaW4gY3VycmVudA0Ka2VybmVsIGFzOg0KDQoyNDEg ICAgICAqIFdlJ3JlIG5vdCBnb2luZyB0byB1c2UgTVNJLVgsIHNvIHRyeSBNU0kgYW5kIGZhbGwg YmFjayB0byBJTlR4LiAgICAgDQoyNDIgICAgICAqIElmIG5laXRoZXIgTVNJL01TSS1YIG5vciBJ TlR4IGF2YWlsYWJsZSwgdHJ5IG90aGVyIGludGVycnVwdC4gIE9uICANCjI0MyAgICAgICogc29t ZSBwbGF0Zm9ybXMsIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBvcnQgTVNJL01TSS1YL0lOVHggaW4g UkMgbW9kZQ0KMjQ0ICAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQpTbyBJIHRoaW5rIHRo aXMgd2FzIHRoZSBwcm9wZXIgcGxhY2UgdG8gdXBkYXRlIHRoZSBpcnEgbnVtYmVyIGJlZm9yZSBh ZXIgc2VydmljZQ0KZHJpdmVyIHdhcyBsb2FkZWQuDQoNCj4gIA0KPiAgTXkgZ3Vlc3MgaXMgdGhh dCB5b3VyIGRldmljZSAqZG9lcyogc3VwcG9ydCBJTlR4LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGF0 Lg0KPiAgQUNQSSBoYXMgdGhlIGdlbmVyaWMgX1BSVCB0aGF0IGRlc2NyaWJlcyBJTlR4IHJvdXRp bmcuICBUaGVyZSBtdXN0IGJlDQo+ICBzb21ldGhpbmcgc2ltaWxhciBmb3IgRFQsIGJ1dCBJIGRv bid0IGtub3cgd2hhdCBpdCBpcy4gIEl0IHNlZW1zIGxpa2UNCj4gIHRoaXMgc2hvdWxkIGJlIGRl c2NyaWJlZCB1c2luZyB0aGF0IERUIG1lY2hhbmlzbSAod2hhdGV2ZXIgaXQgaXMpLCBhbmQNCj4g IHdlIHNob3VsZG4ndCBuZWVkIHNwZWNpYWwtY2FzZSBjb2RlIGluIHRoZSBwb3J0ZHJ2IGNvZGUu DQo+ICANCj4gID4gU2lnbmVkLW9mZi1ieTogUG8gTGl1IDxwby5saXVAbnhwLmNvbT4NCj4gID4g LS0tDQo+ICA+ICBkcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIHwgMzEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLQ0KPiAgPiAgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pDQo+ICA+DQo+ICA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bj aS9wY2llL3BvcnRkcnZfY29yZS5jDQo+ICA+IGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2Nv cmUuYyBpbmRleCAzMmQ0ZDBhLi42NDgzM2U1IDEwMDY0NA0KPiAgPiAtLS0gYS9kcml2ZXJzL3Bj aS9wY2llL3BvcnRkcnZfY29yZS5jDQo+ICA+ICsrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRy dl9jb3JlLmMNCj4gID4gQEAgLTE1LDYgKzE1LDcgQEANCj4gID4gICNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ICA+ICAjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4NCj4gID4gICNpbmNs dWRlIDxsaW51eC9hZXIuaD4NCj4gID4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4NCj4gID4N Cj4gID4gICNpbmNsdWRlICIuLi9wY2kuaCINCj4gID4gICNpbmNsdWRlICJwb3J0ZHJ2LmgiDQo+ ICA+IEBAIC0xOTksNiArMjAwLDI4IEBAIHN0YXRpYyBpbnQgcGNpZV9wb3J0X2VuYWJsZV9tc2l4 KHN0cnVjdCBwY2lfZGV2DQo+ICA+ICpkZXYsIGludCAqdmVjdG9ycywgaW50IG1hc2spICBzdGF0 aWMgaW50IGluaXRfc2VydmljZV9pcnFzKHN0cnVjdA0KPiAgPiBwY2lfZGV2ICpkZXYsIGludCAq aXJxcywgaW50IG1hc2spICB7DQo+ICA+ICAJaW50IGksIGlycSA9IC0xOw0KPiAgPiArCWludCBy ZXQ7DQo+ICA+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7DQo+ICA+ICsNCj4gID4g Kwlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKQ0KPiAg PiArCQlpcnFzW2ldID0gMDsNCj4gID4gKw0KPiAgPiArCWlmIChkZXYtPmJ1cy0+ZGV2Lm9mX25v ZGUpDQo+ICA+ICsJCW5wID0gZGV2LT5idXMtPmRldi5vZl9ub2RlOw0KPiAgPiArDQo+ICA+ICsJ LyogSWYgcm9vdCBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBNU0kvTVNJLVgvSU5UeCBpbiBSQyBtb2Rl LA0KPiAgPiArCSAqIHJlcXVlc3QgaXJxIGZvciBhZXINCj4gID4gKwkgKi8NCj4gID4gKwlpZiAo SVNfRU5BQkxFRChDT05GSUdfT0ZfSVJRKSAmJiBucCAmJg0KPiAgPiArCQkJKG1hc2sgJiBQQ0lF X1BPUlRfU0VSVklDRV9QTUUpKSB7DQo+ICA+ICsJCXJldCA9IG9mX2lycV9nZXRfYnluYW1lKG5w LCAiYWVyIik7DQo+ICA+ICsJCWlmIChyZXQgPiAwKSB7DQo+ICA+ICsJCQlpcnFzW1BDSUVfUE9S VF9TRVJWSUNFX0FFUl9TSElGVF0gPSByZXQ7DQo+ICA+ICsJCQlpZiAoZGV2LT5pcnEpDQo+ICA+ ICsJCQkJaXJxID0gZGV2LT5pcnE7DQo+ICA+ICsJCQlnb3RvIG5vX21zaTsNCj4gID4gKwkJfQ0K PiAgPiArCX0NCj4gID4NCj4gID4gIAkvKg0KPiAgPiAgCSAqIElmIE1TSSBjYW5ub3QgYmUgdXNl ZCBmb3IgUENJZSBQTUUgb3IgaG90cGx1Zywgd2UgaGF2ZSB0byB1c2UNCj4gIEBADQo+ICA+IC0y MjQsMTEgKzI0NywxMyBAQCBzdGF0aWMgaW50IGluaXRfc2VydmljZV9pcnFzKHN0cnVjdCBwY2lf ZGV2ICpkZXYsDQo+ICBpbnQgKmlycXMsIGludCBtYXNrKQ0KPiAgPiAgCQlpcnEgPSBkZXYtPmly cTsNCj4gID4NCj4gID4gICBub19tc2k6DQo+ICA+IC0JZm9yIChpID0gMDsgaSA8IFBDSUVfUE9S VF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykNCj4gID4gLQkJaXJxc1tpXSA9IGlycTsNCj4gID4g Kwlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKSB7DQo+ ICA+ICsJCWlmICghaXJxc1tpXSkNCj4gID4gKwkJCWlycXNbaV0gPSBpcnE7DQo+ICA+ICsJfQ0K PiAgPiAgCWlycXNbUENJRV9QT1JUX1NFUlZJQ0VfVkNfU0hJRlRdID0gLTE7DQo+ICA+DQo+ICA+ IC0JaWYgKGlycSA8IDApDQo+ICA+ICsJaWYgKGlycSA8IDAgJiYgaXJxc1tQQ0lFX1BPUlRfU0VS VklDRV9BRVJfU0hJRlRdIDwgMCkNCj4gID4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICA+ICAJcmV0 dXJuIDA7DQo+ICA+ICB9DQo+ICA+IC0tDQo+ICA+IDIuMS4wLjI3Lmc5NmRiMzI0DQo+ICA+DQo+ ICA+DQo+ICA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f DQo+ICA+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0DQo+ICA+IGxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZw0KPiAgPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwNCg== ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 5:01 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-02 5:01 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, June 02, 2016 11:48 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > [+cc Rob] > > Hi Po, > > On Thu, May 26, 2016 at 02:00:06PM +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. > > My understanding is that AER interrupt signaling can be done via INTx, > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > either? How is the interrupt you're requesting here different from INTx? Layerscape use none of MSI or MSI-X or INTx to indicate the devices or root error in RC mode. But use an independent SPI interrupt(arm interrupt controller) line. And at same time, AER capability list in PCIe register descriptors. And also, The Root Error Command/status register was proper to enable/disable the AER interrupt. This hardware implementation make sense in some platforms, and this was described in the function init_service_irqs() in the drivers/pci/pcie/portdrv_core.c in current kernel as: 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode 244 */ So I think this was the proper place to update the irq number before aer service driver was loaded. > > My guess is that your device *does* support INTx, and we should use that. > ACPI has the generic _PRT that describes INTx routing. There must be > something similar for DT, but I don't know what it is. It seems like > this should be described using that DT mechanism (whatever it is), and > we shouldn't need special-case code in the portdrv code. > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -15,6 +15,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-02 5:01 ` Po Liu (?) @ 2016-06-02 13:55 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-02 13:55 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Thursday, June 02, 2016 11:48 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > [+cc Rob] > > > > Hi Po, > > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > My understanding is that AER interrupt signaling can be done via INTx, > > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > > either? How is the interrupt you're requesting here different from INTx? > > Layerscape use none of MSI or MSI-X or INTx to indicate the devices > or root error in RC mode. But use an independent SPI interrupt(arm > interrupt controller) line. The Root Port is a PCI device and should follow the normal PCI rules for interrupts. As far as I understand, that means it should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. That's all from the PCI point of view, of course. What's on the other end of those interrupts is outside the scope of PCI. An INTx interrupt (either a conventional PCI wire or a PCIe virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or something else. Drivers should not care about how it is connected, and that's why I don't think this code really fits in portdrv. Maybe your Root Port is non-compliant in some way and maybe we need a quirk or something to work around that hardware defect. But I'm not convinced yet that we have that sort of problem. It seems like we just don't have the correct DT description. > And at same time, AER capability list > in PCIe register descriptors. And also, The Root Error > Command/status register was proper to enable/disable the AER > interrupt. I'm not sure what you're saying here. Here's what I think you said; please correct me if I'm wrong: - Your Root Port has an AER capability. - Your Root Port does not support MSI or MSI-X. (This would actually be a spec violation because the PCIe spec r3.0, sec 7.7 says "All PCI Express device Functions that are capable of generating interrupts must implement MSI or MSI-X or both.") - The three enable bits in the Root Error Command Register enable or disable generation of interrupts. These enable bits control all interrupts, whether MSI, MSI-X, or INTx. - The Root Error Status Register contains an "Advanced Error Interrupt Message Number" field, but that's only applicable if MSI or MSI-X is enabled, and if your device doesn't support MSI or MSI-X, this field doesn't apply. > This hardware implementation make sense in some platforms, and this > was described in the function init_service_irqs() in the > drivers/pci/pcie/portdrv_core.c in current kernel as: > > 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > 244 */ > > So I think this was the proper place to update the irq number before aer service > driver was loaded. > > > > > My guess is that your device *does* support INTx, and we should use that. > > ACPI has the generic _PRT that describes INTx routing. There must be > > something similar for DT, but I don't know what it is. It seems like > > this should be described using that DT mechanism (whatever it is), and > > we shouldn't need special-case code in the portdrv code. > > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > > --- > > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > > --- a/drivers/pci/pcie/portdrv_core.c > > > +++ b/drivers/pci/pcie/portdrv_core.c > > > @@ -15,6 +15,7 @@ > > > #include <linux/slab.h> > > > #include <linux/pcieport_if.h> > > > #include <linux/aer.h> > > > +#include <linux/of_irq.h> > > > > > > #include "../pci.h" > > > #include "portdrv.h" > > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > > pci_dev *dev, int *irqs, int mask) { > > > int i, irq = -1; > > > + int ret; > > > + struct device_node *np = NULL; > > > + > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > + irqs[i] = 0; > > > + > > > + if (dev->bus->dev.of_node) > > > + np = dev->bus->dev.of_node; > > > + > > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > > + * request irq for aer > > > + */ > > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > > + (mask & PCIE_PORT_SERVICE_PME)) { > > > + ret = of_irq_get_byname(np, "aer"); > > > + if (ret > 0) { > > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > > + if (dev->irq) > > > + irq = dev->irq; > > > + goto no_msi; > > > + } > > > + } > > > > > > /* > > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > > @@ > > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > > int *irqs, int mask) > > > irq = dev->irq; > > > > > > no_msi: > > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > - irqs[i] = irq; > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > > + if (!irqs[i]) > > > + irqs[i] = irq; > > > + } > > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > > > - if (irq < 0) > > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > > return -ENODEV; > > > return 0; > > > } > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 13:55 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-02 13:55 UTC (permalink / raw) To: linux-arm-kernel On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > Sent: Thursday, June 02, 2016 11:48 AM > > To: Po Liu > > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; > > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > [+cc Rob] > > > > Hi Po, > > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > My understanding is that AER interrupt signaling can be done via INTx, > > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > > either? How is the interrupt you're requesting here different from INTx? > > Layerscape use none of MSI or MSI-X or INTx to indicate the devices > or root error in RC mode. But use an independent SPI interrupt(arm > interrupt controller) line. The Root Port is a PCI device and should follow the normal PCI rules for interrupts. As far as I understand, that means it should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. That's all from the PCI point of view, of course. What's on the other end of those interrupts is outside the scope of PCI. An INTx interrupt (either a conventional PCI wire or a PCIe virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or something else. Drivers should not care about how it is connected, and that's why I don't think this code really fits in portdrv. Maybe your Root Port is non-compliant in some way and maybe we need a quirk or something to work around that hardware defect. But I'm not convinced yet that we have that sort of problem. It seems like we just don't have the correct DT description. > And at same time, AER capability list > in PCIe register descriptors. And also, The Root Error > Command/status register was proper to enable/disable the AER > interrupt. I'm not sure what you're saying here. Here's what I think you said; please correct me if I'm wrong: - Your Root Port has an AER capability. - Your Root Port does not support MSI or MSI-X. (This would actually be a spec violation because the PCIe spec r3.0, sec 7.7 says "All PCI Express device Functions that are capable of generating interrupts must implement MSI or MSI-X or both.") - The three enable bits in the Root Error Command Register enable or disable generation of interrupts. These enable bits control all interrupts, whether MSI, MSI-X, or INTx. - The Root Error Status Register contains an "Advanced Error Interrupt Message Number" field, but that's only applicable if MSI or MSI-X is enabled, and if your device doesn't support MSI or MSI-X, this field doesn't apply. > This hardware implementation make sense in some platforms, and this > was described in the function init_service_irqs() in the > drivers/pci/pcie/portdrv_core.c in current kernel as: > > 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > 244 */ > > So I think this was the proper place to update the irq number before aer service > driver was loaded. > > > > > My guess is that your device *does* support INTx, and we should use that. > > ACPI has the generic _PRT that describes INTx routing. There must be > > something similar for DT, but I don't know what it is. It seems like > > this should be described using that DT mechanism (whatever it is), and > > we shouldn't need special-case code in the portdrv code. > > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > > --- > > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > > --- a/drivers/pci/pcie/portdrv_core.c > > > +++ b/drivers/pci/pcie/portdrv_core.c > > > @@ -15,6 +15,7 @@ > > > #include <linux/slab.h> > > > #include <linux/pcieport_if.h> > > > #include <linux/aer.h> > > > +#include <linux/of_irq.h> > > > > > > #include "../pci.h" > > > #include "portdrv.h" > > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > > pci_dev *dev, int *irqs, int mask) { > > > int i, irq = -1; > > > + int ret; > > > + struct device_node *np = NULL; > > > + > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > + irqs[i] = 0; > > > + > > > + if (dev->bus->dev.of_node) > > > + np = dev->bus->dev.of_node; > > > + > > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > > + * request irq for aer > > > + */ > > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > > + (mask & PCIE_PORT_SERVICE_PME)) { > > > + ret = of_irq_get_byname(np, "aer"); > > > + if (ret > 0) { > > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > > + if (dev->irq) > > > + irq = dev->irq; > > > + goto no_msi; > > > + } > > > + } > > > > > > /* > > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > > @@ > > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > > int *irqs, int mask) > > > irq = dev->irq; > > > > > > no_msi: > > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > - irqs[i] = irq; > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > > + if (!irqs[i]) > > > + irqs[i] = irq; > > > + } > > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > > > - if (irq < 0) > > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > > return -ENODEV; > > > return 0; > > > } > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel at lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 13:55 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-02 13:55 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Thursday, June 02, 2016 11:48 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > > Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > > Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > [+cc Rob] > > > > Hi Po, > > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > My understanding is that AER interrupt signaling can be done via INTx, > > MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > > doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > > either? How is the interrupt you're requesting here different from INTx? > > Layerscape use none of MSI or MSI-X or INTx to indicate the devices > or root error in RC mode. But use an independent SPI interrupt(arm > interrupt controller) line. The Root Port is a PCI device and should follow the normal PCI rules for interrupts. As far as I understand, that means it should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. That's all from the PCI point of view, of course. What's on the other end of those interrupts is outside the scope of PCI. An INTx interrupt (either a conventional PCI wire or a PCIe virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or something else. Drivers should not care about how it is connected, and that's why I don't think this code really fits in portdrv. Maybe your Root Port is non-compliant in some way and maybe we need a quirk or something to work around that hardware defect. But I'm not convinced yet that we have that sort of problem. It seems like we just don't have the correct DT description. > And at same time, AER capability list > in PCIe register descriptors. And also, The Root Error > Command/status register was proper to enable/disable the AER > interrupt. I'm not sure what you're saying here. Here's what I think you said; please correct me if I'm wrong: - Your Root Port has an AER capability. - Your Root Port does not support MSI or MSI-X. (This would actually be a spec violation because the PCIe spec r3.0, sec 7.7 says "All PCI Express device Functions that are capable of generating interrupts must implement MSI or MSI-X or both.") - The three enable bits in the Root Error Command Register enable or disable generation of interrupts. These enable bits control all interrupts, whether MSI, MSI-X, or INTx. - The Root Error Status Register contains an "Advanced Error Interrupt Message Number" field, but that's only applicable if MSI or MSI-X is enabled, and if your device doesn't support MSI or MSI-X, this field doesn't apply. > This hardware implementation make sense in some platforms, and this > was described in the function init_service_irqs() in the > drivers/pci/pcie/portdrv_core.c in current kernel as: > > 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > 244 */ > > So I think this was the proper place to update the irq number before aer service > driver was loaded. > > > > > My guess is that your device *does* support INTx, and we should use that. > > ACPI has the generic _PRT that describes INTx routing. There must be > > something similar for DT, but I don't know what it is. It seems like > > this should be described using that DT mechanism (whatever it is), and > > we shouldn't need special-case code in the portdrv code. > > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > > --- > > > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > > > 1 file changed, 28 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/pci/pcie/portdrv_core.c > > > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > > > --- a/drivers/pci/pcie/portdrv_core.c > > > +++ b/drivers/pci/pcie/portdrv_core.c > > > @@ -15,6 +15,7 @@ > > > #include <linux/slab.h> > > > #include <linux/pcieport_if.h> > > > #include <linux/aer.h> > > > +#include <linux/of_irq.h> > > > > > > #include "../pci.h" > > > #include "portdrv.h" > > > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > > pci_dev *dev, int *irqs, int mask) { > > > int i, irq = -1; > > > + int ret; > > > + struct device_node *np = NULL; > > > + > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > + irqs[i] = 0; > > > + > > > + if (dev->bus->dev.of_node) > > > + np = dev->bus->dev.of_node; > > > + > > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > > + * request irq for aer > > > + */ > > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > > + (mask & PCIE_PORT_SERVICE_PME)) { > > > + ret = of_irq_get_byname(np, "aer"); > > > + if (ret > 0) { > > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > > + if (dev->irq) > > > + irq = dev->irq; > > > + goto no_msi; > > > + } > > > + } > > > > > > /* > > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > > @@ > > > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > > int *irqs, int mask) > > > irq = dev->irq; > > > > > > no_msi: > > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > > - irqs[i] = irq; > > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > > + if (!irqs[i]) > > > + irqs[i] = irq; > > > + } > > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > > > - if (irq < 0) > > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > > return -ENODEV; > > > return 0; > > > } > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-02 13:55 ` Bjorn Helgaas (?) @ 2016-06-02 15:37 ` Murali Karicheri -1 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-02 15:37 UTC (permalink / raw) To: Bjorn Helgaas, Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>> -----Original Message----- >>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >>> Sent: Thursday, June 02, 2016 11:48 AM >>> To: Po Liu >>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>> MSI/MSI-X/INTx mode >>> >>> [+cc Rob] >>> >>> Hi Po, >>> >>> On Thu, May 26, 2016 at 02:00:06PM +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. >>> >>> My understanding is that AER interrupt signaling can be done via INTx, >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>> either? How is the interrupt you're requesting here different from INTx? >> >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >> or root error in RC mode. But use an independent SPI interrupt(arm >> interrupt controller) line. > > The Root Port is a PCI device and should follow the normal PCI rules > for interrupts. As far as I understand, that means it should use MSI, > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > That's all from the PCI point of view, of course. > Bjorn. I am faced with the same issue on Keystone PCI hardware and it has been on my TODO list for quite some time. Keystone PCI hardware also doesn't use MSI or MSI-X or INTx for reporting errors received at the root port, but use a platform interrupt instead (not complaint to PCI standard as per PCI base spec). So I would need similar change to have the error interrupt passed to the aer driver. So there are hardware out there like Keystone which requires to support this through platform IRQ. > What's on the other end of those interrupts is outside the scope of > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > something else. Drivers should not care about how it is connected, > and that's why I don't think this code really fits in portdrv. > > Maybe your Root Port is non-compliant in some way and maybe we need a > quirk or something to work around that hardware defect. But I'm not > convinced yet that we have that sort of problem. It seems like we > just don't have the correct DT description. Is quirk is what is suggested here to support this? Murali > >> And at same time, AER capability list >> in PCIe register descriptors. And also, The Root Error >> Command/status register was proper to enable/disable the AER >> interrupt. > > I'm not sure what you're saying here. Here's what I think you said; > please correct me if I'm wrong: > > - Your Root Port has an AER capability. > > - Your Root Port does not support MSI or MSI-X. (This would > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > says "All PCI Express device Functions that are capable of > generating interrupts must implement MSI or MSI-X or both.") > > - The three enable bits in the Root Error Command Register enable or > disable generation of interrupts. These enable bits control all > interrupts, whether MSI, MSI-X, or INTx. > > - The Root Error Status Register contains an "Advanced Error > Interrupt Message Number" field, but that's only applicable if MSI > or MSI-X is enabled, and if your device doesn't support MSI or > MSI-X, this field doesn't apply. > >> This hardware implementation make sense in some platforms, and this >> was described in the function init_service_irqs() in the >> drivers/pci/pcie/portdrv_core.c in current kernel as: > >> >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >> 244 */ >> >> So I think this was the proper place to update the irq number before aer service >> driver was loaded. >> >>> >>> My guess is that your device *does* support INTx, and we should use that. >>> ACPI has the generic _PRT that describes INTx routing. There must be >>> something similar for DT, but I don't know what it is. It seems like >>> this should be described using that DT mechanism (whatever it is), and >>> we shouldn't need special-case code in the portdrv code. >>> >>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>> > --- >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>> > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>> > --- a/drivers/pci/pcie/portdrv_core.c >>> > +++ b/drivers/pci/pcie/portdrv_core.c >>> > @@ -15,6 +15,7 @@ >>> > #include <linux/slab.h> >>> > #include <linux/pcieport_if.h> >>> > #include <linux/aer.h> >>> > +#include <linux/of_irq.h> >>> > >>> > #include "../pci.h" >>> > #include "portdrv.h" >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>> > pci_dev *dev, int *irqs, int mask) { >>> > int i, irq = -1; >>> > + int ret; >>> > + struct device_node *np = NULL; >>> > + >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > + irqs[i] = 0; >>> > + >>> > + if (dev->bus->dev.of_node) >>> > + np = dev->bus->dev.of_node; >>> > + >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>> > + * request irq for aer >>> > + */ >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>> > + ret = of_irq_get_byname(np, "aer"); >>> > + if (ret > 0) { >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>> > + if (dev->irq) >>> > + irq = dev->irq; >>> > + goto no_msi; >>> > + } >>> > + } >>> > >>> > /* >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>> @@ >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>> int *irqs, int mask) >>> > irq = dev->irq; >>> > >>> > no_msi: >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > - irqs[i] = irq; >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>> > + if (!irqs[i]) >>> > + irqs[i] = irq; >>> > + } >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>> > >>> > - if (irq < 0) >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>> > return -ENODEV; >>> > return 0; >>> > } >>> > -- >>> > 2.1.0.27.g96db324 >>> > >>> > >>> > _______________________________________________ >>> > linux-arm-kernel mailing list >>> > linux-arm-kernel@lists.infradead.org >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- > 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 > -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 15:37 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-02 15:37 UTC (permalink / raw) To: linux-arm-kernel On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>> -----Original Message----- >>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] >>> Sent: Thursday, June 02, 2016 11:48 AM >>> To: Po Liu >>> Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; >>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>> MSI/MSI-X/INTx mode >>> >>> [+cc Rob] >>> >>> Hi Po, >>> >>> On Thu, May 26, 2016 at 02:00:06PM +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. >>> >>> My understanding is that AER interrupt signaling can be done via INTx, >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>> either? How is the interrupt you're requesting here different from INTx? >> >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >> or root error in RC mode. But use an independent SPI interrupt(arm >> interrupt controller) line. > > The Root Port is a PCI device and should follow the normal PCI rules > for interrupts. As far as I understand, that means it should use MSI, > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > That's all from the PCI point of view, of course. > Bjorn. I am faced with the same issue on Keystone PCI hardware and it has been on my TODO list for quite some time. Keystone PCI hardware also doesn't use MSI or MSI-X or INTx for reporting errors received at the root port, but use a platform interrupt instead (not complaint to PCI standard as per PCI base spec). So I would need similar change to have the error interrupt passed to the aer driver. So there are hardware out there like Keystone which requires to support this through platform IRQ. > What's on the other end of those interrupts is outside the scope of > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > something else. Drivers should not care about how it is connected, > and that's why I don't think this code really fits in portdrv. > > Maybe your Root Port is non-compliant in some way and maybe we need a > quirk or something to work around that hardware defect. But I'm not > convinced yet that we have that sort of problem. It seems like we > just don't have the correct DT description. Is quirk is what is suggested here to support this? Murali > >> And at same time, AER capability list >> in PCIe register descriptors. And also, The Root Error >> Command/status register was proper to enable/disable the AER >> interrupt. > > I'm not sure what you're saying here. Here's what I think you said; > please correct me if I'm wrong: > > - Your Root Port has an AER capability. > > - Your Root Port does not support MSI or MSI-X. (This would > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > says "All PCI Express device Functions that are capable of > generating interrupts must implement MSI or MSI-X or both.") > > - The three enable bits in the Root Error Command Register enable or > disable generation of interrupts. These enable bits control all > interrupts, whether MSI, MSI-X, or INTx. > > - The Root Error Status Register contains an "Advanced Error > Interrupt Message Number" field, but that's only applicable if MSI > or MSI-X is enabled, and if your device doesn't support MSI or > MSI-X, this field doesn't apply. > >> This hardware implementation make sense in some platforms, and this >> was described in the function init_service_irqs() in the >> drivers/pci/pcie/portdrv_core.c in current kernel as: > >> >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >> 244 */ >> >> So I think this was the proper place to update the irq number before aer service >> driver was loaded. >> >>> >>> My guess is that your device *does* support INTx, and we should use that. >>> ACPI has the generic _PRT that describes INTx routing. There must be >>> something similar for DT, but I don't know what it is. It seems like >>> this should be described using that DT mechanism (whatever it is), and >>> we shouldn't need special-case code in the portdrv code. >>> >>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>> > --- >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>> > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>> > --- a/drivers/pci/pcie/portdrv_core.c >>> > +++ b/drivers/pci/pcie/portdrv_core.c >>> > @@ -15,6 +15,7 @@ >>> > #include <linux/slab.h> >>> > #include <linux/pcieport_if.h> >>> > #include <linux/aer.h> >>> > +#include <linux/of_irq.h> >>> > >>> > #include "../pci.h" >>> > #include "portdrv.h" >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>> > pci_dev *dev, int *irqs, int mask) { >>> > int i, irq = -1; >>> > + int ret; >>> > + struct device_node *np = NULL; >>> > + >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > + irqs[i] = 0; >>> > + >>> > + if (dev->bus->dev.of_node) >>> > + np = dev->bus->dev.of_node; >>> > + >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>> > + * request irq for aer >>> > + */ >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>> > + ret = of_irq_get_byname(np, "aer"); >>> > + if (ret > 0) { >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>> > + if (dev->irq) >>> > + irq = dev->irq; >>> > + goto no_msi; >>> > + } >>> > + } >>> > >>> > /* >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>> @@ >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>> int *irqs, int mask) >>> > irq = dev->irq; >>> > >>> > no_msi: >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > - irqs[i] = irq; >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>> > + if (!irqs[i]) >>> > + irqs[i] = irq; >>> > + } >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>> > >>> > - if (irq < 0) >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>> > return -ENODEV; >>> > return 0; >>> > } >>> > -- >>> > 2.1.0.27.g96db324 >>> > >>> > >>> > _______________________________________________ >>> > linux-arm-kernel mailing list >>> > linux-arm-kernel at lists.infradead.org >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-02 15:37 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-02 15:37 UTC (permalink / raw) To: Bjorn Helgaas, Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>> -----Original Message----- >>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >>> Sent: Thursday, June 02, 2016 11:48 AM >>> To: Po Liu >>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>> MSI/MSI-X/INTx mode >>> >>> [+cc Rob] >>> >>> Hi Po, >>> >>> On Thu, May 26, 2016 at 02:00:06PM +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. >>> >>> My understanding is that AER interrupt signaling can be done via INTx, >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>> either? How is the interrupt you're requesting here different from INTx? >> >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >> or root error in RC mode. But use an independent SPI interrupt(arm >> interrupt controller) line. > > The Root Port is a PCI device and should follow the normal PCI rules > for interrupts. As far as I understand, that means it should use MSI, > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > That's all from the PCI point of view, of course. > Bjorn. I am faced with the same issue on Keystone PCI hardware and it has been on my TODO list for quite some time. Keystone PCI hardware also doesn't use MSI or MSI-X or INTx for reporting errors received at the root port, but use a platform interrupt instead (not complaint to PCI standard as per PCI base spec). So I would need similar change to have the error interrupt passed to the aer driver. So there are hardware out there like Keystone which requires to support this through platform IRQ. > What's on the other end of those interrupts is outside the scope of > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > something else. Drivers should not care about how it is connected, > and that's why I don't think this code really fits in portdrv. > > Maybe your Root Port is non-compliant in some way and maybe we need a > quirk or something to work around that hardware defect. But I'm not > convinced yet that we have that sort of problem. It seems like we > just don't have the correct DT description. Is quirk is what is suggested here to support this? Murali > >> And at same time, AER capability list >> in PCIe register descriptors. And also, The Root Error >> Command/status register was proper to enable/disable the AER >> interrupt. > > I'm not sure what you're saying here. Here's what I think you said; > please correct me if I'm wrong: > > - Your Root Port has an AER capability. > > - Your Root Port does not support MSI or MSI-X. (This would > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > says "All PCI Express device Functions that are capable of > generating interrupts must implement MSI or MSI-X or both.") > > - The three enable bits in the Root Error Command Register enable or > disable generation of interrupts. These enable bits control all > interrupts, whether MSI, MSI-X, or INTx. > > - The Root Error Status Register contains an "Advanced Error > Interrupt Message Number" field, but that's only applicable if MSI > or MSI-X is enabled, and if your device doesn't support MSI or > MSI-X, this field doesn't apply. > >> This hardware implementation make sense in some platforms, and this >> was described in the function init_service_irqs() in the >> drivers/pci/pcie/portdrv_core.c in current kernel as: > >> >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >> 244 */ >> >> So I think this was the proper place to update the irq number before aer service >> driver was loaded. >> >>> >>> My guess is that your device *does* support INTx, and we should use that. >>> ACPI has the generic _PRT that describes INTx routing. There must be >>> something similar for DT, but I don't know what it is. It seems like >>> this should be described using that DT mechanism (whatever it is), and >>> we shouldn't need special-case code in the portdrv code. >>> >>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>> > --- >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>> > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>> > --- a/drivers/pci/pcie/portdrv_core.c >>> > +++ b/drivers/pci/pcie/portdrv_core.c >>> > @@ -15,6 +15,7 @@ >>> > #include <linux/slab.h> >>> > #include <linux/pcieport_if.h> >>> > #include <linux/aer.h> >>> > +#include <linux/of_irq.h> >>> > >>> > #include "../pci.h" >>> > #include "portdrv.h" >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>> > pci_dev *dev, int *irqs, int mask) { >>> > int i, irq = -1; >>> > + int ret; >>> > + struct device_node *np = NULL; >>> > + >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > + irqs[i] = 0; >>> > + >>> > + if (dev->bus->dev.of_node) >>> > + np = dev->bus->dev.of_node; >>> > + >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>> > + * request irq for aer >>> > + */ >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>> > + ret = of_irq_get_byname(np, "aer"); >>> > + if (ret > 0) { >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>> > + if (dev->irq) >>> > + irq = dev->irq; >>> > + goto no_msi; >>> > + } >>> > + } >>> > >>> > /* >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>> @@ >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>> int *irqs, int mask) >>> > irq = dev->irq; >>> > >>> > no_msi: >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>> > - irqs[i] = irq; >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>> > + if (!irqs[i]) >>> > + irqs[i] = irq; >>> > + } >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>> > >>> > - if (irq < 0) >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>> > return -ENODEV; >>> > return 0; >>> > } >>> > -- >>> > 2.1.0.27.g96db324 >>> > >>> > >>> > _______________________________________________ >>> > linux-arm-kernel mailing list >>> > linux-arm-kernel@lists.infradead.org >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- > 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 > -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-02 15:37 ` Murali Karicheri (?) @ 2016-06-03 4:09 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-03 4:09 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>> -----Original Message----- > >>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >>> Sent: Thursday, June 02, 2016 11:48 AM > >>> To: Po Liu > >>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > >>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>> MSI/MSI-X/INTx mode > >>> > >>> [+cc Rob] > >>> > >>> Hi Po, > >>> > >>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>> > >>> My understanding is that AER interrupt signaling can be done via INTx, > >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>> either? How is the interrupt you're requesting here different from INTx? > >> > >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >> or root error in RC mode. But use an independent SPI interrupt(arm > >> interrupt controller) line. > > > > The Root Port is a PCI device and should follow the normal PCI rules > > for interrupts. As far as I understand, that means it should use MSI, > > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > That's all from the PCI point of view, of course. > > I am faced with the same issue on Keystone PCI hardware and it has been > on my TODO list for quite some time. Keystone PCI hardware also doesn't > use MSI or MSI-X or INTx for reporting errors received at the root port, > but use a platform interrupt instead (not complaint to PCI standard as > per PCI base spec). So I would need similar change to have the error > interrupt passed to the aer driver. So there are hardware out there > like Keystone which requires to support this through platform IRQ. This is not a new area of the spec, and it's hard for me to believe that these two new PCIe controllers are both broken the same way (although I guess both are DesignWare-based, so maybe this is the same underlying problem in both cases?). I think it's more likely that we just haven't figured out the right way to describe this in the DT. I assume you have a Root Port with an AER capability, no MSI capability, and no MSI-X capability, right? What does its Interrupt Pin register contain? If it's zero, it doesn't use INTx either, so according to the spec it should generate no interrupts. But if Interrupt Pin is non-zero, that means the Root Port should be able to generate virtual INTx interrupts. Presumably the Root Complex connects those interrupts to something; maybe to your platform interrupt? PCI doesn't say anything about an interrupt after it leaves the Root Complex, so the fact that it's connected to a "platform interrupt" or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. Shouldn't we be able to use the interrupt-map and related DT properties to express the fact that Root Port virtual INTx is routed to platform interrupt Y, even without any special-case code in portdrv? > > What's on the other end of those interrupts is outside the scope of > > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > > something else. Drivers should not care about how it is connected, > > and that's why I don't think this code really fits in portdrv. > > > > Maybe your Root Port is non-compliant in some way and maybe we need a > > quirk or something to work around that hardware defect. But I'm not > > convinced yet that we have that sort of problem. It seems like we > > just don't have the correct DT description. > > Is quirk is what is suggested here to support this? No, I don't understand the problem yet, so I'm not ready to suggest a solution. > >> And at same time, AER capability list > >> in PCIe register descriptors. And also, The Root Error > >> Command/status register was proper to enable/disable the AER > >> interrupt. > > > > I'm not sure what you're saying here. Here's what I think you said; > > please correct me if I'm wrong: > > > > - Your Root Port has an AER capability. > > > > - Your Root Port does not support MSI or MSI-X. (This would > > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > > says "All PCI Express device Functions that are capable of > > generating interrupts must implement MSI or MSI-X or both.") > > > > - The three enable bits in the Root Error Command Register enable or > > disable generation of interrupts. These enable bits control all > > interrupts, whether MSI, MSI-X, or INTx. > > > > - The Root Error Status Register contains an "Advanced Error > > Interrupt Message Number" field, but that's only applicable if MSI > > or MSI-X is enabled, and if your device doesn't support MSI or > > MSI-X, this field doesn't apply. > > > >> This hardware implementation make sense in some platforms, and this > >> was described in the function init_service_irqs() in the > >> drivers/pci/pcie/portdrv_core.c in current kernel as: > > > >> > >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > >> 244 */ > >> > >> So I think this was the proper place to update the irq number before aer service > >> driver was loaded. > >> > >>> > >>> My guess is that your device *does* support INTx, and we should use that. > >>> ACPI has the generic _PRT that describes INTx routing. There must be > >>> something similar for DT, but I don't know what it is. It seems like > >>> this should be described using that DT mechanism (whatever it is), and > >>> we shouldn't need special-case code in the portdrv code. > >>> > >>> > Signed-off-by: Po Liu <po.liu@nxp.com> > >>> > --- > >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > >>> > 1 file changed, 28 insertions(+), 3 deletions(-) > >>> > > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c > >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > >>> > --- a/drivers/pci/pcie/portdrv_core.c > >>> > +++ b/drivers/pci/pcie/portdrv_core.c > >>> > @@ -15,6 +15,7 @@ > >>> > #include <linux/slab.h> > >>> > #include <linux/pcieport_if.h> > >>> > #include <linux/aer.h> > >>> > +#include <linux/of_irq.h> > >>> > > >>> > #include "../pci.h" > >>> > #include "portdrv.h" > >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct > >>> > pci_dev *dev, int *irqs, int mask) { > >>> > int i, irq = -1; > >>> > + int ret; > >>> > + struct device_node *np = NULL; > >>> > + > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > + irqs[i] = 0; > >>> > + > >>> > + if (dev->bus->dev.of_node) > >>> > + np = dev->bus->dev.of_node; > >>> > + > >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > >>> > + * request irq for aer > >>> > + */ > >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > >>> > + (mask & PCIE_PORT_SERVICE_PME)) { > >>> > + ret = of_irq_get_byname(np, "aer"); > >>> > + if (ret > 0) { > >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > >>> > + if (dev->irq) > >>> > + irq = dev->irq; > >>> > + goto no_msi; > >>> > + } > >>> > + } > >>> > > >>> > /* > >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use > >>> @@ > >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > >>> int *irqs, int mask) > >>> > irq = dev->irq; > >>> > > >>> > no_msi: > >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > - irqs[i] = irq; > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > >>> > + if (!irqs[i]) > >>> > + irqs[i] = irq; > >>> > + } > >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > >>> > > >>> > - if (irq < 0) > >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > >>> > return -ENODEV; > >>> > return 0; > >>> > } > >>> > -- > >>> > 2.1.0.27.g96db324 > >>> > > >>> > > >>> > _______________________________________________ > >>> > linux-arm-kernel mailing list > >>> > linux-arm-kernel@lists.infradead.org > >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > -- > > 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 > > > > > -- > Murali Karicheri > Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-03 4:09 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-03 4:09 UTC (permalink / raw) To: linux-arm-kernel On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>> -----Original Message----- > >>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > >>> Sent: Thursday, June 02, 2016 11:48 AM > >>> To: Po Liu > >>> Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > >>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; > >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>> MSI/MSI-X/INTx mode > >>> > >>> [+cc Rob] > >>> > >>> Hi Po, > >>> > >>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>> > >>> My understanding is that AER interrupt signaling can be done via INTx, > >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>> either? How is the interrupt you're requesting here different from INTx? > >> > >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >> or root error in RC mode. But use an independent SPI interrupt(arm > >> interrupt controller) line. > > > > The Root Port is a PCI device and should follow the normal PCI rules > > for interrupts. As far as I understand, that means it should use MSI, > > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > That's all from the PCI point of view, of course. > > I am faced with the same issue on Keystone PCI hardware and it has been > on my TODO list for quite some time. Keystone PCI hardware also doesn't > use MSI or MSI-X or INTx for reporting errors received at the root port, > but use a platform interrupt instead (not complaint to PCI standard as > per PCI base spec). So I would need similar change to have the error > interrupt passed to the aer driver. So there are hardware out there > like Keystone which requires to support this through platform IRQ. This is not a new area of the spec, and it's hard for me to believe that these two new PCIe controllers are both broken the same way (although I guess both are DesignWare-based, so maybe this is the same underlying problem in both cases?). I think it's more likely that we just haven't figured out the right way to describe this in the DT. I assume you have a Root Port with an AER capability, no MSI capability, and no MSI-X capability, right? What does its Interrupt Pin register contain? If it's zero, it doesn't use INTx either, so according to the spec it should generate no interrupts. But if Interrupt Pin is non-zero, that means the Root Port should be able to generate virtual INTx interrupts. Presumably the Root Complex connects those interrupts to something; maybe to your platform interrupt? PCI doesn't say anything about an interrupt after it leaves the Root Complex, so the fact that it's connected to a "platform interrupt" or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. Shouldn't we be able to use the interrupt-map and related DT properties to express the fact that Root Port virtual INTx is routed to platform interrupt Y, even without any special-case code in portdrv? > > What's on the other end of those interrupts is outside the scope of > > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > > something else. Drivers should not care about how it is connected, > > and that's why I don't think this code really fits in portdrv. > > > > Maybe your Root Port is non-compliant in some way and maybe we need a > > quirk or something to work around that hardware defect. But I'm not > > convinced yet that we have that sort of problem. It seems like we > > just don't have the correct DT description. > > Is quirk is what is suggested here to support this? No, I don't understand the problem yet, so I'm not ready to suggest a solution. > >> And at same time, AER capability list > >> in PCIe register descriptors. And also, The Root Error > >> Command/status register was proper to enable/disable the AER > >> interrupt. > > > > I'm not sure what you're saying here. Here's what I think you said; > > please correct me if I'm wrong: > > > > - Your Root Port has an AER capability. > > > > - Your Root Port does not support MSI or MSI-X. (This would > > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > > says "All PCI Express device Functions that are capable of > > generating interrupts must implement MSI or MSI-X or both.") > > > > - The three enable bits in the Root Error Command Register enable or > > disable generation of interrupts. These enable bits control all > > interrupts, whether MSI, MSI-X, or INTx. > > > > - The Root Error Status Register contains an "Advanced Error > > Interrupt Message Number" field, but that's only applicable if MSI > > or MSI-X is enabled, and if your device doesn't support MSI or > > MSI-X, this field doesn't apply. > > > >> This hardware implementation make sense in some platforms, and this > >> was described in the function init_service_irqs() in the > >> drivers/pci/pcie/portdrv_core.c in current kernel as: > > > >> > >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > >> 244 */ > >> > >> So I think this was the proper place to update the irq number before aer service > >> driver was loaded. > >> > >>> > >>> My guess is that your device *does* support INTx, and we should use that. > >>> ACPI has the generic _PRT that describes INTx routing. There must be > >>> something similar for DT, but I don't know what it is. It seems like > >>> this should be described using that DT mechanism (whatever it is), and > >>> we shouldn't need special-case code in the portdrv code. > >>> > >>> > Signed-off-by: Po Liu <po.liu@nxp.com> > >>> > --- > >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > >>> > 1 file changed, 28 insertions(+), 3 deletions(-) > >>> > > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c > >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > >>> > --- a/drivers/pci/pcie/portdrv_core.c > >>> > +++ b/drivers/pci/pcie/portdrv_core.c > >>> > @@ -15,6 +15,7 @@ > >>> > #include <linux/slab.h> > >>> > #include <linux/pcieport_if.h> > >>> > #include <linux/aer.h> > >>> > +#include <linux/of_irq.h> > >>> > > >>> > #include "../pci.h" > >>> > #include "portdrv.h" > >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct > >>> > pci_dev *dev, int *irqs, int mask) { > >>> > int i, irq = -1; > >>> > + int ret; > >>> > + struct device_node *np = NULL; > >>> > + > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > + irqs[i] = 0; > >>> > + > >>> > + if (dev->bus->dev.of_node) > >>> > + np = dev->bus->dev.of_node; > >>> > + > >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > >>> > + * request irq for aer > >>> > + */ > >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > >>> > + (mask & PCIE_PORT_SERVICE_PME)) { > >>> > + ret = of_irq_get_byname(np, "aer"); > >>> > + if (ret > 0) { > >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > >>> > + if (dev->irq) > >>> > + irq = dev->irq; > >>> > + goto no_msi; > >>> > + } > >>> > + } > >>> > > >>> > /* > >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use > >>> @@ > >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > >>> int *irqs, int mask) > >>> > irq = dev->irq; > >>> > > >>> > no_msi: > >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > - irqs[i] = irq; > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > >>> > + if (!irqs[i]) > >>> > + irqs[i] = irq; > >>> > + } > >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > >>> > > >>> > - if (irq < 0) > >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > >>> > return -ENODEV; > >>> > return 0; > >>> > } > >>> > -- > >>> > 2.1.0.27.g96db324 > >>> > > >>> > > >>> > _______________________________________________ > >>> > linux-arm-kernel mailing list > >>> > linux-arm-kernel at lists.infradead.org > >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > > the body of a message to majordomo at vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > > -- > Murali Karicheri > Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-03 4:09 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-03 4:09 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>> -----Original Message----- > >>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >>> Sent: Thursday, June 02, 2016 11:48 AM > >>> To: Po Liu > >>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > >>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > >>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>> MSI/MSI-X/INTx mode > >>> > >>> [+cc Rob] > >>> > >>> Hi Po, > >>> > >>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>> > >>> My understanding is that AER interrupt signaling can be done via INTx, > >>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>> either? How is the interrupt you're requesting here different from INTx? > >> > >> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >> or root error in RC mode. But use an independent SPI interrupt(arm > >> interrupt controller) line. > > > > The Root Port is a PCI device and should follow the normal PCI rules > > for interrupts. As far as I understand, that means it should use MSI, > > MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > > use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > > INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > That's all from the PCI point of view, of course. > > I am faced with the same issue on Keystone PCI hardware and it has been > on my TODO list for quite some time. Keystone PCI hardware also doesn't > use MSI or MSI-X or INTx for reporting errors received at the root port, > but use a platform interrupt instead (not complaint to PCI standard as > per PCI base spec). So I would need similar change to have the error > interrupt passed to the aer driver. So there are hardware out there > like Keystone which requires to support this through platform IRQ. This is not a new area of the spec, and it's hard for me to believe that these two new PCIe controllers are both broken the same way (although I guess both are DesignWare-based, so maybe this is the same underlying problem in both cases?). I think it's more likely that we just haven't figured out the right way to describe this in the DT. I assume you have a Root Port with an AER capability, no MSI capability, and no MSI-X capability, right? What does its Interrupt Pin register contain? If it's zero, it doesn't use INTx either, so according to the spec it should generate no interrupts. But if Interrupt Pin is non-zero, that means the Root Port should be able to generate virtual INTx interrupts. Presumably the Root Complex connects those interrupts to something; maybe to your platform interrupt? PCI doesn't say anything about an interrupt after it leaves the Root Complex, so the fact that it's connected to a "platform interrupt" or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. Shouldn't we be able to use the interrupt-map and related DT properties to express the fact that Root Port virtual INTx is routed to platform interrupt Y, even without any special-case code in portdrv? > > What's on the other end of those interrupts is outside the scope of > > PCI. An INTx interrupt (either a conventional PCI wire or a PCIe > > virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or > > something else. Drivers should not care about how it is connected, > > and that's why I don't think this code really fits in portdrv. > > > > Maybe your Root Port is non-compliant in some way and maybe we need a > > quirk or something to work around that hardware defect. But I'm not > > convinced yet that we have that sort of problem. It seems like we > > just don't have the correct DT description. > > Is quirk is what is suggested here to support this? No, I don't understand the problem yet, so I'm not ready to suggest a solution. > >> And at same time, AER capability list > >> in PCIe register descriptors. And also, The Root Error > >> Command/status register was proper to enable/disable the AER > >> interrupt. > > > > I'm not sure what you're saying here. Here's what I think you said; > > please correct me if I'm wrong: > > > > - Your Root Port has an AER capability. > > > > - Your Root Port does not support MSI or MSI-X. (This would > > actually be a spec violation because the PCIe spec r3.0, sec 7.7 > > says "All PCI Express device Functions that are capable of > > generating interrupts must implement MSI or MSI-X or both.") > > > > - The three enable bits in the Root Error Command Register enable or > > disable generation of interrupts. These enable bits control all > > interrupts, whether MSI, MSI-X, or INTx. > > > > - The Root Error Status Register contains an "Advanced Error > > Interrupt Message Number" field, but that's only applicable if MSI > > or MSI-X is enabled, and if your device doesn't support MSI or > > MSI-X, this field doesn't apply. > > > >> This hardware implementation make sense in some platforms, and this > >> was described in the function init_service_irqs() in the > >> drivers/pci/pcie/portdrv_core.c in current kernel as: > > > >> > >> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. > >> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On > >> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode > >> 244 */ > >> > >> So I think this was the proper place to update the irq number before aer service > >> driver was loaded. > >> > >>> > >>> My guess is that your device *does* support INTx, and we should use that. > >>> ACPI has the generic _PRT that describes INTx routing. There must be > >>> something similar for DT, but I don't know what it is. It seems like > >>> this should be described using that DT mechanism (whatever it is), and > >>> we shouldn't need special-case code in the portdrv code. > >>> > >>> > Signed-off-by: Po Liu <po.liu@nxp.com> > >>> > --- > >>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- > >>> > 1 file changed, 28 insertions(+), 3 deletions(-) > >>> > > >>> > diff --git a/drivers/pci/pcie/portdrv_core.c > >>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 > >>> > --- a/drivers/pci/pcie/portdrv_core.c > >>> > +++ b/drivers/pci/pcie/portdrv_core.c > >>> > @@ -15,6 +15,7 @@ > >>> > #include <linux/slab.h> > >>> > #include <linux/pcieport_if.h> > >>> > #include <linux/aer.h> > >>> > +#include <linux/of_irq.h> > >>> > > >>> > #include "../pci.h" > >>> > #include "portdrv.h" > >>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev > >>> > *dev, int *vectors, int mask) static int init_service_irqs(struct > >>> > pci_dev *dev, int *irqs, int mask) { > >>> > int i, irq = -1; > >>> > + int ret; > >>> > + struct device_node *np = NULL; > >>> > + > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > + irqs[i] = 0; > >>> > + > >>> > + if (dev->bus->dev.of_node) > >>> > + np = dev->bus->dev.of_node; > >>> > + > >>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > >>> > + * request irq for aer > >>> > + */ > >>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > >>> > + (mask & PCIE_PORT_SERVICE_PME)) { > >>> > + ret = of_irq_get_byname(np, "aer"); > >>> > + if (ret > 0) { > >>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > >>> > + if (dev->irq) > >>> > + irq = dev->irq; > >>> > + goto no_msi; > >>> > + } > >>> > + } > >>> > > >>> > /* > >>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use > >>> @@ > >>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, > >>> int *irqs, int mask) > >>> > irq = dev->irq; > >>> > > >>> > no_msi: > >>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > >>> > - irqs[i] = irq; > >>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > >>> > + if (!irqs[i]) > >>> > + irqs[i] = irq; > >>> > + } > >>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > >>> > > >>> > - if (irq < 0) > >>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > >>> > return -ENODEV; > >>> > return 0; > >>> > } > >>> > -- > >>> > 2.1.0.27.g96db324 > >>> > > >>> > > >>> > _______________________________________________ > >>> > linux-arm-kernel mailing list > >>> > linux-arm-kernel@lists.infradead.org > >>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > -- > > 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 > > > > > -- > Murali Karicheri > Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-03 4:09 ` Bjorn Helgaas (?) @ 2016-06-03 17:31 ` Murali Karicheri -1 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-03 17:31 UTC (permalink / raw) To: Bjorn Helgaas Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Po, Sorry to hijack your discussion, but the problem seems to be same for Keystone PCI controller which is also designware (old version) based. On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>>>> -----Original Message----- >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >>>>> Sent: Thursday, June 02, 2016 11:48 AM >>>>> To: Po Liu >>>>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>>>> MSI/MSI-X/INTx mode >>>>> >>>>> [+cc Rob] >>>>> >>>>> Hi Po, >>>>> >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >>>>> >>>>> My understanding is that AER interrupt signaling can be done via INTx, >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>>>> either? How is the interrupt you're requesting here different from INTx? >>>> >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >>>> or root error in RC mode. But use an independent SPI interrupt(arm >>>> interrupt controller) line. >>> >>> The Root Port is a PCI device and should follow the normal PCI rules >>> for interrupts. As far as I understand, that means it should use MSI, >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. >>> That's all from the PCI point of view, of course. >> >> I am faced with the same issue on Keystone PCI hardware and it has been >> on my TODO list for quite some time. Keystone PCI hardware also doesn't >> use MSI or MSI-X or INTx for reporting errors received at the root port, >> but use a platform interrupt instead (not complaint to PCI standard as >> per PCI base spec). So I would need similar change to have the error >> interrupt passed to the aer driver. So there are hardware out there >> like Keystone which requires to support this through platform IRQ. > > This is not a new area of the spec, and it's hard for me to believe > that these two new PCIe controllers are both broken the same way > (although I guess both are DesignWare-based, so maybe this is the same > underlying problem in both cases?). I think it's more likely that we > just haven't figured out the right way to describe this in the DT. Keystone is using an older version of the designware IP and it implements all of the interrupts in the application register space unlike other newer version of the hardware. So I assume, the version used on Layerscape is also an older version and the both have same issue in terms of non standard platform interrupt used for error reporting. > > I assume you have a Root Port with an AER capability, no MSI > capability, and no MSI-X capability, right? Has AER capability and both MSI and INTx (legacy) capability > What does its Interrupt > Pin register contain? If it's zero, it doesn't use INTx either, so > according to the spec it should generate no interrupts. > At address offset 0x3C by default has a value of 1, but it is writable by software. So default is INTx A. > But if Interrupt Pin is non-zero, that means the Root Port should be > able to generate virtual INTx interrupts. Presumably the Root Complex > connects those interrupts to something; maybe to your platform > interrupt? Probably that is what is happening. Both Power management and Error interrupts are raised on platform interrupt lines. 12 Error Interrupts [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error (RC mode only) 13 Power management and reset event interrupts [0] Power management turn-off message interrupt (EP mode only) [1] Power management ack message interrupt (RC mode only) [2] Power management event interrupt (RC mode only) [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > PCI doesn't say anything about an interrupt after it leaves the Root > Complex, so the fact that it's connected to a "platform interrupt" or > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > Shouldn't we be able to use the interrupt-map and related DT > properties to express the fact that Root Port virtual INTx is routed > to platform interrupt Y, even without any special-case code in > portdrv? My understanding is if RC also raise interrupt on INTx, then below map make sense, where either EP or RC can raise interrupt and the line will be muxed for interrupt from EP or RC port. Here is the DT entry in PCIE keystone for Legacy interrupt mapping to host interrupt. #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ <0 0 0 2 &pcie_intc0 1>, /* INT B */ <0 0 0 3 &pcie_intc0 2>, /* INT C */ <0 0 0 4 &pcie_intc0 3>; /* INT D */ And then pcie_intc0: legacy-interrupt-controller { interrupt-controller; #interrupt-cells = <1>; interrupt-parent = <&gic>; interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; }; So if RC interrupt for Power management and Error interrupt is a separate line, how can software describe that using the above interrupt map? Murali > >>> What's on the other end of those interrupts is outside the scope of >>> PCI. An INTx interrupt (either a conventional PCI wire or a PCIe >>> virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or >>> something else. Drivers should not care about how it is connected, >>> and that's why I don't think this code really fits in portdrv. >>> >>> Maybe your Root Port is non-compliant in some way and maybe we need a >>> quirk or something to work around that hardware defect. But I'm not >>> convinced yet that we have that sort of problem. It seems like we >>> just don't have the correct DT description. >> >> Is quirk is what is suggested here to support this? > > No, I don't understand the problem yet, so I'm not ready to suggest a > solution. > >>>> And at same time, AER capability list >>>> in PCIe register descriptors. And also, The Root Error >>>> Command/status register was proper to enable/disable the AER >>>> interrupt. >>> >>> I'm not sure what you're saying here. Here's what I think you said; >>> please correct me if I'm wrong: >>> >>> - Your Root Port has an AER capability. >>> >>> - Your Root Port does not support MSI or MSI-X. (This would >>> actually be a spec violation because the PCIe spec r3.0, sec 7.7 >>> says "All PCI Express device Functions that are capable of >>> generating interrupts must implement MSI or MSI-X or both.") >>> >>> - The three enable bits in the Root Error Command Register enable or >>> disable generation of interrupts. These enable bits control all >>> interrupts, whether MSI, MSI-X, or INTx. >>> >>> - The Root Error Status Register contains an "Advanced Error >>> Interrupt Message Number" field, but that's only applicable if MSI >>> or MSI-X is enabled, and if your device doesn't support MSI or >>> MSI-X, this field doesn't apply. >>> >>>> This hardware implementation make sense in some platforms, and this >>>> was described in the function init_service_irqs() in the >>>> drivers/pci/pcie/portdrv_core.c in current kernel as: >>> >>>> >>>> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >>>> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >>>> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >>>> 244 */ >>>> >>>> So I think this was the proper place to update the irq number before aer service >>>> driver was loaded. >>>> >>>>> >>>>> My guess is that your device *does* support INTx, and we should use that. >>>>> ACPI has the generic _PRT that describes INTx routing. There must be >>>>> something similar for DT, but I don't know what it is. It seems like >>>>> this should be described using that DT mechanism (whatever it is), and >>>>> we shouldn't need special-case code in the portdrv code. >>>>> >>>>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>>>> > --- >>>>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>>>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>>>> > >>>>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>>>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>>>> > --- a/drivers/pci/pcie/portdrv_core.c >>>>> > +++ b/drivers/pci/pcie/portdrv_core.c >>>>> > @@ -15,6 +15,7 @@ >>>>> > #include <linux/slab.h> >>>>> > #include <linux/pcieport_if.h> >>>>> > #include <linux/aer.h> >>>>> > +#include <linux/of_irq.h> >>>>> > >>>>> > #include "../pci.h" >>>>> > #include "portdrv.h" >>>>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>>>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>>>> > pci_dev *dev, int *irqs, int mask) { >>>>> > int i, irq = -1; >>>>> > + int ret; >>>>> > + struct device_node *np = NULL; >>>>> > + >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > + irqs[i] = 0; >>>>> > + >>>>> > + if (dev->bus->dev.of_node) >>>>> > + np = dev->bus->dev.of_node; >>>>> > + >>>>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>>>> > + * request irq for aer >>>>> > + */ >>>>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>>>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>>>> > + ret = of_irq_get_byname(np, "aer"); >>>>> > + if (ret > 0) { >>>>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>>>> > + if (dev->irq) >>>>> > + irq = dev->irq; >>>>> > + goto no_msi; >>>>> > + } >>>>> > + } >>>>> > >>>>> > /* >>>>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>>>> @@ >>>>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>>>> int *irqs, int mask) >>>>> > irq = dev->irq; >>>>> > >>>>> > no_msi: >>>>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > - irqs[i] = irq; >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>>>> > + if (!irqs[i]) >>>>> > + irqs[i] = irq; >>>>> > + } >>>>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>>>> > >>>>> > - if (irq < 0) >>>>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>>>> > return -ENODEV; >>>>> > return 0; >>>>> > } >>>>> > -- >>>>> > 2.1.0.27.g96db324 >>>>> > >>>>> > >>>>> > _______________________________________________ >>>>> > linux-arm-kernel mailing list >>>>> > linux-arm-kernel@lists.infradead.org >>>>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>> -- >>> 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 >>> >> >> >> -- >> Murali Karicheri >> Linux Kernel, Keystone -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-03 17:31 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-03 17:31 UTC (permalink / raw) To: linux-arm-kernel Po, Sorry to hijack your discussion, but the problem seems to be same for Keystone PCI controller which is also designware (old version) based. On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>>>> -----Original Message----- >>>>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] >>>>> Sent: Thursday, June 02, 2016 11:48 AM >>>>> To: Po Liu >>>>> Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>>>> MSI/MSI-X/INTx mode >>>>> >>>>> [+cc Rob] >>>>> >>>>> Hi Po, >>>>> >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >>>>> >>>>> My understanding is that AER interrupt signaling can be done via INTx, >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>>>> either? How is the interrupt you're requesting here different from INTx? >>>> >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >>>> or root error in RC mode. But use an independent SPI interrupt(arm >>>> interrupt controller) line. >>> >>> The Root Port is a PCI device and should follow the normal PCI rules >>> for interrupts. As far as I understand, that means it should use MSI, >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. >>> That's all from the PCI point of view, of course. >> >> I am faced with the same issue on Keystone PCI hardware and it has been >> on my TODO list for quite some time. Keystone PCI hardware also doesn't >> use MSI or MSI-X or INTx for reporting errors received at the root port, >> but use a platform interrupt instead (not complaint to PCI standard as >> per PCI base spec). So I would need similar change to have the error >> interrupt passed to the aer driver. So there are hardware out there >> like Keystone which requires to support this through platform IRQ. > > This is not a new area of the spec, and it's hard for me to believe > that these two new PCIe controllers are both broken the same way > (although I guess both are DesignWare-based, so maybe this is the same > underlying problem in both cases?). I think it's more likely that we > just haven't figured out the right way to describe this in the DT. Keystone is using an older version of the designware IP and it implements all of the interrupts in the application register space unlike other newer version of the hardware. So I assume, the version used on Layerscape is also an older version and the both have same issue in terms of non standard platform interrupt used for error reporting. > > I assume you have a Root Port with an AER capability, no MSI > capability, and no MSI-X capability, right? Has AER capability and both MSI and INTx (legacy) capability > What does its Interrupt > Pin register contain? If it's zero, it doesn't use INTx either, so > according to the spec it should generate no interrupts. > At address offset 0x3C by default has a value of 1, but it is writable by software. So default is INTx A. > But if Interrupt Pin is non-zero, that means the Root Port should be > able to generate virtual INTx interrupts. Presumably the Root Complex > connects those interrupts to something; maybe to your platform > interrupt? Probably that is what is happening. Both Power management and Error interrupts are raised on platform interrupt lines. 12 Error Interrupts [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error (RC mode only) 13 Power management and reset event interrupts [0] Power management turn-off message interrupt (EP mode only) [1] Power management ack message interrupt (RC mode only) [2] Power management event interrupt (RC mode only) [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > PCI doesn't say anything about an interrupt after it leaves the Root > Complex, so the fact that it's connected to a "platform interrupt" or > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > Shouldn't we be able to use the interrupt-map and related DT > properties to express the fact that Root Port virtual INTx is routed > to platform interrupt Y, even without any special-case code in > portdrv? My understanding is if RC also raise interrupt on INTx, then below map make sense, where either EP or RC can raise interrupt and the line will be muxed for interrupt from EP or RC port. Here is the DT entry in PCIE keystone for Legacy interrupt mapping to host interrupt. #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ <0 0 0 2 &pcie_intc0 1>, /* INT B */ <0 0 0 3 &pcie_intc0 2>, /* INT C */ <0 0 0 4 &pcie_intc0 3>; /* INT D */ And then pcie_intc0: legacy-interrupt-controller { interrupt-controller; #interrupt-cells = <1>; interrupt-parent = <&gic>; interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; }; So if RC interrupt for Power management and Error interrupt is a separate line, how can software describe that using the above interrupt map? Murali > >>> What's on the other end of those interrupts is outside the scope of >>> PCI. An INTx interrupt (either a conventional PCI wire or a PCIe >>> virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or >>> something else. Drivers should not care about how it is connected, >>> and that's why I don't think this code really fits in portdrv. >>> >>> Maybe your Root Port is non-compliant in some way and maybe we need a >>> quirk or something to work around that hardware defect. But I'm not >>> convinced yet that we have that sort of problem. It seems like we >>> just don't have the correct DT description. >> >> Is quirk is what is suggested here to support this? > > No, I don't understand the problem yet, so I'm not ready to suggest a > solution. > >>>> And at same time, AER capability list >>>> in PCIe register descriptors. And also, The Root Error >>>> Command/status register was proper to enable/disable the AER >>>> interrupt. >>> >>> I'm not sure what you're saying here. Here's what I think you said; >>> please correct me if I'm wrong: >>> >>> - Your Root Port has an AER capability. >>> >>> - Your Root Port does not support MSI or MSI-X. (This would >>> actually be a spec violation because the PCIe spec r3.0, sec 7.7 >>> says "All PCI Express device Functions that are capable of >>> generating interrupts must implement MSI or MSI-X or both.") >>> >>> - The three enable bits in the Root Error Command Register enable or >>> disable generation of interrupts. These enable bits control all >>> interrupts, whether MSI, MSI-X, or INTx. >>> >>> - The Root Error Status Register contains an "Advanced Error >>> Interrupt Message Number" field, but that's only applicable if MSI >>> or MSI-X is enabled, and if your device doesn't support MSI or >>> MSI-X, this field doesn't apply. >>> >>>> This hardware implementation make sense in some platforms, and this >>>> was described in the function init_service_irqs() in the >>>> drivers/pci/pcie/portdrv_core.c in current kernel as: >>> >>>> >>>> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >>>> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >>>> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >>>> 244 */ >>>> >>>> So I think this was the proper place to update the irq number before aer service >>>> driver was loaded. >>>> >>>>> >>>>> My guess is that your device *does* support INTx, and we should use that. >>>>> ACPI has the generic _PRT that describes INTx routing. There must be >>>>> something similar for DT, but I don't know what it is. It seems like >>>>> this should be described using that DT mechanism (whatever it is), and >>>>> we shouldn't need special-case code in the portdrv code. >>>>> >>>>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>>>> > --- >>>>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>>>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>>>> > >>>>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>>>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>>>> > --- a/drivers/pci/pcie/portdrv_core.c >>>>> > +++ b/drivers/pci/pcie/portdrv_core.c >>>>> > @@ -15,6 +15,7 @@ >>>>> > #include <linux/slab.h> >>>>> > #include <linux/pcieport_if.h> >>>>> > #include <linux/aer.h> >>>>> > +#include <linux/of_irq.h> >>>>> > >>>>> > #include "../pci.h" >>>>> > #include "portdrv.h" >>>>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>>>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>>>> > pci_dev *dev, int *irqs, int mask) { >>>>> > int i, irq = -1; >>>>> > + int ret; >>>>> > + struct device_node *np = NULL; >>>>> > + >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > + irqs[i] = 0; >>>>> > + >>>>> > + if (dev->bus->dev.of_node) >>>>> > + np = dev->bus->dev.of_node; >>>>> > + >>>>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>>>> > + * request irq for aer >>>>> > + */ >>>>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>>>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>>>> > + ret = of_irq_get_byname(np, "aer"); >>>>> > + if (ret > 0) { >>>>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>>>> > + if (dev->irq) >>>>> > + irq = dev->irq; >>>>> > + goto no_msi; >>>>> > + } >>>>> > + } >>>>> > >>>>> > /* >>>>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>>>> @@ >>>>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>>>> int *irqs, int mask) >>>>> > irq = dev->irq; >>>>> > >>>>> > no_msi: >>>>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > - irqs[i] = irq; >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>>>> > + if (!irqs[i]) >>>>> > + irqs[i] = irq; >>>>> > + } >>>>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>>>> > >>>>> > - if (irq < 0) >>>>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>>>> > return -ENODEV; >>>>> > return 0; >>>>> > } >>>>> > -- >>>>> > 2.1.0.27.g96db324 >>>>> > >>>>> > >>>>> > _______________________________________________ >>>>> > linux-arm-kernel mailing list >>>>> > linux-arm-kernel at lists.infradead.org >>>>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-pci" in >>> the body of a message to majordomo at vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> >> >> >> -- >> Murali Karicheri >> Linux Kernel, Keystone -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-03 17:31 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-03 17:31 UTC (permalink / raw) To: Bjorn Helgaas Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Po, Sorry to hijack your discussion, but the problem seems to be same for Keystone PCI controller which is also designware (old version) based. On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >>>>> -----Original Message----- >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >>>>> Sent: Thursday, June 02, 2016 11:48 AM >>>>> To: Po Liu >>>>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >>>>> MSI/MSI-X/INTx mode >>>>> >>>>> [+cc Rob] >>>>> >>>>> Hi Po, >>>>> >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >>>>> >>>>> My understanding is that AER interrupt signaling can be done via INTx, >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx >>>>> either? How is the interrupt you're requesting here different from INTx? >>>> >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices >>>> or root error in RC mode. But use an independent SPI interrupt(arm >>>> interrupt controller) line. >>> >>> The Root Port is a PCI device and should follow the normal PCI rules >>> for interrupts. As far as I understand, that means it should use MSI, >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. >>> That's all from the PCI point of view, of course. >> >> I am faced with the same issue on Keystone PCI hardware and it has been >> on my TODO list for quite some time. Keystone PCI hardware also doesn't >> use MSI or MSI-X or INTx for reporting errors received at the root port, >> but use a platform interrupt instead (not complaint to PCI standard as >> per PCI base spec). So I would need similar change to have the error >> interrupt passed to the aer driver. So there are hardware out there >> like Keystone which requires to support this through platform IRQ. > > This is not a new area of the spec, and it's hard for me to believe > that these two new PCIe controllers are both broken the same way > (although I guess both are DesignWare-based, so maybe this is the same > underlying problem in both cases?). I think it's more likely that we > just haven't figured out the right way to describe this in the DT. Keystone is using an older version of the designware IP and it implements all of the interrupts in the application register space unlike other newer version of the hardware. So I assume, the version used on Layerscape is also an older version and the both have same issue in terms of non standard platform interrupt used for error reporting. > > I assume you have a Root Port with an AER capability, no MSI > capability, and no MSI-X capability, right? Has AER capability and both MSI and INTx (legacy) capability > What does its Interrupt > Pin register contain? If it's zero, it doesn't use INTx either, so > according to the spec it should generate no interrupts. > At address offset 0x3C by default has a value of 1, but it is writable by software. So default is INTx A. > But if Interrupt Pin is non-zero, that means the Root Port should be > able to generate virtual INTx interrupts. Presumably the Root Complex > connects those interrupts to something; maybe to your platform > interrupt? Probably that is what is happening. Both Power management and Error interrupts are raised on platform interrupt lines. 12 Error Interrupts [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error (RC mode only) 13 Power management and reset event interrupts [0] Power management turn-off message interrupt (EP mode only) [1] Power management ack message interrupt (RC mode only) [2] Power management event interrupt (RC mode only) [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > PCI doesn't say anything about an interrupt after it leaves the Root > Complex, so the fact that it's connected to a "platform interrupt" or > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > Shouldn't we be able to use the interrupt-map and related DT > properties to express the fact that Root Port virtual INTx is routed > to platform interrupt Y, even without any special-case code in > portdrv? My understanding is if RC also raise interrupt on INTx, then below map make sense, where either EP or RC can raise interrupt and the line will be muxed for interrupt from EP or RC port. Here is the DT entry in PCIE keystone for Legacy interrupt mapping to host interrupt. #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ <0 0 0 2 &pcie_intc0 1>, /* INT B */ <0 0 0 3 &pcie_intc0 2>, /* INT C */ <0 0 0 4 &pcie_intc0 3>; /* INT D */ And then pcie_intc0: legacy-interrupt-controller { interrupt-controller; #interrupt-cells = <1>; interrupt-parent = <&gic>; interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; }; So if RC interrupt for Power management and Error interrupt is a separate line, how can software describe that using the above interrupt map? Murali > >>> What's on the other end of those interrupts is outside the scope of >>> PCI. An INTx interrupt (either a conventional PCI wire or a PCIe >>> virtual INTx wire) might be connected to an IOAPIC, an ARM SPI, or >>> something else. Drivers should not care about how it is connected, >>> and that's why I don't think this code really fits in portdrv. >>> >>> Maybe your Root Port is non-compliant in some way and maybe we need a >>> quirk or something to work around that hardware defect. But I'm not >>> convinced yet that we have that sort of problem. It seems like we >>> just don't have the correct DT description. >> >> Is quirk is what is suggested here to support this? > > No, I don't understand the problem yet, so I'm not ready to suggest a > solution. > >>>> And at same time, AER capability list >>>> in PCIe register descriptors. And also, The Root Error >>>> Command/status register was proper to enable/disable the AER >>>> interrupt. >>> >>> I'm not sure what you're saying here. Here's what I think you said; >>> please correct me if I'm wrong: >>> >>> - Your Root Port has an AER capability. >>> >>> - Your Root Port does not support MSI or MSI-X. (This would >>> actually be a spec violation because the PCIe spec r3.0, sec 7.7 >>> says "All PCI Express device Functions that are capable of >>> generating interrupts must implement MSI or MSI-X or both.") >>> >>> - The three enable bits in the Root Error Command Register enable or >>> disable generation of interrupts. These enable bits control all >>> interrupts, whether MSI, MSI-X, or INTx. >>> >>> - The Root Error Status Register contains an "Advanced Error >>> Interrupt Message Number" field, but that's only applicable if MSI >>> or MSI-X is enabled, and if your device doesn't support MSI or >>> MSI-X, this field doesn't apply. >>> >>>> This hardware implementation make sense in some platforms, and this >>>> was described in the function init_service_irqs() in the >>>> drivers/pci/pcie/portdrv_core.c in current kernel as: >>> >>>> >>>> 241 * We're not going to use MSI-X, so try MSI and fall back to INTx. >>>> 242 * If neither MSI/MSI-X nor INTx available, try other interrupt. On >>>> 243 * some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode >>>> 244 */ >>>> >>>> So I think this was the proper place to update the irq number before aer service >>>> driver was loaded. >>>> >>>>> >>>>> My guess is that your device *does* support INTx, and we should use that. >>>>> ACPI has the generic _PRT that describes INTx routing. There must be >>>>> something similar for DT, but I don't know what it is. It seems like >>>>> this should be described using that DT mechanism (whatever it is), and >>>>> we shouldn't need special-case code in the portdrv code. >>>>> >>>>> > Signed-off-by: Po Liu <po.liu@nxp.com> >>>>> > --- >>>>> > drivers/pci/pcie/portdrv_core.c | 31 ++++++++++++++++++++++++++++--- >>>>> > 1 file changed, 28 insertions(+), 3 deletions(-) >>>>> > >>>>> > diff --git a/drivers/pci/pcie/portdrv_core.c >>>>> > b/drivers/pci/pcie/portdrv_core.c index 32d4d0a..64833e5 100644 >>>>> > --- a/drivers/pci/pcie/portdrv_core.c >>>>> > +++ b/drivers/pci/pcie/portdrv_core.c >>>>> > @@ -15,6 +15,7 @@ >>>>> > #include <linux/slab.h> >>>>> > #include <linux/pcieport_if.h> >>>>> > #include <linux/aer.h> >>>>> > +#include <linux/of_irq.h> >>>>> > >>>>> > #include "../pci.h" >>>>> > #include "portdrv.h" >>>>> > @@ -199,6 +200,28 @@ static int pcie_port_enable_msix(struct pci_dev >>>>> > *dev, int *vectors, int mask) static int init_service_irqs(struct >>>>> > pci_dev *dev, int *irqs, int mask) { >>>>> > int i, irq = -1; >>>>> > + int ret; >>>>> > + struct device_node *np = NULL; >>>>> > + >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > + irqs[i] = 0; >>>>> > + >>>>> > + if (dev->bus->dev.of_node) >>>>> > + np = dev->bus->dev.of_node; >>>>> > + >>>>> > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, >>>>> > + * request irq for aer >>>>> > + */ >>>>> > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && >>>>> > + (mask & PCIE_PORT_SERVICE_PME)) { >>>>> > + ret = of_irq_get_byname(np, "aer"); >>>>> > + if (ret > 0) { >>>>> > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; >>>>> > + if (dev->irq) >>>>> > + irq = dev->irq; >>>>> > + goto no_msi; >>>>> > + } >>>>> > + } >>>>> > >>>>> > /* >>>>> > * If MSI cannot be used for PCIe PME or hotplug, we have to use >>>>> @@ >>>>> > -224,11 +247,13 @@ static int init_service_irqs(struct pci_dev *dev, >>>>> int *irqs, int mask) >>>>> > irq = dev->irq; >>>>> > >>>>> > no_msi: >>>>> > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) >>>>> > - irqs[i] = irq; >>>>> > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { >>>>> > + if (!irqs[i]) >>>>> > + irqs[i] = irq; >>>>> > + } >>>>> > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; >>>>> > >>>>> > - if (irq < 0) >>>>> > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) >>>>> > return -ENODEV; >>>>> > return 0; >>>>> > } >>>>> > -- >>>>> > 2.1.0.27.g96db324 >>>>> > >>>>> > >>>>> > _______________________________________________ >>>>> > linux-arm-kernel mailing list >>>>> > linux-arm-kernel@lists.infradead.org >>>>> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>> -- >>> 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 >>> >> >> >> -- >> Murali Karicheri >> Linux Kernel, Keystone -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-03 17:31 ` Murali Karicheri (?) @ 2016-06-04 3:48 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-04 3:48 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > Po, > > Sorry to hijack your discussion, but the problem seems to be same for > Keystone PCI controller which is also designware (old version) based. > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>>>> MSI/MSI-X/INTx mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>>>> > >>>>> My understanding is that AER interrupt signaling can be done via INTx, > >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>>>> either? How is the interrupt you're requesting here different from INTx? > >>>> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >>>> or root error in RC mode. But use an independent SPI interrupt(arm > >>>> interrupt controller) line. > >>> > >>> The Root Port is a PCI device and should follow the normal PCI rules > >>> for interrupts. As far as I understand, that means it should use MSI, > >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > >>> That's all from the PCI point of view, of course. > >> > >> I am faced with the same issue on Keystone PCI hardware and it has been > >> on my TODO list for quite some time. Keystone PCI hardware also doesn't > >> use MSI or MSI-X or INTx for reporting errors received at the root port, > >> but use a platform interrupt instead (not complaint to PCI standard as > >> per PCI base spec). So I would need similar change to have the error > >> interrupt passed to the aer driver. So there are hardware out there > >> like Keystone which requires to support this through platform IRQ. > > > > This is not a new area of the spec, and it's hard for me to believe > > that these two new PCIe controllers are both broken the same way > > (although I guess both are DesignWare-based, so maybe this is the same > > underlying problem in both cases?). I think it's more likely that we > > just haven't figured out the right way to describe this in the DT. > > Keystone is using an older version of the designware IP and it implements > all of the interrupts in the application register space unlike other > newer version of the hardware. So I assume, the version used on Layerscape > is also an older version and the both have same issue in terms of > non standard platform interrupt used for error reporting. > > > I assume you have a Root Port with an AER capability, no MSI > > capability, and no MSI-X capability, right? > > Has AER capability and both MSI and INTx (legacy) capability > > > What does its Interrupt > > Pin register contain? If it's zero, it doesn't use INTx either, so > > according to the spec it should generate no interrupts. > > > At address offset 0x3C by default has a value of 1, but it is writable > by software. So default is INTx A. 0x3c is the Interrupt *Line*, which is read/write. The Interrupt *Pin* is at 0x3d and should be read-only. Does your Keystone driver support MSI? If so, since your Root Port supports MSI, I would think we would use that by default, and the INTx stuff wouldn't even matter. > > But if Interrupt Pin is non-zero, that means the Root Port should be > > able to generate virtual INTx interrupts. Presumably the Root Complex > > connects those interrupts to something; maybe to your platform > > interrupt? > > Probably that is what is happening. Both Power management and Error > interrupts are raised on platform interrupt lines. > > 12 Error Interrupts > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) > [1] PCIe fatal error (RC mode only) > [2] PCIe non-fatal error (RC mode only) > [3] PCIe correctable error (RC mode only) > [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) > [5] PCIe advanced error (RC mode only) > > 13 Power management and reset event interrupts > > [0] Power management turn-off message interrupt (EP mode only) > [1] Power management ack message interrupt (RC mode only) > [2] Power management event interrupt (RC mode only) > [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > > PCI doesn't say anything about an interrupt after it leaves the Root > > Complex, so the fact that it's connected to a "platform interrupt" or > > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > > Shouldn't we be able to use the interrupt-map and related DT > > properties to express the fact that Root Port virtual INTx is routed > > to platform interrupt Y, even without any special-case code in > > portdrv? > > My understanding is if RC also raise interrupt on INTx, then below > map make sense, where either EP or RC can raise interrupt and the > line will be muxed for interrupt from EP or RC port. I'm sorry, I didn't quite catch your meaning here, so let me try to clarify some terminology. Maybe we'll eventually blunder into a common understanding :) INTx is a PCI concept and only means something in the PCI hierarchy. The RC would *receive* virtual INTx interrupts from the PCI hierarchy and turn them into some platform-specific interrupt (not INTx) on the upstream side. So strictly speaking, the RC might raise platform-specific interrupts when it receives INTx interrupts, but it would not raise any INTx interrupts itself. > Here is the DT entry in PCIE keystone for Legacy interrupt mapping > to host interrupt. > #interrupt-cells = <1>; > interrupt-map-mask = <0 0 0 7>; > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ > <0 0 0 2 &pcie_intc0 1>, /* INT B */ > <0 0 0 3 &pcie_intc0 2>, /* INT C */ > <0 0 0 4 &pcie_intc0 3>; /* INT D */ If I understand correctly, this is the mapping from the PCI world (INTA, INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) If a Root Port raises a virtual INTA, the RC should turn it into the corresponding platform interrupt, i.e., GIC_SPI 48 from the description below. > And then > > pcie_intc0: legacy-interrupt-controller { > interrupt-controller; > #interrupt-cells = <1>; > interrupt-parent = <&gic>; > interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; > }; > > So if RC interrupt for Power management and Error interrupt is a separate > line, how can software describe that using the above interrupt map? I don't know anything about interrupts the RC might generate on its own behalf. A lot of the RC behavior is not specified by the PCIe spec because the RC is on the border between the upstream platform-specific stuff and the downstream PCIe stuff. Is there something in the PCIe spec about the power management and error interrupts you're talking about? Of maybe you can point me to a section of the Keystone spec that talks about interrupts generated by the RC? In any event, the AER interrupts we're looking for in portdrv are from the Root Port, not from the RC. For INTx, my understanding is that the RC *transforms* virtual INTx messages from the Root Port in the PCIe domain into GIC transactions in the platform domain. Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-04 3:48 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-04 3:48 UTC (permalink / raw) To: linux-arm-kernel On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > Po, > > Sorry to hijack your discussion, but the problem seems to be same for > Keystone PCI controller which is also designware (old version) based. > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd Bergmann; > >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>>>> MSI/MSI-X/INTx mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>>>> > >>>>> My understanding is that AER interrupt signaling can be done via INTx, > >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>>>> either? How is the interrupt you're requesting here different from INTx? > >>>> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >>>> or root error in RC mode. But use an independent SPI interrupt(arm > >>>> interrupt controller) line. > >>> > >>> The Root Port is a PCI device and should follow the normal PCI rules > >>> for interrupts. As far as I understand, that means it should use MSI, > >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > >>> That's all from the PCI point of view, of course. > >> > >> I am faced with the same issue on Keystone PCI hardware and it has been > >> on my TODO list for quite some time. Keystone PCI hardware also doesn't > >> use MSI or MSI-X or INTx for reporting errors received at the root port, > >> but use a platform interrupt instead (not complaint to PCI standard as > >> per PCI base spec). So I would need similar change to have the error > >> interrupt passed to the aer driver. So there are hardware out there > >> like Keystone which requires to support this through platform IRQ. > > > > This is not a new area of the spec, and it's hard for me to believe > > that these two new PCIe controllers are both broken the same way > > (although I guess both are DesignWare-based, so maybe this is the same > > underlying problem in both cases?). I think it's more likely that we > > just haven't figured out the right way to describe this in the DT. > > Keystone is using an older version of the designware IP and it implements > all of the interrupts in the application register space unlike other > newer version of the hardware. So I assume, the version used on Layerscape > is also an older version and the both have same issue in terms of > non standard platform interrupt used for error reporting. > > > I assume you have a Root Port with an AER capability, no MSI > > capability, and no MSI-X capability, right? > > Has AER capability and both MSI and INTx (legacy) capability > > > What does its Interrupt > > Pin register contain? If it's zero, it doesn't use INTx either, so > > according to the spec it should generate no interrupts. > > > At address offset 0x3C by default has a value of 1, but it is writable > by software. So default is INTx A. 0x3c is the Interrupt *Line*, which is read/write. The Interrupt *Pin* is at 0x3d and should be read-only. Does your Keystone driver support MSI? If so, since your Root Port supports MSI, I would think we would use that by default, and the INTx stuff wouldn't even matter. > > But if Interrupt Pin is non-zero, that means the Root Port should be > > able to generate virtual INTx interrupts. Presumably the Root Complex > > connects those interrupts to something; maybe to your platform > > interrupt? > > Probably that is what is happening. Both Power management and Error > interrupts are raised on platform interrupt lines. > > 12 Error Interrupts > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) > [1] PCIe fatal error (RC mode only) > [2] PCIe non-fatal error (RC mode only) > [3] PCIe correctable error (RC mode only) > [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) > [5] PCIe advanced error (RC mode only) > > 13 Power management and reset event interrupts > > [0] Power management turn-off message interrupt (EP mode only) > [1] Power management ack message interrupt (RC mode only) > [2] Power management event interrupt (RC mode only) > [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > > PCI doesn't say anything about an interrupt after it leaves the Root > > Complex, so the fact that it's connected to a "platform interrupt" or > > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > > Shouldn't we be able to use the interrupt-map and related DT > > properties to express the fact that Root Port virtual INTx is routed > > to platform interrupt Y, even without any special-case code in > > portdrv? > > My understanding is if RC also raise interrupt on INTx, then below > map make sense, where either EP or RC can raise interrupt and the > line will be muxed for interrupt from EP or RC port. I'm sorry, I didn't quite catch your meaning here, so let me try to clarify some terminology. Maybe we'll eventually blunder into a common understanding :) INTx is a PCI concept and only means something in the PCI hierarchy. The RC would *receive* virtual INTx interrupts from the PCI hierarchy and turn them into some platform-specific interrupt (not INTx) on the upstream side. So strictly speaking, the RC might raise platform-specific interrupts when it receives INTx interrupts, but it would not raise any INTx interrupts itself. > Here is the DT entry in PCIE keystone for Legacy interrupt mapping > to host interrupt. > #interrupt-cells = <1>; > interrupt-map-mask = <0 0 0 7>; > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ > <0 0 0 2 &pcie_intc0 1>, /* INT B */ > <0 0 0 3 &pcie_intc0 2>, /* INT C */ > <0 0 0 4 &pcie_intc0 3>; /* INT D */ If I understand correctly, this is the mapping from the PCI world (INTA, INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) If a Root Port raises a virtual INTA, the RC should turn it into the corresponding platform interrupt, i.e., GIC_SPI 48 from the description below. > And then > > pcie_intc0: legacy-interrupt-controller { > interrupt-controller; > #interrupt-cells = <1>; > interrupt-parent = <&gic>; > interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; > }; > > So if RC interrupt for Power management and Error interrupt is a separate > line, how can software describe that using the above interrupt map? I don't know anything about interrupts the RC might generate on its own behalf. A lot of the RC behavior is not specified by the PCIe spec because the RC is on the border between the upstream platform-specific stuff and the downstream PCIe stuff. Is there something in the PCIe spec about the power management and error interrupts you're talking about? Of maybe you can point me to a section of the Keystone spec that talks about interrupts generated by the RC? In any event, the AER interrupts we're looking for in portdrv are from the Root Port, not from the RC. For INTx, my understanding is that the RC *transforms* virtual INTx messages from the Root Port in the PCIe domain into GIC transactions in the platform domain. Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-04 3:48 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-04 3:48 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > Po, > > Sorry to hijack your discussion, but the problem seems to be same for > Keystone PCI controller which is also designware (old version) based. > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd Bergmann; > >>>>> Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn > >>>>> Helgaas; Shawn Guo; Mingkai Hu; Rob Herring > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >>>>> MSI/MSI-X/INTx mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >>>>> > >>>>> My understanding is that AER interrupt signaling can be done via INTx, > >>>>> MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). Apparently your device > >>>>> doesn't support MSI or MSI-X. Are you saying it doesn't support INTx > >>>>> either? How is the interrupt you're requesting here different from INTx? > >>>> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the devices > >>>> or root error in RC mode. But use an independent SPI interrupt(arm > >>>> interrupt controller) line. > >>> > >>> The Root Port is a PCI device and should follow the normal PCI rules > >>> for interrupts. As far as I understand, that means it should use MSI, > >>> MSI-X, or INTx. If your Root Port doesn't use MSI or MSI-X, it should > >>> use INTx, the PCI_INTERRUPT_PIN register should tell us which (INTA/ > >>> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > >>> That's all from the PCI point of view, of course. > >> > >> I am faced with the same issue on Keystone PCI hardware and it has been > >> on my TODO list for quite some time. Keystone PCI hardware also doesn't > >> use MSI or MSI-X or INTx for reporting errors received at the root port, > >> but use a platform interrupt instead (not complaint to PCI standard as > >> per PCI base spec). So I would need similar change to have the error > >> interrupt passed to the aer driver. So there are hardware out there > >> like Keystone which requires to support this through platform IRQ. > > > > This is not a new area of the spec, and it's hard for me to believe > > that these two new PCIe controllers are both broken the same way > > (although I guess both are DesignWare-based, so maybe this is the same > > underlying problem in both cases?). I think it's more likely that we > > just haven't figured out the right way to describe this in the DT. > > Keystone is using an older version of the designware IP and it implements > all of the interrupts in the application register space unlike other > newer version of the hardware. So I assume, the version used on Layerscape > is also an older version and the both have same issue in terms of > non standard platform interrupt used for error reporting. > > > I assume you have a Root Port with an AER capability, no MSI > > capability, and no MSI-X capability, right? > > Has AER capability and both MSI and INTx (legacy) capability > > > What does its Interrupt > > Pin register contain? If it's zero, it doesn't use INTx either, so > > according to the spec it should generate no interrupts. > > > At address offset 0x3C by default has a value of 1, but it is writable > by software. So default is INTx A. 0x3c is the Interrupt *Line*, which is read/write. The Interrupt *Pin* is at 0x3d and should be read-only. Does your Keystone driver support MSI? If so, since your Root Port supports MSI, I would think we would use that by default, and the INTx stuff wouldn't even matter. > > But if Interrupt Pin is non-zero, that means the Root Port should be > > able to generate virtual INTx interrupts. Presumably the Root Complex > > connects those interrupts to something; maybe to your platform > > interrupt? > > Probably that is what is happening. Both Power management and Error > interrupts are raised on platform interrupt lines. > > 12 Error Interrupts > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode only) > [1] PCIe fatal error (RC mode only) > [2] PCIe non-fatal error (RC mode only) > [3] PCIe correctable error (RC mode only) > [4] AXI Error due to fatal condition in AXI bridge (EP/RC modes) > [5] PCIe advanced error (RC mode only) > > 13 Power management and reset event interrupts > > [0] Power management turn-off message interrupt (EP mode only) > [1] Power management ack message interrupt (RC mode only) > [2] Power management event interrupt (RC mode only) > [3] Link request reset interrupt (hot reset or link down) (RC mode only) > > > PCI doesn't say anything about an interrupt after it leaves the Root > > Complex, so the fact that it's connected to a "platform interrupt" or > > "SPI interrupt" or "IOAPIC interrupt" doesn't make it non-compliant. > > Shouldn't we be able to use the interrupt-map and related DT > > properties to express the fact that Root Port virtual INTx is routed > > to platform interrupt Y, even without any special-case code in > > portdrv? > > My understanding is if RC also raise interrupt on INTx, then below > map make sense, where either EP or RC can raise interrupt and the > line will be muxed for interrupt from EP or RC port. I'm sorry, I didn't quite catch your meaning here, so let me try to clarify some terminology. Maybe we'll eventually blunder into a common understanding :) INTx is a PCI concept and only means something in the PCI hierarchy. The RC would *receive* virtual INTx interrupts from the PCI hierarchy and turn them into some platform-specific interrupt (not INTx) on the upstream side. So strictly speaking, the RC might raise platform-specific interrupts when it receives INTx interrupts, but it would not raise any INTx interrupts itself. > Here is the DT entry in PCIE keystone for Legacy interrupt mapping > to host interrupt. > #interrupt-cells = <1>; > interrupt-map-mask = <0 0 0 7>; > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* INT A */ > <0 0 0 2 &pcie_intc0 1>, /* INT B */ > <0 0 0 3 &pcie_intc0 2>, /* INT C */ > <0 0 0 4 &pcie_intc0 3>; /* INT D */ If I understand correctly, this is the mapping from the PCI world (INTA, INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) If a Root Port raises a virtual INTA, the RC should turn it into the corresponding platform interrupt, i.e., GIC_SPI 48 from the description below. > And then > > pcie_intc0: legacy-interrupt-controller { > interrupt-controller; > #interrupt-cells = <1>; > interrupt-parent = <&gic>; > interrupts = <GIC_SPI 48 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 49 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 50 IRQ_TYPE_EDGE_RISING>, > <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>; > }; > > So if RC interrupt for Power management and Error interrupt is a separate > line, how can software describe that using the above interrupt map? I don't know anything about interrupts the RC might generate on its own behalf. A lot of the RC behavior is not specified by the PCIe spec because the RC is on the border between the upstream platform-specific stuff and the downstream PCIe stuff. Is there something in the PCIe spec about the power management and error interrupts you're talking about? Of maybe you can point me to a section of the Keystone spec that talks about interrupts generated by the RC? In any event, the AER interrupts we're looking for in portdrv are from the Root Port, not from the RC. For INTx, my understanding is that the RC *transforms* virtual INTx messages from the Root Port in the PCIe domain into GIC transactions in the platform domain. Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-04 3:48 ` Bjorn Helgaas (?) (?) @ 2016-06-06 7:32 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-06 7:32 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Hi Bjorn, I confirm we met same problem with KeyStone base on DesignWare design. Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, June 04, 2016 11:49 AM > To: Murali Karicheri > Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > Po, > > > > Sorry to hijack your discussion, but the problem seems to be same for > > Keystone PCI controller which is also designware (old version) based. > > > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >>>>> -----Original Message----- > > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > > >>>>> To: Po Liu > > >>>>> Cc: linux-pci@vger.kernel.org; > > >>>>> linux-arm-kernel@lists.infradead.org; > > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd > > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > > >>>>> Herring > > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > > >>>>> none MSI/MSI-X/INTx mode > > >>>>> > > >>>>> [+cc Rob] > > >>>>> > > >>>>> Hi Po, > > >>>>> > > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >>>>> > > >>>>> My understanding is that AER interrupt signaling can be done > > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > > >>>>> saying it doesn't support INTx either? How is the interrupt > you're requesting here different from INTx? > > >>>> > > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >>>> devices or root error in RC mode. But use an independent SPI > > >>>> interrupt(arm interrupt controller) line. > > >>> > > >>> The Root Port is a PCI device and should follow the normal PCI > > >>> rules for interrupts. As far as I understand, that means it > > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > > >>> should tell us which (INTA/ INTB/etc.), and > PCI_COMMAND_INTX_DISABLE should work to disable it. > > >>> That's all from the PCI point of view, of course. > > >> > > >> I am faced with the same issue on Keystone PCI hardware and it has > > >> been on my TODO list for quite some time. Keystone PCI hardware > > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > > >> at the root port, but use a platform interrupt instead (not > > >> complaint to PCI standard as per PCI base spec). So I would need > > >> similar change to have the error interrupt passed to the aer > > >> driver. So there are hardware out there like Keystone which > requires to support this through platform IRQ. > > > > > > This is not a new area of the spec, and it's hard for me to believe > > > that these two new PCIe controllers are both broken the same way > > > (although I guess both are DesignWare-based, so maybe this is the > > > same underlying problem in both cases?). I think it's more likely > > > that we just haven't figured out the right way to describe this in > the DT. > > > > Keystone is using an older version of the designware IP and it > > implements all of the interrupts in the application register space > > unlike other newer version of the hardware. So I assume, the version > > used on Layerscape is also an older version and the both have same > > issue in terms of non standard platform interrupt used for error > reporting. > > > > > I assume you have a Root Port with an AER capability, no MSI > > > capability, and no MSI-X capability, right? > > > > Has AER capability and both MSI and INTx (legacy) capability > > > > > What does its Interrupt > > > Pin register contain? If it's zero, it doesn't use INTx either, so > > > according to the spec it should generate no interrupts. > > > > > At address offset 0x3C by default has a value of 1, but it is writable > > by software. So default is INTx A. > > 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > *Pin* is at 0x3d and should be read-only. > > Does your Keystone driver support MSI? If so, since your Root Port > supports MSI, I would think we would use that by default, and the INTx > stuff wouldn't even matter. Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." But both of them not work for AER interrupt when devices or root port report aer error. But another GIC interrupt line do. > > > > But if Interrupt Pin is non-zero, that means the Root Port should be > > > able to generate virtual INTx interrupts. Presumably the Root > > > Complex connects those interrupts to something; maybe to your > > > platform interrupt? > > > > Probably that is what is happening. Both Power management and Error > > interrupts are raised on platform interrupt lines. > > > > 12 Error Interrupts > > > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode > > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC > > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due > > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error > > (RC mode only) > > > > 13 Power management and reset event interrupts > > > > [0] Power management turn-off message interrupt (EP mode only) [1] > > Power management ack message interrupt (RC mode only) [2] Power > > management event interrupt (RC mode only) [3] Link request reset > > interrupt (hot reset or link down) (RC mode only) > > > > > PCI doesn't say anything about an interrupt after it leaves the Root > > > Complex, so the fact that it's connected to a "platform interrupt" > > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- > compliant. > > > Shouldn't we be able to use the interrupt-map and related DT > > > properties to express the fact that Root Port virtual INTx is routed > > > to platform interrupt Y, even without any special-case code in > > > portdrv? > > > > My understanding is if RC also raise interrupt on INTx, then below map > > make sense, where either EP or RC can raise interrupt and the line > > will be muxed for interrupt from EP or RC port. > > I'm sorry, I didn't quite catch your meaning here, so let me try to > clarify some terminology. Maybe we'll eventually blunder into a common > understanding :) > > INTx is a PCI concept and only means something in the PCI hierarchy. > The RC would *receive* virtual INTx interrupts from the PCI hierarchy > and turn them into some platform-specific interrupt (not INTx) on the > upstream side. > > So strictly speaking, the RC might raise platform-specific interrupts > when it receives INTx interrupts, but it would not raise any INTx > interrupts itself. > > > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to > > host interrupt. > > #interrupt-cells = <1>; > > interrupt-map-mask = <0 0 0 7>; > > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* > INT A */ > > <0 0 0 2 &pcie_intc0 1>, /* > INT B */ > > <0 0 0 3 &pcie_intc0 2>, /* > INT C */ > > <0 0 0 4 &pcie_intc0 3>; /* > > INT D */ > > If I understand correctly, this is the mapping from the PCI world (INTA, > INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) > > If a Root Port raises a virtual INTA, the RC should turn it into the > corresponding platform interrupt, i.e., GIC_SPI 48 from the description > below. > > > And then > > > > pcie_intc0: legacy-interrupt-controller { > > interrupt-controller; > > #interrupt-cells = <1>; > > interrupt-parent = <&gic>; > > interrupts = <GIC_SPI 48 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 49 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 50 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 51 > IRQ_TYPE_EDGE_RISING>; > > }; > > > > So if RC interrupt for Power management and Error interrupt is a > > separate line, how can software describe that using the above > interrupt map? > > I don't know anything about interrupts the RC might generate on its own > behalf. A lot of the RC behavior is not specified by the PCIe spec > because the RC is on the border between the upstream platform-specific > stuff and the downstream PCIe stuff. Is there something in the PCIe > spec about the power management and error interrupts you're talking > about? Of maybe you can point me to a section of the Keystone spec that > talks about interrupts generated by the RC? Below is one of the PCIE controller interrupts list: 142 PEX1 INTA 143 PEX1 INTB 144 PEX1 INTC 145 PEX1 INTD 146-147 Reserved 148 PEX1 MSI 149 PEX1 PME 150 PEX1 CFG err interrupt Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > In any event, the AER interrupts we're looking for in portdrv are from > the Root Port, not from the RC. For INTx, my understanding is that the > RC *transforms* virtual INTx messages from the Root Port in the PCIe > domain into GIC transactions in the platform domain. > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 7:32 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-06 7:32 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, I confirm we met same problem with KeyStone base on DesignWare design. Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Saturday, June 04, 2016 11:49 AM > To: Murali Karicheri > Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > Po, > > > > Sorry to hijack your discussion, but the problem seems to be same for > > Keystone PCI controller which is also designware (old version) based. > > > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >>>>> -----Original Message----- > > >>>>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > > >>>>> To: Po Liu > > >>>>> Cc: linux-pci at vger.kernel.org; > > >>>>> linux-arm-kernel at lists.infradead.org; > > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd > > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > > >>>>> Herring > > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > > >>>>> none MSI/MSI-X/INTx mode > > >>>>> > > >>>>> [+cc Rob] > > >>>>> > > >>>>> Hi Po, > > >>>>> > > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >>>>> > > >>>>> My understanding is that AER interrupt signaling can be done > > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > > >>>>> saying it doesn't support INTx either? How is the interrupt > you're requesting here different from INTx? > > >>>> > > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >>>> devices or root error in RC mode. But use an independent SPI > > >>>> interrupt(arm interrupt controller) line. > > >>> > > >>> The Root Port is a PCI device and should follow the normal PCI > > >>> rules for interrupts. As far as I understand, that means it > > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > > >>> should tell us which (INTA/ INTB/etc.), and > PCI_COMMAND_INTX_DISABLE should work to disable it. > > >>> That's all from the PCI point of view, of course. > > >> > > >> I am faced with the same issue on Keystone PCI hardware and it has > > >> been on my TODO list for quite some time. Keystone PCI hardware > > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > > >> at the root port, but use a platform interrupt instead (not > > >> complaint to PCI standard as per PCI base spec). So I would need > > >> similar change to have the error interrupt passed to the aer > > >> driver. So there are hardware out there like Keystone which > requires to support this through platform IRQ. > > > > > > This is not a new area of the spec, and it's hard for me to believe > > > that these two new PCIe controllers are both broken the same way > > > (although I guess both are DesignWare-based, so maybe this is the > > > same underlying problem in both cases?). I think it's more likely > > > that we just haven't figured out the right way to describe this in > the DT. > > > > Keystone is using an older version of the designware IP and it > > implements all of the interrupts in the application register space > > unlike other newer version of the hardware. So I assume, the version > > used on Layerscape is also an older version and the both have same > > issue in terms of non standard platform interrupt used for error > reporting. > > > > > I assume you have a Root Port with an AER capability, no MSI > > > capability, and no MSI-X capability, right? > > > > Has AER capability and both MSI and INTx (legacy) capability > > > > > What does its Interrupt > > > Pin register contain? If it's zero, it doesn't use INTx either, so > > > according to the spec it should generate no interrupts. > > > > > At address offset 0x3C by default has a value of 1, but it is writable > > by software. So default is INTx A. > > 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > *Pin* is at 0x3d and should be read-only. > > Does your Keystone driver support MSI? If so, since your Root Port > supports MSI, I would think we would use that by default, and the INTx > stuff wouldn't even matter. Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." But both of them not work for AER interrupt when devices or root port report aer error. But another GIC interrupt line do. > > > > But if Interrupt Pin is non-zero, that means the Root Port should be > > > able to generate virtual INTx interrupts. Presumably the Root > > > Complex connects those interrupts to something; maybe to your > > > platform interrupt? > > > > Probably that is what is happening. Both Power management and Error > > interrupts are raised on platform interrupt lines. > > > > 12 Error Interrupts > > > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode > > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC > > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due > > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error > > (RC mode only) > > > > 13 Power management and reset event interrupts > > > > [0] Power management turn-off message interrupt (EP mode only) [1] > > Power management ack message interrupt (RC mode only) [2] Power > > management event interrupt (RC mode only) [3] Link request reset > > interrupt (hot reset or link down) (RC mode only) > > > > > PCI doesn't say anything about an interrupt after it leaves the Root > > > Complex, so the fact that it's connected to a "platform interrupt" > > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- > compliant. > > > Shouldn't we be able to use the interrupt-map and related DT > > > properties to express the fact that Root Port virtual INTx is routed > > > to platform interrupt Y, even without any special-case code in > > > portdrv? > > > > My understanding is if RC also raise interrupt on INTx, then below map > > make sense, where either EP or RC can raise interrupt and the line > > will be muxed for interrupt from EP or RC port. > > I'm sorry, I didn't quite catch your meaning here, so let me try to > clarify some terminology. Maybe we'll eventually blunder into a common > understanding :) > > INTx is a PCI concept and only means something in the PCI hierarchy. > The RC would *receive* virtual INTx interrupts from the PCI hierarchy > and turn them into some platform-specific interrupt (not INTx) on the > upstream side. > > So strictly speaking, the RC might raise platform-specific interrupts > when it receives INTx interrupts, but it would not raise any INTx > interrupts itself. > > > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to > > host interrupt. > > #interrupt-cells = <1>; > > interrupt-map-mask = <0 0 0 7>; > > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* > INT A */ > > <0 0 0 2 &pcie_intc0 1>, /* > INT B */ > > <0 0 0 3 &pcie_intc0 2>, /* > INT C */ > > <0 0 0 4 &pcie_intc0 3>; /* > > INT D */ > > If I understand correctly, this is the mapping from the PCI world (INTA, > INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) > > If a Root Port raises a virtual INTA, the RC should turn it into the > corresponding platform interrupt, i.e., GIC_SPI 48 from the description > below. > > > And then > > > > pcie_intc0: legacy-interrupt-controller { > > interrupt-controller; > > #interrupt-cells = <1>; > > interrupt-parent = <&gic>; > > interrupts = <GIC_SPI 48 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 49 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 50 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 51 > IRQ_TYPE_EDGE_RISING>; > > }; > > > > So if RC interrupt for Power management and Error interrupt is a > > separate line, how can software describe that using the above > interrupt map? > > I don't know anything about interrupts the RC might generate on its own > behalf. A lot of the RC behavior is not specified by the PCIe spec > because the RC is on the border between the upstream platform-specific > stuff and the downstream PCIe stuff. Is there something in the PCIe > spec about the power management and error interrupts you're talking > about? Of maybe you can point me to a section of the Keystone spec that > talks about interrupts generated by the RC? Below is one of the PCIE controller interrupts list: 142 PEX1 INTA 143 PEX1 INTB 144 PEX1 INTC 145 PEX1 INTD 146-147 Reserved 148 PEX1 MSI 149 PEX1 PME 150 PEX1 CFG err interrupt Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > In any event, the AER interrupts we're looking for in portdrv are from > the Root Port, not from the RC. For INTx, my understanding is that the > RC *transforms* virtual INTx messages from the Root Port in the PCIe > domain into GIC transactions in the platform domain. > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 7:32 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-06 7:32 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, I confirm we met same problem with KeyStone base on DesignWare design. Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, June 04, 2016 11:49 AM > To: Murali Karicheri > Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > Po, > > > > Sorry to hijack your discussion, but the problem seems to be same for > > Keystone PCI controller which is also designware (old version) based. > > > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >>>>> -----Original Message----- > > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > > >>>>> To: Po Liu > > >>>>> Cc: linux-pci@vger.kernel.org; > > >>>>> linux-arm-kernel@lists.infradead.org; > > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd > > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > > >>>>> Herring > > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > > >>>>> none MSI/MSI-X/INTx mode > > >>>>> > > >>>>> [+cc Rob] > > >>>>> > > >>>>> Hi Po, > > >>>>> > > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >>>>> > > >>>>> My understanding is that AER interrupt signaling can be done > > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > > >>>>> saying it doesn't support INTx either? How is the interrupt > you're requesting here different from INTx? > > >>>> > > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >>>> devices or root error in RC mode. But use an independent SPI > > >>>> interrupt(arm interrupt controller) line. > > >>> > > >>> The Root Port is a PCI device and should follow the normal PCI > > >>> rules for interrupts. As far as I understand, that means it > > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > > >>> should tell us which (INTA/ INTB/etc.), and > PCI_COMMAND_INTX_DISABLE should work to disable it. > > >>> That's all from the PCI point of view, of course. > > >> > > >> I am faced with the same issue on Keystone PCI hardware and it has > > >> been on my TODO list for quite some time. Keystone PCI hardware > > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > > >> at the root port, but use a platform interrupt instead (not > > >> complaint to PCI standard as per PCI base spec). So I would need > > >> similar change to have the error interrupt passed to the aer > > >> driver. So there are hardware out there like Keystone which > requires to support this through platform IRQ. > > > > > > This is not a new area of the spec, and it's hard for me to believe > > > that these two new PCIe controllers are both broken the same way > > > (although I guess both are DesignWare-based, so maybe this is the > > > same underlying problem in both cases?). I think it's more likely > > > that we just haven't figured out the right way to describe this in > the DT. > > > > Keystone is using an older version of the designware IP and it > > implements all of the interrupts in the application register space > > unlike other newer version of the hardware. So I assume, the version > > used on Layerscape is also an older version and the both have same > > issue in terms of non standard platform interrupt used for error > reporting. > > > > > I assume you have a Root Port with an AER capability, no MSI > > > capability, and no MSI-X capability, right? > > > > Has AER capability and both MSI and INTx (legacy) capability > > > > > What does its Interrupt > > > Pin register contain? If it's zero, it doesn't use INTx either, so > > > according to the spec it should generate no interrupts. > > > > > At address offset 0x3C by default has a value of 1, but it is writable > > by software. So default is INTx A. > > 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > *Pin* is at 0x3d and should be read-only. > > Does your Keystone driver support MSI? If so, since your Root Port > supports MSI, I would think we would use that by default, and the INTx > stuff wouldn't even matter. Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." But both of them not work for AER interrupt when devices or root port report aer error. But another GIC interrupt line do. > > > > But if Interrupt Pin is non-zero, that means the Root Port should be > > > able to generate virtual INTx interrupts. Presumably the Root > > > Complex connects those interrupts to something; maybe to your > > > platform interrupt? > > > > Probably that is what is happening. Both Power management and Error > > interrupts are raised on platform interrupt lines. > > > > 12 Error Interrupts > > > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode > > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC > > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due > > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error > > (RC mode only) > > > > 13 Power management and reset event interrupts > > > > [0] Power management turn-off message interrupt (EP mode only) [1] > > Power management ack message interrupt (RC mode only) [2] Power > > management event interrupt (RC mode only) [3] Link request reset > > interrupt (hot reset or link down) (RC mode only) > > > > > PCI doesn't say anything about an interrupt after it leaves the Root > > > Complex, so the fact that it's connected to a "platform interrupt" > > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- > compliant. > > > Shouldn't we be able to use the interrupt-map and related DT > > > properties to express the fact that Root Port virtual INTx is routed > > > to platform interrupt Y, even without any special-case code in > > > portdrv? > > > > My understanding is if RC also raise interrupt on INTx, then below map > > make sense, where either EP or RC can raise interrupt and the line > > will be muxed for interrupt from EP or RC port. > > I'm sorry, I didn't quite catch your meaning here, so let me try to > clarify some terminology. Maybe we'll eventually blunder into a common > understanding :) > > INTx is a PCI concept and only means something in the PCI hierarchy. > The RC would *receive* virtual INTx interrupts from the PCI hierarchy > and turn them into some platform-specific interrupt (not INTx) on the > upstream side. > > So strictly speaking, the RC might raise platform-specific interrupts > when it receives INTx interrupts, but it would not raise any INTx > interrupts itself. > > > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to > > host interrupt. > > #interrupt-cells = <1>; > > interrupt-map-mask = <0 0 0 7>; > > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* > INT A */ > > <0 0 0 2 &pcie_intc0 1>, /* > INT B */ > > <0 0 0 3 &pcie_intc0 2>, /* > INT C */ > > <0 0 0 4 &pcie_intc0 3>; /* > > INT D */ > > If I understand correctly, this is the mapping from the PCI world (INTA, > INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) > > If a Root Port raises a virtual INTA, the RC should turn it into the > corresponding platform interrupt, i.e., GIC_SPI 48 from the description > below. > > > And then > > > > pcie_intc0: legacy-interrupt-controller { > > interrupt-controller; > > #interrupt-cells = <1>; > > interrupt-parent = <&gic>; > > interrupts = <GIC_SPI 48 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 49 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 50 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 51 > IRQ_TYPE_EDGE_RISING>; > > }; > > > > So if RC interrupt for Power management and Error interrupt is a > > separate line, how can software describe that using the above > interrupt map? > > I don't know anything about interrupts the RC might generate on its own > behalf. A lot of the RC behavior is not specified by the PCIe spec > because the RC is on the border between the upstream platform-specific > stuff and the downstream PCIe stuff. Is there something in the PCIe > spec about the power management and error interrupts you're talking > about? Of maybe you can point me to a section of the Keystone spec that > talks about interrupts generated by the RC? Below is one of the PCIE controller interrupts list: 142 PEX1 INTA 143 PEX1 INTB 144 PEX1 INTC 145 PEX1 INTD 146-147 Reserved 148 PEX1 MSI 149 PEX1 PME 150 PEX1 CFG err interrupt Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > In any event, the AER interrupts we're looking for in portdrv are from > the Root Port, not from the RC. For INTx, my understanding is that the > RC *transforms* virtual INTx messages from the Root Port in the PCIe > domain into GIC transactions in the platform domain. > > Bjorn _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 7:32 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-06 7:32 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, I confirm we met same problem with KeyStone base on DesignWare design. Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, June 04, 2016 11:49 AM > To: Murali Karicheri > Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > Mingkai Hu; Rob Herring > Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > Po, > > > > Sorry to hijack your discussion, but the problem seems to be same for > > Keystone PCI controller which is also designware (old version) based. > > > > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >>>>> -----Original Message----- > > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > > >>>>> To: Po Liu > > >>>>> Cc: linux-pci@vger.kernel.org; > > >>>>> linux-arm-kernel@lists.infradead.org; > > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd > > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > > >>>>> Herring > > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > > >>>>> none MSI/MSI-X/INTx mode > > >>>>> > > >>>>> [+cc Rob] > > >>>>> > > >>>>> Hi Po, > > >>>>> > > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >>>>> > > >>>>> My understanding is that AER interrupt signaling can be done > > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > > >>>>> saying it doesn't support INTx either? How is the interrupt > you're requesting here different from INTx? > > >>>> > > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >>>> devices or root error in RC mode. But use an independent SPI > > >>>> interrupt(arm interrupt controller) line. > > >>> > > >>> The Root Port is a PCI device and should follow the normal PCI > > >>> rules for interrupts. As far as I understand, that means it > > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > > >>> should tell us which (INTA/ INTB/etc.), and > PCI_COMMAND_INTX_DISABLE should work to disable it. > > >>> That's all from the PCI point of view, of course. > > >> > > >> I am faced with the same issue on Keystone PCI hardware and it has > > >> been on my TODO list for quite some time. Keystone PCI hardware > > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > > >> at the root port, but use a platform interrupt instead (not > > >> complaint to PCI standard as per PCI base spec). So I would need > > >> similar change to have the error interrupt passed to the aer > > >> driver. So there are hardware out there like Keystone which > requires to support this through platform IRQ. > > > > > > This is not a new area of the spec, and it's hard for me to believe > > > that these two new PCIe controllers are both broken the same way > > > (although I guess both are DesignWare-based, so maybe this is the > > > same underlying problem in both cases?). I think it's more likely > > > that we just haven't figured out the right way to describe this in > the DT. > > > > Keystone is using an older version of the designware IP and it > > implements all of the interrupts in the application register space > > unlike other newer version of the hardware. So I assume, the version > > used on Layerscape is also an older version and the both have same > > issue in terms of non standard platform interrupt used for error > reporting. > > > > > I assume you have a Root Port with an AER capability, no MSI > > > capability, and no MSI-X capability, right? > > > > Has AER capability and both MSI and INTx (legacy) capability > > > > > What does its Interrupt > > > Pin register contain? If it's zero, it doesn't use INTx either, so > > > according to the spec it should generate no interrupts. > > > > > At address offset 0x3C by default has a value of 1, but it is writable > > by software. So default is INTx A. > > 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > *Pin* is at 0x3d and should be read-only. > > Does your Keystone driver support MSI? If so, since your Root Port > supports MSI, I would think we would use that by default, and the INTx > stuff wouldn't even matter. Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." But both of them not work for AER interrupt when devices or root port report aer error. But another GIC interrupt line do. > > > > But if Interrupt Pin is non-zero, that means the Root Port should be > > > able to generate virtual INTx interrupts. Presumably the Root > > > Complex connects those interrupts to something; maybe to your > > > platform interrupt? > > > > Probably that is what is happening. Both Power management and Error > > interrupts are raised on platform interrupt lines. > > > > 12 Error Interrupts > > > > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode > > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC > > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due > > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error > > (RC mode only) > > > > 13 Power management and reset event interrupts > > > > [0] Power management turn-off message interrupt (EP mode only) [1] > > Power management ack message interrupt (RC mode only) [2] Power > > management event interrupt (RC mode only) [3] Link request reset > > interrupt (hot reset or link down) (RC mode only) > > > > > PCI doesn't say anything about an interrupt after it leaves the Root > > > Complex, so the fact that it's connected to a "platform interrupt" > > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- > compliant. > > > Shouldn't we be able to use the interrupt-map and related DT > > > properties to express the fact that Root Port virtual INTx is routed > > > to platform interrupt Y, even without any special-case code in > > > portdrv? > > > > My understanding is if RC also raise interrupt on INTx, then below map > > make sense, where either EP or RC can raise interrupt and the line > > will be muxed for interrupt from EP or RC port. > > I'm sorry, I didn't quite catch your meaning here, so let me try to > clarify some terminology. Maybe we'll eventually blunder into a common > understanding :) > > INTx is a PCI concept and only means something in the PCI hierarchy. > The RC would *receive* virtual INTx interrupts from the PCI hierarchy > and turn them into some platform-specific interrupt (not INTx) on the > upstream side. > > So strictly speaking, the RC might raise platform-specific interrupts > when it receives INTx interrupts, but it would not raise any INTx > interrupts itself. > > > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to > > host interrupt. > > #interrupt-cells = <1>; > > interrupt-map-mask = <0 0 0 7>; > > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* > INT A */ > > <0 0 0 2 &pcie_intc0 1>, /* > INT B */ > > <0 0 0 3 &pcie_intc0 2>, /* > INT C */ > > <0 0 0 4 &pcie_intc0 3>; /* > > INT D */ > > If I understand correctly, this is the mapping from the PCI world (INTA, > INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) > > If a Root Port raises a virtual INTA, the RC should turn it into the > corresponding platform interrupt, i.e., GIC_SPI 48 from the description > below. > > > And then > > > > pcie_intc0: legacy-interrupt-controller { > > interrupt-controller; > > #interrupt-cells = <1>; > > interrupt-parent = <&gic>; > > interrupts = <GIC_SPI 48 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 49 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 50 > IRQ_TYPE_EDGE_RISING>, > > <GIC_SPI 51 > IRQ_TYPE_EDGE_RISING>; > > }; > > > > So if RC interrupt for Power management and Error interrupt is a > > separate line, how can software describe that using the above > interrupt map? > > I don't know anything about interrupts the RC might generate on its own > behalf. A lot of the RC behavior is not specified by the PCIe spec > because the RC is on the border between the upstream platform-specific > stuff and the downstream PCIe stuff. Is there something in the PCIe > spec about the power management and error interrupts you're talking > about? Of maybe you can point me to a section of the Keystone spec that > talks about interrupts generated by the RC? Below is one of the PCIE controller interrupts list: 142 PEX1 INTA 143 PEX1 INTB 144 PEX1 INTC 145 PEX1 INTD 146-147 Reserved 148 PEX1 MSI 149 PEX1 PME 150 PEX1 CFG err interrupt Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > In any event, the AER interrupts we're looking for in portdrv are from > the Root Port, not from the RC. For INTx, my understanding is that the > RC *transforms* virtual INTx messages from the Root Port in the PCIe > domain into GIC transactions in the platform domain. > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-06 7:32 ` Po Liu (?) @ 2016-06-06 14:01 ` Murali Karicheri -1 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-06 14:01 UTC (permalink / raw) To: Po Liu, Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On 06/06/2016 03:32 AM, Po Liu wrote: > Hi Bjorn, > I confirm we met same problem with KeyStone base on DesignWare design. > > > Best regards, > Liu Po > >> -----Original Message----- >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >> Sent: Saturday, June 04, 2016 11:49 AM >> To: Murali Karicheri >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; >> Mingkai Hu; Rob Herring >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >> MSI/MSI-X/INTx mode >> >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: >> > Po, >> > >> > Sorry to hijack your discussion, but the problem seems to be same for >> > Keystone PCI controller which is also designware (old version) based. >> > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >> > >>>>> -----Original Message----- >> > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM >> > >>>>> To: Po Liu >> > >>>>> Cc: linux-pci@vger.kernel.org; >> > >>>>> linux-arm-kernel@lists.infradead.org; >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob >> > >>>>> Herring >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with >> > >>>>> none MSI/MSI-X/INTx mode >> > >>>>> >> > >>>>> [+cc Rob] >> > >>>>> >> > >>>>> Hi Po, >> > >>>>> >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >> > >>>>> >> > >>>>> My understanding is that AER interrupt signaling can be done >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you >> > >>>>> saying it doesn't support INTx either? How is the interrupt >> you're requesting here different from INTx? >> > >>>> >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the >> > >>>> devices or root error in RC mode. But use an independent SPI >> > >>>> interrupt(arm interrupt controller) line. >> > >>> >> > >>> The Root Port is a PCI device and should follow the normal PCI >> > >>> rules for interrupts. As far as I understand, that means it >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register >> > >>> should tell us which (INTA/ INTB/etc.), and >> PCI_COMMAND_INTX_DISABLE should work to disable it. >> > >>> That's all from the PCI point of view, of course. >> > >> >> > >> I am faced with the same issue on Keystone PCI hardware and it has >> > >> been on my TODO list for quite some time. Keystone PCI hardware >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received >> > >> at the root port, but use a platform interrupt instead (not >> > >> complaint to PCI standard as per PCI base spec). So I would need >> > >> similar change to have the error interrupt passed to the aer >> > >> driver. So there are hardware out there like Keystone which >> requires to support this through platform IRQ. >> > > >> > > This is not a new area of the spec, and it's hard for me to believe >> > > that these two new PCIe controllers are both broken the same way >> > > (although I guess both are DesignWare-based, so maybe this is the >> > > same underlying problem in both cases?). I think it's more likely >> > > that we just haven't figured out the right way to describe this in >> the DT. >> > >> > Keystone is using an older version of the designware IP and it >> > implements all of the interrupts in the application register space >> > unlike other newer version of the hardware. So I assume, the version >> > used on Layerscape is also an older version and the both have same >> > issue in terms of non standard platform interrupt used for error >> reporting. >> > >> > > I assume you have a Root Port with an AER capability, no MSI >> > > capability, and no MSI-X capability, right? >> > >> > Has AER capability and both MSI and INTx (legacy) capability >> > >> > > What does its Interrupt >> > > Pin register contain? If it's zero, it doesn't use INTx either, so >> > > according to the spec it should generate no interrupts. >> > > >> > At address offset 0x3C by default has a value of 1, but it is writable >> > by software. So default is INTx A. >> >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt >> *Pin* is at 0x3d and should be read-only. >> You are right. But default is 1 at this address. >> Does your Keystone driver support MSI? If so, since your Root Port >> supports MSI, I would think we would use that by default, and the INTx >> stuff wouldn't even matter. > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > But both of them not work for AER interrupt when devices or root port report aer error. > But another GIC interrupt line do. Same with Keystone. Even though both MSI and INTx are supported error interrupt at root port is reported on a different interrupt line than MSI/INTx. So for Power Management event interrupt is also different line. Murali > >> >> > > But if Interrupt Pin is non-zero, that means the Root Port should be >> > > able to generate virtual INTx interrupts. Presumably the Root >> > > Complex connects those interrupts to something; maybe to your >> > > platform interrupt? >> > >> > Probably that is what is happening. Both Power management and Error >> > interrupts are raised on platform interrupt lines. >> > >> > 12 Error Interrupts >> > >> > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode >> > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC >> > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due >> > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error >> > (RC mode only) >> > >> > 13 Power management and reset event interrupts >> > >> > [0] Power management turn-off message interrupt (EP mode only) [1] >> > Power management ack message interrupt (RC mode only) [2] Power >> > management event interrupt (RC mode only) [3] Link request reset >> > interrupt (hot reset or link down) (RC mode only) >> > >> > > PCI doesn't say anything about an interrupt after it leaves the Root >> > > Complex, so the fact that it's connected to a "platform interrupt" >> > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- >> compliant. >> > > Shouldn't we be able to use the interrupt-map and related DT >> > > properties to express the fact that Root Port virtual INTx is routed >> > > to platform interrupt Y, even without any special-case code in >> > > portdrv? >> > >> > My understanding is if RC also raise interrupt on INTx, then below map >> > make sense, where either EP or RC can raise interrupt and the line >> > will be muxed for interrupt from EP or RC port. >> >> I'm sorry, I didn't quite catch your meaning here, so let me try to >> clarify some terminology. Maybe we'll eventually blunder into a common >> understanding :) >> >> INTx is a PCI concept and only means something in the PCI hierarchy. >> The RC would *receive* virtual INTx interrupts from the PCI hierarchy >> and turn them into some platform-specific interrupt (not INTx) on the >> upstream side. >> >> So strictly speaking, the RC might raise platform-specific interrupts >> when it receives INTx interrupts, but it would not raise any INTx >> interrupts itself. >> >> > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to >> > host interrupt. >> > #interrupt-cells = <1>; >> > interrupt-map-mask = <0 0 0 7>; >> > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* >> INT A */ >> > <0 0 0 2 &pcie_intc0 1>, /* >> INT B */ >> > <0 0 0 3 &pcie_intc0 2>, /* >> INT C */ >> > <0 0 0 4 &pcie_intc0 3>; /* >> > INT D */ >> >> If I understand correctly, this is the mapping from the PCI world (INTA, >> INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) >> >> If a Root Port raises a virtual INTA, the RC should turn it into the >> corresponding platform interrupt, i.e., GIC_SPI 48 from the description >> below. >> >> > And then >> > >> > pcie_intc0: legacy-interrupt-controller { >> > interrupt-controller; >> > #interrupt-cells = <1>; >> > interrupt-parent = <&gic>; >> > interrupts = <GIC_SPI 48 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 49 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 50 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 51 >> IRQ_TYPE_EDGE_RISING>; >> > }; >> > >> > So if RC interrupt for Power management and Error interrupt is a >> > separate line, how can software describe that using the above >> interrupt map? >> >> I don't know anything about interrupts the RC might generate on its own >> behalf. A lot of the RC behavior is not specified by the PCIe spec >> because the RC is on the border between the upstream platform-specific >> stuff and the downstream PCIe stuff. Is there something in the PCIe >> spec about the power management and error interrupts you're talking >> about? Of maybe you can point me to a section of the Keystone spec that >> talks about interrupts generated by the RC? > > Below is one of the PCIE controller interrupts list: > > 142 PEX1 INTA > 143 PEX1 INTB > 144 PEX1 INTC > 145 PEX1 INTD > 146-147 Reserved > 148 PEX1 MSI > 149 PEX1 PME > 150 PEX1 CFG err interrupt > > Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > >> >> In any event, the AER interrupts we're looking for in portdrv are from >> the Root Port, not from the RC. For INTx, my understanding is that the >> RC *transforms* virtual INTx messages from the Root Port in the PCIe >> domain into GIC transactions in the platform domain. >> >> Bjorn -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 14:01 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-06 14:01 UTC (permalink / raw) To: linux-arm-kernel On 06/06/2016 03:32 AM, Po Liu wrote: > Hi Bjorn, > I confirm we met same problem with KeyStone base on DesignWare design. > > > Best regards, > Liu Po > >> -----Original Message----- >> From: Bjorn Helgaas [mailto:helgaas at kernel.org] >> Sent: Saturday, June 04, 2016 11:49 AM >> To: Murali Karicheri >> Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- >> kernel at lists.infradead.org; linux-kernel at vger.kernel.org; >> devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; >> Mingkai Hu; Rob Herring >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >> MSI/MSI-X/INTx mode >> >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: >> > Po, >> > >> > Sorry to hijack your discussion, but the problem seems to be same for >> > Keystone PCI controller which is also designware (old version) based. >> > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >> > >>>>> -----Original Message----- >> > >>>>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM >> > >>>>> To: Po Liu >> > >>>>> Cc: linux-pci at vger.kernel.org; >> > >>>>> linux-arm-kernel at lists.infradead.org; >> > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob >> > >>>>> Herring >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with >> > >>>>> none MSI/MSI-X/INTx mode >> > >>>>> >> > >>>>> [+cc Rob] >> > >>>>> >> > >>>>> Hi Po, >> > >>>>> >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >> > >>>>> >> > >>>>> My understanding is that AER interrupt signaling can be done >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you >> > >>>>> saying it doesn't support INTx either? How is the interrupt >> you're requesting here different from INTx? >> > >>>> >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the >> > >>>> devices or root error in RC mode. But use an independent SPI >> > >>>> interrupt(arm interrupt controller) line. >> > >>> >> > >>> The Root Port is a PCI device and should follow the normal PCI >> > >>> rules for interrupts. As far as I understand, that means it >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register >> > >>> should tell us which (INTA/ INTB/etc.), and >> PCI_COMMAND_INTX_DISABLE should work to disable it. >> > >>> That's all from the PCI point of view, of course. >> > >> >> > >> I am faced with the same issue on Keystone PCI hardware and it has >> > >> been on my TODO list for quite some time. Keystone PCI hardware >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received >> > >> at the root port, but use a platform interrupt instead (not >> > >> complaint to PCI standard as per PCI base spec). So I would need >> > >> similar change to have the error interrupt passed to the aer >> > >> driver. So there are hardware out there like Keystone which >> requires to support this through platform IRQ. >> > > >> > > This is not a new area of the spec, and it's hard for me to believe >> > > that these two new PCIe controllers are both broken the same way >> > > (although I guess both are DesignWare-based, so maybe this is the >> > > same underlying problem in both cases?). I think it's more likely >> > > that we just haven't figured out the right way to describe this in >> the DT. >> > >> > Keystone is using an older version of the designware IP and it >> > implements all of the interrupts in the application register space >> > unlike other newer version of the hardware. So I assume, the version >> > used on Layerscape is also an older version and the both have same >> > issue in terms of non standard platform interrupt used for error >> reporting. >> > >> > > I assume you have a Root Port with an AER capability, no MSI >> > > capability, and no MSI-X capability, right? >> > >> > Has AER capability and both MSI and INTx (legacy) capability >> > >> > > What does its Interrupt >> > > Pin register contain? If it's zero, it doesn't use INTx either, so >> > > according to the spec it should generate no interrupts. >> > > >> > At address offset 0x3C by default has a value of 1, but it is writable >> > by software. So default is INTx A. >> >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt >> *Pin* is at 0x3d and should be read-only. >> You are right. But default is 1 at this address. >> Does your Keystone driver support MSI? If so, since your Root Port >> supports MSI, I would think we would use that by default, and the INTx >> stuff wouldn't even matter. > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > But both of them not work for AER interrupt when devices or root port report aer error. > But another GIC interrupt line do. Same with Keystone. Even though both MSI and INTx are supported error interrupt at root port is reported on a different interrupt line than MSI/INTx. So for Power Management event interrupt is also different line. Murali > >> >> > > But if Interrupt Pin is non-zero, that means the Root Port should be >> > > able to generate virtual INTx interrupts. Presumably the Root >> > > Complex connects those interrupts to something; maybe to your >> > > platform interrupt? >> > >> > Probably that is what is happening. Both Power management and Error >> > interrupts are raised on platform interrupt lines. >> > >> > 12 Error Interrupts >> > >> > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode >> > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC >> > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due >> > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error >> > (RC mode only) >> > >> > 13 Power management and reset event interrupts >> > >> > [0] Power management turn-off message interrupt (EP mode only) [1] >> > Power management ack message interrupt (RC mode only) [2] Power >> > management event interrupt (RC mode only) [3] Link request reset >> > interrupt (hot reset or link down) (RC mode only) >> > >> > > PCI doesn't say anything about an interrupt after it leaves the Root >> > > Complex, so the fact that it's connected to a "platform interrupt" >> > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- >> compliant. >> > > Shouldn't we be able to use the interrupt-map and related DT >> > > properties to express the fact that Root Port virtual INTx is routed >> > > to platform interrupt Y, even without any special-case code in >> > > portdrv? >> > >> > My understanding is if RC also raise interrupt on INTx, then below map >> > make sense, where either EP or RC can raise interrupt and the line >> > will be muxed for interrupt from EP or RC port. >> >> I'm sorry, I didn't quite catch your meaning here, so let me try to >> clarify some terminology. Maybe we'll eventually blunder into a common >> understanding :) >> >> INTx is a PCI concept and only means something in the PCI hierarchy. >> The RC would *receive* virtual INTx interrupts from the PCI hierarchy >> and turn them into some platform-specific interrupt (not INTx) on the >> upstream side. >> >> So strictly speaking, the RC might raise platform-specific interrupts >> when it receives INTx interrupts, but it would not raise any INTx >> interrupts itself. >> >> > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to >> > host interrupt. >> > #interrupt-cells = <1>; >> > interrupt-map-mask = <0 0 0 7>; >> > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* >> INT A */ >> > <0 0 0 2 &pcie_intc0 1>, /* >> INT B */ >> > <0 0 0 3 &pcie_intc0 2>, /* >> INT C */ >> > <0 0 0 4 &pcie_intc0 3>; /* >> > INT D */ >> >> If I understand correctly, this is the mapping from the PCI world (INTA, >> INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) >> >> If a Root Port raises a virtual INTA, the RC should turn it into the >> corresponding platform interrupt, i.e., GIC_SPI 48 from the description >> below. >> >> > And then >> > >> > pcie_intc0: legacy-interrupt-controller { >> > interrupt-controller; >> > #interrupt-cells = <1>; >> > interrupt-parent = <&gic>; >> > interrupts = <GIC_SPI 48 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 49 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 50 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 51 >> IRQ_TYPE_EDGE_RISING>; >> > }; >> > >> > So if RC interrupt for Power management and Error interrupt is a >> > separate line, how can software describe that using the above >> interrupt map? >> >> I don't know anything about interrupts the RC might generate on its own >> behalf. A lot of the RC behavior is not specified by the PCIe spec >> because the RC is on the border between the upstream platform-specific >> stuff and the downstream PCIe stuff. Is there something in the PCIe >> spec about the power management and error interrupts you're talking >> about? Of maybe you can point me to a section of the Keystone spec that >> talks about interrupts generated by the RC? > > Below is one of the PCIE controller interrupts list: > > 142 PEX1 INTA > 143 PEX1 INTB > 144 PEX1 INTC > 145 PEX1 INTD > 146-147 Reserved > 148 PEX1 MSI > 149 PEX1 PME > 150 PEX1 CFG err interrupt > > Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > >> >> In any event, the AER interrupts we're looking for in portdrv are from >> the Root Port, not from the RC. For INTx, my understanding is that the >> RC *transforms* virtual INTx messages from the Root Port in the PCIe >> domain into GIC transactions in the platform domain. >> >> Bjorn -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 14:01 ` Murali Karicheri 0 siblings, 0 replies; 201+ messages in thread From: Murali Karicheri @ 2016-06-06 14:01 UTC (permalink / raw) To: Po Liu, Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On 06/06/2016 03:32 AM, Po Liu wrote: > Hi Bjorn, > I confirm we met same problem with KeyStone base on DesignWare design. > > > Best regards, > Liu Po > >> -----Original Message----- >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >> Sent: Saturday, June 04, 2016 11:49 AM >> To: Murali Karicheri >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; >> Mingkai Hu; Rob Herring >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none >> MSI/MSI-X/INTx mode >> >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: >> > Po, >> > >> > Sorry to hijack your discussion, but the problem seems to be same for >> > Keystone PCI controller which is also designware (old version) based. >> > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: >> > >>>>> -----Original Message----- >> > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM >> > >>>>> To: Po Liu >> > >>>>> Cc: linux-pci@vger.kernel.org; >> > >>>>> linux-arm-kernel@lists.infradead.org; >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob >> > >>>>> Herring >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with >> > >>>>> none MSI/MSI-X/INTx mode >> > >>>>> >> > >>>>> [+cc Rob] >> > >>>>> >> > >>>>> Hi Po, >> > >>>>> >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. >> > >>>>> >> > >>>>> My understanding is that AER interrupt signaling can be done >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you >> > >>>>> saying it doesn't support INTx either? How is the interrupt >> you're requesting here different from INTx? >> > >>>> >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the >> > >>>> devices or root error in RC mode. But use an independent SPI >> > >>>> interrupt(arm interrupt controller) line. >> > >>> >> > >>> The Root Port is a PCI device and should follow the normal PCI >> > >>> rules for interrupts. As far as I understand, that means it >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register >> > >>> should tell us which (INTA/ INTB/etc.), and >> PCI_COMMAND_INTX_DISABLE should work to disable it. >> > >>> That's all from the PCI point of view, of course. >> > >> >> > >> I am faced with the same issue on Keystone PCI hardware and it has >> > >> been on my TODO list for quite some time. Keystone PCI hardware >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received >> > >> at the root port, but use a platform interrupt instead (not >> > >> complaint to PCI standard as per PCI base spec). So I would need >> > >> similar change to have the error interrupt passed to the aer >> > >> driver. So there are hardware out there like Keystone which >> requires to support this through platform IRQ. >> > > >> > > This is not a new area of the spec, and it's hard for me to believe >> > > that these two new PCIe controllers are both broken the same way >> > > (although I guess both are DesignWare-based, so maybe this is the >> > > same underlying problem in both cases?). I think it's more likely >> > > that we just haven't figured out the right way to describe this in >> the DT. >> > >> > Keystone is using an older version of the designware IP and it >> > implements all of the interrupts in the application register space >> > unlike other newer version of the hardware. So I assume, the version >> > used on Layerscape is also an older version and the both have same >> > issue in terms of non standard platform interrupt used for error >> reporting. >> > >> > > I assume you have a Root Port with an AER capability, no MSI >> > > capability, and no MSI-X capability, right? >> > >> > Has AER capability and both MSI and INTx (legacy) capability >> > >> > > What does its Interrupt >> > > Pin register contain? If it's zero, it doesn't use INTx either, so >> > > according to the spec it should generate no interrupts. >> > > >> > At address offset 0x3C by default has a value of 1, but it is writable >> > by software. So default is INTx A. >> >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt >> *Pin* is at 0x3d and should be read-only. >> You are right. But default is 1 at this address. >> Does your Keystone driver support MSI? If so, since your Root Port >> supports MSI, I would think we would use that by default, and the INTx >> stuff wouldn't even matter. > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > But both of them not work for AER interrupt when devices or root port report aer error. > But another GIC interrupt line do. Same with Keystone. Even though both MSI and INTx are supported error interrupt at root port is reported on a different interrupt line than MSI/INTx. So for Power Management event interrupt is also different line. Murali > >> >> > > But if Interrupt Pin is non-zero, that means the Root Port should be >> > > able to generate virtual INTx interrupts. Presumably the Root >> > > Complex connects those interrupts to something; maybe to your >> > > platform interrupt? >> > >> > Probably that is what is happening. Both Power management and Error >> > interrupts are raised on platform interrupt lines. >> > >> > 12 Error Interrupts >> > >> > [0] System error (OR of fatal, nonfatal, correctable errors) (RC mode >> > only) [1] PCIe fatal error (RC mode only) [2] PCIe non-fatal error (RC >> > mode only) [3] PCIe correctable error (RC mode only) [4] AXI Error due >> > to fatal condition in AXI bridge (EP/RC modes) [5] PCIe advanced error >> > (RC mode only) >> > >> > 13 Power management and reset event interrupts >> > >> > [0] Power management turn-off message interrupt (EP mode only) [1] >> > Power management ack message interrupt (RC mode only) [2] Power >> > management event interrupt (RC mode only) [3] Link request reset >> > interrupt (hot reset or link down) (RC mode only) >> > >> > > PCI doesn't say anything about an interrupt after it leaves the Root >> > > Complex, so the fact that it's connected to a "platform interrupt" >> > > or "SPI interrupt" or "IOAPIC interrupt" doesn't make it non- >> compliant. >> > > Shouldn't we be able to use the interrupt-map and related DT >> > > properties to express the fact that Root Port virtual INTx is routed >> > > to platform interrupt Y, even without any special-case code in >> > > portdrv? >> > >> > My understanding is if RC also raise interrupt on INTx, then below map >> > make sense, where either EP or RC can raise interrupt and the line >> > will be muxed for interrupt from EP or RC port. >> >> I'm sorry, I didn't quite catch your meaning here, so let me try to >> clarify some terminology. Maybe we'll eventually blunder into a common >> understanding :) >> >> INTx is a PCI concept and only means something in the PCI hierarchy. >> The RC would *receive* virtual INTx interrupts from the PCI hierarchy >> and turn them into some platform-specific interrupt (not INTx) on the >> upstream side. >> >> So strictly speaking, the RC might raise platform-specific interrupts >> when it receives INTx interrupts, but it would not raise any INTx >> interrupts itself. >> >> > Here is the DT entry in PCIE keystone for Legacy interrupt mapping to >> > host interrupt. >> > #interrupt-cells = <1>; >> > interrupt-map-mask = <0 0 0 7>; >> > interrupt-map = <0 0 0 1 &pcie_intc0 0>, /* >> INT A */ >> > <0 0 0 2 &pcie_intc0 1>, /* >> INT B */ >> > <0 0 0 3 &pcie_intc0 2>, /* >> INT C */ >> > <0 0 0 4 &pcie_intc0 3>; /* >> > INT D */ >> >> If I understand correctly, this is the mapping from the PCI world (INTA, >> INTB, etc.) to the platform-specific world (pcie_intc0 0, etc.) >> >> If a Root Port raises a virtual INTA, the RC should turn it into the >> corresponding platform interrupt, i.e., GIC_SPI 48 from the description >> below. >> >> > And then >> > >> > pcie_intc0: legacy-interrupt-controller { >> > interrupt-controller; >> > #interrupt-cells = <1>; >> > interrupt-parent = <&gic>; >> > interrupts = <GIC_SPI 48 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 49 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 50 >> IRQ_TYPE_EDGE_RISING>, >> > <GIC_SPI 51 >> IRQ_TYPE_EDGE_RISING>; >> > }; >> > >> > So if RC interrupt for Power management and Error interrupt is a >> > separate line, how can software describe that using the above >> interrupt map? >> >> I don't know anything about interrupts the RC might generate on its own >> behalf. A lot of the RC behavior is not specified by the PCIe spec >> because the RC is on the border between the upstream platform-specific >> stuff and the downstream PCIe stuff. Is there something in the PCIe >> spec about the power management and error interrupts you're talking >> about? Of maybe you can point me to a section of the Keystone spec that >> talks about interrupts generated by the RC? > > Below is one of the PCIE controller interrupts list: > > 142 PEX1 INTA > 143 PEX1 INTB > 144 PEX1 INTC > 145 PEX1 INTD > 146-147 Reserved > 148 PEX1 MSI > 149 PEX1 PME > 150 PEX1 CFG err interrupt > > Only the "150 PEX1 CFG err interrupt" routing to the aer interrupt. > > >> >> In any event, the AER interrupts we're looking for in portdrv are from >> the Root Port, not from the RC. For INTx, my understanding is that the >> RC *transforms* virtual INTx messages from the Root Port in the PCIe >> domain into GIC transactions in the platform domain. >> >> Bjorn -- Murali Karicheri Linux Kernel, Keystone ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-06 14:01 ` Murali Karicheri (?) @ 2016-06-06 18:10 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-06 18:10 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > On 06/06/2016 03:32 AM, Po Liu wrote: > > Hi Bjorn, > > I confirm we met same problem with KeyStone base on DesignWare design. > > > > > > Best regards, > > Liu Po > > > >> -----Original Message----- > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> Sent: Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > >> > Po, > >> > > >> > Sorry to hijack your discussion, but the problem seems to be same for > >> > Keystone PCI controller which is also designware (old version) based. > >> > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >> > >>>>> -----Original Message----- > >> > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >> > >>>>> To: Po Liu > >> > >>>>> Cc: linux-pci@vger.kernel.org; > >> > >>>>> linux-arm-kernel@lists.infradead.org; > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd > >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > >> > >>>>> Herring > >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > >> > >>>>> none MSI/MSI-X/INTx mode > >> > >>>>> > >> > >>>>> [+cc Rob] > >> > >>>>> > >> > >>>>> Hi Po, > >> > >>>>> > >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >> > >>>>> > >> > >>>>> My understanding is that AER interrupt signaling can be done > >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > >> > >>>>> saying it doesn't support INTx either? How is the interrupt > >> you're requesting here different from INTx? > >> > >>>> > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > >> > >>>> devices or root error in RC mode. But use an independent SPI > >> > >>>> interrupt(arm interrupt controller) line. > >> > >>> > >> > >>> The Root Port is a PCI device and should follow the normal PCI > >> > >>> rules for interrupts. As far as I understand, that means it > >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > >> > >>> should tell us which (INTA/ INTB/etc.), and > >> PCI_COMMAND_INTX_DISABLE should work to disable it. > >> > >>> That's all from the PCI point of view, of course. > >> > >> > >> > >> I am faced with the same issue on Keystone PCI hardware and it has > >> > >> been on my TODO list for quite some time. Keystone PCI hardware > >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > >> > >> at the root port, but use a platform interrupt instead (not > >> > >> complaint to PCI standard as per PCI base spec). So I would need > >> > >> similar change to have the error interrupt passed to the aer > >> > >> driver. So there are hardware out there like Keystone which > >> requires to support this through platform IRQ. > >> > > > >> > > This is not a new area of the spec, and it's hard for me to believe > >> > > that these two new PCIe controllers are both broken the same way > >> > > (although I guess both are DesignWare-based, so maybe this is the > >> > > same underlying problem in both cases?). I think it's more likely > >> > > that we just haven't figured out the right way to describe this in > >> the DT. > >> > > >> > Keystone is using an older version of the designware IP and it > >> > implements all of the interrupts in the application register space > >> > unlike other newer version of the hardware. So I assume, the version > >> > used on Layerscape is also an older version and the both have same > >> > issue in terms of non standard platform interrupt used for error > >> reporting. > >> > > >> > > I assume you have a Root Port with an AER capability, no MSI > >> > > capability, and no MSI-X capability, right? > >> > > >> > Has AER capability and both MSI and INTx (legacy) capability > >> > > >> > > What does its Interrupt > >> > > Pin register contain? If it's zero, it doesn't use INTx either, so > >> > > according to the spec it should generate no interrupts. > >> > > > >> > At address offset 0x3C by default has a value of 1, but it is writable > >> > by software. So default is INTx A. > >> > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > >> *Pin* is at 0x3d and should be read-only. > >> > > You are right. But default is 1 at this address. > > >> Does your Keystone driver support MSI? If so, since your Root Port > >> supports MSI, I would think we would use that by default, and the INTx > >> stuff wouldn't even matter. > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > > But both of them not work for AER interrupt when devices or root port report aer error. > > But another GIC interrupt line do. > > Same with Keystone. Even though both MSI and INTx are supported > error interrupt at root port is reported on a different interrupt > line than MSI/INTx. So for Power Management event interrupt is also > different line. I'm looking at the "Error Message Controls" diagram in the PCIe spec r3.0, sec 6.2.6. Does this hardware fit into the platform-specific "System Error" case there? Do the Root Control enable bits (in the PCIe Capability) control this interrupt? If so, maybe this makes more sense than I thought. We have to assume both notification paths work (the normal INTx/MSI/MSI-X AER interrupts as well as the platform-specific System Errors), so if we add support for System Errors, it should be structured so we prefer INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. AER would have to know which path it's using so aer_enable_rootport() can disable the other one (currently it always disables System Errors). Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on your devices to force the fallback to System Errors. How much would this screw up other PCIe services (PME, hotplug, VC, etc)? Does MSI work for them? Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 18:10 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-06 18:10 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > On 06/06/2016 03:32 AM, Po Liu wrote: > > Hi Bjorn, > > I confirm we met same problem with KeyStone base on DesignWare design. > > > > > > Best regards, > > Liu Po > > > >> -----Original Message----- > >> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > >> Sent: Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- > >> kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > >> devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > >> > Po, > >> > > >> > Sorry to hijack your discussion, but the problem seems to be same for > >> > Keystone PCI controller which is also designware (old version) based. > >> > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >> > >>>>> -----Original Message----- > >> > >>>>> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >> > >>>>> To: Po Liu > >> > >>>>> Cc: linux-pci at vger.kernel.org; > >> > >>>>> linux-arm-kernel at lists.infradead.org; > >> > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Arnd > >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > >> > >>>>> Herring > >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > >> > >>>>> none MSI/MSI-X/INTx mode > >> > >>>>> > >> > >>>>> [+cc Rob] > >> > >>>>> > >> > >>>>> Hi Po, > >> > >>>>> > >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >> > >>>>> > >> > >>>>> My understanding is that AER interrupt signaling can be done > >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > >> > >>>>> saying it doesn't support INTx either? How is the interrupt > >> you're requesting here different from INTx? > >> > >>>> > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > >> > >>>> devices or root error in RC mode. But use an independent SPI > >> > >>>> interrupt(arm interrupt controller) line. > >> > >>> > >> > >>> The Root Port is a PCI device and should follow the normal PCI > >> > >>> rules for interrupts. As far as I understand, that means it > >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > >> > >>> should tell us which (INTA/ INTB/etc.), and > >> PCI_COMMAND_INTX_DISABLE should work to disable it. > >> > >>> That's all from the PCI point of view, of course. > >> > >> > >> > >> I am faced with the same issue on Keystone PCI hardware and it has > >> > >> been on my TODO list for quite some time. Keystone PCI hardware > >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > >> > >> at the root port, but use a platform interrupt instead (not > >> > >> complaint to PCI standard as per PCI base spec). So I would need > >> > >> similar change to have the error interrupt passed to the aer > >> > >> driver. So there are hardware out there like Keystone which > >> requires to support this through platform IRQ. > >> > > > >> > > This is not a new area of the spec, and it's hard for me to believe > >> > > that these two new PCIe controllers are both broken the same way > >> > > (although I guess both are DesignWare-based, so maybe this is the > >> > > same underlying problem in both cases?). I think it's more likely > >> > > that we just haven't figured out the right way to describe this in > >> the DT. > >> > > >> > Keystone is using an older version of the designware IP and it > >> > implements all of the interrupts in the application register space > >> > unlike other newer version of the hardware. So I assume, the version > >> > used on Layerscape is also an older version and the both have same > >> > issue in terms of non standard platform interrupt used for error > >> reporting. > >> > > >> > > I assume you have a Root Port with an AER capability, no MSI > >> > > capability, and no MSI-X capability, right? > >> > > >> > Has AER capability and both MSI and INTx (legacy) capability > >> > > >> > > What does its Interrupt > >> > > Pin register contain? If it's zero, it doesn't use INTx either, so > >> > > according to the spec it should generate no interrupts. > >> > > > >> > At address offset 0x3C by default has a value of 1, but it is writable > >> > by software. So default is INTx A. > >> > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > >> *Pin* is at 0x3d and should be read-only. > >> > > You are right. But default is 1 at this address. > > >> Does your Keystone driver support MSI? If so, since your Root Port > >> supports MSI, I would think we would use that by default, and the INTx > >> stuff wouldn't even matter. > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > > But both of them not work for AER interrupt when devices or root port report aer error. > > But another GIC interrupt line do. > > Same with Keystone. Even though both MSI and INTx are supported > error interrupt at root port is reported on a different interrupt > line than MSI/INTx. So for Power Management event interrupt is also > different line. I'm looking at the "Error Message Controls" diagram in the PCIe spec r3.0, sec 6.2.6. Does this hardware fit into the platform-specific "System Error" case there? Do the Root Control enable bits (in the PCIe Capability) control this interrupt? If so, maybe this makes more sense than I thought. We have to assume both notification paths work (the normal INTx/MSI/MSI-X AER interrupts as well as the platform-specific System Errors), so if we add support for System Errors, it should be structured so we prefer INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. AER would have to know which path it's using so aer_enable_rootport() can disable the other one (currently it always disables System Errors). Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on your devices to force the fallback to System Errors. How much would this screw up other PCIe services (PME, hotplug, VC, etc)? Does MSI work for them? Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-06 18:10 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-06 18:10 UTC (permalink / raw) To: Murali Karicheri Cc: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > On 06/06/2016 03:32 AM, Po Liu wrote: > > Hi Bjorn, > > I confirm we met same problem with KeyStone base on DesignWare design. > > > > > > Best regards, > > Liu Po > > > >> -----Original Message----- > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> Sent: Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > >> > Po, > >> > > >> > Sorry to hijack your discussion, but the problem seems to be same for > >> > Keystone PCI controller which is also designware (old version) based. > >> > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri wrote: > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > >> > >>>>> -----Original Message----- > >> > >>>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> > >>>>> Sent: Thursday, June 02, 2016 11:48 AM > >> > >>>>> To: Po Liu > >> > >>>>> Cc: linux-pci@vger.kernel.org; > >> > >>>>> linux-arm-kernel@lists.infradead.org; > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Arnd > >> > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; Yang-Leo Li; > >> > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; Mingkai Hu; Rob > >> > >>>>> Herring > >> > >>>>> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with > >> > >>>>> none MSI/MSI-X/INTx mode > >> > >>>>> > >> > >>>>> [+cc Rob] > >> > >>>>> > >> > >>>>> Hi Po, > >> > >>>>> > >> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > >> > >>>>> > >> > >>>>> My understanding is that AER interrupt signaling can be done > >> > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec 6.2.4.1.2). > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are you > >> > >>>>> saying it doesn't support INTx either? How is the interrupt > >> you're requesting here different from INTx? > >> > >>>> > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > >> > >>>> devices or root error in RC mode. But use an independent SPI > >> > >>>> interrupt(arm interrupt controller) line. > >> > >>> > >> > >>> The Root Port is a PCI device and should follow the normal PCI > >> > >>> rules for interrupts. As far as I understand, that means it > >> > >>> should use MSI, MSI-X, or INTx. If your Root Port doesn't use MSI > >> > >>> or MSI-X, it should use INTx, the PCI_INTERRUPT_PIN register > >> > >>> should tell us which (INTA/ INTB/etc.), and > >> PCI_COMMAND_INTX_DISABLE should work to disable it. > >> > >>> That's all from the PCI point of view, of course. > >> > >> > >> > >> I am faced with the same issue on Keystone PCI hardware and it has > >> > >> been on my TODO list for quite some time. Keystone PCI hardware > >> > >> also doesn't use MSI or MSI-X or INTx for reporting errors received > >> > >> at the root port, but use a platform interrupt instead (not > >> > >> complaint to PCI standard as per PCI base spec). So I would need > >> > >> similar change to have the error interrupt passed to the aer > >> > >> driver. So there are hardware out there like Keystone which > >> requires to support this through platform IRQ. > >> > > > >> > > This is not a new area of the spec, and it's hard for me to believe > >> > > that these two new PCIe controllers are both broken the same way > >> > > (although I guess both are DesignWare-based, so maybe this is the > >> > > same underlying problem in both cases?). I think it's more likely > >> > > that we just haven't figured out the right way to describe this in > >> the DT. > >> > > >> > Keystone is using an older version of the designware IP and it > >> > implements all of the interrupts in the application register space > >> > unlike other newer version of the hardware. So I assume, the version > >> > used on Layerscape is also an older version and the both have same > >> > issue in terms of non standard platform interrupt used for error > >> reporting. > >> > > >> > > I assume you have a Root Port with an AER capability, no MSI > >> > > capability, and no MSI-X capability, right? > >> > > >> > Has AER capability and both MSI and INTx (legacy) capability > >> > > >> > > What does its Interrupt > >> > > Pin register contain? If it's zero, it doesn't use INTx either, so > >> > > according to the spec it should generate no interrupts. > >> > > > >> > At address offset 0x3C by default has a value of 1, but it is writable > >> > by software. So default is INTx A. > >> > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > >> *Pin* is at 0x3d and should be read-only. > >> > > You are right. But default is 1 at this address. > > >> Does your Keystone driver support MSI? If so, since your Root Port > >> supports MSI, I would think we would use that by default, and the INTx > >> stuff wouldn't even matter. > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and legacy INTx are supported." > > But both of them not work for AER interrupt when devices or root port report aer error. > > But another GIC interrupt line do. > > Same with Keystone. Even though both MSI and INTx are supported > error interrupt at root port is reported on a different interrupt > line than MSI/INTx. So for Power Management event interrupt is also > different line. I'm looking at the "Error Message Controls" diagram in the PCIe spec r3.0, sec 6.2.6. Does this hardware fit into the platform-specific "System Error" case there? Do the Root Control enable bits (in the PCIe Capability) control this interrupt? If so, maybe this makes more sense than I thought. We have to assume both notification paths work (the normal INTx/MSI/MSI-X AER interrupts as well as the platform-specific System Errors), so if we add support for System Errors, it should be structured so we prefer INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. AER would have to know which path it's using so aer_enable_rootport() can disable the other one (currently it always disables System Errors). Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on your devices to force the fallback to System Errors. How much would this screw up other PCIe services (PME, hotplug, VC, etc)? Does MSI work for them? Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-06 18:10 ` Bjorn Helgaas (?) (?) @ 2016-06-07 10:07 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-07 10:07 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Bjorn Helgaas, Shawn Guo, Mingkai Hu, Rob Herring Hi Bjorn, > -----Original Message----- > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > Hi Bjorn, > > > I confirm we met same problem with KeyStone base on DesignWare > design. > > > > > > > > > Best regards, > > > Liu Po > > > > > >> -----Original Message----- > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >> Sent: Saturday, June 04, 2016 11:49 AM > > >> To: Murali Karicheri > > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob Herring > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > >> MSI/MSI-X/INTx mode > > >> > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > >> > Po, > > >> > > > >> > Sorry to hijack your discussion, but the problem seems to be > > >> same for > Keystone PCI controller which is also designware (old > version) based. > > >> > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > wrote: > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > >> linux-pci@vger.kernel.org; > >>>>> > > >> linux-arm-kernel@lists.infradead.org; > > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >> > >>>>> > > >> > >>>>> My understanding is that AER interrupt signaling can be > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > 6.2.4.1.2). > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > >> you > >>>>> saying it doesn't support INTx either? How is the > > >> interrupt you're requesting here different from INTx? > > >> > >>>> > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > >> > >>>> interrupt(arm interrupt controller) line. > > >> > >>> > > >> > >>> The Root Port is a PCI device and should follow the normal > > >> PCI > >>> rules for interrupts. As far as I understand, that > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > >> > >>> That's all from the PCI point of view, of course. > > >> > >> > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > >> it has > >> been on my TODO list for quite some time. Keystone > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > >> reporting errors received > >> at the root port, but use a > > >> platform interrupt instead (not > >> complaint to PCI standard as > > >> per PCI base spec). So I would need > >> similar change to have > > >> the error interrupt passed to the aer > >> driver. So there are > > >> hardware out there like Keystone which requires to support this > through platform IRQ. > > >> > > > > >> > > This is not a new area of the spec, and it's hard for me to > > >> believe > > that these two new PCIe controllers are both broken > > >> the same way > > (although I guess both are DesignWare-based, so > > >> maybe this is the > > same underlying problem in both cases?). I > > >> think it's more likely > > that we just haven't figured out the > > >> right way to describe this in the DT. > > >> > > > >> > Keystone is using an older version of the designware IP and it > > >> > implements all of the interrupts in the application register > > >> space > unlike other newer version of the hardware. So I assume, > > >> the version > used on Layerscape is also an older version and the > > >> both have same > issue in terms of non standard platform interrupt > > >> used for error reporting. > > >> > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > >> > > capability, and no MSI-X capability, right? > > >> > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > >> > > What does its Interrupt > > Pin register contain? If it's > > >> zero, it doesn't use INTx either, so > > according to the spec it > > >> should generate no interrupts. > > >> > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > >> writable > by software. So default is INTx A. > > >> > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > >> *Pin* is at 0x3d and should be read-only. > > >> > > > > You are right. But default is 1 at this address. > > > > >> Does your Keystone driver support MSI? If so, since your Root > > >> Port supports MSI, I would think we would use that by default, and > > >> the INTx stuff wouldn't even matter. > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > legacy INTx are supported." > > > But both of them not work for AER interrupt when devices or root > port report aer error. > > > But another GIC interrupt line do. > > > > Same with Keystone. Even though both MSI and INTx are supported error > > interrupt at root port is reported on a different interrupt line than > > MSI/INTx. So for Power Management event interrupt is also different > > line. > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > "System Error" case there? Do the Root Control enable bits (in the PCIe > Capability) control this interrupt? If so, maybe this makes more sense > than I thought. It supposedly not the "System Error" case. But "the Error Interrupt" case. Which means " Root Error Command register " could control the interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) May this kind of hardware design route broken the spec? > > We have to assume both notification paths work (the normal INTx/MSI/MSI- > X AER interrupts as well as the platform-specific System Errors), so if > we add support for System Errors, it should be structured so we prefer > INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. > AER would have to know which path it's using so aer_enable_rootport() > can disable the other one (currently it always disables System Errors). > > Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on > your devices to force the fallback to System Errors. > > How much would this screw up other PCIe services (PME, hotplug, VC, etc)? > Does MSI work for them? PME also like the AER. Hotplug is not supported. Others not known. Po Liu > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-07 10:07 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-07 10:07 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, > -----Original Message----- > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > Hi Bjorn, > > > I confirm we met same problem with KeyStone base on DesignWare > design. > > > > > > > > > Best regards, > > > Liu Po > > > > > >> -----Original Message----- > > >> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > >> Sent: Saturday, June 04, 2016 11:49 AM > > >> To: Murali Karicheri > > >> Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- > > >> kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > > >> devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob Herring > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > >> MSI/MSI-X/INTx mode > > >> > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > >> > Po, > > >> > > > >> > Sorry to hijack your discussion, but the problem seems to be > > >> same for > Keystone PCI controller which is also designware (old > version) based. > > >> > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > wrote: > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > >> [mailto:helgaas at kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > >> linux-pci at vger.kernel.org; > >>>>> > > >> linux-arm-kernel at lists.infradead.org; > > >> > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >> > >>>>> > > >> > >>>>> My understanding is that AER interrupt signaling can be > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > 6.2.4.1.2). > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > >> you > >>>>> saying it doesn't support INTx either? How is the > > >> interrupt you're requesting here different from INTx? > > >> > >>>> > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > >> > >>>> interrupt(arm interrupt controller) line. > > >> > >>> > > >> > >>> The Root Port is a PCI device and should follow the normal > > >> PCI > >>> rules for interrupts. As far as I understand, that > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > >> > >>> That's all from the PCI point of view, of course. > > >> > >> > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > >> it has > >> been on my TODO list for quite some time. Keystone > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > >> reporting errors received > >> at the root port, but use a > > >> platform interrupt instead (not > >> complaint to PCI standard as > > >> per PCI base spec). So I would need > >> similar change to have > > >> the error interrupt passed to the aer > >> driver. So there are > > >> hardware out there like Keystone which requires to support this > through platform IRQ. > > >> > > > > >> > > This is not a new area of the spec, and it's hard for me to > > >> believe > > that these two new PCIe controllers are both broken > > >> the same way > > (although I guess both are DesignWare-based, so > > >> maybe this is the > > same underlying problem in both cases?). I > > >> think it's more likely > > that we just haven't figured out the > > >> right way to describe this in the DT. > > >> > > > >> > Keystone is using an older version of the designware IP and it > > >> > implements all of the interrupts in the application register > > >> space > unlike other newer version of the hardware. So I assume, > > >> the version > used on Layerscape is also an older version and the > > >> both have same > issue in terms of non standard platform interrupt > > >> used for error reporting. > > >> > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > >> > > capability, and no MSI-X capability, right? > > >> > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > >> > > What does its Interrupt > > Pin register contain? If it's > > >> zero, it doesn't use INTx either, so > > according to the spec it > > >> should generate no interrupts. > > >> > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > >> writable > by software. So default is INTx A. > > >> > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > >> *Pin* is at 0x3d and should be read-only. > > >> > > > > You are right. But default is 1 at this address. > > > > >> Does your Keystone driver support MSI? If so, since your Root > > >> Port supports MSI, I would think we would use that by default, and > > >> the INTx stuff wouldn't even matter. > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > legacy INTx are supported." > > > But both of them not work for AER interrupt when devices or root > port report aer error. > > > But another GIC interrupt line do. > > > > Same with Keystone. Even though both MSI and INTx are supported error > > interrupt at root port is reported on a different interrupt line than > > MSI/INTx. So for Power Management event interrupt is also different > > line. > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > "System Error" case there? Do the Root Control enable bits (in the PCIe > Capability) control this interrupt? If so, maybe this makes more sense > than I thought. It supposedly not the "System Error" case. But "the Error Interrupt" case. Which means " Root Error Command register " could control the interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) May this kind of hardware design route broken the spec? > > We have to assume both notification paths work (the normal INTx/MSI/MSI- > X AER interrupts as well as the platform-specific System Errors), so if > we add support for System Errors, it should be structured so we prefer > INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. > AER would have to know which path it's using so aer_enable_rootport() > can disable the other one (currently it always disables System Errors). > > Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on > your devices to force the fallback to System Errors. > > How much would this screw up other PCIe services (PME, hotplug, VC, etc)? > Does MSI work for them? PME also like the AER. Hotplug is not supported. Others not known. Po Liu > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-07 10:07 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-07 10:07 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, > -----Original Message----- > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > Hi Bjorn, > > > I confirm we met same problem with KeyStone base on DesignWare > design. > > > > > > > > > Best regards, > > > Liu Po > > > > > >> -----Original Message----- > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >> Sent: Saturday, June 04, 2016 11:49 AM > > >> To: Murali Karicheri > > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob Herring > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > >> MSI/MSI-X/INTx mode > > >> > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > >> > Po, > > >> > > > >> > Sorry to hijack your discussion, but the problem seems to be > > >> same for > Keystone PCI controller which is also designware (old > version) based. > > >> > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > wrote: > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > >> linux-pci@vger.kernel.org; > >>>>> > > >> linux-arm-kernel@lists.infradead.org; > > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >> > >>>>> > > >> > >>>>> My understanding is that AER interrupt signaling can be > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > 6.2.4.1.2). > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > >> you > >>>>> saying it doesn't support INTx either? How is the > > >> interrupt you're requesting here different from INTx? > > >> > >>>> > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > >> > >>>> interrupt(arm interrupt controller) line. > > >> > >>> > > >> > >>> The Root Port is a PCI device and should follow the normal > > >> PCI > >>> rules for interrupts. As far as I understand, that > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > >> > >>> That's all from the PCI point of view, of course. > > >> > >> > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > >> it has > >> been on my TODO list for quite some time. Keystone > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > >> reporting errors received > >> at the root port, but use a > > >> platform interrupt instead (not > >> complaint to PCI standard as > > >> per PCI base spec). So I would need > >> similar change to have > > >> the error interrupt passed to the aer > >> driver. So there are > > >> hardware out there like Keystone which requires to support this > through platform IRQ. > > >> > > > > >> > > This is not a new area of the spec, and it's hard for me to > > >> believe > > that these two new PCIe controllers are both broken > > >> the same way > > (although I guess both are DesignWare-based, so > > >> maybe this is the > > same underlying problem in both cases?). I > > >> think it's more likely > > that we just haven't figured out the > > >> right way to describe this in the DT. > > >> > > > >> > Keystone is using an older version of the designware IP and it > > >> > implements all of the interrupts in the application register > > >> space > unlike other newer version of the hardware. So I assume, > > >> the version > used on Layerscape is also an older version and the > > >> both have same > issue in terms of non standard platform interrupt > > >> used for error reporting. > > >> > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > >> > > capability, and no MSI-X capability, right? > > >> > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > >> > > What does its Interrupt > > Pin register contain? If it's > > >> zero, it doesn't use INTx either, so > > according to the spec it > > >> should generate no interrupts. > > >> > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > >> writable > by software. So default is INTx A. > > >> > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > >> *Pin* is at 0x3d and should be read-only. > > >> > > > > You are right. But default is 1 at this address. > > > > >> Does your Keystone driver support MSI? If so, since your Root > > >> Port supports MSI, I would think we would use that by default, and > > >> the INTx stuff wouldn't even matter. > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > legacy INTx are supported." > > > But both of them not work for AER interrupt when devices or root > port report aer error. > > > But another GIC interrupt line do. > > > > Same with Keystone. Even though both MSI and INTx are supported error > > interrupt at root port is reported on a different interrupt line than > > MSI/INTx. So for Power Management event interrupt is also different > > line. > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > "System Error" case there? Do the Root Control enable bits (in the PCIe > Capability) control this interrupt? If so, maybe this makes more sense > than I thought. It supposedly not the "System Error" case. But "the Error Interrupt" case. Which means " Root Error Command register " could control the interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) May this kind of hardware design route broken the spec? > > We have to assume both notification paths work (the normal INTx/MSI/MSI- > X AER interrupts as well as the platform-specific System Errors), so if > we add support for System Errors, it should be structured so we prefer > INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. > AER would have to know which path it's using so aer_enable_rootport() > can disable the other one (currently it always disables System Errors). > > Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on > your devices to force the fallback to System Errors. > > How much would this screw up other PCIe services (PME, hotplug, VC, etc)? > Does MSI work for them? PME also like the AER. Hotplug is not supported. Others not known. Po Liu > > Bjorn _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-07 10:07 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-07 10:07 UTC (permalink / raw) To: Bjorn Helgaas, Murali Karicheri Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, > -----Original Message----- > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > Hi Bjorn, > > > I confirm we met same problem with KeyStone base on DesignWare > design. > > > > > > > > > Best regards, > > > Liu Po > > > > > >> -----Original Message----- > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > >> Sent: Saturday, June 04, 2016 11:49 AM > > >> To: Murali Karicheri > > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob Herring > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > >> MSI/MSI-X/INTx mode > > >> > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > >> > Po, > > >> > > > >> > Sorry to hijack your discussion, but the problem seems to be > > >> same for > Keystone PCI controller which is also designware (old > version) based. > > >> > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > wrote: > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > >> linux-pci@vger.kernel.org; > >>>>> > > >> linux-arm-kernel@lists.infradead.org; > > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > >> > >>>>> > > >> > >>>>> My understanding is that AER interrupt signaling can be > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > 6.2.4.1.2). > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > >> you > >>>>> saying it doesn't support INTx either? How is the > > >> interrupt you're requesting here different from INTx? > > >> > >>>> > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > >> > >>>> interrupt(arm interrupt controller) line. > > >> > >>> > > >> > >>> The Root Port is a PCI device and should follow the normal > > >> PCI > >>> rules for interrupts. As far as I understand, that > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > >> > >>> That's all from the PCI point of view, of course. > > >> > >> > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > >> it has > >> been on my TODO list for quite some time. Keystone > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > >> reporting errors received > >> at the root port, but use a > > >> platform interrupt instead (not > >> complaint to PCI standard as > > >> per PCI base spec). So I would need > >> similar change to have > > >> the error interrupt passed to the aer > >> driver. So there are > > >> hardware out there like Keystone which requires to support this > through platform IRQ. > > >> > > > > >> > > This is not a new area of the spec, and it's hard for me to > > >> believe > > that these two new PCIe controllers are both broken > > >> the same way > > (although I guess both are DesignWare-based, so > > >> maybe this is the > > same underlying problem in both cases?). I > > >> think it's more likely > > that we just haven't figured out the > > >> right way to describe this in the DT. > > >> > > > >> > Keystone is using an older version of the designware IP and it > > >> > implements all of the interrupts in the application register > > >> space > unlike other newer version of the hardware. So I assume, > > >> the version > used on Layerscape is also an older version and the > > >> both have same > issue in terms of non standard platform interrupt > > >> used for error reporting. > > >> > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > >> > > capability, and no MSI-X capability, right? > > >> > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > >> > > What does its Interrupt > > Pin register contain? If it's > > >> zero, it doesn't use INTx either, so > > according to the spec it > > >> should generate no interrupts. > > >> > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > >> writable > by software. So default is INTx A. > > >> > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > >> *Pin* is at 0x3d and should be read-only. > > >> > > > > You are right. But default is 1 at this address. > > > > >> Does your Keystone driver support MSI? If so, since your Root > > >> Port supports MSI, I would think we would use that by default, and > > >> the INTx stuff wouldn't even matter. > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > legacy INTx are supported." > > > But both of them not work for AER interrupt when devices or root > port report aer error. > > > But another GIC interrupt line do. > > > > Same with Keystone. Even though both MSI and INTx are supported error > > interrupt at root port is reported on a different interrupt line than > > MSI/INTx. So for Power Management event interrupt is also different > > line. > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > "System Error" case there? Do the Root Control enable bits (in the PCIe > Capability) control this interrupt? If so, maybe this makes more sense > than I thought. It supposedly not the "System Error" case. But "the Error Interrupt" case. Which means " Root Error Command register " could control the interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) May this kind of hardware design route broken the spec? > > We have to assume both notification paths work (the normal INTx/MSI/MSI- > X AER interrupts as well as the platform-specific System Errors), so if > we add support for System Errors, it should be structured so we prefer > INTx/MSI/MSI-X, and only fall back to System Errors if they don't work. > AER would have to know which path it's using so aer_enable_rootport() > can disable the other one (currently it always disables System Errors). > > Then you'd have to add quirks to mark MSI/MSI-X/INTx as being broken on > your devices to force the fallback to System Errors. > > How much would this screw up other PCIe services (PME, hotplug, VC, etc)? > Does MSI work for them? PME also like the AER. Hotplug is not supported. Others not known. Po Liu > > Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-07 10:07 ` Po Liu (?) @ 2016-06-07 22:46 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-07 22:46 UTC (permalink / raw) To: Po Liu Cc: Murali Karicheri, Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > Hi Bjorn, > > > > I confirm we met same problem with KeyStone base on DesignWare > > design. > > > > > > > > > > > > Best regards, > > > > Liu Po > > > > > > > >> -----Original Message----- > > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > >> Sent: Saturday, June 04, 2016 11:49 AM > > > >> To: Murali Karicheri > > > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > > > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob Herring > > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > > >> MSI/MSI-X/INTx mode > > > >> > > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > > >> > Po, > > > >> > > > > >> > Sorry to hijack your discussion, but the problem seems to be > > > >> same for > Keystone PCI controller which is also designware (old > > version) based. > > > >> > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > > wrote: > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > >> linux-pci@vger.kernel.org; > >>>>> > > > >> linux-arm-kernel@lists.infradead.org; > > > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > > >> > >>>>> > > > >> > >>>>> My understanding is that AER interrupt signaling can be > > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > 6.2.4.1.2). > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > > >> you > >>>>> saying it doesn't support INTx either? How is the > > > >> interrupt you're requesting here different from INTx? > > > >> > >>>> > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > > >> > >>>> interrupt(arm interrupt controller) line. > > > >> > >>> > > > >> > >>> The Root Port is a PCI device and should follow the normal > > > >> PCI > >>> rules for interrupts. As far as I understand, that > > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > > >> > >>> That's all from the PCI point of view, of course. > > > >> > >> > > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > > >> it has > >> been on my TODO list for quite some time. Keystone > > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > > >> reporting errors received > >> at the root port, but use a > > > >> platform interrupt instead (not > >> complaint to PCI standard as > > > >> per PCI base spec). So I would need > >> similar change to have > > > >> the error interrupt passed to the aer > >> driver. So there are > > > >> hardware out there like Keystone which requires to support this > > through platform IRQ. > > > >> > > > > > >> > > This is not a new area of the spec, and it's hard for me to > > > >> believe > > that these two new PCIe controllers are both broken > > > >> the same way > > (although I guess both are DesignWare-based, so > > > >> maybe this is the > > same underlying problem in both cases?). I > > > >> think it's more likely > > that we just haven't figured out the > > > >> right way to describe this in the DT. > > > >> > > > > >> > Keystone is using an older version of the designware IP and it > > > >> > implements all of the interrupts in the application register > > > >> space > unlike other newer version of the hardware. So I assume, > > > >> the version > used on Layerscape is also an older version and the > > > >> both have same > issue in terms of non standard platform interrupt > > > >> used for error reporting. > > > >> > > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > > >> > > capability, and no MSI-X capability, right? > > > >> > > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > > >> > > What does its Interrupt > > Pin register contain? If it's > > > >> zero, it doesn't use INTx either, so > > according to the spec it > > > >> should generate no interrupts. > > > >> > > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > > >> writable > by software. So default is INTx A. > > > >> > > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > > >> *Pin* is at 0x3d and should be read-only. > > > >> > > > > > > You are right. But default is 1 at this address. > > > > > > >> Does your Keystone driver support MSI? If so, since your Root > > > >> Port supports MSI, I would think we would use that by default, and > > > >> the INTx stuff wouldn't even matter. > > > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > > legacy INTx are supported." > > > > But both of them not work for AER interrupt when devices or root > > port report aer error. > > > > But another GIC interrupt line do. > > > > > > Same with Keystone. Even though both MSI and INTx are supported error > > > interrupt at root port is reported on a different interrupt line than > > > MSI/INTx. So for Power Management event interrupt is also different > > > line. > > > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > > "System Error" case there? Do the Root Control enable bits (in the PCIe > > Capability) control this interrupt? If so, maybe this makes more sense > > than I thought. > > It supposedly not the "System Error" case. But "the Error Interrupt" case. > Which means " Root Error Command register " could control the interrupt > line we have now. (refer PCIe spec r3.0, sec 6.2.6) Did you actually try this out and verify that the PCIe Root Control enable bits have no effect and the AER Root Error Command bits do control it? The names are very similar, so there's lots of room for misunderstanding here :) If the AER Root Error Command does control this interrupt, I think the PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also control it (per sec 6.2.4.1.2). > May this kind of hardware design route broken the spec? If the Reporting Enable bits in the Root Port's AER Root Error Command register control the interrupt, but the interrupt is not delivered via the Root Port's INTx or MSI/MSI-X, I think the design is not following the spec. All the information needed by the AER driver should be communicated via the config space mechanisms described in the spec (AER capability, MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works without change on future spec-compliant hardware. > PME also like the AER. Hotplug is not supported. Others not known. > Po Liu Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx or MSI/MSI-X. In particular, it says "Note that all other interrupt sources within the same Function will assert the same virtual INTx wire when requesting service." To me, that means that if we're using INTx, it will be the same INTx for AER, PME, hotplug, etc., and it should be the one indicated by the Interrupt Pin register. But I think on your Root Port: - There is an MSI capability, but MSI doesn't actually work at all - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X - AER interrupts are routed to some different IRQ Y - PME interrupts are routed to a third IRQ Z So how should we work around this? I think you should be able to get partway there with a quirk that sets: dev->no_msi = 1; dev->irq = Y; for this device. That should make AER work, but of course PME would not work. Is there a way to set up your interrupt controller so these three interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do that, you could set up INTA, the AER interrupt, and the PME interrupt to all be on the same IRQ and everything should work. Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-07 22:46 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-07 22:46 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > Hi Bjorn, > > > > I confirm we met same problem with KeyStone base on DesignWare > > design. > > > > > > > > > > > > Best regards, > > > > Liu Po > > > > > > > >> -----Original Message----- > > > >> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > > >> Sent: Saturday, June 04, 2016 11:49 AM > > > >> To: Murali Karicheri > > > >> Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- > > > >> kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > > > >> devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob Herring > > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > > >> MSI/MSI-X/INTx mode > > > >> > > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > > >> > Po, > > > >> > > > > >> > Sorry to hijack your discussion, but the problem seems to be > > > >> same for > Keystone PCI controller which is also designware (old > > version) based. > > > >> > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > > wrote: > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > > >> [mailto:helgaas at kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > >> linux-pci at vger.kernel.org; > >>>>> > > > >> linux-arm-kernel at lists.infradead.org; > > > >> > >>>>> linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; > > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > > >> > >>>>> > > > >> > >>>>> My understanding is that AER interrupt signaling can be > > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > 6.2.4.1.2). > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > > >> you > >>>>> saying it doesn't support INTx either? How is the > > > >> interrupt you're requesting here different from INTx? > > > >> > >>>> > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > > >> > >>>> interrupt(arm interrupt controller) line. > > > >> > >>> > > > >> > >>> The Root Port is a PCI device and should follow the normal > > > >> PCI > >>> rules for interrupts. As far as I understand, that > > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > > >> > >>> That's all from the PCI point of view, of course. > > > >> > >> > > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > > >> it has > >> been on my TODO list for quite some time. Keystone > > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > > >> reporting errors received > >> at the root port, but use a > > > >> platform interrupt instead (not > >> complaint to PCI standard as > > > >> per PCI base spec). So I would need > >> similar change to have > > > >> the error interrupt passed to the aer > >> driver. So there are > > > >> hardware out there like Keystone which requires to support this > > through platform IRQ. > > > >> > > > > > >> > > This is not a new area of the spec, and it's hard for me to > > > >> believe > > that these two new PCIe controllers are both broken > > > >> the same way > > (although I guess both are DesignWare-based, so > > > >> maybe this is the > > same underlying problem in both cases?). I > > > >> think it's more likely > > that we just haven't figured out the > > > >> right way to describe this in the DT. > > > >> > > > > >> > Keystone is using an older version of the designware IP and it > > > >> > implements all of the interrupts in the application register > > > >> space > unlike other newer version of the hardware. So I assume, > > > >> the version > used on Layerscape is also an older version and the > > > >> both have same > issue in terms of non standard platform interrupt > > > >> used for error reporting. > > > >> > > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > > >> > > capability, and no MSI-X capability, right? > > > >> > > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > > >> > > What does its Interrupt > > Pin register contain? If it's > > > >> zero, it doesn't use INTx either, so > > according to the spec it > > > >> should generate no interrupts. > > > >> > > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > > >> writable > by software. So default is INTx A. > > > >> > > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > > >> *Pin* is at 0x3d and should be read-only. > > > >> > > > > > > You are right. But default is 1 at this address. > > > > > > >> Does your Keystone driver support MSI? If so, since your Root > > > >> Port supports MSI, I would think we would use that by default, and > > > >> the INTx stuff wouldn't even matter. > > > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > > legacy INTx are supported." > > > > But both of them not work for AER interrupt when devices or root > > port report aer error. > > > > But another GIC interrupt line do. > > > > > > Same with Keystone. Even though both MSI and INTx are supported error > > > interrupt at root port is reported on a different interrupt line than > > > MSI/INTx. So for Power Management event interrupt is also different > > > line. > > > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > > "System Error" case there? Do the Root Control enable bits (in the PCIe > > Capability) control this interrupt? If so, maybe this makes more sense > > than I thought. > > It supposedly not the "System Error" case. But "the Error Interrupt" case. > Which means " Root Error Command register " could control the interrupt > line we have now. (refer PCIe spec r3.0, sec 6.2.6) Did you actually try this out and verify that the PCIe Root Control enable bits have no effect and the AER Root Error Command bits do control it? The names are very similar, so there's lots of room for misunderstanding here :) If the AER Root Error Command does control this interrupt, I think the PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also control it (per sec 6.2.4.1.2). > May this kind of hardware design route broken the spec? If the Reporting Enable bits in the Root Port's AER Root Error Command register control the interrupt, but the interrupt is not delivered via the Root Port's INTx or MSI/MSI-X, I think the design is not following the spec. All the information needed by the AER driver should be communicated via the config space mechanisms described in the spec (AER capability, MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works without change on future spec-compliant hardware. > PME also like the AER. Hotplug is not supported. Others not known. > Po Liu Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx or MSI/MSI-X. In particular, it says "Note that all other interrupt sources within the same Function will assert the same virtual INTx wire when requesting service." To me, that means that if we're using INTx, it will be the same INTx for AER, PME, hotplug, etc., and it should be the one indicated by the Interrupt Pin register. But I think on your Root Port: - There is an MSI capability, but MSI doesn't actually work at all - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X - AER interrupts are routed to some different IRQ Y - PME interrupts are routed to a third IRQ Z So how should we work around this? I think you should be able to get partway there with a quirk that sets: dev->no_msi = 1; dev->irq = Y; for this device. That should make AER work, but of course PME would not work. Is there a way to set up your interrupt controller so these three interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do that, you could set up INTA, the AER interrupt, and the PME interrupt to all be on the same IRQ and everything should work. Bjorn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-07 22:46 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-07 22:46 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, linux-arm-kernel, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, Mingkai Hu On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > Hi Bjorn, > > > > I confirm we met same problem with KeyStone base on DesignWare > > design. > > > > > > > > > > > > Best regards, > > > > Liu Po > > > > > > > >> -----Original Message----- > > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > >> Sent: Saturday, June 04, 2016 11:49 AM > > > >> To: Murali Karicheri > > > >> Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > > > >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > > > >> devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob Herring > > > >> Subject: Re: [PATCH 2/2] aer: add support aer interrupt with none > > > >> MSI/MSI-X/INTx mode > > > >> > > > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali Karicheri wrote: > > > >> > Po, > > > >> > > > > >> > Sorry to hijack your discussion, but the problem seems to be > > > >> same for > Keystone PCI controller which is also designware (old > > version) based. > > > >> > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali Karicheri > > wrote: > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn Helgaas > > > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, June 02, 2016 > > > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > >> linux-pci@vger.kernel.org; > >>>>> > > > >> linux-arm-kernel@lists.infradead.org; > > > >> > >>>>> linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > > >> Arnd > >>>>> Bergmann; Roy Zang; Marc Zyngier; Stuart Yoder; > > > >> Yang-Leo Li; > >>>>> Minghuan Lian; Bjorn Helgaas; Shawn Guo; > > > >> Mingkai Hu; Rob > >>>>> Herring > >>>>> Subject: Re: [PATCH 2/2] > > > >> aer: add support aer interrupt with > >>>>> none MSI/MSI-X/INTx > > > >> mode > >>>>> > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > > > >> >>>>> > >>>>> On Thu, May 26, 2016 at 02:00:06PM +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. > > > >> > >>>>> > > > >> > >>>>> My understanding is that AER interrupt signaling can be > > > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > 6.2.4.1.2). > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. Are > > > >> you > >>>>> saying it doesn't support INTx either? How is the > > > >> interrupt you're requesting here different from INTx? > > > >> > >>>> > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to indicate the > > > >> > >>>> devices or root error in RC mode. But use an independent SPI > > > >> > >>>> interrupt(arm interrupt controller) line. > > > >> > >>> > > > >> > >>> The Root Port is a PCI device and should follow the normal > > > >> PCI > >>> rules for interrupts. As far as I understand, that > > > >> means it > >>> should use MSI, MSI-X, or INTx. If your Root Port > > > >> doesn't use MSI > >>> or MSI-X, it should use INTx, the > > > >> PCI_INTERRUPT_PIN register > >>> should tell us which (INTA/ > > > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE should work to disable it. > > > >> > >>> That's all from the PCI point of view, of course. > > > >> > >> > > > >> > >> I am faced with the same issue on Keystone PCI hardware and > > > >> it has > >> been on my TODO list for quite some time. Keystone > > > >> PCI hardware > >> also doesn't use MSI or MSI-X or INTx for > > > >> reporting errors received > >> at the root port, but use a > > > >> platform interrupt instead (not > >> complaint to PCI standard as > > > >> per PCI base spec). So I would need > >> similar change to have > > > >> the error interrupt passed to the aer > >> driver. So there are > > > >> hardware out there like Keystone which requires to support this > > through platform IRQ. > > > >> > > > > > >> > > This is not a new area of the spec, and it's hard for me to > > > >> believe > > that these two new PCIe controllers are both broken > > > >> the same way > > (although I guess both are DesignWare-based, so > > > >> maybe this is the > > same underlying problem in both cases?). I > > > >> think it's more likely > > that we just haven't figured out the > > > >> right way to describe this in the DT. > > > >> > > > > >> > Keystone is using an older version of the designware IP and it > > > >> > implements all of the interrupts in the application register > > > >> space > unlike other newer version of the hardware. So I assume, > > > >> the version > used on Layerscape is also an older version and the > > > >> both have same > issue in terms of non standard platform interrupt > > > >> used for error reporting. > > > >> > > > > >> > > I assume you have a Root Port with an AER capability, no MSI > > > >> > > capability, and no MSI-X capability, right? > > > >> > > > > >> > Has AER capability and both MSI and INTx (legacy) capability > > > > >> > > What does its Interrupt > > Pin register contain? If it's > > > >> zero, it doesn't use INTx either, so > > according to the spec it > > > >> should generate no interrupts. > > > >> > > > > > >> > At address offset 0x3C by default has a value of 1, but it is > > > >> writable > by software. So default is INTx A. > > > >> > > > >> 0x3c is the Interrupt *Line*, which is read/write. The Interrupt > > > >> *Pin* is at 0x3d and should be read-only. > > > >> > > > > > > You are right. But default is 1 at this address. > > > > > > >> Does your Keystone driver support MSI? If so, since your Root > > > >> Port supports MSI, I would think we would use that by default, and > > > >> the INTx stuff wouldn't even matter. > > > > > > > > Layerscape is also shows "Both message signaled interrupts (MSI) and > > legacy INTx are supported." > > > > But both of them not work for AER interrupt when devices or root > > port report aer error. > > > > But another GIC interrupt line do. > > > > > > Same with Keystone. Even though both MSI and INTx are supported error > > > interrupt at root port is reported on a different interrupt line than > > > MSI/INTx. So for Power Management event interrupt is also different > > > line. > > > > I'm looking at the "Error Message Controls" diagram in the PCIe spec > > r3.0, sec 6.2.6. Does this hardware fit into the platform-specific > > "System Error" case there? Do the Root Control enable bits (in the PCIe > > Capability) control this interrupt? If so, maybe this makes more sense > > than I thought. > > It supposedly not the "System Error" case. But "the Error Interrupt" case. > Which means " Root Error Command register " could control the interrupt > line we have now. (refer PCIe spec r3.0, sec 6.2.6) Did you actually try this out and verify that the PCIe Root Control enable bits have no effect and the AER Root Error Command bits do control it? The names are very similar, so there's lots of room for misunderstanding here :) If the AER Root Error Command does control this interrupt, I think the PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also control it (per sec 6.2.4.1.2). > May this kind of hardware design route broken the spec? If the Reporting Enable bits in the Root Port's AER Root Error Command register control the interrupt, but the interrupt is not delivered via the Root Port's INTx or MSI/MSI-X, I think the design is not following the spec. All the information needed by the AER driver should be communicated via the config space mechanisms described in the spec (AER capability, MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works without change on future spec-compliant hardware. > PME also like the AER. Hotplug is not supported. Others not known. > Po Liu Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx or MSI/MSI-X. In particular, it says "Note that all other interrupt sources within the same Function will assert the same virtual INTx wire when requesting service." To me, that means that if we're using INTx, it will be the same INTx for AER, PME, hotplug, etc., and it should be the one indicated by the Interrupt Pin register. But I think on your Root Port: - There is an MSI capability, but MSI doesn't actually work at all - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X - AER interrupts are routed to some different IRQ Y - PME interrupts are routed to a third IRQ Z So how should we work around this? I think you should be able to get partway there with a quirk that sets: dev->no_msi = 1; dev->irq = Y; for this device. That should make AER work, but of course PME would not work. Is there a way to set up your interrupt controller so these three interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do that, you could set up INTA, the AER interrupt, and the PME interrupt to all be on the same IRQ and everything should work. Bjorn _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-06-07 22:46 ` Bjorn Helgaas (?) (?) @ 2016-06-08 4:56 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-08 4:56 UTC (permalink / raw) To: Bjorn Helgaas Cc: Murali Karicheri, Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, Thanks for the kindly reply. All these are helpful. > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > On Wed, June 08, 2016 6:47 AM > > On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > > -----Original Message----- > > > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > > Hi Bjorn, > > > > > I confirm we met same problem with KeyStone base on DesignWare > > > design. > > > > > > > > > > > > > > > Best regards, > > > > > Liu Po > > > > > > > > > >> -----Original Message----- > > > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> Sent: > > > Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> > > > Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > >> > > > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > >> > > > devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn > > > Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] > > > aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > > > > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali > > > Karicheri wrote: > > > > >> > Po, > > > > >> > > > > > >> > Sorry to hijack your discussion, but the problem seems to > > > be > >> same for > Keystone PCI controller which is also > > > designware (old > > > version) based. > > > > >> > > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali > > > Karicheri > > > wrote: > > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn > > > Helgaas > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, > > > June 02, 2016 > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > > >> linux-pci@vger.kernel.org; > >>>>> > >> > > > linux-arm-kernel@lists.infradead.org; > > > > >> > >>>>> linux-kernel@vger.kernel.org; > > > devicetree@vger.kernel.org; > >> Arnd > >>>>> Bergmann; Roy Zang; > > > Marc Zyngier; Stuart Yoder; > >> Yang-Leo Li; > >>>>> Minghuan > > > Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob > >>>>> > > > Herring > >>>>> Subject: Re: [PATCH 2/2] > >> aer: add support > > > aer interrupt with > >>>>> none MSI/MSI-X/INTx > >> mode > >>>>> > > > > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > >> >>>>> > >>>>> > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > >> > >>>>> > > > > >> > >>>>> My understanding is that AER interrupt signaling can > > > be > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > > 6.2.4.1.2). > > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. > > > Are > >> you > >>>>> saying it doesn't support INTx either? How > > > is the > >> interrupt you're requesting here different from INTx? > > > > >> > >>>> > > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to > > > indicate the > >> > >>>> devices or root error in RC mode. But use > > > an independent SPI > >> > >>>> interrupt(arm interrupt controller) > line. > > > > >> > >>> > > > > >> > >>> The Root Port is a PCI device and should follow the > > > normal > >> PCI > >>> rules for interrupts. As far as I > > > understand, that > >> means it > >>> should use MSI, MSI-X, or > > > INTx. If your Root Port > >> doesn't use MSI > >>> or MSI-X, it > > > should use INTx, the > >> PCI_INTERRUPT_PIN register > >>> should > > > tell us which (INTA/ > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE > should work to disable it. > > > > >> > >>> That's all from the PCI point of view, of course. > > > > >> > >> > > > > >> > >> I am faced with the same issue on Keystone PCI hardware > > > and > >> it has > >> been on my TODO list for quite some time. > > > Keystone > >> PCI hardware > >> also doesn't use MSI or MSI-X or > > > INTx for > >> reporting errors received > >> at the root port, but > > > use a > >> platform interrupt instead (not > >> complaint to PCI > > > standard as > >> per PCI base spec). So I would need > >> similar > > > change to have > >> the error interrupt passed to the aer > >> > > > driver. So there are > >> hardware out there like Keystone which > > > requires to support this through platform IRQ. > > > > >> > > > > > > >> > > This is not a new area of the spec, and it's hard for me > > > to > >> believe > > that these two new PCIe controllers are both > > > broken > >> the same way > > (although I guess both are > > > DesignWare-based, so > >> maybe this is the > > same underlying > > > problem in both cases?). I > >> think it's more likely > > that > > > we just haven't figured out the > >> right way to describe this in > the DT. > > > > >> > > > > > >> > Keystone is using an older version of the designware IP and > > > it > >> > implements all of the interrupts in the application > > > register > >> space > unlike other newer version of the hardware. > > > So I assume, > >> the version > used on Layerscape is also an > > > older version and the > >> both have same > issue in terms of non > > > standard platform interrupt > >> used for error reporting. > > > > >> > > > > > >> > > I assume you have a Root Port with an AER capability, no > > > MSI > >> > > capability, and no MSI-X capability, right? > > > > >> > > > > > >> > Has AER capability and both MSI and INTx (legacy) > > > capability > > >> > > What does its Interrupt > > Pin register > > > contain? If it's > >> zero, it doesn't use INTx either, so > > > > > according to the spec it > >> should generate no interrupts. > > > > >> > > > > > > >> > At address offset 0x3C by default has a value of 1, but it > > > is > >> writable > by software. So default is INTx A. > > > > >> > > > > >> 0x3c is the Interrupt *Line*, which is read/write. The > > > Interrupt > >> *Pin* is at 0x3d and should be read-only. > > > > >> > > > > > > > > You are right. But default is 1 at this address. > > > > > > > > >> Does your Keystone driver support MSI? If so, since your > > > Root > >> Port supports MSI, I would think we would use that by > > > default, and > >> the INTx stuff wouldn't even matter. > > > > > > > > > > Layerscape is also shows "Both message signaled interrupts > > > (MSI) and legacy INTx are supported." > > > > > But both of them not work for AER interrupt when devices or > > > root port report aer error. > > > > > But another GIC interrupt line do. > > > > > > > > Same with Keystone. Even though both MSI and INTx are supported > > > error > interrupt at root port is reported on a different interrupt > > > line than > MSI/INTx. So for Power Management event interrupt is > > > also different > line. > > > > > > I'm looking at the "Error Message Controls" diagram in the PCIe > > > spec r3.0, sec 6.2.6. Does this hardware fit into the > > > platform-specific "System Error" case there? Do the Root Control > > > enable bits (in the PCIe > > > Capability) control this interrupt? If so, maybe this makes more > > > sense than I thought. > > > > It supposedly not the "System Error" case. But "the Error Interrupt" > case. > > Which means " Root Error Command register " could control the > > interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) > > Did you actually try this out and verify that the PCIe Root Control > enable bits have no effect and the AER Root Error Command bits do > control it? The names are very similar, so there's lots of room for > misunderstanding here :) Yes, all these result were tested before reply. > > If the AER Root Error Command does control this interrupt, I think the > PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also > control it (per sec 6.2.4.1.2). Yes, I am sure the PCI_COMMAND_INTX_DISABLE bit can also control this interrupt. > > > May this kind of hardware design route broken the spec? > > If the Reporting Enable bits in the Root Port's AER Root Error Command > register control the interrupt, but the interrupt is not delivered via > the Root Port's INTx or MSI/MSI-X, I think the design is not following > the spec. > > All the information needed by the AER driver should be communicated via > the config space mechanisms described in the spec (AER capability, > MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works > without change on future spec-compliant hardware. > > > PME also like the AER. Hotplug is not supported. Others not known. > > Po Liu > > Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx > or MSI/MSI-X. > > In particular, it says "Note that all other interrupt sources within the > same Function will assert the same virtual INTx wire when requesting > service." To me, that means that if we're using INTx, it will be the > same INTx for AER, PME, hotplug, etc., and it should be the one > indicated by the Interrupt Pin register. > > But I think on your Root Port: > > - There is an MSI capability, but MSI doesn't actually work at all > - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X > - AER interrupts are routed to some different IRQ Y > - PME interrupts are routed to a third IRQ Z > The descriptions are all right. > So how should we work around this? I think you should be able to get > partway there with a quirk that sets: > > dev->no_msi = 1; > dev->irq = Y; > > for this device. That should make AER work, but of course PME would not > work. > > Is there a way to set up your interrupt controller so these three > interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do > that, you could set up INTA, the AER interrupt, and the PME interrupt to > all be on the same IRQ and everything should work. > > Bjorn We'll think about all the ways. It is really helpful, thanks! ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-08 4:56 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-08 4:56 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, Thanks for the kindly reply. All these are helpful. > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > On Wed, June 08, 2016 6:47 AM > > On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > > -----Original Message----- > > > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > > Hi Bjorn, > > > > > I confirm we met same problem with KeyStone base on DesignWare > > > design. > > > > > > > > > > > > > > > Best regards, > > > > > Liu Po > > > > > > > > > >> -----Original Message----- > > > > >> From: Bjorn Helgaas [mailto:helgaas at kernel.org] > >> Sent: > > > Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> > > > Cc: Po Liu; linux-pci at vger.kernel.org; linux-arm- > >> > > > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > >> > > > devicetree at vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn > > > Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] > > > aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > > > > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali > > > Karicheri wrote: > > > > >> > Po, > > > > >> > > > > > >> > Sorry to hijack your discussion, but the problem seems to > > > be > >> same for > Keystone PCI controller which is also > > > designware (old > > > version) based. > > > > >> > > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali > > > Karicheri > > > wrote: > > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn > > > Helgaas > >> [mailto:helgaas at kernel.org] > >>>>> Sent: Thursday, > > > June 02, 2016 > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > > >> linux-pci at vger.kernel.org; > >>>>> > >> > > > linux-arm-kernel at lists.infradead.org; > > > > >> > >>>>> linux-kernel at vger.kernel.org; > > > devicetree at vger.kernel.org; > >> Arnd > >>>>> Bergmann; Roy Zang; > > > Marc Zyngier; Stuart Yoder; > >> Yang-Leo Li; > >>>>> Minghuan > > > Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob > >>>>> > > > Herring > >>>>> Subject: Re: [PATCH 2/2] > >> aer: add support > > > aer interrupt with > >>>>> none MSI/MSI-X/INTx > >> mode > >>>>> > > > > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > >> >>>>> > >>>>> > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > >> > >>>>> > > > > >> > >>>>> My understanding is that AER interrupt signaling can > > > be > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > > 6.2.4.1.2). > > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. > > > Are > >> you > >>>>> saying it doesn't support INTx either? How > > > is the > >> interrupt you're requesting here different from INTx? > > > > >> > >>>> > > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to > > > indicate the > >> > >>>> devices or root error in RC mode. But use > > > an independent SPI > >> > >>>> interrupt(arm interrupt controller) > line. > > > > >> > >>> > > > > >> > >>> The Root Port is a PCI device and should follow the > > > normal > >> PCI > >>> rules for interrupts. As far as I > > > understand, that > >> means it > >>> should use MSI, MSI-X, or > > > INTx. If your Root Port > >> doesn't use MSI > >>> or MSI-X, it > > > should use INTx, the > >> PCI_INTERRUPT_PIN register > >>> should > > > tell us which (INTA/ > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE > should work to disable it. > > > > >> > >>> That's all from the PCI point of view, of course. > > > > >> > >> > > > > >> > >> I am faced with the same issue on Keystone PCI hardware > > > and > >> it has > >> been on my TODO list for quite some time. > > > Keystone > >> PCI hardware > >> also doesn't use MSI or MSI-X or > > > INTx for > >> reporting errors received > >> at the root port, but > > > use a > >> platform interrupt instead (not > >> complaint to PCI > > > standard as > >> per PCI base spec). So I would need > >> similar > > > change to have > >> the error interrupt passed to the aer > >> > > > driver. So there are > >> hardware out there like Keystone which > > > requires to support this through platform IRQ. > > > > >> > > > > > > >> > > This is not a new area of the spec, and it's hard for me > > > to > >> believe > > that these two new PCIe controllers are both > > > broken > >> the same way > > (although I guess both are > > > DesignWare-based, so > >> maybe this is the > > same underlying > > > problem in both cases?). I > >> think it's more likely > > that > > > we just haven't figured out the > >> right way to describe this in > the DT. > > > > >> > > > > > >> > Keystone is using an older version of the designware IP and > > > it > >> > implements all of the interrupts in the application > > > register > >> space > unlike other newer version of the hardware. > > > So I assume, > >> the version > used on Layerscape is also an > > > older version and the > >> both have same > issue in terms of non > > > standard platform interrupt > >> used for error reporting. > > > > >> > > > > > >> > > I assume you have a Root Port with an AER capability, no > > > MSI > >> > > capability, and no MSI-X capability, right? > > > > >> > > > > > >> > Has AER capability and both MSI and INTx (legacy) > > > capability > > >> > > What does its Interrupt > > Pin register > > > contain? If it's > >> zero, it doesn't use INTx either, so > > > > > according to the spec it > >> should generate no interrupts. > > > > >> > > > > > > >> > At address offset 0x3C by default has a value of 1, but it > > > is > >> writable > by software. So default is INTx A. > > > > >> > > > > >> 0x3c is the Interrupt *Line*, which is read/write. The > > > Interrupt > >> *Pin* is at 0x3d and should be read-only. > > > > >> > > > > > > > > You are right. But default is 1 at this address. > > > > > > > > >> Does your Keystone driver support MSI? If so, since your > > > Root > >> Port supports MSI, I would think we would use that by > > > default, and > >> the INTx stuff wouldn't even matter. > > > > > > > > > > Layerscape is also shows "Both message signaled interrupts > > > (MSI) and legacy INTx are supported." > > > > > But both of them not work for AER interrupt when devices or > > > root port report aer error. > > > > > But another GIC interrupt line do. > > > > > > > > Same with Keystone. Even though both MSI and INTx are supported > > > error > interrupt at root port is reported on a different interrupt > > > line than > MSI/INTx. So for Power Management event interrupt is > > > also different > line. > > > > > > I'm looking at the "Error Message Controls" diagram in the PCIe > > > spec r3.0, sec 6.2.6. Does this hardware fit into the > > > platform-specific "System Error" case there? Do the Root Control > > > enable bits (in the PCIe > > > Capability) control this interrupt? If so, maybe this makes more > > > sense than I thought. > > > > It supposedly not the "System Error" case. But "the Error Interrupt" > case. > > Which means " Root Error Command register " could control the > > interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) > > Did you actually try this out and verify that the PCIe Root Control > enable bits have no effect and the AER Root Error Command bits do > control it? The names are very similar, so there's lots of room for > misunderstanding here :) Yes, all these result were tested before reply. > > If the AER Root Error Command does control this interrupt, I think the > PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also > control it (per sec 6.2.4.1.2). Yes, I am sure the PCI_COMMAND_INTX_DISABLE bit can also control this interrupt. > > > May this kind of hardware design route broken the spec? > > If the Reporting Enable bits in the Root Port's AER Root Error Command > register control the interrupt, but the interrupt is not delivered via > the Root Port's INTx or MSI/MSI-X, I think the design is not following > the spec. > > All the information needed by the AER driver should be communicated via > the config space mechanisms described in the spec (AER capability, > MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works > without change on future spec-compliant hardware. > > > PME also like the AER. Hotplug is not supported. Others not known. > > Po Liu > > Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx > or MSI/MSI-X. > > In particular, it says "Note that all other interrupt sources within the > same Function will assert the same virtual INTx wire when requesting > service." To me, that means that if we're using INTx, it will be the > same INTx for AER, PME, hotplug, etc., and it should be the one > indicated by the Interrupt Pin register. > > But I think on your Root Port: > > - There is an MSI capability, but MSI doesn't actually work at all > - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X > - AER interrupts are routed to some different IRQ Y > - PME interrupts are routed to a third IRQ Z > The descriptions are all right. > So how should we work around this? I think you should be able to get > partway there with a quirk that sets: > > dev->no_msi = 1; > dev->irq = Y; > > for this device. That should make AER work, but of course PME would not > work. > > Is there a way to set up your interrupt controller so these three > interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do > that, you could set up INTA, the AER interrupt, and the PME interrupt to > all be on the same IRQ and everything should work. > > Bjorn We'll think about all the ways. It is really helpful, thanks! ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-08 4:56 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-08 4:56 UTC (permalink / raw) To: Bjorn Helgaas Cc: Murali Karicheri, Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel SGkgQmpvcm4sDQoNClRoYW5rcyBmb3IgdGhlIGtpbmRseSByZXBseS4gQWxsIHRoZXNlIGFyZSBo ZWxwZnVsLg0KDQo+ICBGcm9tOiBCam9ybiBIZWxnYWFzIFttYWlsdG86aGVsZ2Fhc0BrZXJuZWwu b3JnXQ0KPiAgT24gV2VkLCBKdW5lIDA4LCAyMDE2IDY6NDcgQU0NCj4gIA0KPiAgT24gVHVlLCBK dW4gMDcsIDIwMTYgYXQgMTA6MDc6NDBBTSArMDAwMCwgUG8gTGl1IHdyb3RlOg0KPiAgPiBIaSBC am9ybiwNCj4gID4NCj4gID4gPiAgLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gID4gPg0K PiAgPiA+ICBPbiBNb24sIEp1biAwNiwgMjAxNiBhdCAxMDowMTo0NEFNIC0wNDAwLCBNdXJhbGkg S2FyaWNoZXJpIHdyb3RlOg0KPiAgPiA+ICA+IE9uIDA2LzA2LzIwMTYgMDM6MzIgQU0sIFBvIExp dSB3cm90ZToNCj4gID4gPiAgPiA+IEhpIEJqb3JuLA0KPiAgPiA+ICA+ID4gSSBjb25maXJtIHdl IG1ldCBzYW1lIHByb2JsZW0gd2l0aCBLZXlTdG9uZSBiYXNlIG9uIERlc2lnbldhcmUNCj4gID4g PiBkZXNpZ24uDQo+ICA+ID4gID4gPg0KPiAgPiA+ICA+ID4NCj4gID4gPiAgPiA+IEJlc3QgcmVn YXJkcywNCj4gID4gPiAgPiA+IExpdSBQbw0KPiAgPiA+ICA+ID4NCj4gID4gPiAgPiA+PiAgLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gID4gPiAgPiA+PiAgRnJvbTogQmpvcm4gSGVsZ2Fh cyBbbWFpbHRvOmhlbGdhYXNAa2VybmVsLm9yZ10gID4gPj4gIFNlbnQ6DQo+ICA+ID4gU2F0dXJk YXksIEp1bmUgMDQsIDIwMTYgMTE6NDkgQU0gID4gPj4gIFRvOiBNdXJhbGkgS2FyaWNoZXJpICA+ ID4+DQo+ICA+ID4gQ2M6IFBvIExpdTsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgbGludXgt YXJtLSAgPiA+Pg0KPiAgPiA+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1rZXJu ZWxAdmdlci5rZXJuZWwub3JnOyAgPiA+Pg0KPiAgPiA+IGRldmljZXRyZWVAdmdlci5rZXJuZWwu b3JnOyBBcm5kIEJlcmdtYW5uOyBSb3kgWmFuZzsgTWFyYyBaeW5naWVyOw0KPiAgPiA+ID4gPj4g U3R1YXJ0IFlvZGVyOyBZYW5nLUxlbyBMaTsgTWluZ2h1YW4gTGlhbjsgQmpvcm4gSGVsZ2Fhczsg U2hhd24NCj4gID4gPiBHdW87ICA+ID4+IE1pbmdrYWkgSHU7IFJvYiBIZXJyaW5nICA+ID4+ICBT dWJqZWN0OiBSZTogW1BBVENIIDIvMl0NCj4gID4gPiBhZXI6IGFkZCBzdXBwb3J0IGFlciBpbnRl cnJ1cHQgd2l0aCBub25lICA+ID4+IE1TSS9NU0ktWC9JTlR4IG1vZGUNCj4gID4gPiA+ID4+ICA+ ID4+ICBPbiBGcmksIEp1biAwMywgMjAxNiBhdCAwMTozMToxMVBNIC0wNDAwLCBNdXJhbGkNCj4g ID4gPiBLYXJpY2hlcmkgd3JvdGU6DQo+ICA+ID4gID4gPj4gID4gUG8sDQo+ICA+ID4gID4gPj4g ID4NCj4gID4gPiAgPiA+PiAgPiBTb3JyeSB0byBoaWphY2sgeW91ciBkaXNjdXNzaW9uLCBidXQg dGhlIHByb2JsZW0gc2VlbXMgdG8NCj4gID4gPiBiZSAgPiA+PiBzYW1lIGZvciAgPiBLZXlzdG9u ZSBQQ0kgY29udHJvbGxlciB3aGljaCBpcyBhbHNvDQo+ICA+ID4gZGVzaWdud2FyZSAob2xkDQo+ ICA+ID4gIHZlcnNpb24pIGJhc2VkLg0KPiAgPiA+ICA+ID4+ICA+DQo+ICA+ID4gID4gPj4gID4g T24gMDYvMDMvMjAxNiAxMjowOSBBTSwgQmpvcm4gSGVsZ2FhcyB3cm90ZToNCj4gID4gPiAgPiA+ PiAgPiA+IE9uIFRodSwgSnVuIDAyLCAyMDE2IGF0IDExOjM3OjI4QU0gLTA0MDAsIE11cmFsaQ0K PiAgPiA+IEthcmljaGVyaQ0KPiAgPiA+ICB3cm90ZToNCj4gID4gPiAgPiA+PiAgPiA+PiBPbiAw Ni8wMi8yMDE2IDA5OjU1IEFNLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0KPiAgPiA+ICA+ID4+ICA+ ID4+PiBPbiBUaHUsIEp1biAwMiwgMjAxNiBhdCAwNTowMToxOUFNICswMDAwLCBQbyBMaXUgd3Jv dGU6DQo+ICA+ID4gID4gPj4gID4gPj4+Pj4gIC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tICA+ ID4+Pj4+ICBGcm9tOiBCam9ybg0KPiAgPiA+IEhlbGdhYXMgID4gPj4gW21haWx0bzpoZWxnYWFz QGtlcm5lbC5vcmddICA+ID4+Pj4+ICBTZW50OiBUaHVyc2RheSwNCj4gID4gPiBKdW5lIDAyLCAy MDE2ICA+ID4+IDExOjQ4IEFNICA+ID4+Pj4+ICBUbzogUG8gTGl1ICA+ID4+Pj4+ICBDYzoNCj4g ID4gPiAgPiA+PiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyAgPiA+Pj4+PiAgPiA+Pg0KPiAg PiA+IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gID4gPiAgPiA+PiAg PiA+Pj4+PiAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gID4gPiBkZXZpY2V0cmVl QHZnZXIua2VybmVsLm9yZzsgID4gPj4gQXJuZCAgPiA+Pj4+PiBCZXJnbWFubjsgIFJveSBaYW5n Ow0KPiAgPiA+IE1hcmMgWnluZ2llcjsgU3R1YXJ0IFlvZGVyOyAgPiA+PiBZYW5nLUxlbyBMaTsg ID4gPj4+Pj4gTWluZ2h1YW4NCj4gID4gPiBMaWFuOyBCam9ybiAgSGVsZ2FhczsgU2hhd24gR3Vv OyAgPiA+PiBNaW5na2FpIEh1OyBSb2IgID4gPj4+Pj4NCj4gID4gPiBIZXJyaW5nICA+ID4+Pj4+ ICBTdWJqZWN0OiBSZTogW1BBVENIIDIvMl0gID4gPj4gYWVyOiBhZGQgc3VwcG9ydA0KPiAgPiA+ IGFlciBpbnRlcnJ1cHQgd2l0aCAgPiA+Pj4+PiBub25lICBNU0kvTVNJLVgvSU5UeCAgPiA+PiBt b2RlICA+ID4+Pj4+DQo+ICA+ID4gPiA+Pj4+PiAgWytjYyBSb2JdICA+ID4+Pj4+ICA+ID4+Pj4+ ICBIaSBQbywgID4gID4gPj4gPj4+Pj4gID4gPj4+Pj4NCj4gID4gPiBPbiBUaHUsIE1heSAyNiwg MjAxNiBhdCAwMjowMDowNlBNICswODAwLCBQbyBMaXUgID4gPj4gd3JvdGU6DQo+ICA+ID4gID4g Pj4gID4gPj4+Pj4gID4gT24gc29tZSBwbGF0Zm9ybXMsIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBv cnQgID4gPj4NCj4gID4gPiBNU0kvTVNJLVgvSU5UeCAgaW4gUkMgbW9kZS4NCj4gID4gPiAgPiA+ PiAgPiA+Pj4+PiAgPiBXaGVuIGNoaXAgc3VwcG9ydCB0aGUgYWVyIGludGVycnVwdCB3aXRoIG5v bmUgID4NCj4gID4gPiA+PiBNU0kvTVNJLVgvSU5UeCAgPiA+Pj4+PiBtb2RlLCAgPiBtYXliZSB0 aGVyZSBpcyBpbnRlcnJ1cHQgbGluZQ0KPiAgPiA+IGZvciAgPiA+PiBhZXIgcG1lIGV0Yy4gU2Vh cmNoICA+ID4+Pj4+IHRoZSBpbnRlcnJ1cHQgID4gbnVtYmVyIGluDQo+ICA+ID4gdGhlIGZkdCAg ZmlsZS4NCj4gID4gPiAgPiA+PiAgPiA+Pj4+Pg0KPiAgPiA+ICA+ID4+ICA+ID4+Pj4+ICBNeSB1 bmRlcnN0YW5kaW5nIGlzIHRoYXQgQUVSIGludGVycnVwdCBzaWduYWxpbmcgY2FuDQo+ICA+ID4g YmUgID4gPj4gZG9uZSAgPiA+Pj4+PiB2aWEgSU5UeCwgIE1TSSwgb3IgTVNJLVggKFBDSWUgc3Bl YyByMy4wLCBzZWMNCj4gID4gPiA2LjIuNC4xLjIpLg0KPiAgPiA+ICA+ID4+ICA+ID4+Pj4+IEFw cGFyZW50bHkgeW91ciBkZXZpY2UgIGRvZXNuJ3Qgc3VwcG9ydCBNU0kgb3IgTVNJLVguDQo+ICA+ ID4gQXJlICA+ID4+IHlvdSAgPiA+Pj4+PiBzYXlpbmcgaXQgZG9lc24ndCBzdXBwb3J0IElOVHgg IGVpdGhlcj8gIEhvdw0KPiAgPiA+IGlzIHRoZSAgPiA+PiBpbnRlcnJ1cHQgIHlvdSdyZSByZXF1 ZXN0aW5nIGhlcmUgZGlmZmVyZW50IGZyb20gSU5UeD8NCj4gID4gPiAgPiA+PiAgPiA+Pj4+DQo+ ICA+ID4gID4gPj4gID4gPj4+PiBMYXllcnNjYXBlIHVzZSBub25lIG9mIE1TSSBvciBNU0ktWCBv ciBJTlR4IHRvDQo+ICA+ID4gaW5kaWNhdGUgdGhlICA+ID4+ID4gPj4+PiBkZXZpY2VzIG9yIHJv b3QgZXJyb3IgaW4gUkMgbW9kZS4gQnV0IHVzZQ0KPiAgPiA+IGFuIGluZGVwZW5kZW50IFNQSSAg PiA+PiA+ID4+Pj4gaW50ZXJydXB0KGFybSBpbnRlcnJ1cHQgY29udHJvbGxlcikNCj4gIGxpbmUu DQo+ICA+ID4gID4gPj4gID4gPj4+DQo+ICA+ID4gID4gPj4gID4gPj4+IFRoZSBSb290IFBvcnQg aXMgYSBQQ0kgZGV2aWNlIGFuZCBzaG91bGQgZm9sbG93IHRoZQ0KPiAgPiA+IG5vcm1hbCAgPiA+ PiBQQ0kgID4gPj4+IHJ1bGVzIGZvciBpbnRlcnJ1cHRzLiAgQXMgZmFyIGFzIEkNCj4gID4gPiB1 bmRlcnN0YW5kLCB0aGF0ICA+ID4+IG1lYW5zIGl0ICA+ID4+PiBzaG91bGQgdXNlIE1TSSwgTVNJ LVgsIG9yDQo+ICA+ID4gSU5UeC4gIElmIHlvdXIgUm9vdCBQb3J0ICA+ID4+IGRvZXNuJ3QgdXNl IE1TSSAgPiA+Pj4gb3IgTVNJLVgsIGl0DQo+ICA+ID4gc2hvdWxkIHVzZSBJTlR4LCB0aGUgID4g Pj4gUENJX0lOVEVSUlVQVF9QSU4gcmVnaXN0ZXIgID4gPj4+IHNob3VsZA0KPiAgPiA+IHRlbGwg dXMgd2hpY2ggKElOVEEvICA+ID4+IElOVEIvZXRjLiksIGFuZCAgUENJX0NPTU1BTkRfSU5UWF9E SVNBQkxFDQo+ICBzaG91bGQgd29yayB0byBkaXNhYmxlIGl0Lg0KPiAgPiA+ICA+ID4+ICA+ID4+ PiBUaGF0J3MgYWxsIGZyb20gdGhlIFBDSSBwb2ludCBvZiB2aWV3LCBvZiBjb3Vyc2UuDQo+ICA+ ID4gID4gPj4gID4gPj4NCj4gID4gPiAgPiA+PiAgPiA+PiBJIGFtIGZhY2VkIHdpdGggdGhlIHNh bWUgaXNzdWUgb24gS2V5c3RvbmUgUENJIGhhcmR3YXJlDQo+ICA+ID4gYW5kICA+ID4+IGl0IGhh cyAgPiA+PiBiZWVuIG9uIG15IFRPRE8gbGlzdCAgZm9yIHF1aXRlIHNvbWUgdGltZS4NCj4gID4g PiBLZXlzdG9uZSAgPiA+PiBQQ0kgaGFyZHdhcmUgID4gPj4gYWxzbyBkb2Vzbid0IHVzZSBNU0kg b3IgTVNJLVggb3INCj4gID4gPiBJTlR4IGZvciAgPiA+PiByZXBvcnRpbmcgZXJyb3JzIHJlY2Vp dmVkICA+ID4+IGF0IHRoZSByb290IHBvcnQsIGJ1dA0KPiAgPiA+IHVzZSBhICA+ID4+IHBsYXRm b3JtIGludGVycnVwdCBpbnN0ZWFkIChub3QgID4gPj4gY29tcGxhaW50IHRvIFBDSQ0KPiAgPiA+ IHN0YW5kYXJkIGFzICA+ID4+IHBlciBQQ0kgYmFzZSBzcGVjKS4gU28gSSB3b3VsZCBuZWVkICA+ ID4+IHNpbWlsYXINCj4gID4gPiBjaGFuZ2UgdG8gaGF2ZSAgPiA+PiB0aGUgZXJyb3IgaW50ZXJy dXB0IHBhc3NlZCB0byB0aGUgYWVyICA+ID4+DQo+ICA+ID4gZHJpdmVyLiBTbyB0aGVyZSBhcmUg ID4gPj4gaGFyZHdhcmUgb3V0IHRoZXJlIGxpa2UgS2V5c3RvbmUgd2hpY2gNCj4gID4gPiByZXF1 aXJlcyB0byBzdXBwb3J0IHRoaXMgIHRocm91Z2ggcGxhdGZvcm0gSVJRLg0KPiAgPiA+ICA+ID4+ ICA+ID4NCj4gID4gPiAgPiA+PiAgPiA+IFRoaXMgaXMgbm90IGEgbmV3IGFyZWEgb2YgdGhlIHNw ZWMsIGFuZCBpdCdzIGhhcmQgZm9yIG1lDQo+ICA+ID4gdG8gID4gPj4gYmVsaWV2ZSAgPiA+IHRo YXQgdGhlc2UgdHdvIG5ldyBQQ0llIGNvbnRyb2xsZXJzIGFyZSBib3RoDQo+ICA+ID4gYnJva2Vu ICA+ID4+IHRoZSBzYW1lIHdheSAgPiA+IChhbHRob3VnaCBJIGd1ZXNzIGJvdGggYXJlDQo+ICA+ ID4gRGVzaWduV2FyZS1iYXNlZCwgc28gID4gPj4gbWF5YmUgdGhpcyBpcyB0aGUgID4gPiBzYW1l IHVuZGVybHlpbmcNCj4gID4gPiBwcm9ibGVtIGluIGJvdGggY2FzZXM/KS4gIEkgID4gPj4gdGhp bmsgaXQncyBtb3JlIGxpa2VseSAgPiA+IHRoYXQNCj4gID4gPiB3ZSBqdXN0IGhhdmVuJ3QgZmln dXJlZCBvdXQgdGhlICA+ID4+IHJpZ2h0IHdheSB0byBkZXNjcmliZSB0aGlzIGluDQo+ICB0aGUg RFQuDQo+ICA+ID4gID4gPj4gID4NCj4gID4gPiAgPiA+PiAgPiBLZXlzdG9uZSBpcyB1c2luZyBh biBvbGRlciB2ZXJzaW9uIG9mIHRoZSBkZXNpZ253YXJlIElQIGFuZA0KPiAgPiA+IGl0ICA+ID4+ ID4gaW1wbGVtZW50cyBhbGwgb2YgdGhlIGludGVycnVwdHMgaW4gdGhlIGFwcGxpY2F0aW9uDQo+ ICA+ID4gcmVnaXN0ZXIgID4gPj4gc3BhY2UgID4gdW5saWtlIG90aGVyIG5ld2VyIHZlcnNpb24g b2YgdGhlIGhhcmR3YXJlLg0KPiAgPiA+IFNvIEkgYXNzdW1lLCAgPiA+PiB0aGUgdmVyc2lvbiAg PiB1c2VkIG9uIExheWVyc2NhcGUgaXMgYWxzbyBhbg0KPiAgPiA+IG9sZGVyIHZlcnNpb24gYW5k IHRoZSAgPiA+PiBib3RoIGhhdmUgc2FtZSAgPiBpc3N1ZSBpbiB0ZXJtcyBvZiBub24NCj4gID4g PiBzdGFuZGFyZCBwbGF0Zm9ybSBpbnRlcnJ1cHQgID4gPj4gdXNlZCBmb3IgZXJyb3IgIHJlcG9y dGluZy4NCj4gID4gPiAgPiA+PiAgPg0KPiAgPiA+ICA+ID4+ICA+ID4gSSBhc3N1bWUgeW91IGhh dmUgYSBSb290IFBvcnQgd2l0aCBhbiBBRVIgY2FwYWJpbGl0eSwgbm8NCj4gID4gPiBNU0kgID4g Pj4gPiA+IGNhcGFiaWxpdHksIGFuZCBubyBNU0ktWCBjYXBhYmlsaXR5LCByaWdodD8NCj4gID4g PiAgPiA+PiAgPg0KPiAgPiA+ICA+ID4+ICA+IEhhcyBBRVIgY2FwYWJpbGl0eSBhbmQgYm90aCBN U0kgYW5kIElOVHggKGxlZ2FjeSkNCj4gID4gPiBjYXBhYmlsaXR5ICA+ICA+ID4+ID4gPiBXaGF0 IGRvZXMgaXRzIEludGVycnVwdCAgPiA+IFBpbiByZWdpc3Rlcg0KPiAgPiA+IGNvbnRhaW4/ICBJ ZiBpdCdzICA+ID4+IHplcm8sIGl0IGRvZXNuJ3QgdXNlIElOVHggZWl0aGVyLCBzbyAgPiA+DQo+ ICA+ID4gYWNjb3JkaW5nIHRvIHRoZSBzcGVjIGl0ICA+ID4+IHNob3VsZCBnZW5lcmF0ZSBubyBp bnRlcnJ1cHRzLg0KPiAgPiA+ICA+ID4+ICA+ID4NCj4gID4gPiAgPiA+PiAgPiBBdCBhZGRyZXNz IG9mZnNldCAweDNDIGJ5IGRlZmF1bHQgaGFzIGEgdmFsdWUgb2YgMSwgYnV0IGl0DQo+ICA+ID4g aXMgID4gPj4gd3JpdGFibGUgID4gYnkgc29mdHdhcmUuIFNvIGRlZmF1bHQgaXMgSU5UeCBBLg0K PiAgPiA+ICA+ID4+DQo+ICA+ID4gID4gPj4gIDB4M2MgaXMgdGhlIEludGVycnVwdCAqTGluZSos IHdoaWNoIGlzIHJlYWQvd3JpdGUuICBUaGUNCj4gID4gPiBJbnRlcnJ1cHQgID4gPj4gICpQaW4q IGlzIGF0IDB4M2QgYW5kIHNob3VsZCBiZSByZWFkLW9ubHkuDQo+ICA+ID4gID4gPj4NCj4gID4g PiAgPg0KPiAgPiA+ICA+IFlvdSBhcmUgcmlnaHQuIEJ1dCBkZWZhdWx0IGlzIDEgYXQgdGhpcyBh ZGRyZXNzLg0KPiAgPiA+ICA+DQo+ICA+ID4gID4gPj4gIERvZXMgeW91ciBLZXlzdG9uZSBkcml2 ZXIgc3VwcG9ydCBNU0k/ICBJZiBzbywgc2luY2UgeW91cg0KPiAgPiA+IFJvb3QgID4gPj4gUG9y dCAgc3VwcG9ydHMgTVNJLCBJIHdvdWxkIHRoaW5rIHdlIHdvdWxkIHVzZSB0aGF0IGJ5DQo+ICA+ ID4gZGVmYXVsdCwgYW5kICA+ID4+IHRoZSBJTlR4ICBzdHVmZiB3b3VsZG4ndCBldmVuIG1hdHRl ci4NCj4gID4gPiAgPiA+DQo+ICA+ID4gID4gPiBMYXllcnNjYXBlIGlzIGFsc28gc2hvd3MgIkJv dGggbWVzc2FnZSBzaWduYWxlZCBpbnRlcnJ1cHRzDQo+ICA+ID4gKE1TSSkgYW5kICBsZWdhY3kg SU5UeCBhcmUgc3VwcG9ydGVkLiINCj4gID4gPiAgPiA+IEJ1dCBib3RoIG9mIHRoZW0gbm90IHdv cmsgZm9yIEFFUiBpbnRlcnJ1cHQgd2hlbiBkZXZpY2VzIG9yDQo+ICA+ID4gcm9vdCAgcG9ydCBy ZXBvcnQgYWVyIGVycm9yLg0KPiAgPiA+ICA+ID4gQnV0IGFub3RoZXIgR0lDIGludGVycnVwdCBs aW5lIGRvLg0KPiAgPiA+ICA+DQo+ICA+ID4gID4gU2FtZSB3aXRoIEtleXN0b25lLiBFdmVuIHRo b3VnaCBib3RoIE1TSSBhbmQgSU5UeCBhcmUgc3VwcG9ydGVkDQo+ICA+ID4gZXJyb3IgID4gaW50 ZXJydXB0IGF0IHJvb3QgcG9ydCBpcyByZXBvcnRlZCBvbiBhIGRpZmZlcmVudCBpbnRlcnJ1cHQN Cj4gID4gPiBsaW5lIHRoYW4gID4gTVNJL0lOVHguIFNvIGZvciBQb3dlciBNYW5hZ2VtZW50IGV2 ZW50IGludGVycnVwdCBpcw0KPiAgPiA+IGFsc28gZGlmZmVyZW50ICA+IGxpbmUuDQo+ICA+ID4N Cj4gID4gPiAgSSdtIGxvb2tpbmcgYXQgdGhlICJFcnJvciBNZXNzYWdlIENvbnRyb2xzIiBkaWFn cmFtIGluIHRoZSBQQ0llDQo+ICA+ID4gc3BlYyAgcjMuMCwgc2VjIDYuMi42LiAgRG9lcyB0aGlz IGhhcmR3YXJlIGZpdCBpbnRvIHRoZQ0KPiAgPiA+IHBsYXRmb3JtLXNwZWNpZmljICAiU3lzdGVt IEVycm9yIiBjYXNlIHRoZXJlPyAgRG8gdGhlIFJvb3QgQ29udHJvbA0KPiAgPiA+IGVuYWJsZSBi aXRzIChpbiB0aGUgUENJZQ0KPiAgPiA+ICBDYXBhYmlsaXR5KSBjb250cm9sIHRoaXMgaW50ZXJy dXB0PyAgSWYgc28sIG1heWJlIHRoaXMgbWFrZXMgbW9yZQ0KPiAgPiA+IHNlbnNlICB0aGFuIEkg dGhvdWdodC4NCj4gID4NCj4gID4gSXQgc3VwcG9zZWRseSBub3QgdGhlICJTeXN0ZW0gRXJyb3Ii IGNhc2UuIEJ1dCAidGhlIEVycm9yIEludGVycnVwdCINCj4gIGNhc2UuDQo+ICA+IFdoaWNoIG1l YW5zICIgUm9vdCBFcnJvciBDb21tYW5kIHJlZ2lzdGVyICIgY291bGQgY29udHJvbCB0aGUNCj4g ID4gaW50ZXJydXB0ICBsaW5lIHdlIGhhdmUgbm93LiAocmVmZXIgUENJZSBzcGVjIHIzLjAsIHNl YyA2LjIuNikNCj4gIA0KPiAgRGlkIHlvdSBhY3R1YWxseSB0cnkgdGhpcyBvdXQgYW5kIHZlcmlm eSB0aGF0IHRoZSBQQ0llIFJvb3QgQ29udHJvbA0KPiAgZW5hYmxlIGJpdHMgaGF2ZSBubyBlZmZl Y3QgYW5kIHRoZSBBRVIgUm9vdCBFcnJvciBDb21tYW5kIGJpdHMgZG8NCj4gIGNvbnRyb2wgaXQ/ ICBUaGUgbmFtZXMgYXJlIHZlcnkgc2ltaWxhciwgc28gdGhlcmUncyBsb3RzIG9mIHJvb20gZm9y DQo+ICBtaXN1bmRlcnN0YW5kaW5nIGhlcmUgOikNCg0KWWVzLCBhbGwgdGhlc2UgcmVzdWx0IHdl cmUgdGVzdGVkIGJlZm9yZSByZXBseS4NCg0KPiAgDQo+ICBJZiB0aGUgQUVSIFJvb3QgRXJyb3Ig Q29tbWFuZCBkb2VzIGNvbnRyb2wgdGhpcyBpbnRlcnJ1cHQsIEkgdGhpbmsgdGhlDQo+ICBQQ0lf Q09NTUFORF9JTlRYX0RJU0FCTEUgYml0IGluIHRoZSBQQ0kgQ29tbWFuZCByZWdpc3RlciBzaG91 bGQgYWxzbw0KPiAgY29udHJvbCBpdCAocGVyIHNlYyA2LjIuNC4xLjIpLg0KDQpZZXMsIEkgYW0g c3VyZSB0aGUgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIGJpdCBjYW4gYWxzbyBjb250cm9sIHRo aXMgaW50ZXJydXB0Lg0KDQo+ICANCj4gID4gTWF5IHRoaXMga2luZCBvZiBoYXJkd2FyZSBkZXNp Z24gcm91dGUgYnJva2VuIHRoZSBzcGVjPw0KPiAgDQo+ICBJZiB0aGUgUmVwb3J0aW5nIEVuYWJs ZSBiaXRzIGluIHRoZSBSb290IFBvcnQncyBBRVIgUm9vdCBFcnJvciBDb21tYW5kDQo+ICByZWdp c3RlciBjb250cm9sIHRoZSBpbnRlcnJ1cHQsIGJ1dCB0aGUgaW50ZXJydXB0IGlzIG5vdCBkZWxp dmVyZWQgdmlhDQo+ICB0aGUgUm9vdCBQb3J0J3MgSU5UeCBvciBNU0kvTVNJLVgsIEkgdGhpbmsg dGhlIGRlc2lnbiBpcyBub3QgZm9sbG93aW5nDQo+ICB0aGUgc3BlYy4NCj4gIA0KPiAgQWxsIHRo ZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIEFFUiBkcml2ZXIgc2hvdWxkIGJlIGNvbW11bmlj YXRlZCB2aWENCj4gIHRoZSBjb25maWcgc3BhY2UgbWVjaGFuaXNtcyBkZXNjcmliZWQgaW4gdGhl IHNwZWMgKEFFUiBjYXBhYmlsaXR5LA0KPiAgTVNJL01TSS1YIGNhcGFiaWxpdGllcywgSW50ZXJy dXB0IFBpbiwgZXRjLikgIFRoYXQgd2F5IHRoZSBkcml2ZXIgd29ya3MNCj4gIHdpdGhvdXQgY2hh bmdlIG9uIGZ1dHVyZSBzcGVjLWNvbXBsaWFudCBoYXJkd2FyZS4NCj4gIA0KPiAgPiBQTUUgYWxz byBsaWtlIHRoZSBBRVIuIEhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gT3RoZXJzIG5vdCBrbm93 bi4NCj4gID4gUG8gTGl1DQo+ICANCj4gIFBlciBzZWMgNi4xLjYsIEkgdGhpbmsgUE1FICpzaG91 bGQqIGJlIHNpZ25hbGVkIGJ5IHRoZSBSb290IFBvcnQncyBJTlR4DQo+ICBvciBNU0kvTVNJLVgu DQo+ICANCj4gIEluIHBhcnRpY3VsYXIsIGl0IHNheXMgIk5vdGUgdGhhdCBhbGwgb3RoZXIgaW50 ZXJydXB0IHNvdXJjZXMgd2l0aGluIHRoZQ0KPiAgc2FtZSBGdW5jdGlvbiB3aWxsIGFzc2VydCB0 aGUgc2FtZSB2aXJ0dWFsIElOVHggd2lyZSB3aGVuIHJlcXVlc3RpbmcNCj4gIHNlcnZpY2UuIiAg VG8gbWUsIHRoYXQgbWVhbnMgdGhhdCBpZiB3ZSdyZSB1c2luZyBJTlR4LCBpdCB3aWxsIGJlIHRo ZQ0KPiAgc2FtZSBJTlR4IGZvciBBRVIsIFBNRSwgaG90cGx1ZywgZXRjLiwgYW5kIGl0IHNob3Vs ZCBiZSB0aGUgb25lDQo+ICBpbmRpY2F0ZWQgYnkgdGhlIEludGVycnVwdCBQaW4gcmVnaXN0ZXIu DQo+ICANCj4gIEJ1dCBJIHRoaW5rIG9uIHlvdXIgUm9vdCBQb3J0Og0KPiAgDQo+ICAgIC0gVGhl cmUgaXMgYW4gTVNJIGNhcGFiaWxpdHksIGJ1dCBNU0kgZG9lc24ndCBhY3R1YWxseSB3b3JrIGF0 IGFsbA0KPiAgICAtIEludGVycnVwdCBQaW4gY29udGFpbnMgMSwgaW5kaWNhdGluZyBJTlRBLCB3 aGljaCBpcyByb3V0ZWQgdG8gSVJRIFgNCj4gICAgLSBBRVIgaW50ZXJydXB0cyBhcmUgcm91dGVk IHRvIHNvbWUgZGlmZmVyZW50IElSUSBZDQo+ICAgIC0gUE1FIGludGVycnVwdHMgYXJlIHJvdXRl ZCB0byBhIHRoaXJkIElSUSBaDQo+ICANCg0KVGhlIGRlc2NyaXB0aW9ucyBhcmUgYWxsIHJpZ2h0 Lg0KDQo+ICBTbyBob3cgc2hvdWxkIHdlIHdvcmsgYXJvdW5kIHRoaXM/ICBJIHRoaW5rIHlvdSBz aG91bGQgYmUgYWJsZSB0byBnZXQNCj4gIHBhcnR3YXkgdGhlcmUgd2l0aCBhIHF1aXJrIHRoYXQg c2V0czoNCj4gIA0KPiAgICBkZXYtPm5vX21zaSA9IDE7DQo+ICAgIGRldi0+aXJxID0gWTsNCj4g IA0KPiAgZm9yIHRoaXMgZGV2aWNlLiAgVGhhdCBzaG91bGQgbWFrZSBBRVIgd29yaywgYnV0IG9m IGNvdXJzZSBQTUUgd291bGQgbm90DQo+ICB3b3JrLg0KPiAgDQo+ICBJcyB0aGVyZSBhIHdheSB0 byBzZXQgdXAgeW91ciBpbnRlcnJ1cHQgY29udHJvbGxlciBzbyB0aGVzZSB0aHJlZQ0KPiAgaW50 ZXJydXB0cyAoWCwgWSwgWiBhYm92ZSkgYWxsIG1hcCB0byB0aGUgc2FtZSBMaW51eCBJUlE/ICBJ ZiB5b3UgY2FuIGRvDQo+ICB0aGF0LCB5b3UgY291bGQgc2V0IHVwIElOVEEsIHRoZSBBRVIgaW50 ZXJydXB0LCBhbmQgdGhlIFBNRSBpbnRlcnJ1cHQgdG8NCj4gIGFsbCBiZSBvbiB0aGUgc2FtZSBJ UlEgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuDQo+ICANCj4gIEJqb3JuDQoNCldlJ2xsIHRo aW5rIGFib3V0IGFsbCB0aGUgd2F5cy4gSXQgaXMgcmVhbGx5IGhlbHBmdWwsIHRoYW5rcyEgIA0K ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-06-08 4:56 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-08 4:56 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, linux-arm-kernel, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, Mingkai Hu Hi Bjorn, Thanks for the kindly reply. All these are helpful. > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > On Wed, June 08, 2016 6:47 AM > > On Tue, Jun 07, 2016 at 10:07:40AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > > -----Original Message----- > > > > > > On Mon, Jun 06, 2016 at 10:01:44AM -0400, Murali Karicheri wrote: > > > > On 06/06/2016 03:32 AM, Po Liu wrote: > > > > > Hi Bjorn, > > > > > I confirm we met same problem with KeyStone base on DesignWare > > > design. > > > > > > > > > > > > > > > Best regards, > > > > > Liu Po > > > > > > > > > >> -----Original Message----- > > > > >> From: Bjorn Helgaas [mailto:helgaas@kernel.org] > >> Sent: > > > Saturday, June 04, 2016 11:49 AM > >> To: Murali Karicheri > >> > > > Cc: Po Liu; linux-pci@vger.kernel.org; linux-arm- > >> > > > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > >> > > > devicetree@vger.kernel.org; Arnd Bergmann; Roy Zang; Marc Zyngier; > > > > >> Stuart Yoder; Yang-Leo Li; Minghuan Lian; Bjorn Helgaas; Shawn > > > Guo; > >> Mingkai Hu; Rob Herring > >> Subject: Re: [PATCH 2/2] > > > aer: add support aer interrupt with none > >> MSI/MSI-X/INTx mode > > > > >> > >> On Fri, Jun 03, 2016 at 01:31:11PM -0400, Murali > > > Karicheri wrote: > > > > >> > Po, > > > > >> > > > > > >> > Sorry to hijack your discussion, but the problem seems to > > > be > >> same for > Keystone PCI controller which is also > > > designware (old > > > version) based. > > > > >> > > > > > >> > On 06/03/2016 12:09 AM, Bjorn Helgaas wrote: > > > > >> > > On Thu, Jun 02, 2016 at 11:37:28AM -0400, Murali > > > Karicheri > > > wrote: > > > > >> > >> On 06/02/2016 09:55 AM, Bjorn Helgaas wrote: > > > > >> > >>> On Thu, Jun 02, 2016 at 05:01:19AM +0000, Po Liu wrote: > > > > >> > >>>>> -----Original Message----- > >>>>> From: Bjorn > > > Helgaas > >> [mailto:helgaas@kernel.org] > >>>>> Sent: Thursday, > > > June 02, 2016 > >> 11:48 AM > >>>>> To: Po Liu > >>>>> Cc: > > > > >> linux-pci@vger.kernel.org; > >>>>> > >> > > > linux-arm-kernel@lists.infradead.org; > > > > >> > >>>>> linux-kernel@vger.kernel.org; > > > devicetree@vger.kernel.org; > >> Arnd > >>>>> Bergmann; Roy Zang; > > > Marc Zyngier; Stuart Yoder; > >> Yang-Leo Li; > >>>>> Minghuan > > > Lian; Bjorn Helgaas; Shawn Guo; > >> Mingkai Hu; Rob > >>>>> > > > Herring > >>>>> Subject: Re: [PATCH 2/2] > >> aer: add support > > > aer interrupt with > >>>>> none MSI/MSI-X/INTx > >> mode > >>>>> > > > > >>>>> [+cc Rob] > >>>>> > >>>>> Hi Po, > > >> >>>>> > >>>>> > > > On Thu, May 26, 2016 at 02:00:06PM +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. > > > > >> > >>>>> > > > > >> > >>>>> My understanding is that AER interrupt signaling can > > > be > >> done > >>>>> via INTx, MSI, or MSI-X (PCIe spec r3.0, sec > > > 6.2.4.1.2). > > > > >> > >>>>> Apparently your device doesn't support MSI or MSI-X. > > > Are > >> you > >>>>> saying it doesn't support INTx either? How > > > is the > >> interrupt you're requesting here different from INTx? > > > > >> > >>>> > > > > >> > >>>> Layerscape use none of MSI or MSI-X or INTx to > > > indicate the > >> > >>>> devices or root error in RC mode. But use > > > an independent SPI > >> > >>>> interrupt(arm interrupt controller) > line. > > > > >> > >>> > > > > >> > >>> The Root Port is a PCI device and should follow the > > > normal > >> PCI > >>> rules for interrupts. As far as I > > > understand, that > >> means it > >>> should use MSI, MSI-X, or > > > INTx. If your Root Port > >> doesn't use MSI > >>> or MSI-X, it > > > should use INTx, the > >> PCI_INTERRUPT_PIN register > >>> should > > > tell us which (INTA/ > >> INTB/etc.), and PCI_COMMAND_INTX_DISABLE > should work to disable it. > > > > >> > >>> That's all from the PCI point of view, of course. > > > > >> > >> > > > > >> > >> I am faced with the same issue on Keystone PCI hardware > > > and > >> it has > >> been on my TODO list for quite some time. > > > Keystone > >> PCI hardware > >> also doesn't use MSI or MSI-X or > > > INTx for > >> reporting errors received > >> at the root port, but > > > use a > >> platform interrupt instead (not > >> complaint to PCI > > > standard as > >> per PCI base spec). So I would need > >> similar > > > change to have > >> the error interrupt passed to the aer > >> > > > driver. So there are > >> hardware out there like Keystone which > > > requires to support this through platform IRQ. > > > > >> > > > > > > >> > > This is not a new area of the spec, and it's hard for me > > > to > >> believe > > that these two new PCIe controllers are both > > > broken > >> the same way > > (although I guess both are > > > DesignWare-based, so > >> maybe this is the > > same underlying > > > problem in both cases?). I > >> think it's more likely > > that > > > we just haven't figured out the > >> right way to describe this in > the DT. > > > > >> > > > > > >> > Keystone is using an older version of the designware IP and > > > it > >> > implements all of the interrupts in the application > > > register > >> space > unlike other newer version of the hardware. > > > So I assume, > >> the version > used on Layerscape is also an > > > older version and the > >> both have same > issue in terms of non > > > standard platform interrupt > >> used for error reporting. > > > > >> > > > > > >> > > I assume you have a Root Port with an AER capability, no > > > MSI > >> > > capability, and no MSI-X capability, right? > > > > >> > > > > > >> > Has AER capability and both MSI and INTx (legacy) > > > capability > > >> > > What does its Interrupt > > Pin register > > > contain? If it's > >> zero, it doesn't use INTx either, so > > > > > according to the spec it > >> should generate no interrupts. > > > > >> > > > > > > >> > At address offset 0x3C by default has a value of 1, but it > > > is > >> writable > by software. So default is INTx A. > > > > >> > > > > >> 0x3c is the Interrupt *Line*, which is read/write. The > > > Interrupt > >> *Pin* is at 0x3d and should be read-only. > > > > >> > > > > > > > > You are right. But default is 1 at this address. > > > > > > > > >> Does your Keystone driver support MSI? If so, since your > > > Root > >> Port supports MSI, I would think we would use that by > > > default, and > >> the INTx stuff wouldn't even matter. > > > > > > > > > > Layerscape is also shows "Both message signaled interrupts > > > (MSI) and legacy INTx are supported." > > > > > But both of them not work for AER interrupt when devices or > > > root port report aer error. > > > > > But another GIC interrupt line do. > > > > > > > > Same with Keystone. Even though both MSI and INTx are supported > > > error > interrupt at root port is reported on a different interrupt > > > line than > MSI/INTx. So for Power Management event interrupt is > > > also different > line. > > > > > > I'm looking at the "Error Message Controls" diagram in the PCIe > > > spec r3.0, sec 6.2.6. Does this hardware fit into the > > > platform-specific "System Error" case there? Do the Root Control > > > enable bits (in the PCIe > > > Capability) control this interrupt? If so, maybe this makes more > > > sense than I thought. > > > > It supposedly not the "System Error" case. But "the Error Interrupt" > case. > > Which means " Root Error Command register " could control the > > interrupt line we have now. (refer PCIe spec r3.0, sec 6.2.6) > > Did you actually try this out and verify that the PCIe Root Control > enable bits have no effect and the AER Root Error Command bits do > control it? The names are very similar, so there's lots of room for > misunderstanding here :) Yes, all these result were tested before reply. > > If the AER Root Error Command does control this interrupt, I think the > PCI_COMMAND_INTX_DISABLE bit in the PCI Command register should also > control it (per sec 6.2.4.1.2). Yes, I am sure the PCI_COMMAND_INTX_DISABLE bit can also control this interrupt. > > > May this kind of hardware design route broken the spec? > > If the Reporting Enable bits in the Root Port's AER Root Error Command > register control the interrupt, but the interrupt is not delivered via > the Root Port's INTx or MSI/MSI-X, I think the design is not following > the spec. > > All the information needed by the AER driver should be communicated via > the config space mechanisms described in the spec (AER capability, > MSI/MSI-X capabilities, Interrupt Pin, etc.) That way the driver works > without change on future spec-compliant hardware. > > > PME also like the AER. Hotplug is not supported. Others not known. > > Po Liu > > Per sec 6.1.6, I think PME *should* be signaled by the Root Port's INTx > or MSI/MSI-X. > > In particular, it says "Note that all other interrupt sources within the > same Function will assert the same virtual INTx wire when requesting > service." To me, that means that if we're using INTx, it will be the > same INTx for AER, PME, hotplug, etc., and it should be the one > indicated by the Interrupt Pin register. > > But I think on your Root Port: > > - There is an MSI capability, but MSI doesn't actually work at all > - Interrupt Pin contains 1, indicating INTA, which is routed to IRQ X > - AER interrupts are routed to some different IRQ Y > - PME interrupts are routed to a third IRQ Z > The descriptions are all right. > So how should we work around this? I think you should be able to get > partway there with a quirk that sets: > > dev->no_msi = 1; > dev->irq = Y; > > for this device. That should make AER work, but of course PME would not > work. > > Is there a way to set up your interrupt controller so these three > interrupts (X, Y, Z above) all map to the same Linux IRQ? If you can do > that, you could set up INTA, the AER interrupt, and the PME interrupt to > all be on the same IRQ and everything should work. > > Bjorn We'll think about all the ways. It is really helpful, thanks! ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v2 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-05-26 6:00 ` Po Liu (?) (?) @ 2016-06-14 6:12 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- Changes for V2: - None. .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 6:12 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-arm-kernel NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- Changes for V2: - None. .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 6:12 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- Changes for V2: - None. .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 6:12 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- Changes for V2: - None. .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk 2016-06-14 6:12 ` Po Liu (?) @ 2016-06-14 6:12 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 @@ -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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-14 6:12 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-arm-kernel 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 @@ -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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-14 6:12 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 6:12 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 @@ -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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk 2016-06-14 6:12 ` Po Liu @ 2016-06-16 13:54 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-16 13:54 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri 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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-16 13:54 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-06-16 13:54 UTC (permalink / raw) To: linux-arm-kernel 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 at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk 2016-06-16 13:54 ` Bjorn Helgaas (?) (?) @ 2016-06-17 3:30 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-17 3:30 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri > -----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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-17 3:30 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-17 3:30 UTC (permalink / raw) To: linux-arm-kernel > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Thursday, June 16, 2016 9:54 PM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at 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 at vger.kernel.org More majordomo > > info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-17 3:30 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-17 3:30 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri DQoNCj4gIC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ICBGcm9tOiBCam9ybiBIZWxnYWFz IFttYWlsdG86aGVsZ2Fhc0BrZXJuZWwub3JnXQ0KPiAgU2VudDogVGh1cnNkYXksIEp1bmUgMTYs IDIwMTYgOTo1NCBQTQ0KPiAgVG86IFBvIExpdQ0KPiAgQ2M6IGxpbnV4LXBjaUB2Z2VyLmtlcm5l bC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gIGxpbnV4LWtl cm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBCam9ybiBI ZWxnYWFzOw0KPiAgU2hhd24gR3VvOyBNYXJjIFp5bmdpZXI7IFJvYiBIZXJyaW5nOyBSb3kgWmFu ZzsgTWluZ2thaSBIdTsgU3R1YXJ0IFlvZGVyOw0KPiAgWWFuZy1MZW8gTGk7IEFybmQgQmVyZ21h bm47IE1pbmdodWFuIExpYW47IE11cmFsaSBLYXJpY2hlcmkNCj4gIFN1YmplY3Q6IFJlOiBbUEFU Q0ggdjIgMi8yXSBwY2kvYWVyOiBpbnRlcnJ1cHQgZml4dXAgaW4gdGhlIHF1aXJrDQo+ICANCj4g IE9uIFR1ZSwgSnVuIDE0LCAyMDE2IGF0IDAyOjEyOjI3UE0gKzA4MDAsIFBvIExpdSB3cm90ZToN Cj4gID4gT24gc29tZSBwbGF0Zm9ybXMsIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBvcnQgTVNJL01T SS1YL0lOVHggaW4gUkMgbW9kZS4NCj4gID4gV2hlbiBjaGlwIHN1cHBvcnQgdGhlIGFlciBpbnRl cnJ1cHQgd2l0aCBub25lIE1TSS9NU0ktWC9JTlR4IG1vZGUsDQo+ICA+IG1heWJlIHRoZXJlIGlz IGludGVycnVwdCBsaW5lIGZvciBhZXIgcG1lIGV0Yy4gU2VhcmNoIHRoZSBpbnRlcnJ1cHQNCj4g ID4gbnVtYmVyIGluIHRoZSBmZHQgZmlsZS4gVGhlbiBmaXh1cCB0aGUgZGV2LT5pcnEgd2l0aCBp dC4NCj4gID4NCj4gID4gU2lnbmVkLW9mZi1ieTogUG8gTGl1IDxwby5saXVAbnhwLmNvbT4NCj4g ID4gLS0tDQo+ICA+IGNoYW5nZXMgZm9yIFYyOg0KPiAgPiAJLSBNb3ZlIHRvIHRoZSBxdWlyayBm aWxlDQo+ICA+DQo+ICA+ICBkcml2ZXJzL3BjaS9xdWlya3MuYyB8IDIzICsrKysrKysrKysrKysr KysrKysrKysrDQo+ICA+ICAxIGZpbGUgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQ0KPiAgPg0K PiAgPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWly a3MuYyBpbmRleA0KPiAgPiBlZTcyZWJlLi45MDlkNDc5IDEwMDY0NA0KPiAgPiAtLS0gYS9kcml2 ZXJzL3BjaS9xdWlya3MuYw0KPiAgPiArKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYw0KPiAgDQo+ ICBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgdGhpcyBwYXJ0IGJlaW5nIHVzZWQgb24gZGlm ZmVyZW50IGFyY2hlcywgb3INCj4gIHdpbGwgaXQgb25seSBldmVyIGJlIG9uIGFybTY0IChvciB3 aGF0ZXZlciBpdCBpcyk/ICBJZiB0aGUgbGF0dGVyLCBpdA0KPiAgY291bGQgZ28gc29tZXdoZXJl IGxpa2UgYXJjaC9hcm02NC9rZXJuZWwvcXVpcmtzLmMgKHdoaWNoIGRvZXNuJ3QgZXhpc3QNCj4g IHlldCkuDQoNCk5YUCBMYXllcnNjYXBlMSBpcyBiYXNlIG9uIHRoZSBhcm0gMzJiaXQgZGVzaWdu LiBBbHNvIG5lZWQgdGhlIGZpeHVwLg0KDQo+ICANCj4gID4gQEAgLTI1LDYgKzI1LDcgQEANCj4g ID4gICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KPiAgPiAgI2luY2x1ZGUgPGxpbnV4L2t0aW1l Lmg+DQo+ICA+ICAjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4gID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9pcnEuaD4NCj4gID4gICNpbmNsdWRlIDxhc20vZG1hLmg+CS8qIGlzYV9kbWFfYnJpZGdlX2J1 Z2d5ICovDQo+ICA+ICAjaW5jbHVkZSAicGNpLmgiDQo+ICA+DQo+ICA+IEBAIC00NDE5LDMgKzQ0 MjAsMjUgQEAgc3RhdGljIHZvaWQgcXVpcmtfaW50ZWxfcWF0X3ZmX2NhcChzdHJ1Y3QNCj4gIHBj aV9kZXYgKnBkZXYpDQo+ICA+ICAJfQ0KPiAgPiAgfQ0KPiAgPiAgREVDTEFSRV9QQ0lfRklYVVBf RUFSTFkoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0NDMsDQo+ICA+IHF1aXJrX2ludGVsX3FhdF92 Zl9jYXApOw0KPiAgPiArDQo+ICA+ICsvKiBJZiByb290IHBvcnQgZG9lc24ndCBzdXBwb3J0IE1T SS9NU0ktWC9JTlR4IGluIFJDIG1vZGUsDQo+ICA+ICsgKiBidXQgdXNlIHN0YW5kYWxvbmUgaXJx LiBSZWFkIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlIGFlcg0KPiAgPiArICogaW50ZXJydXB0IG51 bWJlci4NCj4gID4gKyAqLw0KPiAgPiArc3RhdGljIHZvaWQgcXVpcmtfYWVyX2ludGVycnVwdChz dHJ1Y3QgcGNpX2RldiAqZGV2KSB7DQo+ICA+ICsJaW50IHJldDsNCj4gID4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wID0gTlVMTDsNCj4gID4gKw0KPiAgPiArCWlmIChkZXYtPmJ1cy0+ZGV2Lm9m X25vZGUpDQo+ICA+ICsJCW5wID0gZGV2LT5idXMtPmRldi5vZl9ub2RlOw0KPiAgPiArDQo+ICA+ ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GX0lSUSkgJiYgbnApIHsNCj4gID4gKwkJcmV0ID0g b2ZfaXJxX2dldF9ieW5hbWUobnAsICJhZXIiKTsNCj4gID4gKwkJaWYgKHJldCA+IDApIHsNCj4g ID4gKwkJCWRldi0+bm9fbXNpID0gMTsNCj4gID4gKwkJCWRldi0+aXJxID0gcmV0Ow0KPiAgPiAr CQl9DQo+ICA+ICsJfQ0KPiAgDQo+ICBXaGF0IGRvZXMgdGhpcyBtZWFuIGZvciB0aGUgb3RoZXIg UENJZSBzZXJ2aWNlcywgZS5nLiwgUE1FPyAgSSBndWVzcw0KPiAgdGhpcyBtYWtlcyB0aGUgZXhp c3RpbmcgQUVSIGNvZGUgd29yayB1bmNoYW5nZWQuICBCdXQgSSB0aG91Z2h0IFBNRSBoYWQNCj4g IGEgc2ltaWxhciBzaXR1YXRpb24gYW5kIHdhcyBjb25uZWN0ZWQgdXAgdG8gYSBkaWZmZXJlbnQg aW50ZXJydXB0IHRoYW4NCj4gIEFFUiB3YXMuDQoNClllcywgUE1FIGlzIHNpbWlsYXIsIEhQIGlz IG5vdCBzdXBwb3J0LiBJIHRoaW5rIGJldHRlciB0byBkaXNhYmxlIHRoZSBQTUUgc2VydmljZSBp cnEgaW4gdGhlIHF1aXJrLg0KQnV0IHNlZW1zIGl0IGlzIG5vIHVzZSBiZWNhdXNlIHF1aXJrIGZp eHVwIGlzIG9ubHkgcnVubmluZyBpbiBpbml0IHBoYXNlIHRpbWUoZXhjZXB0IHN1c3BlbmQsIHJl c3VtZSkuDQoNCj4gIA0KPiAgPiArfQ0KPiAgPiArREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJ X1ZFTkRPUl9JRF9GUkVFU0NBTEUsIFBDSV9BTllfSUQsDQo+ICA+ICtxdWlya19hZXJfaW50ZXJy dXB0KTsNCj4gID4gLS0NCj4gID4gMi4xLjAuMjcuZzk2ZGIzMjQNCj4gID4NCj4gID4gLS0NCj4g ID4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2Ny aWJlIGxpbnV4LXBjaSINCj4gID4gaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9t b0B2Z2VyLmtlcm5lbC5vcmcgTW9yZSBtYWpvcmRvbW8NCj4gID4gaW5mbyBhdCAgaHR0cDovL3Zn ZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sDQo= ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-17 3:30 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-17 3:30 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri > -----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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk 2016-06-16 13:54 ` Bjorn Helgaas (?) (?) @ 2016-07-01 8:46 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:46 UTC (permalink / raw) To: Po Liu, Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri Hi Bjorn, So could we keep it in the pci/quirk.c ? If yes, I would only move the binding description in the documentation into this driver the next version. > -----Original Message----- > From: Po Liu > Sent: Friday, June 17, 2016 11:31 AM > To: 'Bjorn Helgaas' > 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 > > > > > -----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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:46 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:46 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, So could we keep it in the pci/quirk.c ? If yes, I would only move the binding description in the documentation into this driver the next version. > -----Original Message----- > From: Po Liu > Sent: Friday, June 17, 2016 11:31 AM > To: 'Bjorn Helgaas' > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at 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 > > > > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > Sent: Thursday, June 16, 2016 9:54 PM > > To: Po Liu > > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > > linux-kernel at vger.kernel.org; devicetree at 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 at vger.kernel.org More > > majordomo > info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:46 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:46 UTC (permalink / raw) To: Po Liu, Bjorn Helgaas Cc: devicetree, Arnd Bergmann, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Roy Zang, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, So could we keep it in the pci/quirk.c ? If yes, I would only move the binding description in the documentation into this driver the next version. > -----Original Message----- > From: Po Liu > Sent: Friday, June 17, 2016 11:31 AM > To: 'Bjorn Helgaas' > 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 > > > > > -----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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:46 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:46 UTC (permalink / raw) To: Po Liu, Bjorn Helgaas Cc: devicetree, Arnd Bergmann, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Roy Zang, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, So could we keep it in the pci/quirk.c ? If yes, I would only move the binding description in the documentation into this driver the next version. > -----Original Message----- > From: Po Liu > Sent: Friday, June 17, 2016 11:31 AM > To: 'Bjorn Helgaas' > 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 > > > > > -----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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-05-26 6:00 ` Po Liu (?) (?) @ 2016-06-14 8:24 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v3: - None; .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-arm-kernel NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v3: - None; .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v3: - None; .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v3: - None; .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index ef683b2..d27973a 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer" : The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -33,7 +33,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 5ae8e92..b638697 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -633,7 +633,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -656,7 +657,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index de0323b..4beb760 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -473,9 +473,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -497,9 +497,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -521,9 +521,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 3187c82..6edf24b 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -559,8 +559,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -583,8 +583,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-06-14 8:24 ` Po Liu (?) (?) @ 2016-06-14 8:24 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 V3: - Move to quirk; - Only correct the irq in RC mode; drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ee72ebe..8b39cce 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,31 @@ 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; + u8 header_type; + struct device_node *np = NULL; + + /* Only for the RC mode device */ + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) + return; + + 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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-arm-kernel 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 V3: - Move to quirk; - Only correct the irq in RC mode; drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ee72ebe..8b39cce 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,31 @@ 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; + u8 header_type; + struct device_node *np = NULL; + + /* Only for the RC mode device */ + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) + return; + + 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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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 V3: - Move to quirk; - Only correct the irq in RC mode; drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ee72ebe..8b39cce 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,31 @@ 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; + u8 header_type; + struct device_node *np = NULL; + + /* Only for the RC mode device */ + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) + return; + + 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); -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-14 8:24 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-14 8:24 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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 V3: - Move to quirk; - Only correct the irq in RC mode; drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ee72ebe..8b39cce 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,31 @@ 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; + u8 header_type; + struct device_node *np = NULL; + + /* Only for the RC mode device */ + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) + return; + + 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); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-06-14 8:24 ` Po Liu (?) @ 2016-06-23 5:43 ` Dongdong Liu -1 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-06-23 5:43 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri 在 2016/6/14 16:24, Po Liu 写道: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; How about that it is changed as below. /* Only for the RC mode device */ if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; Dongdong Thanks > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-23 5:43 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-06-23 5:43 UTC (permalink / raw) To: linux-arm-kernel ? 2016/6/14 16:24, Po Liu ??: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; How about that it is changed as below. /* Only for the RC mode device */ if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; Dongdong Thanks > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-06-23 5:43 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-06-23 5:43 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri 在 2016/6/14 16:24, Po Liu 写道: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; How about that it is changed as below. /* Only for the RC mode device */ if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; Dongdong Thanks > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-06-23 5:43 ` Dongdong Liu (?) (?) @ 2016-07-01 8:40 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:40 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri Hi Dongdong, > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3@huawei.com] > Sent: Thursday, June 23, 2016 1:44 PM > To: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org > Cc: 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 v3 2/2] pci/aer: interrupt fixup in the quirk > > > > 在 2016/6/14 16:24, Po Liu 写道: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > How about that it is changed as below. > > /* Only for the RC mode device */ > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > Dongdong > Thanks Yes, it is also ok to read the capability register. We see it is common used to read the header type register that is why we use in this way. > > + > > + 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); > > ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:40 UTC (permalink / raw) To: linux-arm-kernel Hi Dongdong, > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3 at huawei.com] > Sent: Thursday, June 23, 2016 1:44 PM > To: Po Liu; linux-pci at vger.kernel.org; linux-arm- > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > devicetree at vger.kernel.org > Cc: 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 v3 2/2] pci/aer: interrupt fixup in the quirk > > > > ? 2016/6/14 16:24, Po Liu ??: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > How about that it is changed as below. > > /* Only for the RC mode device */ > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > Dongdong > Thanks Yes, it is also ok to read the capability register. We see it is common used to read the header type register that is why we use in this way. > > + > > + 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); > > ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:40 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu SGkgRG9uZ2RvbmcsDQoNCj4gIC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ICBGcm9tOiBE b25nZG9uZyBMaXUgW21haWx0bzpsaXVkb25nZG9uZzNAaHVhd2VpLmNvbV0NCj4gIFNlbnQ6IFRo dXJzZGF5LCBKdW5lIDIzLCAyMDE2IDE6NDQgUE0NCj4gIFRvOiBQbyBMaXU7IGxpbnV4LXBjaUB2 Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS0NCj4gIGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn OyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiAgZGV2aWNldHJlZUB2Z2VyLmtlcm5l bC5vcmcNCj4gIENjOiBCam9ybiBIZWxnYWFzOyBTaGF3biBHdW87IE1hcmMgWnluZ2llcjsgUm9i IEhlcnJpbmc7IFJveSBaYW5nOw0KPiAgTWluZ2thaSBIdTsgU3R1YXJ0IFlvZGVyOyBZYW5nLUxl byBMaTsgQXJuZCBCZXJnbWFubjsgTWluZ2h1YW4gTGlhbjsNCj4gIE11cmFsaSBLYXJpY2hlcmkN Cj4gIFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMi8yXSBwY2kvYWVyOiBpbnRlcnJ1cHQgZml4dXAg aW4gdGhlIHF1aXJrDQo+ICANCj4gIA0KPiAgDQo+ICDlnKggMjAxNi82LzE0IDE2OjI0LCBQbyBM aXUg5YaZ6YGTOg0KPiAgPiBPbiBzb21lIHBsYXRmb3Jtcywgcm9vdCBwb3J0IGRvZXNuJ3Qgc3Vw cG9ydCBNU0kvTVNJLVgvSU5UeCBpbiBSQyBtb2RlLg0KPiAgPiBXaGVuIGNoaXAgc3VwcG9ydCB0 aGUgYWVyIGludGVycnVwdCB3aXRoIG5vbmUgTVNJL01TSS1YL0lOVHggbW9kZSwNCj4gID4gbWF5 YmUgdGhlcmUgaXMgaW50ZXJydXB0IGxpbmUgZm9yIGFlciBwbWUgZXRjLiBTZWFyY2ggdGhlIGlu dGVycnVwdA0KPiAgPiBudW1iZXIgaW4gdGhlIGZkdCBmaWxlLiBUaGVuIGZpeHVwIHRoZSBkZXYt PmlycSB3aXRoIGl0Lg0KPiAgPg0KPiAgPiBTaWduZWQtb2ZmLWJ5OiBQbyBMaXUgPHBvLmxpdUBu eHAuY29tPg0KPiAgPiAtLS0NCj4gID4gY2hhbmdlcyBmb3IgVjM6DQo+ICA+IAktIE1vdmUgdG8g cXVpcms7DQo+ICA+IAktIE9ubHkgY29ycmVjdCB0aGUgaXJxIGluIFJDIG1vZGU7DQo+ICA+DQo+ ICA+ICAgZHJpdmVycy9wY2kvcXVpcmtzLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKw0KPiAgPiAgIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspDQo+ICA+DQo+ICA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5j IGluZGV4DQo+ICA+IGVlNzJlYmUuLjhiMzljY2UgMTAwNjQ0DQo+ICA+IC0tLSBhL2RyaXZlcnMv cGNpL3F1aXJrcy5jDQo+ICA+ICsrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jDQo+ICA+IEBAIC0y NSw2ICsyNSw3IEBADQo+ICA+ICAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQo+ICA+ICAgI2lu Y2x1ZGUgPGxpbnV4L2t0aW1lLmg+DQo+ICA+ICAgI2luY2x1ZGUgPGxpbnV4L21tLmg+DQo+ICA+ ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ICA+ICAgI2luY2x1ZGUgPGFzbS9kbWEuaD4J LyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8NCj4gID4gICAjaW5jbHVkZSAicGNpLmgiDQo+ICA+ DQo+ICA+IEBAIC00NDE5LDMgKzQ0MjAsMzEgQEAgc3RhdGljIHZvaWQgcXVpcmtfaW50ZWxfcWF0 X3ZmX2NhcChzdHJ1Y3QNCj4gIHBjaV9kZXYgKnBkZXYpDQo+ICA+ICAgCX0NCj4gID4gICB9DQo+ ICA+ICAgREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0NDMs DQo+ICA+IHF1aXJrX2ludGVsX3FhdF92Zl9jYXApOw0KPiAgPiArDQo+ICA+ICsvKiBJZiByb290 IHBvcnQgZG9lc24ndCBzdXBwb3J0IE1TSS9NU0ktWC9JTlR4IGluIFJDIG1vZGUsDQo+ICA+ICsg KiBidXQgdXNlIHN0YW5kYWxvbmUgaXJxLiBSZWFkIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlIGFl cg0KPiAgPiArICogaW50ZXJydXB0IG51bWJlci4NCj4gID4gKyAqLw0KPiAgPiArc3RhdGljIHZv aWQgcXVpcmtfYWVyX2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7DQo+ICA+ICsJaW50 IHJldDsNCj4gID4gKwl1OCBoZWFkZXJfdHlwZTsNCj4gID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wID0gTlVMTDsNCj4gID4gKw0KPiAgPiArCS8qIE9ubHkgZm9yIHRoZSBSQyBtb2RlIGRldmlj ZSAqLw0KPiAgPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLCAm aGVhZGVyX3R5cGUpOw0KPiAgPiArCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSAhPSBQQ0lfSEVB REVSX1RZUEVfQlJJREdFKQ0KPiAgPiArCQlyZXR1cm47DQo+ICANCj4gIEhvdyBhYm91dCB0aGF0 IGl0IGlzIGNoYW5nZWQgYXMgYmVsb3cuDQo+ICANCj4gIC8qIE9ubHkgZm9yIHRoZSBSQyBtb2Rl IGRldmljZSAqLw0KPiAgaWYgKHBjaV9wY2llX3R5cGUoZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUk9P VF9QT1JUKQ0KPiAgCXJldHVybjsNCj4gIA0KPiAgRG9uZ2RvbmcNCj4gIFRoYW5rcw0KWWVzLCBp dCBpcyBhbHNvIG9rIHRvIHJlYWQgdGhlIGNhcGFiaWxpdHkgcmVnaXN0ZXIuIA0KV2Ugc2VlIGl0 IGlzIGNvbW1vbiB1c2VkIHRvIHJlYWQgdGhlIGhlYWRlciB0eXBlIHJlZ2lzdGVyIHRoYXQgaXMg d2h5IHdlIHVzZSBpbiB0aGlzIHdheS4NCg0KPiAgPiArDQo+ICA+ICsJaWYgKGRldi0+YnVzLT5k ZXYub2Zfbm9kZSkNCj4gID4gKwkJbnAgPSBkZXYtPmJ1cy0+ZGV2Lm9mX25vZGU7DQo+ICA+ICsN Cj4gID4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0ZfSVJRKSAmJiBucCkgew0KPiAgPiArCQly ZXQgPSBvZl9pcnFfZ2V0X2J5bmFtZShucCwgImFlciIpOw0KPiAgPiArCQlpZiAocmV0ID4gMCkg ew0KPiAgPiArCQkJZGV2LT5ub19tc2kgPSAxOw0KPiAgPiArCQkJZGV2LT5pcnEgPSByZXQ7DQo+ ICA+ICsJCX0NCj4gID4gKwl9DQo+ICA+ICt9DQo+ICA+ICtERUNMQVJFX1BDSV9GSVhVUF9GSU5B TChQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSwgUENJX0FOWV9JRCwNCj4gID4gK3F1aXJrX2Flcl9p bnRlcnJ1cHQpOw0KPiAgPg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-01 8:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-01 8:40 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Hi Dongdong, > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3@huawei.com] > Sent: Thursday, June 23, 2016 1:44 PM > To: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org > Cc: 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 v3 2/2] pci/aer: interrupt fixup in the quirk > > > > 在 2016/6/14 16:24, Po Liu 写道: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > How about that it is changed as below. > > /* Only for the RC mode device */ > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > Dongdong > Thanks Yes, it is also ok to read the capability register. We see it is common used to read the header type register that is why we use in this way. > > + > > + 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); > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-06-14 8:24 ` Po Liu (?) @ 2016-07-04 8:44 ` Dongdong Liu -1 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-04 8:44 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Po I found a problem with the similar patch. as the below log. [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with rc=-22 [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 The fucntions are called as below sequence. 1. quirk_aer_interrupt, get the aer dev->irq 416. 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then dev->irq changed to 0. So this patch could not work with aer. Thanks Dongdong 在 2016/6/14 16:24, Po Liu 写道: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-04 8:44 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-04 8:44 UTC (permalink / raw) To: linux-arm-kernel Hi Po I found a problem with the similar patch. as the below log. [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with rc=-22 [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 The fucntions are called as below sequence. 1. quirk_aer_interrupt, get the aer dev->irq 416. 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then dev->irq changed to 0. So this patch could not work with aer. Thanks Dongdong ? 2016/6/14 16:24, Po Liu ??: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-04 8:44 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-04 8:44 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Po I found a problem with the similar patch. as the below log. [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with rc=-22 [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 The fucntions are called as below sequence. 1. quirk_aer_interrupt, get the aer dev->irq 416. 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then dev->irq changed to 0. So this patch could not work with aer. Thanks Dongdong 在 2016/6/14 16:24, Po Liu 写道: > 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 V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-07-04 8:44 ` Dongdong Liu (?) (?) @ 2016-07-05 3:03 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-05 3:03 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Dongdong, The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. I am not clear what platform are you trying to fix. The problem on your board may be as below comments: > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3@huawei.com] > Sent: Monday, July 04, 2016 4:44 PM > To: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org > Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; > Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; > Murali Karicheri; Linuxarm > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > Hi Po > > I found a problem with the similar patch. as the below log. > > [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 > [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in > [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with > rc=-22 > [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 > > The fucntions are called as below sequence. > 1. quirk_aer_interrupt, get the aer dev->irq 416. This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() > 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then > dev->irq changed to 0. pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. > > So this patch could not work with aer. > > Thanks > Dongdong > 在 2016/6/14 16:24, Po Liu 写道: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > > ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-05 3:03 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-05 3:03 UTC (permalink / raw) To: linux-arm-kernel Hi Dongdong, The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. I am not clear what platform are you trying to fix. The problem on your board may be as below comments: > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3 at huawei.com] > Sent: Monday, July 04, 2016 4:44 PM > To: Po Liu; linux-pci at vger.kernel.org; linux-arm- > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > devicetree at vger.kernel.org > Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; > Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; > Murali Karicheri; Linuxarm > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > Hi Po > > I found a problem with the similar patch. as the below log. > > [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 > [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in > [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with > rc=-22 > [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 > > The fucntions are called as below sequence. > 1. quirk_aer_interrupt, get the aer dev->irq 416. This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() > 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then > dev->irq changed to 0. pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. > > So this patch could not work with aer. > > Thanks > Dongdong > ? 2016/6/14 16:24, Po Liu ??: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > > ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-05 3:03 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-05 3:03 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm SGkgRG9uZ2RvbmcsDQoNClRoZSBwYXRjaCB3ZXJlIGludGVuZCB0byBmaXh1cCB0aGUgTlhQIGxh eWVyc2NhcGUgc2VyaWFsIFNPQyBhbmQgd2VyZSB0ZXN0ZWQgb2suDQpJIGFtIG5vdCBjbGVhciB3 aGF0IHBsYXRmb3JtIGFyZSB5b3UgdHJ5aW5nIHRvIGZpeC4gDQpUaGUgcHJvYmxlbSBvbiB5b3Vy IGJvYXJkIG1heSBiZSBhcyBiZWxvdyBjb21tZW50czoNCg0KDQo+ICAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiAgRnJvbTogRG9uZ2RvbmcgTGl1IFttYWlsdG86bGl1ZG9uZ2RvbmczQGh1 YXdlaS5jb21dDQo+ICBTZW50OiBNb25kYXksIEp1bHkgMDQsIDIwMTYgNDo0NCBQTQ0KPiAgVG86 IFBvIExpdTsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLQ0KPiAga2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+ICBk ZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZw0KPiAgQ2M6IEJqb3JuIEhlbGdhYXM7IFNoYXduIEd1 bzsgTWFyYyBaeW5naWVyOyBSb2IgSGVycmluZzsgUm95IFphbmc7DQo+ICBNaW5na2FpIEh1OyBT dHVhcnQgWW9kZXI7IFlhbmctTGVvIExpOyBBcm5kIEJlcmdtYW5uOyBNaW5naHVhbiBMaWFuOw0K PiAgTXVyYWxpIEthcmljaGVyaTsgTGludXhhcm0NCj4gIFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMg Mi8yXSBwY2kvYWVyOiBpbnRlcnJ1cHQgZml4dXAgaW4gdGhlIHF1aXJrDQo+ICANCj4gIEhpIFBv DQo+ICANCj4gIEkgZm91bmQgYSBwcm9ibGVtIHdpdGggdGhlIHNpbWlsYXIgcGF0Y2guIGFzIHRo ZSBiZWxvdyBsb2cuDQo+ICANCj4gIFsgICAgNC4yODcwNjBdIHBjaSAwMDAwOjgwOjAwLjA6IHF1 aXJrX2Flcl9pbnRlcnJ1cHQgZGV2LT5pcnEgNDE2DQo+ICBbICAgIDQuMjkzNzc4XSBwY2llcG9y dCAwMDAwOjgwOjAwLjA6IHBjaV9kZXZpY2VfcHJvYmUgaW4NCj4gIFsgICAgNC4yOTk2MDVdIHBj aWVwb3J0IDAwMDA6ODA6MDAuMDogb2ZfaXJxX3BhcnNlX3BjaSgpIGZhaWxlZCB3aXRoDQo+ICBy Yz0tMjINCj4gIFsgICAgNC4zMDcyMDldIHBjaWVwb3J0IDAwMDA6ODA6MDAuMDogaW5pdF9zZXJ2 aWNlX2lycXMgIGRldi0+aXJxIDANCj4gIA0KPiAgVGhlIGZ1Y250aW9ucyBhcmUgY2FsbGVkIGFz IGJlbG93IHNlcXVlbmNlLg0KPiAgMS4gcXVpcmtfYWVyX2ludGVycnVwdCwgZ2V0IHRoZSBhZXIg ZGV2LT5pcnEgNDE2Lg0KDQpUaGlzIGNvZGUgcXVpcmtfYWVyX2ludGVycnVwdCgpIHNob3VsZCBi ZSBydW4gYXQgcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwpIHdoaWNoIGlzIGluIHRo ZSBwY2lfYnVzX2FkZF9kZXZpY2VzKCkNCg0KPiAgMi4gcGNpX2RldmljZV9wcm9iZS0+b2ZfaXJx X3BhcnNlX3BjaSwgb2ZfaXJxX3BhcnNlX3BjaSgpIGZhaWxlZCwgdGhlbg0KPiAgZGV2LT5pcnEg Y2hhbmdlZCB0byAwLg0KDQpwY2lfZGV2aWNlX3Byb2JlLT5vZl9pcnFfcGFyc2VfcGNpIHdoaWNo IGluIHRoZSBwY2lfc2Nhbl9jaGlsZF9idXMoKSBydW4gYmVmb3JlICBwY2lfYnVzX2FkZF9kZXZp Y2VzKCkuIFNlZSBkd19wY2llX2hvc3RfaW5pdCgpLg0KQXBwYXJlbnRseSAsIHlvdXIgcXVpcmtf YWVyX2ludGVycnVwdCgpIGlzIHJ1bm5pbmcgYmVmb3JlIHRoZSBkZXYtPmlycSBhc3NpZ25tZW50 IGluIHRoZSBvZl9pcnFfcGFyc2VfcGNpKCkuDQoNClNvIG1ha2Ugc3VyZSB5b3VyIGNvbmZpZ3Vy ZSB0aGUgcXVpcmtfYWVyX2ludGVycnVwdCgpIHJ1biBpbiB0aGUgRklOQUwgc3RhZ2UgaW4gdGhl IHF1aXJrLmMgT1IgY2hlY2sgeW91ciBob3N0IGRyaXZlciB3aGljaCB5b3UgYXJlIHVzaW5nLg0K DQoNCj4gIA0KPiAgU28gdGhpcyBwYXRjaCBjb3VsZCBub3Qgd29yayB3aXRoIGFlci4NCj4gIA0K PiAgVGhhbmtzDQo+ICBEb25nZG9uZw0KPiAg5ZyoIDIwMTYvNi8xNCAxNjoyNCwgUG8gTGl1IOWG memBkzoNCj4gID4gT24gc29tZSBwbGF0Zm9ybXMsIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBvcnQg TVNJL01TSS1YL0lOVHggaW4gUkMgbW9kZS4NCj4gID4gV2hlbiBjaGlwIHN1cHBvcnQgdGhlIGFl ciBpbnRlcnJ1cHQgd2l0aCBub25lIE1TSS9NU0ktWC9JTlR4IG1vZGUsDQo+ICA+IG1heWJlIHRo ZXJlIGlzIGludGVycnVwdCBsaW5lIGZvciBhZXIgcG1lIGV0Yy4gU2VhcmNoIHRoZSBpbnRlcnJ1 cHQNCj4gID4gbnVtYmVyIGluIHRoZSBmZHQgZmlsZS4gVGhlbiBmaXh1cCB0aGUgZGV2LT5pcnEg d2l0aCBpdC4NCj4gID4NCj4gID4gU2lnbmVkLW9mZi1ieTogUG8gTGl1IDxwby5saXVAbnhwLmNv bT4NCj4gID4gLS0tDQo+ICA+IGNoYW5nZXMgZm9yIFYzOg0KPiAgPiAJLSBNb3ZlIHRvIHF1aXJr Ow0KPiAgPiAJLSBPbmx5IGNvcnJlY3QgdGhlIGlycSBpbiBSQyBtb2RlOw0KPiAgPg0KPiAgPiAg IGRyaXZlcnMvcGNpL3F1aXJrcy5jIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysN Cj4gID4gICAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKQ0KPiAgPg0KPiAgPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYyBpbmRl eA0KPiAgPiBlZTcyZWJlLi44YjM5Y2NlIDEwMDY0NA0KPiAgPiAtLS0gYS9kcml2ZXJzL3BjaS9x dWlya3MuYw0KPiAgPiArKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYw0KPiAgPiBAQCAtMjUsNiAr MjUsNyBAQA0KPiAgPiAgICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KPiAgPiAgICNpbmNsdWRl IDxsaW51eC9rdGltZS5oPg0KPiAgPiAgICNpbmNsdWRlIDxsaW51eC9tbS5oPg0KPiAgPiArI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiAgPiAgICNpbmNsdWRlIDxhc20vZG1hLmg+CS8qIGlz YV9kbWFfYnJpZGdlX2J1Z2d5ICovDQo+ICA+ICAgI2luY2x1ZGUgInBjaS5oIg0KPiAgPg0KPiAg PiBAQCAtNDQxOSwzICs0NDIwLDMxIEBAIHN0YXRpYyB2b2lkIHF1aXJrX2ludGVsX3FhdF92Zl9j YXAoc3RydWN0DQo+ICBwY2lfZGV2ICpwZGV2KQ0KPiAgPiAgIAl9DQo+ICA+ICAgfQ0KPiAgPiAg IERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4NDQzLA0KPiAg PiBxdWlya19pbnRlbF9xYXRfdmZfY2FwKTsNCj4gID4gKw0KPiAgPiArLyogSWYgcm9vdCBwb3J0 IGRvZXNuJ3Qgc3VwcG9ydCBNU0kvTVNJLVgvSU5UeCBpbiBSQyBtb2RlLA0KPiAgPiArICogYnV0 IHVzZSBzdGFuZGFsb25lIGlycS4gUmVhZCB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZSBhZXINCj4g ID4gKyAqIGludGVycnVwdCBudW1iZXIuDQo+ICA+ICsgKi8NCj4gID4gK3N0YXRpYyB2b2lkIHF1 aXJrX2Flcl9pbnRlcnJ1cHQoc3RydWN0IHBjaV9kZXYgKmRldikgew0KPiAgPiArCWludCByZXQ7 DQo+ICA+ICsJdTggaGVhZGVyX3R5cGU7DQo+ICA+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IE5VTEw7DQo+ICA+ICsNCj4gID4gKwkvKiBPbmx5IGZvciB0aGUgUkMgbW9kZSBkZXZpY2UgKi8N Cj4gID4gKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9IRUFERVJfVFlQRSwgJmhlYWRl cl90eXBlKTsNCj4gID4gKwlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgIT0gUENJX0hFQURFUl9U WVBFX0JSSURHRSkNCj4gID4gKwkJcmV0dXJuOw0KPiAgPiArDQo+ICA+ICsJaWYgKGRldi0+YnVz LT5kZXYub2Zfbm9kZSkNCj4gID4gKwkJbnAgPSBkZXYtPmJ1cy0+ZGV2Lm9mX25vZGU7DQo+ICA+ ICsNCj4gID4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0ZfSVJRKSAmJiBucCkgew0KPiAgPiAr CQlyZXQgPSBvZl9pcnFfZ2V0X2J5bmFtZShucCwgImFlciIpOw0KPiAgPiArCQlpZiAocmV0ID4g MCkgew0KPiAgPiArCQkJZGV2LT5ub19tc2kgPSAxOw0KPiAgPiArCQkJZGV2LT5pcnEgPSByZXQ7 DQo+ICA+ICsJCX0NCj4gID4gKwl9DQo+ICA+ICt9DQo+ICA+ICtERUNMQVJFX1BDSV9GSVhVUF9G SU5BTChQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSwgUENJX0FOWV9JRCwNCj4gID4gK3F1aXJrX2Fl cl9pbnRlcnJ1cHQpOw0KPiAgPg0KPiAgDQoNCg== ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-05 3:03 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-07-05 3:03 UTC (permalink / raw) To: Dongdong Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Dongdong, The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. I am not clear what platform are you trying to fix. The problem on your board may be as below comments: > -----Original Message----- > From: Dongdong Liu [mailto:liudongdong3@huawei.com] > Sent: Monday, July 04, 2016 4:44 PM > To: Po Liu; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org > Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; > Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; > Murali Karicheri; Linuxarm > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > Hi Po > > I found a problem with the similar patch. as the below log. > > [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 > [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in > [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with > rc=-22 > [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 > > The fucntions are called as below sequence. > 1. quirk_aer_interrupt, get the aer dev->irq 416. This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() > 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then > dev->irq changed to 0. pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. > > So this patch could not work with aer. > > Thanks > Dongdong > 在 2016/6/14 16:24, Po Liu 写道: > > 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 V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > > ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-07-05 3:03 ` Po Liu (?) (?) @ 2016-07-06 8:38 ` Dongdong Liu -1 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-06 8:38 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Po 在 2016/7/5 11:03, Po Liu 写道: > Hi Dongdong, > > The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. > I am not clear what platform are you trying to fix. My platform is an ARM64 platform, PCIe host controller also use Synopsys Designware. > The problem on your board may be as below comments: > > >> -----Original Message----- >> From: Dongdong Liu [mailto:liudongdong3@huawei.com] >> Sent: Monday, July 04, 2016 4:44 PM >> To: Po Liu; linux-pci@vger.kernel.org; linux-arm- >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; >> devicetree@vger.kernel.org >> Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; >> Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; >> Murali Karicheri; Linuxarm >> Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk >> >> Hi Po >> >> I found a problem with the similar patch. as the below log. >> >> [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 >> [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in >> [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with >> rc=-22 >> [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 >> >> The fucntions are called as below sequence. >> 1. quirk_aer_interrupt, get the aer dev->irq 416. > > This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() Yes, you are right. > >> 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then >> dev->irq changed to 0. > > pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). > Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). > > So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. Yes , It is FINAL stage in the quirk. I use DECLARE_PCI_FIXUP_FINAL. I find it is the below patch affect this. (https://patchwork.kernel.org/patch/9170333/), but the patch will be applied to linux 4.8. So the problem will also be existed. ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index d5d3d26..b3b8a2c 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) } /* - * Try to assign the IRQ number from DT when adding a new device + * Try to assign the IRQ number when probing a new device */ -int pcibios_add_device(struct pci_dev *dev) +int pcibios_alloc_irq(struct pci_dev *dev) { - dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); + if (acpi_disabled) + dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); +#ifdef CONFIG_ACPI + else + return acpi_pci_irq_enable(dev); +#endif return 0; } Thanks Dongdong > > >> >> So this patch could not work with aer. >> >> Thanks >> Dongdong >> 在 2016/6/14 16:24, Po Liu 写道: >> > 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 V3: >> > - Move to quirk; >> > - Only correct the irq in RC mode; >> > >> > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ >> > 1 file changed, 29 insertions(+) >> > >> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index >> > ee72ebe..8b39cce 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,31 @@ 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; >> > + u8 header_type; >> > + struct device_node *np = NULL; >> > + >> > + /* Only for the RC mode device */ >> > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); >> > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) >> > + return; >> > + >> > + 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); >> > >> > > \x04�{.n�+�������+%��lzwm��b�맲��r��zX��\x1a\�)���w*\x1fjg���\x1e�����ݢj/���z�ޖ��2�ޙ���&�)ߡ�a��\x7f��\x1e�G���h�\x0f�j:+v���w�٥ > ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-06 8:38 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-06 8:38 UTC (permalink / raw) To: linux-arm-kernel Hi Po ? 2016/7/5 11:03, Po Liu ??: > Hi Dongdong, > > The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. > I am not clear what platform are you trying to fix. My platform is an ARM64 platform, PCIe host controller also use Synopsys Designware. > The problem on your board may be as below comments: > > >> -----Original Message----- >> From: Dongdong Liu [mailto:liudongdong3 at huawei.com] >> Sent: Monday, July 04, 2016 4:44 PM >> To: Po Liu; linux-pci at vger.kernel.org; linux-arm- >> kernel at lists.infradead.org; linux-kernel at vger.kernel.org; >> devicetree at vger.kernel.org >> Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; >> Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; >> Murali Karicheri; Linuxarm >> Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk >> >> Hi Po >> >> I found a problem with the similar patch. as the below log. >> >> [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 >> [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in >> [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with >> rc=-22 >> [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 >> >> The fucntions are called as below sequence. >> 1. quirk_aer_interrupt, get the aer dev->irq 416. > > This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() Yes, you are right. > >> 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then >> dev->irq changed to 0. > > pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). > Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). > > So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. Yes , It is FINAL stage in the quirk. I use DECLARE_PCI_FIXUP_FINAL. I find it is the below patch affect this. (https://patchwork.kernel.org/patch/9170333/), but the patch will be applied to linux 4.8. So the problem will also be existed. ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index d5d3d26..b3b8a2c 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) } /* - * Try to assign the IRQ number from DT when adding a new device + * Try to assign the IRQ number when probing a new device */ -int pcibios_add_device(struct pci_dev *dev) +int pcibios_alloc_irq(struct pci_dev *dev) { - dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); + if (acpi_disabled) + dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); +#ifdef CONFIG_ACPI + else + return acpi_pci_irq_enable(dev); +#endif return 0; } Thanks Dongdong > > >> >> So this patch could not work with aer. >> >> Thanks >> Dongdong >> ? 2016/6/14 16:24, Po Liu ??: >> > 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 V3: >> > - Move to quirk; >> > - Only correct the irq in RC mode; >> > >> > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ >> > 1 file changed, 29 insertions(+) >> > >> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index >> > ee72ebe..8b39cce 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,31 @@ 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; >> > + u8 header_type; >> > + struct device_node *np = NULL; >> > + >> > + /* Only for the RC mode device */ >> > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); >> > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) >> > + return; >> > + >> > + 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); >> > >> > > \x04?{.n?+???????+%??lzwm??b????r??zX??\x1a\?)???w*\x1fjg??? ??????j/???z????2?????&?)??a??\x7f?? ?G???h?\x0f?j:+v???w?? > ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-06 8:38 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-06 8:38 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Linuxarm Hi Po 在 2016/7/5 11:03, Po Liu 写道: > Hi Dongdong, > > The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. > I am not clear what platform are you trying to fix. My platform is an ARM64 platform, PCIe host controller also use Synopsys Designware. > The problem on your board may be as below comments: > > >> -----Original Message----- >> From: Dongdong Liu [mailto:liudongdong3@huawei.com] >> Sent: Monday, July 04, 2016 4:44 PM >> To: Po Liu; linux-pci@vger.kernel.org; linux-arm- >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; >> devicetree@vger.kernel.org >> Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; >> Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; >> Murali Karicheri; Linuxarm >> Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk >> >> Hi Po >> >> I found a problem with the similar patch. as the below log. >> >> [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 >> [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in >> [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with >> rc=-22 >> [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 >> >> The fucntions are called as below sequence. >> 1. quirk_aer_interrupt, get the aer dev->irq 416. > > This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() Yes, you are right. > >> 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then >> dev->irq changed to 0. > > pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). > Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). > > So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. Yes , It is FINAL stage in the quirk. I use DECLARE_PCI_FIXUP_FINAL. I find it is the below patch affect this. (https://patchwork.kernel.org/patch/9170333/), but the patch will be applied to linux 4.8. So the problem will also be existed. ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index d5d3d26..b3b8a2c 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) } /* - * Try to assign the IRQ number from DT when adding a new device + * Try to assign the IRQ number when probing a new device */ -int pcibios_add_device(struct pci_dev *dev) +int pcibios_alloc_irq(struct pci_dev *dev) { - dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); + if (acpi_disabled) + dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); +#ifdef CONFIG_ACPI + else + return acpi_pci_irq_enable(dev); +#endif return 0; } Thanks Dongdong > > >> >> So this patch could not work with aer. >> >> Thanks >> Dongdong >> 在 2016/6/14 16:24, Po Liu 写道: >> > 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 V3: >> > - Move to quirk; >> > - Only correct the irq in RC mode; >> > >> > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ >> > 1 file changed, 29 insertions(+) >> > >> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index >> > ee72ebe..8b39cce 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,31 @@ 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; >> > + u8 header_type; >> > + struct device_node *np = NULL; >> > + >> > + /* Only for the RC mode device */ >> > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); >> > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) >> > + return; >> > + >> > + 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); >> > >> > > \x04�{.n�+�������+%��lzwm��b�맲��r��zX��\x1a\�)���w*\x1fjg���\x1e�����ݢj/���z�ޖ��2�ޙ���&�)ߡ�a��\x7f��\x1e�G���h�\x0f�j:+v���w�٥ > ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-06 8:38 ` Dongdong Liu 0 siblings, 0 replies; 201+ messages in thread From: Dongdong Liu @ 2016-07-06 8:38 UTC (permalink / raw) To: Po Liu, linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Linuxarm, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Hi Po 在 2016/7/5 11:03, Po Liu 写道: > Hi Dongdong, > > The patch were intend to fixup the NXP layerscape serial SOC and were tested ok. > I am not clear what platform are you trying to fix. My platform is an ARM64 platform, PCIe host controller also use Synopsys Designware. > The problem on your board may be as below comments: > > >> -----Original Message----- >> From: Dongdong Liu [mailto:liudongdong3@huawei.com] >> Sent: Monday, July 04, 2016 4:44 PM >> To: Po Liu; linux-pci@vger.kernel.org; linux-arm- >> kernel@lists.infradead.org; linux-kernel@vger.kernel.org; >> devicetree@vger.kernel.org >> Cc: Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; >> Mingkai Hu; Stuart Yoder; Yang-Leo Li; Arnd Bergmann; Minghuan Lian; >> Murali Karicheri; Linuxarm >> Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk >> >> Hi Po >> >> I found a problem with the similar patch. as the below log. >> >> [ 4.287060] pci 0000:80:00.0: quirk_aer_interrupt dev->irq 416 >> [ 4.293778] pcieport 0000:80:00.0: pci_device_probe in >> [ 4.299605] pcieport 0000:80:00.0: of_irq_parse_pci() failed with >> rc=-22 >> [ 4.307209] pcieport 0000:80:00.0: init_service_irqs dev->irq 0 >> >> The fucntions are called as below sequence. >> 1. quirk_aer_interrupt, get the aer dev->irq 416. > > This code quirk_aer_interrupt() should be run at pci_fixup_device(pci_fixup_final) which is in the pci_bus_add_devices() Yes, you are right. > >> 2. pci_device_probe->of_irq_parse_pci, of_irq_parse_pci() failed, then >> dev->irq changed to 0. > > pci_device_probe->of_irq_parse_pci which in the pci_scan_child_bus() run before pci_bus_add_devices(). See dw_pcie_host_init(). > Apparently , your quirk_aer_interrupt() is running before the dev->irq assignment in the of_irq_parse_pci(). > > So make sure your configure the quirk_aer_interrupt() run in the FINAL stage in the quirk.c OR check your host driver which you are using. Yes , It is FINAL stage in the quirk. I use DECLARE_PCI_FIXUP_FINAL. I find it is the below patch affect this. (https://patchwork.kernel.org/patch/9170333/), but the patch will be applied to linux 4.8. So the problem will also be existed. ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index d5d3d26..b3b8a2c 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -51,11 +51,16 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) } /* - * Try to assign the IRQ number from DT when adding a new device + * Try to assign the IRQ number when probing a new device */ -int pcibios_add_device(struct pci_dev *dev) +int pcibios_alloc_irq(struct pci_dev *dev) { - dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); + if (acpi_disabled) + dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); +#ifdef CONFIG_ACPI + else + return acpi_pci_irq_enable(dev); +#endif return 0; } Thanks Dongdong > > >> >> So this patch could not work with aer. >> >> Thanks >> Dongdong >> 在 2016/6/14 16:24, Po Liu 写道: >> > 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 V3: >> > - Move to quirk; >> > - Only correct the irq in RC mode; >> > >> > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ >> > 1 file changed, 29 insertions(+) >> > >> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index >> > ee72ebe..8b39cce 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,31 @@ 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; >> > + u8 header_type; >> > + struct device_node *np = NULL; >> > + >> > + /* Only for the RC mode device */ >> > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); >> > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) >> > + return; >> > + >> > + 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); >> > >> > > \x04�{.n�+�������+%��lzwm��b�맲��r��zX��\x1a\�)���w*\x1fjg���\x1e�����ݢj/���z�ޖ��2�ޙ���&�)ߡ�a��\x7f��\x1e�G���h�\x0f�j:+v���w�٥ > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-29 22:41 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-07-29 22:41 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On Tue, Jun 14, 2016 at 04:24:05PM +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> I'm not sure where we're at with this. Dongdong had some issue (possibly with a version of the quirk on a different platform?), and I think the suggestion of explicitly checking for a root port device was a good one. So please update and repost this for next cycle. > --- > changes for V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-29 22:41 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-07-29 22:41 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jun 14, 2016 at 04:24:05PM +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> I'm not sure where we're at with this. Dongdong had some issue (possibly with a version of the quirk on a different platform?), and I think the suggestion of explicitly checking for a root port device was a good one. So please update and repost this for next cycle. > --- > changes for V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-29 22:41 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-07-29 22:41 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Tue, Jun 14, 2016 at 04:24:05PM +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> I'm not sure where we're at with this. Dongdong had some issue (possibly with a version of the quirk on a different platform?), and I think the suggestion of explicitly checking for a root port device was a good one. So please update and repost this for next cycle. > --- > changes for V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-07-29 22:41 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-07-29 22:41 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On Tue, Jun 14, 2016 at 04:24:05PM +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-3arQi8VN3Tc@public.gmane.org> I'm not sure where we're at with this. Dongdong had some issue (possibly with a version of the quirk on a different platform?), and I think the suggestion of explicitly checking for a root port device was a good one. So please update and repost this for next cycle. > --- > changes for V3: > - Move to quirk; > - Only correct the irq in RC mode; > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index ee72ebe..8b39cce 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,31 @@ 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; > + u8 header_type; > + struct device_node *np = NULL; > + > + /* Only for the RC mode device */ > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > + return; > + > + 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); > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-07-29 22:41 ` Bjorn Helgaas (?) (?) @ 2016-08-22 10:09 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-22 10:09 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Hi Bjorn, Sorry for late reply. I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. Thanks! Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, July 30, 2016 6:42 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > I'm not sure where we're at with this. Dongdong had some issue > (possibly with a version of the quirk on a different platform?), and I > think the suggestion of explicitly checking for a root port device was a > good one. > > So please update and repost this for next cycle. > > > --- > > changes for V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-08-22 10:09 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-22 10:09 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, Sorry for late reply. I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. Thanks! Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Saturday, July 30, 2016 6:42 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > I'm not sure where we're at with this. Dongdong had some issue > (possibly with a version of the quirk on a different platform?), and I > think the suggestion of explicitly checking for a root port device was a > good one. > > So please update and repost this for next cycle. > > > --- > > changes for V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel at lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-08-22 10:09 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-22 10:09 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, Sorry for late reply. I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. Thanks! Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, July 30, 2016 6:42 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > I'm not sure where we're at with this. Dongdong had some issue > (possibly with a version of the quirk on a different platform?), and I > think the suggestion of explicitly checking for a root port device was a > good one. > > So please update and repost this for next cycle. > > > --- > > changes for V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-08-22 10:09 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-22 10:09 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, Sorry for late reply. I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. Thanks! Best regards, Liu Po > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Saturday, July 30, 2016 6:42 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > I'm not sure where we're at with this. Dongdong had some issue > (possibly with a version of the quirk on a different platform?), and I > think the suggestion of explicitly checking for a root port device was a > good one. > > So please update and repost this for next cycle. > > > --- > > changes for V3: > > - Move to quirk; > > - Only correct the irq in RC mode; > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > 1 file changed, 29 insertions(+) > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > ee72ebe..8b39cce 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,31 @@ 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; > > + u8 header_type; > > + struct device_node *np = NULL; > > + > > + /* Only for the RC mode device */ > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > + return; > > + > > + 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); > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-08-22 10:09 ` Po Liu (?) @ 2016-09-20 20:47 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-20 20:47 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > Hi Bjorn, > > Sorry for late reply. > > I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I don't understand what you're saying here. The quirk worked on your machine. It apparently didn't work on Dongdong's machine because of_irq_parse_and_map_pci() is run after the quirk in this path: pci_device_probe pcibios_alloc_irq # arm64 dev->irq = of_irq_parse_and_map_pci and of_irq_parse_and_map_pci() returned zero, probably because of_irq_parse_pci() failed. My guess is that the reason it works on your machine but not Dongdong's is that your DTs are different such that of_irq_parse_pci() works for you but not for Dongdong. I think the idea of of_irq_parse_and_map_pci() is to set up a device's INTx line. But that doesn't quite apply here because your device doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() works for you. Maybe that's a symptom of a problem in your DT. Or maybe you're saying that the quirk *didn't* work on your machine when you tested it in a kernel that included d8ed75d59332 ("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code"). But that doesn't make sense either, because prior to d8ed75d59332, we *always* set dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); and after the patch we only do it if "acpi_disabled". I guess I just don't understand what you're saying. > I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. No, I did not mean you should go back to the first version of the patch. If we *can* do this in a quirk, I think that would be much better than doing it in the PCIe port driver. I meant that Dongdong's suggestion of adding this: if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; to your quirk made sense to me. > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Saturday, July 30, 2016 6:42 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > I'm not sure where we're at with this. Dongdong had some issue > > (possibly with a version of the quirk on a different platform?), and I > > think the suggestion of explicitly checking for a root port device was a > > good one. > > > > So please update and repost this for next cycle. > > > > > --- > > > changes for V3: > > > - Move to quirk; > > > - Only correct the irq in RC mode; > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > > 1 file changed, 29 insertions(+) > > > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > ee72ebe..8b39cce 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,31 @@ 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; > > > + u8 header_type; > > > + struct device_node *np = NULL; > > > + > > > + /* Only for the RC mode device */ > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > + return; > > > + > > > + 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); > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-20 20:47 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-20 20:47 UTC (permalink / raw) To: linux-arm-kernel On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > Hi Bjorn, > > Sorry for late reply. > > I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I don't understand what you're saying here. The quirk worked on your machine. It apparently didn't work on Dongdong's machine because of_irq_parse_and_map_pci() is run after the quirk in this path: pci_device_probe pcibios_alloc_irq # arm64 dev->irq = of_irq_parse_and_map_pci and of_irq_parse_and_map_pci() returned zero, probably because of_irq_parse_pci() failed. My guess is that the reason it works on your machine but not Dongdong's is that your DTs are different such that of_irq_parse_pci() works for you but not for Dongdong. I think the idea of of_irq_parse_and_map_pci() is to set up a device's INTx line. But that doesn't quite apply here because your device doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() works for you. Maybe that's a symptom of a problem in your DT. Or maybe you're saying that the quirk *didn't* work on your machine when you tested it in a kernel that included d8ed75d59332 ("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code"). But that doesn't make sense either, because prior to d8ed75d59332, we *always* set dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); and after the patch we only do it if "acpi_disabled". I guess I just don't understand what you're saying. > I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. No, I did not mean you should go back to the first version of the patch. If we *can* do this in a quirk, I think that would be much better than doing it in the PCIe port driver. I meant that Dongdong's suggestion of adding this: if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; to your quirk made sense to me. > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > Sent: Saturday, July 30, 2016 6:42 AM > > To: Po Liu > > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > I'm not sure where we're at with this. Dongdong had some issue > > (possibly with a version of the quirk on a different platform?), and I > > think the suggestion of explicitly checking for a root port device was a > > good one. > > > > So please update and repost this for next cycle. > > > > > --- > > > changes for V3: > > > - Move to quirk; > > > - Only correct the irq in RC mode; > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > > 1 file changed, 29 insertions(+) > > > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > ee72ebe..8b39cce 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,31 @@ 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; > > > + u8 header_type; > > > + struct device_node *np = NULL; > > > + > > > + /* Only for the RC mode device */ > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > + return; > > > + > > > + 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); > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel at lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-20 20:47 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-20 20:47 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > Hi Bjorn, > > Sorry for late reply. > > I checked the updated kernel with Dongdong mentioned ACPI patch which was truly affected my quirk patch uploaded. So I suppose the quirk patch is not qualify to fix the bug. I don't understand what you're saying here. The quirk worked on your machine. It apparently didn't work on Dongdong's machine because of_irq_parse_and_map_pci() is run after the quirk in this path: pci_device_probe pcibios_alloc_irq # arm64 dev->irq = of_irq_parse_and_map_pci and of_irq_parse_and_map_pci() returned zero, probably because of_irq_parse_pci() failed. My guess is that the reason it works on your machine but not Dongdong's is that your DTs are different such that of_irq_parse_pci() works for you but not for Dongdong. I think the idea of of_irq_parse_and_map_pci() is to set up a device's INTx line. But that doesn't quite apply here because your device doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() works for you. Maybe that's a symptom of a problem in your DT. Or maybe you're saying that the quirk *didn't* work on your machine when you tested it in a kernel that included d8ed75d59332 ("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code"). But that doesn't make sense either, because prior to d8ed75d59332, we *always* set dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); and after the patch we only do it if "acpi_disabled". I guess I just don't understand what you're saying. > I were keep thinking what your "explicitly checking for a root port device" meaning. Do you mean I should upload again the first version patch which fix it in the portdrv_core.c ? I would upload again if yes. No, I did not mean you should go back to the first version of the patch. If we *can* do this in a quirk, I think that would be much better than doing it in the PCIe port driver. I meant that Dongdong's suggestion of adding this: if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) return; to your quirk made sense to me. > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Saturday, July 30, 2016 6:42 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > I'm not sure where we're at with this. Dongdong had some issue > > (possibly with a version of the quirk on a different platform?), and I > > think the suggestion of explicitly checking for a root port device was a > > good one. > > > > So please update and repost this for next cycle. > > > > > --- > > > changes for V3: > > > - Move to quirk; > > > - Only correct the irq in RC mode; > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > > > 1 file changed, 29 insertions(+) > > > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > ee72ebe..8b39cce 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,31 @@ 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; > > > + u8 header_type; > > > + struct device_node *np = NULL; > > > + > > > + /* Only for the RC mode device */ > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > + return; > > > + > > > + 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); > > > -- > > > 2.1.0.27.g96db324 > > > > > > > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-09-20 20:47 ` Bjorn Helgaas (?) (?) @ 2016-09-21 6:51 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:51 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Wednesday, September 21, 2016 4:47 AM > To: Po Liu > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > Guo; linux-arm-kernel@lists.infradead.org > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > Sorry for late reply. > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > was truly affected my quirk patch uploaded. So I suppose the quirk patch > is not qualify to fix the bug. > > I don't understand what you're saying here. > > The quirk worked on your machine. It apparently didn't work on > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > quirk in this path: > > pci_device_probe > pcibios_alloc_irq # arm64 > dev->irq = of_irq_parse_and_map_pci > > and of_irq_parse_and_map_pci() returned zero, probably because > of_irq_parse_pci() failed. My guess is that the reason it works on your > machine but not Dongdong's is that your DTs are different such that > of_irq_parse_pci() works for you but not for Dongdong. > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > INTx line. But that doesn't quite apply here because your device > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > works for you. Maybe that's a symptom of a problem in your DT. > > Or maybe you're saying that the quirk *didn't* work on your machine when > you tested it in a kernel that included d8ed75d59332 ("ARM64: > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > code"). Yes, this point is what I mean. After this patch my quirk patch would not work. Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > But that doesn't make sense either, because prior to > d8ed75d59332, we *always* set > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > and after the patch we only do it if "acpi_disabled". I guess I just > don't understand what you're saying. Before the patch merged. pcibios_add_device()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the pci_fixup_device(pci_fixup_final). But after the patch d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code") merged, the pci_fixup_device(pci_fixup_final) run BEFORE the pcibios_alloc_irq()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were overwhelm by the pcibios_alloc_irq(). When I test, the acpi_disabled is '1' although my kernel config default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. But this is another issue, I didn't deep to check it. > > > I were keep thinking what your "explicitly checking for a root port > device" meaning. Do you mean I should upload again the first version > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > No, I did not mean you should go back to the first version of the patch. > If we *can* do this in a quirk, I think that would be much better than > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > adding this: > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > to your quirk made sense to me. If the quirk patch could make workaround. It should be the better way. Po Liu > > > > -----Original Message----- > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > Sent: Saturday, July 30, 2016 6:42 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > (possibly with a version of the quirk on a different platform?), and > > > I think the suggestion of explicitly checking for a root port > > > device was a good one. > > > > > > So please update and repost this for next cycle. > > > > > > > --- > > > > changes for V3: > > > > - Move to quirk; > > > > - Only correct the irq in RC mode; > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > file changed, 29 insertions(+) > > diff --git > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > + u8 header_type; > > > > + struct device_node *np = NULL; > > > > + > > > > + /* Only for the RC mode device */ > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > + return; > > > > + > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > > > linux-arm-kernel mailing list > > > > linux-arm-kernel@lists.infradead.org > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 6:51 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:51 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Wednesday, September 21, 2016 4:47 AM > To: Po Liu > Cc: Roy Zang; Arnd Bergmann; devicetree at vger.kernel.org; Marc Zyngier; > linux-pci at vger.kernel.org; linux-kernel at vger.kernel.org; Stuart Yoder; > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > Guo; linux-arm-kernel at lists.infradead.org > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > Sorry for late reply. > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > was truly affected my quirk patch uploaded. So I suppose the quirk patch > is not qualify to fix the bug. > > I don't understand what you're saying here. > > The quirk worked on your machine. It apparently didn't work on > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > quirk in this path: > > pci_device_probe > pcibios_alloc_irq # arm64 > dev->irq = of_irq_parse_and_map_pci > > and of_irq_parse_and_map_pci() returned zero, probably because > of_irq_parse_pci() failed. My guess is that the reason it works on your > machine but not Dongdong's is that your DTs are different such that > of_irq_parse_pci() works for you but not for Dongdong. > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > INTx line. But that doesn't quite apply here because your device > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > works for you. Maybe that's a symptom of a problem in your DT. > > Or maybe you're saying that the quirk *didn't* work on your machine when > you tested it in a kernel that included d8ed75d59332 ("ARM64: > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > code"). Yes, this point is what I mean. After this patch my quirk patch would not work. Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > But that doesn't make sense either, because prior to > d8ed75d59332, we *always* set > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > and after the patch we only do it if "acpi_disabled". I guess I just > don't understand what you're saying. Before the patch merged. pcibios_add_device()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the pci_fixup_device(pci_fixup_final). But after the patch d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code") merged, the pci_fixup_device(pci_fixup_final) run BEFORE the pcibios_alloc_irq()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were overwhelm by the pcibios_alloc_irq(). When I test, the acpi_disabled is '1' although my kernel config default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. But this is another issue, I didn't deep to check it. > > > I were keep thinking what your "explicitly checking for a root port > device" meaning. Do you mean I should upload again the first version > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > No, I did not mean you should go back to the first version of the patch. > If we *can* do this in a quirk, I think that would be much better than > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > adding this: > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > to your quirk made sense to me. If the quirk patch could make workaround. It should be the better way. Po Liu > > > > -----Original Message----- > > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > > Sent: Saturday, July 30, 2016 6:42 AM > > > To: Po Liu > > > Cc: linux-pci at vger.kernel.org; > > > linux-arm-kernel at lists.infradead.org; > > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > (possibly with a version of the quirk on a different platform?), and > > > I think the suggestion of explicitly checking for a root port > > > device was a good one. > > > > > > So please update and repost this for next cycle. > > > > > > > --- > > > > changes for V3: > > > > - Move to quirk; > > > > - Only correct the irq in RC mode; > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > file changed, 29 insertions(+) > > diff --git > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > + u8 header_type; > > > > + struct device_node *np = NULL; > > > > + > > > > + /* Only for the RC mode device */ > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > + return; > > > > + > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > > > linux-arm-kernel mailing list > > > > linux-arm-kernel at lists.infradead.org > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel at lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 6:51 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:51 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, linux-arm-kernel, Bjorn Helgaas, Leo Li, Shawn Guo, Mingkai Hu Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Wednesday, September 21, 2016 4:47 AM > To: Po Liu > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > Guo; linux-arm-kernel@lists.infradead.org > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > Sorry for late reply. > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > was truly affected my quirk patch uploaded. So I suppose the quirk patch > is not qualify to fix the bug. > > I don't understand what you're saying here. > > The quirk worked on your machine. It apparently didn't work on > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > quirk in this path: > > pci_device_probe > pcibios_alloc_irq # arm64 > dev->irq = of_irq_parse_and_map_pci > > and of_irq_parse_and_map_pci() returned zero, probably because > of_irq_parse_pci() failed. My guess is that the reason it works on your > machine but not Dongdong's is that your DTs are different such that > of_irq_parse_pci() works for you but not for Dongdong. > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > INTx line. But that doesn't quite apply here because your device > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > works for you. Maybe that's a symptom of a problem in your DT. > > Or maybe you're saying that the quirk *didn't* work on your machine when > you tested it in a kernel that included d8ed75d59332 ("ARM64: > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > code"). Yes, this point is what I mean. After this patch my quirk patch would not work. Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > But that doesn't make sense either, because prior to > d8ed75d59332, we *always* set > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > and after the patch we only do it if "acpi_disabled". I guess I just > don't understand what you're saying. Before the patch merged. pcibios_add_device()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the pci_fixup_device(pci_fixup_final). But after the patch d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code") merged, the pci_fixup_device(pci_fixup_final) run BEFORE the pcibios_alloc_irq()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were overwhelm by the pcibios_alloc_irq(). When I test, the acpi_disabled is '1' although my kernel config default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. But this is another issue, I didn't deep to check it. > > > I were keep thinking what your "explicitly checking for a root port > device" meaning. Do you mean I should upload again the first version > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > No, I did not mean you should go back to the first version of the patch. > If we *can* do this in a quirk, I think that would be much better than > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > adding this: > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > to your quirk made sense to me. If the quirk patch could make workaround. It should be the better way. Po Liu > > > > -----Original Message----- > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > Sent: Saturday, July 30, 2016 6:42 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > (possibly with a version of the quirk on a different platform?), and > > > I think the suggestion of explicitly checking for a root port > > > device was a good one. > > > > > > So please update and repost this for next cycle. > > > > > > > --- > > > > changes for V3: > > > > - Move to quirk; > > > > - Only correct the irq in RC mode; > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > file changed, 29 insertions(+) > > diff --git > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > + u8 header_type; > > > > + struct device_node *np = NULL; > > > > + > > > > + /* Only for the RC mode device */ > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > + return; > > > > + > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > > > linux-arm-kernel mailing list > > > > linux-arm-kernel@lists.infradead.org > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 6:51 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:51 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, linux-arm-kernel, Bjorn Helgaas, Leo Li, Shawn Guo, Mingkai Hu Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Wednesday, September 21, 2016 4:47 AM > To: Po Liu > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > Guo; linux-arm-kernel@lists.infradead.org > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > Hi Bjorn, > > > > Sorry for late reply. > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > was truly affected my quirk patch uploaded. So I suppose the quirk patch > is not qualify to fix the bug. > > I don't understand what you're saying here. > > The quirk worked on your machine. It apparently didn't work on > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > quirk in this path: > > pci_device_probe > pcibios_alloc_irq # arm64 > dev->irq = of_irq_parse_and_map_pci > > and of_irq_parse_and_map_pci() returned zero, probably because > of_irq_parse_pci() failed. My guess is that the reason it works on your > machine but not Dongdong's is that your DTs are different such that > of_irq_parse_pci() works for you but not for Dongdong. > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > INTx line. But that doesn't quite apply here because your device > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > works for you. Maybe that's a symptom of a problem in your DT. > > Or maybe you're saying that the quirk *didn't* work on your machine when > you tested it in a kernel that included d8ed75d59332 ("ARM64: > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > code"). Yes, this point is what I mean. After this patch my quirk patch would not work. Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > But that doesn't make sense either, because prior to > d8ed75d59332, we *always* set > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > and after the patch we only do it if "acpi_disabled". I guess I just > don't understand what you're saying. Before the patch merged. pcibios_add_device()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the pci_fixup_device(pci_fixup_final). But after the patch d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and consolidation with DT code") merged, the pci_fixup_device(pci_fixup_final) run BEFORE the pcibios_alloc_irq()(which run the ->irq = of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were overwhelm by the pcibios_alloc_irq(). When I test, the acpi_disabled is '1' although my kernel config default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. But this is another issue, I didn't deep to check it. > > > I were keep thinking what your "explicitly checking for a root port > device" meaning. Do you mean I should upload again the first version > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > No, I did not mean you should go back to the first version of the patch. > If we *can* do this in a quirk, I think that would be much better than > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > adding this: > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > return; > > to your quirk made sense to me. If the quirk patch could make workaround. It should be the better way. Po Liu > > > > -----Original Message----- > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > Sent: Saturday, July 30, 2016 6:42 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > (possibly with a version of the quirk on a different platform?), and > > > I think the suggestion of explicitly checking for a root port > > > device was a good one. > > > > > > So please update and repost this for next cycle. > > > > > > > --- > > > > changes for V3: > > > > - Move to quirk; > > > > - Only correct the irq in RC mode; > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > file changed, 29 insertions(+) > > diff --git > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > + u8 header_type; > > > > + struct device_node *np = NULL; > > > > + > > > > + /* Only for the RC mode device */ > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > + return; > > > > + > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > > > linux-arm-kernel mailing list > > > > linux-arm-kernel@lists.infradead.org > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk 2016-09-21 6:51 ` Po Liu (?) (?) @ 2016-09-21 21:53 ` Bjorn Helgaas -1 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 21:53 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, linux-arm-kernel, Bjorn Helgaas, Leo Li, Shawn Guo, Mingkai Hu On Wed, Sep 21, 2016 at 06:51:55AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Wednesday, September 21, 2016 4:47 AM > > To: Po Liu > > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > > Guo; linux-arm-kernel@lists.infradead.org > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > > Hi Bjorn, > > > > > > Sorry for late reply. > > > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > > was truly affected my quirk patch uploaded. So I suppose the quirk patch > > is not qualify to fix the bug. > > > > I don't understand what you're saying here. > > > > The quirk worked on your machine. It apparently didn't work on > > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > > quirk in this path: > > > > pci_device_probe > > pcibios_alloc_irq # arm64 > > dev->irq = of_irq_parse_and_map_pci > > > > and of_irq_parse_and_map_pci() returned zero, probably because > > of_irq_parse_pci() failed. My guess is that the reason it works on your > > machine but not Dongdong's is that your DTs are different such that > > of_irq_parse_pci() works for you but not for Dongdong. > > > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > > INTx line. But that doesn't quite apply here because your device > > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > > works for you. Maybe that's a symptom of a problem in your DT. > > > > Or maybe you're saying that the quirk *didn't* work on your machine when > > you tested it in a kernel that included d8ed75d59332 ("ARM64: > > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > > code"). > > Yes, this point is what I mean. After this patch my quirk patch would not work. > Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > > > > But that doesn't make sense either, because prior to > > d8ed75d59332, we *always* set > > > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > > > and after the patch we only do it if "acpi_disabled". I guess I just > > don't understand what you're saying. > > Before the patch merged. pcibios_add_device()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the > pci_fixup_device(pci_fixup_final). But after the patch > d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and > consolidation with DT code") merged, the > pci_fixup_device(pci_fixup_final) run BEFORE the > pcibios_alloc_irq()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were > overwhelm by the pcibios_alloc_irq(). OK. Prior to d8ed75d59332, arm64 overrode the default empty pcibios_add_device() implementation, and called of_irq_parse_and_map_pci() there. d8ed75d59332 changed that function to pcibios_alloc_irq(), which is called later, in the driver probe path. > When I test, the acpi_disabled is '1' although my kernel config > default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. > But this is another issue, I didn't deep to check it. Likely your platform just doesn't have ACPI or something's wrong in the initial ACPI setup. > > > I were keep thinking what your "explicitly checking for a root port > > device" meaning. Do you mean I should upload again the first version > > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > > > No, I did not mean you should go back to the first version of the patch. > > If we *can* do this in a quirk, I think that would be much better than > > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > > adding this: > > > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > > return; > > > > to your quirk made sense to me. > > If the quirk patch could make workaround. It should be the better way. It doesn't sound like a quirk is going to work because all the quirks run too early. I'll respond to the patch itself with more ideas. > > > > -----Original Message----- > > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > > Sent: Saturday, July 30, 2016 6:42 AM > > > > To: Po Liu > > > > Cc: linux-pci@vger.kernel.org; > > > > linux-arm-kernel@lists.infradead.org; > > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > > (possibly with a version of the quirk on a different platform?), and > > > > I think the suggestion of explicitly checking for a root port > > > > device was a good one. > > > > > > > > So please update and repost this for next cycle. > > > > > > > > > --- > > > > > changes for V3: > > > > > - Move to quirk; > > > > > - Only correct the irq in RC mode; > > > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > > file changed, 29 insertions(+) > > diff --git > > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > > + u8 header_type; > > > > > + struct device_node *np = NULL; > > > > > + > > > > > + /* Only for the RC mode device */ > > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > > + return; > > > > > + > > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > > _______________________________________________ > > > > > linux-arm-kernel mailing list > > > > > linux-arm-kernel@lists.infradead.org > > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 21:53 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 21:53 UTC (permalink / raw) To: linux-arm-kernel On Wed, Sep 21, 2016 at 06:51:55AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > Sent: Wednesday, September 21, 2016 4:47 AM > > To: Po Liu > > Cc: Roy Zang; Arnd Bergmann; devicetree at vger.kernel.org; Marc Zyngier; > > linux-pci at vger.kernel.org; linux-kernel at vger.kernel.org; Stuart Yoder; > > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > > Guo; linux-arm-kernel at lists.infradead.org > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > > Hi Bjorn, > > > > > > Sorry for late reply. > > > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > > was truly affected my quirk patch uploaded. So I suppose the quirk patch > > is not qualify to fix the bug. > > > > I don't understand what you're saying here. > > > > The quirk worked on your machine. It apparently didn't work on > > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > > quirk in this path: > > > > pci_device_probe > > pcibios_alloc_irq # arm64 > > dev->irq = of_irq_parse_and_map_pci > > > > and of_irq_parse_and_map_pci() returned zero, probably because > > of_irq_parse_pci() failed. My guess is that the reason it works on your > > machine but not Dongdong's is that your DTs are different such that > > of_irq_parse_pci() works for you but not for Dongdong. > > > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > > INTx line. But that doesn't quite apply here because your device > > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > > works for you. Maybe that's a symptom of a problem in your DT. > > > > Or maybe you're saying that the quirk *didn't* work on your machine when > > you tested it in a kernel that included d8ed75d59332 ("ARM64: > > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > > code"). > > Yes, this point is what I mean. After this patch my quirk patch would not work. > Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > > > > But that doesn't make sense either, because prior to > > d8ed75d59332, we *always* set > > > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > > > and after the patch we only do it if "acpi_disabled". I guess I just > > don't understand what you're saying. > > Before the patch merged. pcibios_add_device()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the > pci_fixup_device(pci_fixup_final). But after the patch > d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and > consolidation with DT code") merged, the > pci_fixup_device(pci_fixup_final) run BEFORE the > pcibios_alloc_irq()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were > overwhelm by the pcibios_alloc_irq(). OK. Prior to d8ed75d59332, arm64 overrode the default empty pcibios_add_device() implementation, and called of_irq_parse_and_map_pci() there. d8ed75d59332 changed that function to pcibios_alloc_irq(), which is called later, in the driver probe path. > When I test, the acpi_disabled is '1' although my kernel config > default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. > But this is another issue, I didn't deep to check it. Likely your platform just doesn't have ACPI or something's wrong in the initial ACPI setup. > > > I were keep thinking what your "explicitly checking for a root port > > device" meaning. Do you mean I should upload again the first version > > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > > > No, I did not mean you should go back to the first version of the patch. > > If we *can* do this in a quirk, I think that would be much better than > > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > > adding this: > > > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > > return; > > > > to your quirk made sense to me. > > If the quirk patch could make workaround. It should be the better way. It doesn't sound like a quirk is going to work because all the quirks run too early. I'll respond to the patch itself with more ideas. > > > > -----Original Message----- > > > > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > > > > Sent: Saturday, July 30, 2016 6:42 AM > > > > To: Po Liu > > > > Cc: linux-pci at vger.kernel.org; > > > > linux-arm-kernel at lists.infradead.org; > > > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; > > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > > (possibly with a version of the quirk on a different platform?), and > > > > I think the suggestion of explicitly checking for a root port > > > > device was a good one. > > > > > > > > So please update and repost this for next cycle. > > > > > > > > > --- > > > > > changes for V3: > > > > > - Move to quirk; > > > > > - Only correct the irq in RC mode; > > > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > > file changed, 29 insertions(+) > > diff --git > > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > > + u8 header_type; > > > > > + struct device_node *np = NULL; > > > > > + > > > > > + /* Only for the RC mode device */ > > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > > + return; > > > > > + > > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > > _______________________________________________ > > > > > linux-arm-kernel mailing list > > > > > linux-arm-kernel at lists.infradead.org > > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel at lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 21:53 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 21:53 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel On Wed, Sep 21, 2016 at 06:51:55AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Wednesday, September 21, 2016 4:47 AM > > To: Po Liu > > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > > Guo; linux-arm-kernel@lists.infradead.org > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > > Hi Bjorn, > > > > > > Sorry for late reply. > > > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > > was truly affected my quirk patch uploaded. So I suppose the quirk patch > > is not qualify to fix the bug. > > > > I don't understand what you're saying here. > > > > The quirk worked on your machine. It apparently didn't work on > > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > > quirk in this path: > > > > pci_device_probe > > pcibios_alloc_irq # arm64 > > dev->irq = of_irq_parse_and_map_pci > > > > and of_irq_parse_and_map_pci() returned zero, probably because > > of_irq_parse_pci() failed. My guess is that the reason it works on your > > machine but not Dongdong's is that your DTs are different such that > > of_irq_parse_pci() works for you but not for Dongdong. > > > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > > INTx line. But that doesn't quite apply here because your device > > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > > works for you. Maybe that's a symptom of a problem in your DT. > > > > Or maybe you're saying that the quirk *didn't* work on your machine when > > you tested it in a kernel that included d8ed75d59332 ("ARM64: > > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > > code"). > > Yes, this point is what I mean. After this patch my quirk patch would not work. > Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > > > > But that doesn't make sense either, because prior to > > d8ed75d59332, we *always* set > > > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > > > and after the patch we only do it if "acpi_disabled". I guess I just > > don't understand what you're saying. > > Before the patch merged. pcibios_add_device()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the > pci_fixup_device(pci_fixup_final). But after the patch > d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and > consolidation with DT code") merged, the > pci_fixup_device(pci_fixup_final) run BEFORE the > pcibios_alloc_irq()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were > overwhelm by the pcibios_alloc_irq(). OK. Prior to d8ed75d59332, arm64 overrode the default empty pcibios_add_device() implementation, and called of_irq_parse_and_map_pci() there. d8ed75d59332 changed that function to pcibios_alloc_irq(), which is called later, in the driver probe path. > When I test, the acpi_disabled is '1' although my kernel config > default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. > But this is another issue, I didn't deep to check it. Likely your platform just doesn't have ACPI or something's wrong in the initial ACPI setup. > > > I were keep thinking what your "explicitly checking for a root port > > device" meaning. Do you mean I should upload again the first version > > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > > > No, I did not mean you should go back to the first version of the patch. > > If we *can* do this in a quirk, I think that would be much better than > > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > > adding this: > > > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > > return; > > > > to your quirk made sense to me. > > If the quirk patch could make workaround. It should be the better way. It doesn't sound like a quirk is going to work because all the quirks run too early. I'll respond to the patch itself with more ideas. > > > > -----Original Message----- > > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > > Sent: Saturday, July 30, 2016 6:42 AM > > > > To: Po Liu > > > > Cc: linux-pci@vger.kernel.org; > > > > linux-arm-kernel@lists.infradead.org; > > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > > (possibly with a version of the quirk on a different platform?), and > > > > I think the suggestion of explicitly checking for a root port > > > > device was a good one. > > > > > > > > So please update and repost this for next cycle. > > > > > > > > > --- > > > > > changes for V3: > > > > > - Move to quirk; > > > > > - Only correct the irq in RC mode; > > > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > > file changed, 29 insertions(+) > > diff --git > > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > > + u8 header_type; > > > > > + struct device_node *np = NULL; > > > > > + > > > > > + /* Only for the RC mode device */ > > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > > + return; > > > > > + > > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > > _______________________________________________ > > > > > linux-arm-kernel mailing list > > > > > linux-arm-kernel@lists.infradead.org > > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk @ 2016-09-21 21:53 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 21:53 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel On Wed, Sep 21, 2016 at 06:51:55AM +0000, Po Liu wrote: > Hi Bjorn, > > > -----Original Message----- > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > Sent: Wednesday, September 21, 2016 4:47 AM > > To: Po Liu > > Cc: Roy Zang; Arnd Bergmann; devicetree@vger.kernel.org; Marc Zyngier; > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Stuart Yoder; > > M.H. Lian; Murali Karicheri; Mingkai Hu; Bjorn Helgaas; Leo Li; Shawn > > Guo; linux-arm-kernel@lists.infradead.org > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > On Mon, Aug 22, 2016 at 10:09:18AM +0000, Po Liu wrote: > > > Hi Bjorn, > > > > > > Sorry for late reply. > > > > > > I checked the updated kernel with Dongdong mentioned ACPI patch which > > was truly affected my quirk patch uploaded. So I suppose the quirk patch > > is not qualify to fix the bug. > > > > I don't understand what you're saying here. > > > > The quirk worked on your machine. It apparently didn't work on > > Dongdong's machine because of_irq_parse_and_map_pci() is run after the > > quirk in this path: > > > > pci_device_probe > > pcibios_alloc_irq # arm64 > > dev->irq = of_irq_parse_and_map_pci > > > > and of_irq_parse_and_map_pci() returned zero, probably because > > of_irq_parse_pci() failed. My guess is that the reason it works on your > > machine but not Dongdong's is that your DTs are different such that > > of_irq_parse_pci() works for you but not for Dongdong. > > > > I think the idea of of_irq_parse_and_map_pci() is to set up a device's > > INTx line. But that doesn't quite apply here because your device > > doesn't actually *use* INTx. So I don't know why of_irq_parse_pci() > > works for you. Maybe that's a symptom of a problem in your DT. > > > > Or maybe you're saying that the quirk *didn't* work on your machine when > > you tested it in a kernel that included d8ed75d59332 ("ARM64: > > PCI: ACPI support for legacy IRQs parsing and consolidation with DT > > code"). > > Yes, this point is what I mean. After this patch my quirk patch would not work. > Since I discussed with Dongdong, the patches d8ed75d59332 ACPI related were not be merged yet. > > > > But that doesn't make sense either, because prior to > > d8ed75d59332, we *always* set > > > > dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); > > > > and after the patch we only do it if "acpi_disabled". I guess I just > > don't understand what you're saying. > > Before the patch merged. pcibios_add_device()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);) was loaded before the > pci_fixup_device(pci_fixup_final). But after the patch > d8ed75d59332("ARM64: PCI: ACPI support for legacy IRQs parsing and > consolidation with DT code") merged, the > pci_fixup_device(pci_fixup_final) run BEFORE the > pcibios_alloc_irq()(which run the ->irq = > of_irq_parse_and_map_pci(dev, 0, 0);). So the dev->irq were > overwhelm by the pcibios_alloc_irq(). OK. Prior to d8ed75d59332, arm64 overrode the default empty pcibios_add_device() implementation, and called of_irq_parse_and_map_pci() there. d8ed75d59332 changed that function to pcibios_alloc_irq(), which is called later, in the driver probe path. > When I test, the acpi_disabled is '1' although my kernel config > default is CONFIG_ACPI=y. And no setting in the uboot with apci=xxx. > But this is another issue, I didn't deep to check it. Likely your platform just doesn't have ACPI or something's wrong in the initial ACPI setup. > > > I were keep thinking what your "explicitly checking for a root port > > device" meaning. Do you mean I should upload again the first version > > patch which fix it in the portdrv_core.c ? I would upload again if yes. > > > > No, I did not mean you should go back to the first version of the patch. > > If we *can* do this in a quirk, I think that would be much better than > > doing it in the PCIe port driver. I meant that Dongdong's suggestion of > > adding this: > > > > if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) > > return; > > > > to your quirk made sense to me. > > If the quirk patch could make workaround. It should be the better way. It doesn't sound like a quirk is going to work because all the quirks run too early. I'll respond to the patch itself with more ideas. > > > > -----Original Message----- > > > > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > > > > Sent: Saturday, July 30, 2016 6:42 AM > > > > To: Po Liu > > > > Cc: linux-pci@vger.kernel.org; > > > > linux-arm-kernel@lists.infradead.org; > > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan > > > > Lian; Murali Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > > > > Subject: Re: [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk > > > > > > > > On Tue, Jun 14, 2016 at 04:24:05PM +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> > > > > > > > > I'm not sure where we're at with this. Dongdong had some issue > > > > (possibly with a version of the quirk on a different platform?), and > > > > I think the suggestion of explicitly checking for a root port > > > > device was a good one. > > > > > > > > So please update and repost this for next cycle. > > > > > > > > > --- > > > > > changes for V3: > > > > > - Move to quirk; > > > > > - Only correct the irq in RC mode; > > > > > > > > > > drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++ > 1 > > > > file changed, 29 insertions(+) > > diff --git > > > > a/drivers/pci/quirks.c b/drivers/pci/quirks.c index > > > > > ee72ebe..8b39cce 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,31 @@ 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; > > > > > + u8 header_type; > > > > > + struct device_node *np = NULL; > > > > > + > > > > > + /* Only for the RC mode device */ > > > > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); > > > > > + if ((header_type & 0x7F) != PCI_HEADER_TYPE_BRIDGE) > > > > > + return; > > > > > + > > > > > + 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); > -- > 2.1.0.27.g96db324 > > > > > > > _______________________________________________ > > > > > linux-arm-kernel mailing list > > > > > linux-arm-kernel@lists.infradead.org > > > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > _______________________________________________ > > > linux-arm-kernel mailing list > > > linux-arm-kernel@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-06-14 8:24 ` Po Liu (?) @ 2016-08-31 6:37 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for V4: - Add comments explain why to add this patch - Move the binding changes to pci code patch arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-08-31 6:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-arm-kernel NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for V4: - Add comments explain why to add this patch - Move the binding changes to pci code patch arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-08-31 6:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for V4: - Add comments explain why to add this patch - Move the binding changes to pci code patch arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-08-31 6:37 ` Po Liu (?) @ 2016-08-31 6:37 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 v4: - re-use the patch changes in the root port driver; - add binding information; .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..1dfb1da 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer": The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -36,7 +36,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-08-31 6:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-arm-kernel 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 v4: - re-use the patch changes in the root port driver; - add binding information; .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..1dfb1da 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer": The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -36,7 +36,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-08-31 6:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-08-31 6:37 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 v4: - re-use the patch changes in the root port driver; - add binding information; .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..1dfb1da 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -19,7 +19,7 @@ Required properties: - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. - interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts + "aer": The interrupt that is asserted for aer interrupts - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -36,7 +36,7 @@ Example: 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-08-31 6:37 ` Po Liu (?) @ 2016-09-02 15:17 ` Rob Herring -1 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-02 15:17 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > - re-use the patch changes in the root port driver; > - add binding information; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 30 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..1dfb1da 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -19,7 +19,7 @@ Required properties: > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > - interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > + "aer": The interrupt that is asserted for aer interrupts You can't just change this. That breaks compatibility with old dts files. Plus, it is just a name. Why does it even matter? Not to mention having the name for a single irq is a bit pointless. Rob ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-02 15:17 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-02 15:17 UTC (permalink / raw) To: linux-arm-kernel On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > - re-use the patch changes in the root port driver; > - add binding information; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 30 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..1dfb1da 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -19,7 +19,7 @@ Required properties: > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > - interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > + "aer": The interrupt that is asserted for aer interrupts You can't just change this. That breaks compatibility with old dts files. Plus, it is just a name. Why does it even matter? Not to mention having the name for a single irq is a bit pointless. Rob ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-02 15:17 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-02 15:17 UTC (permalink / raw) To: Po Liu Cc: devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > - re-use the patch changes in the root port driver; > - add binding information; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 30 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..1dfb1da 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -19,7 +19,7 @@ Required properties: > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > - interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > + "aer": The interrupt that is asserted for aer interrupts You can't just change this. That breaks compatibility with old dts files. Plus, it is just a name. Why does it even matter? Not to mention having the name for a single irq is a bit pointless. Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-02 15:17 ` Rob Herring (?) (?) @ 2016-09-05 6:05 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-05 6:05 UTC (permalink / raw) To: Rob Herring Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 02, 2016 11:17 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; Roy Zang; Mingkai Hu; Stuart Yoder; Yang-Leo Li; > Arnd Bergmann; Minghuan Lian; Murali Karicheri > Subject: Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > > - re-use the patch changes in the root port driver; > > - add binding information; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 30 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..1dfb1da 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -19,7 +19,7 @@ Required properties: > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > - interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > + "aer": The interrupt that is asserted for aer interrupts > > You can't just change this. That breaks compatibility with old dts files. > Plus, it is just a name. Why does it even matter? Not to mention having > the name for a single irq is a bit pointless. Sorry, this binding comments maybe not clear. "aer" is just one of the interrupt names from host controller. There are "aer" "pme" and so on for further applications. This patch is to fix the Layerscape owning independent aer irq issue. So the 'aer' is used for this patch. The 'intr' will never be used, so removed. I may remove the 'must include' for mis-understanding. Thanks! Po Liu > > Rob ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-05 6:05 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-05 6:05 UTC (permalink / raw) To: linux-arm-kernel Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh at kernel.org] > Sent: Friday, September 02, 2016 11:17 PM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Bjorn Helgaas; > Shawn Guo; Marc Zyngier; Roy Zang; Mingkai Hu; Stuart Yoder; Yang-Leo Li; > Arnd Bergmann; Minghuan Lian; Murali Karicheri > Subject: Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > > - re-use the patch changes in the root port driver; > > - add binding information; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 30 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..1dfb1da 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -19,7 +19,7 @@ Required properties: > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > - interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > + "aer": The interrupt that is asserted for aer interrupts > > You can't just change this. That breaks compatibility with old dts files. > Plus, it is just a name. Why does it even matter? Not to mention having > the name for a single irq is a bit pointless. Sorry, this binding comments maybe not clear. "aer" is just one of the interrupt names from host controller. There are "aer" "pme" and so on for further applications. This patch is to fix the Layerscape owning independent aer irq issue. So the 'aer' is used for this patch. The 'intr' will never be used, so removed. I may remove the 'must include' for mis-understanding. Thanks! Po Liu > > Rob ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-05 6:05 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-05 6:05 UTC (permalink / raw) To: Rob Herring Cc: devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 02, 2016 11:17 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; Roy Zang; Mingkai Hu; Stuart Yoder; Yang-Leo Li; > Arnd Bergmann; Minghuan Lian; Murali Karicheri > Subject: Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > > - re-use the patch changes in the root port driver; > > - add binding information; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 30 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..1dfb1da 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -19,7 +19,7 @@ Required properties: > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > - interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > + "aer": The interrupt that is asserted for aer interrupts > > You can't just change this. That breaks compatibility with old dts files. > Plus, it is just a name. Why does it even matter? Not to mention having > the name for a single irq is a bit pointless. Sorry, this binding comments maybe not clear. "aer" is just one of the interrupt names from host controller. There are "aer" "pme" and so on for further applications. This patch is to fix the Layerscape owning independent aer irq issue. So the 'aer' is used for this patch. The 'intr' will never be used, so removed. I may remove the 'must include' for mis-understanding. Thanks! Po Liu > > Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-05 6:05 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-05 6:05 UTC (permalink / raw) To: Rob Herring Cc: devicetree, Arnd Bergmann, Roy Zang, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 02, 2016 11:17 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; Roy Zang; Mingkai Hu; Stuart Yoder; Yang-Leo Li; > Arnd Bergmann; Minghuan Lian; Murali Karicheri > Subject: Re: [PATCH v4 2/2] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Wed, Aug 31, 2016 at 02:37:22PM +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 v4: > > - re-use the patch changes in the root port driver; > > - add binding information; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 +-- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 30 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..1dfb1da 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -19,7 +19,7 @@ Required properties: > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > - interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > + "aer": The interrupt that is asserted for aer interrupts > > You can't just change this. That breaks compatibility with old dts files. > Plus, it is just a name. Why does it even matter? Not to mention having > the name for a single irq is a bit pointless. Sorry, this binding comments maybe not clear. "aer" is just one of the interrupt names from host controller. There are "aer" "pme" and so on for further applications. This patch is to fix the Layerscape owning independent aer irq issue. So the 'aer' is used for this patch. The 'intr' will never be used, so removed. I may remove the 'must include' for mis-understanding. Thanks! Po Liu > > Rob ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 1/3] arm/dts: add pcie aer interrupt-name property in the dts 2016-08-31 6:37 ` Po Liu (?) (?) @ 2016-09-13 4:40 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP arm aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This patch is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm arm64 dts changes arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 1/3] arm/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-arm-kernel NXP arm aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This patch is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm arm64 dts changes arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 1/3] arm/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP arm aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This patch is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm arm64 dts changes arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 1/3] arm/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP arm aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This patch is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm arm64 dts changes arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,8 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +658,8 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 2/3] arm64/dts: add pcie aer interrupt-name property in the dts 2016-09-13 4:40 ` Po Liu (?) @ 2016-09-13 4:40 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu Some platforms(NXP Layerscape for example) aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm and arm64 dts modification into two patches arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 2/3] arm64/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-arm-kernel Some platforms(NXP Layerscape for example) aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm and arm64 dts modification into two patches arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 2/3] arm64/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu Some platforms(NXP Layerscape for example) aer interrupt was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" interrupt-names for aer interrupt. With the interrupt-names "aer", code could probe aer interrupt line for pcie root port, replace the aer interrupt service irq. This is intend to fixup the Layerscape platforms which aer interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v5: - Seperate arm and arm64 dts modification into two patches arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-13 4:40 ` Po Liu (?) (?) @ 2016-09-13 4:40 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu 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 v5: - Add clear 'aer' interrup-names description .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..101d0a7 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,10 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It may be include the following entries: + "aer": The interrupt that is asserted for aer interrupt + "pme": The interrupt that is asserted for pme interrupt + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +37,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-arm-kernel 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 v5: - Add clear 'aer' interrup-names description .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..101d0a7 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,10 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It may be include the following entries: + "aer": The interrupt that is asserted for aer interrupt + "pme": The interrupt that is asserted for pme interrupt + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +37,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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 v5: - Add clear 'aer' interrup-names description .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..101d0a7 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,10 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It may be include the following entries: + "aer": The interrupt that is asserted for aer interrupt + "pme": The interrupt that is asserted for pme interrupt + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +37,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-13 4:40 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 4:40 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu 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 v5: - Add clear 'aer' interrup-names description .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..101d0a7 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,10 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It may be include the following entries: + "aer": The interrupt that is asserted for aer interrupt + "pme": The interrupt that is asserted for pme interrupt + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +37,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/pcieport_if.h> #include <linux/aer.h> +#include <linux/of_irq.h> #include "../pci.h" #include "portdrv.h" @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + struct device_node *np = NULL; + + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = 0; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (IS_ENABLED(CONFIG_OF_IRQ) && np && + (mask & PCIE_PORT_SERVICE_PME)) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + if (dev->irq) + irq = dev->irq; + goto no_msi; + } + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) irq = dev->irq; no_msi: - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { + if (!irqs[i]) + irqs[i] = irq; + } irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; - if (irq < 0) + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) return -ENODEV; return 0; } -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 0:52 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-18 0:52 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Tue, Sep 13, 2016 at 12:40:59PM +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> Will the new kernel work with existing/old DTB? I'm trying to understand the dependency between driver and DTS changes. Shawn > --- > changes for v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } > > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 0:52 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-18 0:52 UTC (permalink / raw) To: linux-arm-kernel On Tue, Sep 13, 2016 at 12:40:59PM +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> Will the new kernel work with existing/old DTB? I'm trying to understand the dependency between driver and DTS changes. Shawn > --- > changes for v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } > > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 0:52 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-18 0:52 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Tue, Sep 13, 2016 at 12:40:59PM +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-3arQi8VN3Tc@public.gmane.org> Will the new kernel work with existing/old DTB? I'm trying to understand the dependency between driver and DTS changes. Shawn > --- > changes for v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } > > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-18 0:52 ` Shawn Guo (?) (?) @ 2016-09-18 3:37 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-18 3:37 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Sunday, September 18, 2016 8:52 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > Will the new kernel work with existing/old DTB? I'm trying to > understand the dependency between driver and DTS changes. Yes, We've never use name 'intr' before. So we remove it is ok. 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. > > Shawn > > > --- > > changes for v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 3:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-18 3:37 UTC (permalink / raw) To: linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo at kernel.org] > Sent: Sunday, September 18, 2016 8:52 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > Will the new kernel work with existing/old DTB? I'm trying to > understand the dependency between driver and DTS changes. Yes, We've never use name 'intr' before. So we remove it is ok. 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. > > Shawn > > > --- > > changes for v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel at lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 3:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-18 3:37 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu SGkgU2hhd24sDQoNCg0KPiAgLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gIEZyb206IFNo YXduIEd1byBbbWFpbHRvOnNoYXduZ3VvQGtlcm5lbC5vcmddDQo+ICBTZW50OiBTdW5kYXksIFNl cHRlbWJlciAxOCwgMjAxNiA4OjUyIEFNDQo+ICBUbzogUG8gTGl1DQo+ICBDYzogbGludXgtcGNp QHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0K PiAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5v cmc7IFJveSBaYW5nOyBBcm5kDQo+ICBCZXJnbWFubjsgTWFyYyBaeW5naWVyOyBTdHVhcnQgWW9k ZXI7IExlbyBMaTsgTS5ILiBMaWFuOyBNdXJhbGkNCj4gIEthcmljaGVyaTsgQmpvcm4gSGVsZ2Fh czsgTWluZ2thaSBIdQ0KPiAgU3ViamVjdDogUmU6IFtQQVRDSCB2NSAzLzNdIHBjaTphZXI6IGFk ZCBzdXBwb3J0IGFlciBpbnRlcnJ1cHQgd2l0aCBub25lDQo+ICBNU0kvTVNJLVgvSU5UeCBtb2Rl DQo+ICANCj4gIE9uIFR1ZSwgU2VwIDEzLCAyMDE2IGF0IDEyOjQwOjU5UE0gKzA4MDAsIFBvIExp dSB3cm90ZToNCj4gID4gT24gc29tZSBwbGF0Zm9ybXMsIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBv cnQgTVNJL01TSS1YL0lOVHggaW4gUkMgbW9kZS4NCj4gID4gV2hlbiBjaGlwIHN1cHBvcnQgdGhl IGFlciBpbnRlcnJ1cHQgd2l0aCBub25lIE1TSS9NU0ktWC9JTlR4IG1vZGUsDQo+ICA+IG1heWJl IHRoZXJlIGlzIGludGVycnVwdCBsaW5lIGZvciBhZXIgcG1lIGV0Yy4gU2VhcmNoIHRoZSBpbnRl cnJ1cHQNCj4gID4gbnVtYmVyIGluIHRoZSBmZHQgZmlsZS4gVGhlbiBmaXh1cCB0aGUgZGV2LT5p cnEgd2l0aCBpdC4NCj4gID4NCj4gID4gU2lnbmVkLW9mZi1ieTogUG8gTGl1IDxwby5saXVAbnhw LmNvbT4NCj4gIA0KPiAgV2lsbCB0aGUgbmV3IGtlcm5lbCB3b3JrIHdpdGggZXhpc3Rpbmcvb2xk IERUQj8gIEknbSB0cnlpbmcgdG8NCj4gIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgYmV0d2Vl biBkcml2ZXIgYW5kIERUUyBjaGFuZ2VzLg0KDQpZZXMsIFdlJ3ZlIG5ldmVyIHVzZSBuYW1lICdp bnRyJyBiZWZvcmUuIFNvIHdlIHJlbW92ZSBpdCBpcyBvay4gDQonYWVyJyBpcyBhIGR0cyBuYW1l IGZvciByZXNlYXJjaGluZyBpdCdzIHRydWUgaW50ZXJydXB0IG51bWJlciBieSBrZXJuZWwuIFRo aXMgcGF0Y2ggaXMgZmlyc3QgdGltZSB0byB1c2UgbmFtZSAnYWVyJy4gU28gaXQgbXVzdCBiZSBj b21wYXRpYmxlIHdpdGggZXhpc3Rpbmcvb2xkIERUQi4NCg0KPiAgDQo+ICBTaGF3bg0KPiAgDQo+ ICA+IC0tLQ0KPiAgPiBjaGFuZ2VzIGZvciB2NToNCj4gID4gCS0gQWRkIGNsZWFyICdhZXInIGlu dGVycnVwLW5hbWVzIGRlc2NyaXB0aW9uDQo+ICA+DQo+ICA+ICAuLi4vZGV2aWNldHJlZS9iaW5k aW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0ICAgICB8IDExICsrKysrLS0tDQo+ICA+ICBkcml2 ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jICAgICAgICAgICAgICAgICAgICB8IDMxDQo+ICAr KysrKysrKysrKysrKysrKysrLS0tDQo+ICA+ICAyIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlv bnMoKyksIDcgZGVsZXRpb25zKC0pDQo+ICA+DQo+ICA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2xheWVyc2NhcGUtcGNpLnR4dA0KPiAgPiBiL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0DQo+ ICA+IGluZGV4IDQxZTlmNTUuLjEwMWQwYTcgMTAwNjQ0DQo+ICA+IC0tLSBhL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0DQo+ICA+ICsrKyBi L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0 DQo+ICA+IEBAIC0xOCw4ICsxOCwxMCBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KPiAgPiAgLSBy ZWc6IGJhc2UgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIHRoZSBQQ0llIGNvbnRyb2xsZXINCj4g ID4gIC0gaW50ZXJydXB0czogQSBsaXN0IG9mIGludGVycnVwdCBvdXRwdXRzIG9mIHRoZSBjb250 cm9sbGVyLiBNdXN0DQo+ICBjb250YWluIGFuDQo+ICA+ICAgIGVudHJ5IGZvciBlYWNoIGVudHJ5 IGluIHRoZSBpbnRlcnJ1cHQtbmFtZXMgcHJvcGVydHkuDQo+ICA+IC0tIGludGVycnVwdC1uYW1l czogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cmllczoNCj4gID4gLSAgImludHIiOiBU aGUgaW50ZXJydXB0IHRoYXQgaXMgYXNzZXJ0ZWQgZm9yIGNvbnRyb2xsZXIgaW50ZXJydXB0cw0K PiAgPiArLSBpbnRlcnJ1cHQtbmFtZXM6IEl0IG1heSBiZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcg ZW50cmllczoNCj4gID4gKyAgImFlciI6IFRoZSBpbnRlcnJ1cHQgdGhhdCBpcyBhc3NlcnRlZCBm b3IgYWVyIGludGVycnVwdA0KPiAgPiArICAicG1lIjogVGhlIGludGVycnVwdCB0aGF0IGlzIGFz c2VydGVkIGZvciBwbWUgaW50ZXJydXB0DQo+ICA+ICsgIC4uLi4uLg0KPiAgPiAgLSBmc2wscGNp ZS1zY2ZnOiBNdXN0IGluY2x1ZGUgdHdvIGVudHJpZXMuDQo+ICA+ICAgIFRoZSBmaXJzdCBlbnRy eSBtdXN0IGJlIGEgbGluayB0byB0aGUgU0NGRyBkZXZpY2Ugbm9kZQ0KPiAgPiAgICBUaGUgc2Vj b25kIGVudHJ5IG11c3QgYmUgJzAnIG9yICcxJyBiYXNlZCBvbiBwaHlzaWNhbCBQQ0llDQo+ICBj b250cm9sbGVyIGluZGV4Lg0KPiAgPiBAQCAtMzUsOCArMzcsOSBAQCBFeGFtcGxlOg0KPiAgPiAg CQlyZWcgPSA8MHgwMCAweDAzNDAwMDAwIDB4MCAweDAwMDEwMDAwICAgLyogY29udHJvbGxlcg0K PiAgcmVnaXN0ZXJzICovDQo+ICA+ICAJCSAgICAgICAweDQwIDB4MDAwMDAwMDAgMHgwIDB4MDAw MDIwMDA+OyAvKiBjb25maWd1cmF0aW9uDQo+ICBzcGFjZSAqLw0KPiAgPiAgCQlyZWctbmFtZXMg PSAicmVncyIsICJjb25maWciOw0KPiAgPiAtCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTc3IElS UV9UWVBFX0xFVkVMX0hJR0g+OyAvKg0KPiAgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8NCj4gID4g LQkJaW50ZXJydXB0LW5hbWVzID0gImludHIiOw0KPiAgPiArCQlpbnRlcnJ1cHRzID0gPEdJQ19T UEkgMTc2IElSUV9UWVBFX0xFVkVMX0hJR0g+LCAvKiBhZXINCj4gIGludGVycnVwdCAqLw0KPiAg PiArCQkJPEdJQ19TUEkgMTc3IElSUV9UWVBFX0xFVkVMX0hJR0g+OyAvKiBwbWUgaW50ZXJydXB0 ICovDQo+ICA+ICsJCWludGVycnVwdC1uYW1lcyA9ICJhZXIiLCAicG1lIjsNCj4gID4gIAkJZnNs LHBjaWUtc2NmZyA9IDwmc2NmZyAwPjsNCj4gID4gIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47DQo+ ICA+ICAJCSNzaXplLWNlbGxzID0gPDI+Ow0KPiAgPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kv cGNpZS9wb3J0ZHJ2X2NvcmUuYw0KPiAgPiBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3Jl LmMgaW5kZXggZTkyNzBiNC4uN2M0OTQzZCAxMDA2NDQNCj4gID4gLS0tIGEvZHJpdmVycy9wY2kv cGNpZS9wb3J0ZHJ2X2NvcmUuYw0KPiAgPiArKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZf Y29yZS5jDQo+ICA+IEBAIC0xNiw2ICsxNiw3IEBADQo+ICA+ICAjaW5jbHVkZSA8bGludXgvc2xh Yi5oPg0KPiAgPiAgI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+DQo+ICA+ICAjaW5jbHVk ZSA8bGludXgvYWVyLmg+DQo+ICA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ICA+DQo+ ICA+ICAjaW5jbHVkZSAiLi4vcGNpLmgiDQo+ICA+ICAjaW5jbHVkZSAicG9ydGRydi5oIg0KPiAg PiBAQCAtMjAwLDYgKzIwMSwyOCBAQCBzdGF0aWMgaW50IHBjaWVfcG9ydF9lbmFibGVfbXNpeChz dHJ1Y3QgcGNpX2Rldg0KPiAgPiAqZGV2LCBpbnQgKnZlY3RvcnMsIGludCBtYXNrKSAgc3RhdGlj IGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QNCj4gID4gcGNpX2RldiAqZGV2LCBpbnQgKmly cXMsIGludCBtYXNrKSAgew0KPiAgPiAgCWludCBpLCBpcnEgPSAtMTsNCj4gID4gKwlpbnQgcmV0 Ow0KPiAgPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOw0KPiAgPiArDQo+ICA+ICsJ Zm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykNCj4gID4g KwkJaXJxc1tpXSA9IDA7DQo+ICA+ICsNCj4gID4gKwlpZiAoZGV2LT5idXMtPmRldi5vZl9ub2Rl KQ0KPiAgPiArCQlucCA9IGRldi0+YnVzLT5kZXYub2Zfbm9kZTsNCj4gID4gKw0KPiAgPiArCS8q IElmIHJvb3QgcG9ydCBkb2Vzbid0IHN1cHBvcnQgTVNJL01TSS1YL0lOVHggaW4gUkMgbW9kZSwN Cj4gID4gKwkgKiByZXF1ZXN0IGlycSBmb3IgYWVyDQo+ICA+ICsJICovDQo+ICA+ICsJaWYgKElT X0VOQUJMRUQoQ09ORklHX09GX0lSUSkgJiYgbnAgJiYNCj4gID4gKwkJCShtYXNrICYgUENJRV9Q T1JUX1NFUlZJQ0VfUE1FKSkgew0KPiAgPiArCQlyZXQgPSBvZl9pcnFfZ2V0X2J5bmFtZShucCwg ImFlciIpOw0KPiAgPiArCQlpZiAocmV0ID4gMCkgew0KPiAgPiArCQkJaXJxc1tQQ0lFX1BPUlRf U0VSVklDRV9BRVJfU0hJRlRdID0gcmV0Ow0KPiAgPiArCQkJaWYgKGRldi0+aXJxKQ0KPiAgPiAr CQkJCWlycSA9IGRldi0+aXJxOw0KPiAgPiArCQkJZ290byBub19tc2k7DQo+ICA+ICsJCX0NCj4g ID4gKwl9DQo+ICA+DQo+ICA+ICAJLyoNCj4gID4gIAkgKiBJZiBNU0kgY2Fubm90IGJlIHVzZWQg Zm9yIFBDSWUgUE1FIG9yIGhvdHBsdWcsIHdlIGhhdmUgdG8gdXNlDQo+ICBAQA0KPiAgPiAtMjI1 LDExICsyNDgsMTMgQEAgc3RhdGljIGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QgcGNpX2Rl diAqZGV2LA0KPiAgaW50ICppcnFzLCBpbnQgbWFzaykNCj4gID4gIAkJaXJxID0gZGV2LT5pcnE7 DQo+ICA+DQo+ICA+ICAgbm9fbXNpOg0KPiAgPiAtCWZvciAoaSA9IDA7IGkgPCBQQ0lFX1BPUlRf REVWSUNFX01BWFNFUlZJQ0VTOyBpKyspDQo+ICA+IC0JCWlycXNbaV0gPSBpcnE7DQo+ICA+ICsJ Zm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykgew0KPiAg PiArCQlpZiAoIWlycXNbaV0pDQo+ICA+ICsJCQlpcnFzW2ldID0gaXJxOw0KPiAgPiArCX0NCj4g ID4gIAlpcnFzW1BDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUXSA9IC0xOw0KPiAgPg0KPiAgPiAt CWlmIChpcnEgPCAwKQ0KPiAgPiArCWlmIChpcnEgPCAwICYmIGlycXNbUENJRV9QT1JUX1NFUlZJ Q0VfQUVSX1NISUZUXSA8IDApDQo+ICA+ICAJCXJldHVybiAtRU5PREVWOw0KPiAgPiAgCXJldHVy biAwOw0KPiAgPiAgfQ0KPiAgPiAtLQ0KPiAgPiAyLjEuMC4yNy5nOTZkYjMyNA0KPiAgPg0KPiAg Pg0KPiAgPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K PiAgPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdA0KPiAgPiBsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcNCj4gID4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsDQo= ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-18 3:37 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-18 3:37 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Sunday, September 18, 2016 8:52 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > Will the new kernel work with existing/old DTB? I'm trying to > understand the dependency between driver and DTS changes. Yes, We've never use name 'intr' before. So we remove it is ok. 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. > > Shawn > > > --- > > changes for v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-20 12:39 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-20 12:39 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. Does that mean driver and DTS changes can go through separate trees, i.e. PCI and arm-soc, without introducing regressions on either tree? Or does the patch series needs to go in as a whole? Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-20 12:39 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-20 12:39 UTC (permalink / raw) To: linux-arm-kernel On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo at kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. Does that mean driver and DTS changes can go through separate trees, i.e. PCI and arm-soc, without introducing regressions on either tree? Or does the patch series needs to go in as a whole? Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-20 12:39 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-20 12:39 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. Does that mean driver and DTS changes can go through separate trees, i.e. PCI and arm-soc, without introducing regressions on either tree? Or does the patch series needs to go in as a whole? Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-20 12:39 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-20 12:39 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org; > > linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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-3arQi8VN3Tc@public.gmane.org> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by kernel. This patch is first time to use name 'aer'. So it must be compatible with existing/old DTB. Does that mean driver and DTS changes can go through separate trees, i.e. PCI and arm-soc, without introducing regressions on either tree? Or does the patch series needs to go in as a whole? Shawn -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-20 12:39 ` Shawn Guo (?) (?) @ 2016-09-21 6:54 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:54 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Tuesday, September 20, 2016 8:39 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; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. > > Does that mean driver and DTS changes can go through separate trees, i.e. > PCI and arm-soc, without introducing regressions on either tree? > Or does the patch series needs to go in as a whole? Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Thanks! Po > > Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 6:54 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:54 UTC (permalink / raw) To: linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo at kernel.org] > Sent: Tuesday, September 20, 2016 8:39 PM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo at kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci at vger.kernel.org; > > > linux-arm-kernel at lists.infradead.org; > > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. > > Does that mean driver and DTS changes can go through separate trees, i.e. > PCI and arm-soc, without introducing regressions on either tree? > Or does the patch series needs to go in as a whole? Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Thanks! Po > > Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 6:54 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:54 UTC (permalink / raw) To: Shawn Guo Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Tuesday, September 20, 2016 8:39 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; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. > > Does that mean driver and DTS changes can go through separate trees, i.e. > PCI and arm-soc, without introducing regressions on either tree? > Or does the patch series needs to go in as a whole? Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Thanks! Po > > Shawn _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 6:54 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-21 6:54 UTC (permalink / raw) To: Shawn Guo Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Tuesday, September 20, 2016 8:39 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; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. > > Does that mean driver and DTS changes can go through separate trees, i.e. > PCI and arm-soc, without introducing regressions on either tree? > Or does the patch series needs to go in as a whole? Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Thanks! Po > > Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-21 6:54 ` Po Liu (?) @ 2016-09-30 22:13 ` Shawn Guo -1 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-30 22:13 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, linux-arm-kernel On Wed, Sep 21, 2016 at 06:54:59AM +0000, Po Liu wrote: > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > > understand the dependency between driver and DTS changes. > > > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > > > Does that mean driver and DTS changes can go through separate trees, i.e. > > PCI and arm-soc, without introducing regressions on either tree? > > Or does the patch series needs to go in as a whole? > > Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Let me try to understand this one more time. So if the new kernel boots with an existing DTB, the driver will fail to find 'aer' interrupt, right? My question is that in this case, the driver will just stop working or keep working in the same way as old kernel. The former case is a regression which breaks old DTB support, and the latter is pretty much like that we are adding a new support, and the DTS change can go independently with driver part through different subsystem tree. Hope I make my question clear this time. Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-30 22:13 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-30 22:13 UTC (permalink / raw) To: linux-arm-kernel On Wed, Sep 21, 2016 at 06:54:59AM +0000, Po Liu wrote: > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > > understand the dependency between driver and DTS changes. > > > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > > > Does that mean driver and DTS changes can go through separate trees, i.e. > > PCI and arm-soc, without introducing regressions on either tree? > > Or does the patch series needs to go in as a whole? > > Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Let me try to understand this one more time. So if the new kernel boots with an existing DTB, the driver will fail to find 'aer' interrupt, right? My question is that in this case, the driver will just stop working or keep working in the same way as old kernel. The former case is a regression which breaks old DTB support, and the latter is pretty much like that we are adding a new support, and the DTS change can go independently with driver part through different subsystem tree. Hope I make my question clear this time. Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-30 22:13 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-30 22:13 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, linux-arm-kernel On Wed, Sep 21, 2016 at 06:54:59AM +0000, Po Liu wrote: > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > > understand the dependency between driver and DTS changes. > > > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > > > Does that mean driver and DTS changes can go through separate trees, i.e. > > PCI and arm-soc, without introducing regressions on either tree? > > Or does the patch series needs to go in as a whole? > > Should be as a whole. The driver base on the dts. Or else, the driver would not found the 'aer' point. Let me try to understand this one more time. So if the new kernel boots with an existing DTB, the driver will fail to find 'aer' interrupt, right? My question is that in this case, the driver will just stop working or keep working in the same way as old kernel. The former case is a regression which breaks old DTB support, and the latter is pretty much like that we are adding a new support, and the DTS change can go independently with driver part through different subsystem tree. Hope I make my question clear this time. Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-18 3:37 ` Po Liu (?) @ 2016-09-23 13:06 ` Rob Herring -1 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-23 13:06 UTC (permalink / raw) To: Po Liu Cc: Shawn Guo, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. Please explain why you are not breaking compatibility in the commit message. I asked for this on v2. > > > --- > > > changes for v5: > > > - Add clear 'aer' interrup-names description > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > drivers/pci/pcie/portdrv_core.c | 31 > > +++++++++++++++++++--- > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > index 41e9f55..101d0a7 100644 > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > @@ -18,8 +18,10 @@ Required properties: > > > - reg: base addresses and lengths of the PCIe controller > > > - interrupts: A list of interrupt outputs of the controller. Must > > contain an > > > entry for each entry in the interrupt-names property. > > > -- interrupt-names: Must include the following entries: > > > - "intr": The interrupt that is asserted for controller interrupts > > > +- interrupt-names: It may be include the following entries: "may be" is not okay. It should be "must" or explain when an interrupt would not be present. Really, differences in interrupts means you need different compatible strings. Rob > > > + "aer": The interrupt that is asserted for aer interrupt > > > + "pme": The interrupt that is asserted for pme interrupt > > > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-23 13:06 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-23 13:06 UTC (permalink / raw) To: linux-arm-kernel On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo at kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. Please explain why you are not breaking compatibility in the commit message. I asked for this on v2. > > > --- > > > changes for v5: > > > - Add clear 'aer' interrup-names description > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > drivers/pci/pcie/portdrv_core.c | 31 > > +++++++++++++++++++--- > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > index 41e9f55..101d0a7 100644 > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > @@ -18,8 +18,10 @@ Required properties: > > > - reg: base addresses and lengths of the PCIe controller > > > - interrupts: A list of interrupt outputs of the controller. Must > > contain an > > > entry for each entry in the interrupt-names property. > > > -- interrupt-names: Must include the following entries: > > > - "intr": The interrupt that is asserted for controller interrupts > > > +- interrupt-names: It may be include the following entries: "may be" is not okay. It should be "must" or explain when an interrupt would not be present. Really, differences in interrupts means you need different compatible strings. Rob > > > + "aer": The interrupt that is asserted for aer interrupt > > > + "pme": The interrupt that is asserted for pme interrupt > > > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-23 13:06 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-09-23 13:06 UTC (permalink / raw) To: Po Liu Cc: Shawn Guo, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > Hi Shawn, > > > > -----Original Message----- > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > Sent: Sunday, September 18, 2016 8:52 AM > > To: Po Liu > > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > > Karicheri; Bjorn Helgaas; Mingkai Hu > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > > MSI/MSI-X/INTx mode > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > Will the new kernel work with existing/old DTB? I'm trying to > > understand the dependency between driver and DTS changes. > > Yes, We've never use name 'intr' before. So we remove it is ok. > 'aer' is a dts name for researching it's true interrupt number by > kernel. This patch is first time to use name 'aer'. So it must be > compatible with existing/old DTB. Please explain why you are not breaking compatibility in the commit message. I asked for this on v2. > > > --- > > > changes for v5: > > > - Add clear 'aer' interrup-names description > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > drivers/pci/pcie/portdrv_core.c | 31 > > +++++++++++++++++++--- > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > index 41e9f55..101d0a7 100644 > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > @@ -18,8 +18,10 @@ Required properties: > > > - reg: base addresses and lengths of the PCIe controller > > > - interrupts: A list of interrupt outputs of the controller. Must > > contain an > > > entry for each entry in the interrupt-names property. > > > -- interrupt-names: Must include the following entries: > > > - "intr": The interrupt that is asserted for controller interrupts > > > +- interrupt-names: It may be include the following entries: "may be" is not okay. It should be "must" or explain when an interrupt would not be present. Really, differences in interrupts means you need different compatible strings. Rob > > > + "aer": The interrupt that is asserted for aer interrupt > > > + "pme": The interrupt that is asserted for pme interrupt > > > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-23 13:06 ` Rob Herring (?) (?) @ 2016-09-26 8:25 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-26 8:25 UTC (permalink / raw) To: Rob Herring Cc: Shawn Guo, linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Rob, > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 23, 2016 9:06 PM > To: Po Liu > Cc: Shawn Guo; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Roy Zang; Arnd Bergmann; Marc Zyngier; > Stuart Yoder; Leo Li; M.H. Lian; Murali Karicheri; Bjorn Helgaas; > Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > Please explain why you are not breaking compatibility in the commit > message. I asked for this on v2. Sorry, I didn't really catch what your means. Do you mean I should add why I remove the 'intr'? > > > > > --- > > > > changes for v5: > > > > - Add clear 'aer' interrup-names description > > > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > > drivers/pci/pcie/portdrv_core.c | 31 > > > +++++++++++++++++++--- > > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff > > > --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > index 41e9f55..101d0a7 100644 > > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > @@ -18,8 +18,10 @@ Required properties: > > > > - reg: base addresses and lengths of the PCIe controller > - > > > interrupts: A list of interrupt outputs of the controller. Must > > > contain an > > > > entry for each entry in the interrupt-names property. > > > > -- interrupt-names: Must include the following entries: > > > > - "intr": The interrupt that is asserted for controller > > > interrupts > +- interrupt-names: It may be include the following > entries: > > "may be" is not okay. It should be "must" or explain when an interrupt > would not be present. Really, differences in interrupts means you need > different compatible strings. How about changing "must" to "should" or "could" and also add when to add after "aer": to explain when to add it? Thanks! > > Rob > > > > > + "aer": The interrupt that is asserted for aer interrupt > + > > > "pme": The interrupt that is asserted for pme interrupt > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-26 8:25 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-26 8:25 UTC (permalink / raw) To: linux-arm-kernel Hi Rob, > -----Original Message----- > From: Rob Herring [mailto:robh at kernel.org] > Sent: Friday, September 23, 2016 9:06 PM > To: Po Liu > Cc: Shawn Guo; linux-pci at vger.kernel.org; linux-arm- > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; > devicetree at vger.kernel.org; Roy Zang; Arnd Bergmann; Marc Zyngier; > Stuart Yoder; Leo Li; M.H. Lian; Murali Karicheri; Bjorn Helgaas; > Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo at kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci at vger.kernel.org; > > > linux-arm-kernel at lists.infradead.org; > > > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > Please explain why you are not breaking compatibility in the commit > message. I asked for this on v2. Sorry, I didn't really catch what your means. Do you mean I should add why I remove the 'intr'? > > > > > --- > > > > changes for v5: > > > > - Add clear 'aer' interrup-names description > > > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > > drivers/pci/pcie/portdrv_core.c | 31 > > > +++++++++++++++++++--- > > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff > > > --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > index 41e9f55..101d0a7 100644 > > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > @@ -18,8 +18,10 @@ Required properties: > > > > - reg: base addresses and lengths of the PCIe controller > - > > > interrupts: A list of interrupt outputs of the controller. Must > > > contain an > > > > entry for each entry in the interrupt-names property. > > > > -- interrupt-names: Must include the following entries: > > > > - "intr": The interrupt that is asserted for controller > > > interrupts > +- interrupt-names: It may be include the following > entries: > > "may be" is not okay. It should be "must" or explain when an interrupt > would not be present. Really, differences in interrupts means you need > different compatible strings. How about changing "must" to "should" or "could" and also add when to add after "aer": to explain when to add it? Thanks! > > Rob > > > > > + "aer": The interrupt that is asserted for aer interrupt > + > > > "pme": The interrupt that is asserted for pme interrupt > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-26 8:25 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-26 8:25 UTC (permalink / raw) To: Rob Herring Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Rob, > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 23, 2016 9:06 PM > To: Po Liu > Cc: Shawn Guo; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Roy Zang; Arnd Bergmann; Marc Zyngier; > Stuart Yoder; Leo Li; M.H. Lian; Murali Karicheri; Bjorn Helgaas; > Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > Please explain why you are not breaking compatibility in the commit > message. I asked for this on v2. Sorry, I didn't really catch what your means. Do you mean I should add why I remove the 'intr'? > > > > > --- > > > > changes for v5: > > > > - Add clear 'aer' interrup-names description > > > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > > drivers/pci/pcie/portdrv_core.c | 31 > > > +++++++++++++++++++--- > > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff > > > --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > index 41e9f55..101d0a7 100644 > > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > @@ -18,8 +18,10 @@ Required properties: > > > > - reg: base addresses and lengths of the PCIe controller > - > > > interrupts: A list of interrupt outputs of the controller. Must > > > contain an > > > > entry for each entry in the interrupt-names property. > > > > -- interrupt-names: Must include the following entries: > > > > - "intr": The interrupt that is asserted for controller > > > interrupts > +- interrupt-names: It may be include the following > entries: > > "may be" is not okay. It should be "must" or explain when an interrupt > would not be present. Really, differences in interrupts means you need > different compatible strings. How about changing "must" to "should" or "could" and also add when to add after "aer": to explain when to add it? Thanks! > > Rob > > > > > + "aer": The interrupt that is asserted for aer interrupt > + > > > "pme": The interrupt that is asserted for pme interrupt > + ...... _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-26 8:25 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-26 8:25 UTC (permalink / raw) To: Rob Herring Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Rob, > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Friday, September 23, 2016 9:06 PM > To: Po Liu > Cc: Shawn Guo; linux-pci@vger.kernel.org; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; > devicetree@vger.kernel.org; Roy Zang; Arnd Bergmann; Marc Zyngier; > Stuart Yoder; Leo Li; M.H. Lian; Murali Karicheri; Bjorn Helgaas; > Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Sun, Sep 18, 2016 at 03:37:27AM +0000, Po Liu wrote: > > Hi Shawn, > > > > > > > -----Original Message----- > > > From: Shawn Guo [mailto:shawnguo@kernel.org] > > > Sent: Sunday, September 18, 2016 8:52 AM > > > To: Po Liu > > > Cc: linux-pci@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; > > > Arnd Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; > > > Murali Karicheri; Bjorn Helgaas; Mingkai Hu > > > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with > > > none MSI/MSI-X/INTx mode > > > > > > On Tue, Sep 13, 2016 at 12:40:59PM +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> > > > > > > Will the new kernel work with existing/old DTB? I'm trying to > > > understand the dependency between driver and DTS changes. > > > > Yes, We've never use name 'intr' before. So we remove it is ok. > > 'aer' is a dts name for researching it's true interrupt number by > > kernel. This patch is first time to use name 'aer'. So it must be > > compatible with existing/old DTB. > > Please explain why you are not breaking compatibility in the commit > message. I asked for this on v2. Sorry, I didn't really catch what your means. Do you mean I should add why I remove the 'intr'? > > > > > --- > > > > changes for v5: > > > > - Add clear 'aer' interrup-names description > > > > > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > > > drivers/pci/pcie/portdrv_core.c | 31 > > > +++++++++++++++++++--- > > > > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff > > > --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > index 41e9f55..101d0a7 100644 > > > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > > > @@ -18,8 +18,10 @@ Required properties: > > > > - reg: base addresses and lengths of the PCIe controller > - > > > interrupts: A list of interrupt outputs of the controller. Must > > > contain an > > > > entry for each entry in the interrupt-names property. > > > > -- interrupt-names: Must include the following entries: > > > > - "intr": The interrupt that is asserted for controller > > > interrupts > +- interrupt-names: It may be include the following > entries: > > "may be" is not okay. It should be "must" or explain when an interrupt > would not be present. Really, differences in interrupts means you need > different compatible strings. How about changing "must" to "should" or "could" and also add when to add after "aer": to explain when to add it? Thanks! > > Rob > > > > > + "aer": The interrupt that is asserted for aer interrupt > + > > > "pme": The interrupt that is asserted for pme interrupt > + ...... ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 22:37 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 22:37 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } We definitely need to solve this somehow. But this approach doesn't feel quite right because it's hard to map this code back to anything in the spec, and it uses a completely platform-dependent name ("interrupt-names aer") in code that is supposedly generic. What if we added some sort of hook that would return the IRQ? Maybe a pcibios_*() hook right now, with the idea of making it a pci_host_bridge function pointer someday? I know the body of the hook would look a lot like what you have here, but at least it would be more obvious that it's platform-specific code. I think your platform supports PME interrupts as well as AER, and they're different IRQs. So you'd probably have to do something similar to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 22:37 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 22:37 UTC (permalink / raw) To: linux-arm-kernel On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } We definitely need to solve this somehow. But this approach doesn't feel quite right because it's hard to map this code back to anything in the spec, and it uses a completely platform-dependent name ("interrupt-names aer") in code that is supposedly generic. What if we added some sort of hook that would return the IRQ? Maybe a pcibios_*() hook right now, with the idea of making it a pci_host_bridge function pointer someday? I know the body of the hook would look a lot like what you have here, but at least it would be more obvious that it's platform-specific code. I think your platform supports PME interrupts as well as AER, and they're different IRQs. So you'd probably have to do something similar to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 22:37 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 22:37 UTC (permalink / raw) To: Po Liu Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, Shawn Guo, linux-arm-kernel On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } We definitely need to solve this somehow. But this approach doesn't feel quite right because it's hard to map this code back to anything in the spec, and it uses a completely platform-dependent name ("interrupt-names aer") in code that is supposedly generic. What if we added some sort of hook that would return the IRQ? Maybe a pcibios_*() hook right now, with the idea of making it a pci_host_bridge function pointer someday? I know the body of the hook would look a lot like what you have here, but at least it would be more obvious that it's platform-specific code. I think your platform supports PME interrupts as well as AER, and they're different IRQs. So you'd probably have to do something similar to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-21 22:37 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-21 22:37 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On Tue, Sep 13, 2016 at 12:40:59PM +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-3arQi8VN3Tc@public.gmane.org> > --- > changes for v5: > - Add clear 'aer' interrup-names description > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++++++--- > 2 files changed, 35 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..101d0a7 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,10 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It may be include the following entries: > + "aer": The interrupt that is asserted for aer interrupt > + "pme": The interrupt that is asserted for pme interrupt > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. > @@ -35,8 +37,9 @@ Example: > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > - interrupt-names = "intr"; > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > + interrupt-names = "aer", "pme"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c > index e9270b4..7c4943d 100644 > --- a/drivers/pci/pcie/portdrv_core.c > +++ b/drivers/pci/pcie/portdrv_core.c > @@ -16,6 +16,7 @@ > #include <linux/slab.h> > #include <linux/pcieport_if.h> > #include <linux/aer.h> > +#include <linux/of_irq.h> > > #include "../pci.h" > #include "portdrv.h" > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) > static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > { > int i, irq = -1; > + int ret; > + struct device_node *np = NULL; > + > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > + irqs[i] = 0; > + > + if (dev->bus->dev.of_node) > + np = dev->bus->dev.of_node; > + > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > + * request irq for aer > + */ > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > + (mask & PCIE_PORT_SERVICE_PME)) { > + ret = of_irq_get_byname(np, "aer"); > + if (ret > 0) { > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > + if (dev->irq) > + irq = dev->irq; > + goto no_msi; > + } > + } We definitely need to solve this somehow. But this approach doesn't feel quite right because it's hard to map this code back to anything in the spec, and it uses a completely platform-dependent name ("interrupt-names aer") in code that is supposedly generic. What if we added some sort of hook that would return the IRQ? Maybe a pcibios_*() hook right now, with the idea of making it a pci_host_bridge function pointer someday? I know the body of the hook would look a lot like what you have here, but at least it would be more obvious that it's platform-specific code. I think your platform supports PME interrupts as well as AER, and they're different IRQs. So you'd probably have to do something similar to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > /* > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) > irq = dev->irq; > > no_msi: > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > - irqs[i] = irq; > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > + if (!irqs[i]) > + irqs[i] = irq; > + } > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > - if (irq < 0) > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > return -ENODEV; > return 0; > } > -- > 2.1.0.27.g96db324 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode 2016-09-21 22:37 ` Bjorn Helgaas (?) (?) @ 2016-09-22 2:53 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-22 2:53 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, September 22, 2016 6:38 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > We definitely need to solve this somehow. But this approach doesn't > feel quite right because it's hard to map this code back to anything in > the spec, and it uses a completely platform-dependent name ("interrupt- > names aer") in code that is supposedly generic. Very agree. > > What if we added some sort of hook that would return the IRQ? Maybe a > pcibios_*() hook right now, with the idea of making it a pci_host_bridge > function pointer someday? Good idea. I'll try one version patch soon. > > I know the body of the hook would look a lot like what you have here, > but at least it would be more obvious that it's platform-specific code. > Not agree more. > I think your platform supports PME interrupts as well as AER, and > they're different IRQs. So you'd probably have to do something similar > to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > Ok, understand. Po > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-22 2:53 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-22 2:53 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas at kernel.org] > Sent: Thursday, September 22, 2016 6:38 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > We definitely need to solve this somehow. But this approach doesn't > feel quite right because it's hard to map this code back to anything in > the spec, and it uses a completely platform-dependent name ("interrupt- > names aer") in code that is supposedly generic. Very agree. > > What if we added some sort of hook that would return the IRQ? Maybe a > pcibios_*() hook right now, with the idea of making it a pci_host_bridge > function pointer someday? Good idea. I'll try one version patch soon. > > I know the body of the hook would look a lot like what you have here, > but at least it would be more obvious that it's platform-specific code. > Not agree more. > I think your platform supports PME interrupts as well as AER, and > they're different IRQs. So you'd probably have to do something similar > to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > Ok, understand. Po > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel at lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-22 2:53 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-22 2:53 UTC (permalink / raw) To: Bjorn Helgaas Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, September 22, 2016 6:38 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > We definitely need to solve this somehow. But this approach doesn't > feel quite right because it's hard to map this code back to anything in > the spec, and it uses a completely platform-dependent name ("interrupt- > names aer") in code that is supposedly generic. Very agree. > > What if we added some sort of hook that would return the IRQ? Maybe a > pcibios_*() hook right now, with the idea of making it a pci_host_bridge > function pointer someday? Good idea. I'll try one version patch soon. > > I know the body of the hook would look a lot like what you have here, > but at least it would be more obvious that it's platform-specific code. > Not agree more. > I think your platform supports PME interrupts as well as AER, and > they're different IRQs. So you'd probably have to do something similar > to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > Ok, understand. Po > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode @ 2016-09-22 2:53 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-22 2:53 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Leo Li, M.H. Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Hi Bjorn, > -----Original Message----- > From: Bjorn Helgaas [mailto:helgaas@kernel.org] > Sent: Thursday, September 22, 2016 6:38 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Leo Li; M.H. Lian; Murali > Karicheri; Bjorn Helgaas; Shawn Guo; Mingkai Hu > Subject: Re: [PATCH v5 3/3] pci:aer: add support aer interrupt with none > MSI/MSI-X/INTx mode > > On Tue, Sep 13, 2016 at 12:40:59PM +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 v5: > > - Add clear 'aer' interrup-names description > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 11 +++++--- > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++++++--- > > 2 files changed, 35 insertions(+), 7 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..101d0a7 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,10 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It may be include the following entries: > > + "aer": The interrupt that is asserted for aer interrupt > > + "pme": The interrupt that is asserted for pme interrupt > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. > > @@ -35,8 +37,9 @@ Example: > > reg = <0x00 0x03400000 0x0 0x00010000 /* controller > registers */ > > 0x40 0x00000000 0x0 0x00002000>; /* configuration > space */ > > reg-names = "regs", "config"; > > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* > controller interrupt */ > > - interrupt-names = "intr"; > > + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer > interrupt */ > > + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ > > + interrupt-names = "aer", "pme"; > > fsl,pcie-scfg = <&scfg 0>; > > #address-cells = <3>; > > #size-cells = <2>; > > diff --git a/drivers/pci/pcie/portdrv_core.c > > b/drivers/pci/pcie/portdrv_core.c index e9270b4..7c4943d 100644 > > --- a/drivers/pci/pcie/portdrv_core.c > > +++ b/drivers/pci/pcie/portdrv_core.c > > @@ -16,6 +16,7 @@ > > #include <linux/slab.h> > > #include <linux/pcieport_if.h> > > #include <linux/aer.h> > > +#include <linux/of_irq.h> > > > > #include "../pci.h" > > #include "portdrv.h" > > @@ -200,6 +201,28 @@ static int pcie_port_enable_msix(struct pci_dev > > *dev, int *vectors, int mask) static int init_service_irqs(struct > > pci_dev *dev, int *irqs, int mask) { > > int i, irq = -1; > > + int ret; > > + struct device_node *np = NULL; > > + > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > + irqs[i] = 0; > > + > > + if (dev->bus->dev.of_node) > > + np = dev->bus->dev.of_node; > > + > > + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, > > + * request irq for aer > > + */ > > + if (IS_ENABLED(CONFIG_OF_IRQ) && np && > > + (mask & PCIE_PORT_SERVICE_PME)) { > > + ret = of_irq_get_byname(np, "aer"); > > + if (ret > 0) { > > + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; > > + if (dev->irq) > > + irq = dev->irq; > > + goto no_msi; > > + } > > + } > > We definitely need to solve this somehow. But this approach doesn't > feel quite right because it's hard to map this code back to anything in > the spec, and it uses a completely platform-dependent name ("interrupt- > names aer") in code that is supposedly generic. Very agree. > > What if we added some sort of hook that would return the IRQ? Maybe a > pcibios_*() hook right now, with the idea of making it a pci_host_bridge > function pointer someday? Good idea. I'll try one version patch soon. > > I know the body of the hook would look a lot like what you have here, > but at least it would be more obvious that it's platform-specific code. > Not agree more. > I think your platform supports PME interrupts as well as AER, and > they're different IRQs. So you'd probably have to do something similar > to the pcie_port_enable_msix() interface, so you can fill in both IRQs. > Ok, understand. Po > > /* > > * If MSI cannot be used for PCIe PME or hotplug, we have to use > @@ > > -225,11 +248,13 @@ static int init_service_irqs(struct pci_dev *dev, > int *irqs, int mask) > > irq = dev->irq; > > > > no_msi: > > - for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) > > - irqs[i] = irq; > > + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) { > > + if (!irqs[i]) > > + irqs[i] = irq; > > + } > > irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; > > > > - if (irq < 0) > > + if (irq < 0 && irqs[PCIE_PORT_SERVICE_AER_SHIFT] < 0) > > return -ENODEV; > > return 0; > > } > > -- > > 2.1.0.27.g96db324 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v6 1/3] arm/dts-ls1021: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP arm aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" "pme" interrupt-names for aer/pme interrupts. With the interrupt-names "aer","pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This patch is intend to fixup the Layerscape platforms which aer/pme interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" reason; - add "pme" interrupt; arch/arm/boot/dts/ls1021a.dtsi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..9b3cb3b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,9 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +659,9 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 1/3] arm/dts-ls1021: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-arm-kernel NXP arm aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" "pme" interrupt-names for aer/pme interrupts. With the interrupt-names "aer","pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This patch is intend to fixup the Layerscape platforms which aer/pme interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" reason; - add "pme" interrupt; arch/arm/boot/dts/ls1021a.dtsi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..9b3cb3b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,9 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +659,9 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 1/3] arm/dts-ls1021: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu NXP arm aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" "pme" interrupt-names for aer/pme interrupts. With the interrupt-names "aer","pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This patch is intend to fixup the Layerscape platforms which aer/pme interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" reason; - add "pme" interrupt; arch/arm/boot/dts/ls1021a.dtsi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..9b3cb3b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,9 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +659,9 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 1/3] arm/dts-ls1021: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu NXP arm aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add a "aer" "pme" interrupt-names for aer/pme interrupts. With the interrupt-names "aer","pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This patch is intend to fixup the Layerscape platforms which aer/pme interrupt was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu-3arQi8VN3Tc@public.gmane.org> --- changes for v6: - add remove "intr" reason; - add "pme" interrupt; arch/arm/boot/dts/ls1021a.dtsi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..9b3cb3b 100644 --- a/arch/arm/boot/dts/ls1021a.dtsi +++ b/arch/arm/boot/dts/ls1021a.dtsi @@ -634,7 +634,9 @@ reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ + interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; @@ -657,7 +659,9 @@ reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ + interrupt-names = "pme", "aer"; fsl,pcie-scfg = <&scfg 1>; #address-cells = <3>; #size-cells = <2>; -- 2.1.0.27.g96db324 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 2/3] arm64/dts-ls1043-ls2080: add pcie aer/pme interrupt-name property in the dts 2016-09-30 9:11 ` Po Liu (?) (?) @ 2016-09-30 9:11 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu Some platforms(NXP Layerscape for example) aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add "aer", "pme" interrupt-names for aer/pme interrupt. With the interrupt-names "aer", "pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This is intend to fixup the Layerscape platforms which aer/pmes interrupts was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" interrupt reason. - add "pme" interrupt. arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 2/3] arm64/dts-ls1043-ls2080: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-arm-kernel Some platforms(NXP Layerscape for example) aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add "aer", "pme" interrupt-names for aer/pme interrupt. With the interrupt-names "aer", "pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This is intend to fixup the Layerscape platforms which aer/pmes interrupts was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" interrupt reason. - add "pme" interrupt. arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 2/3] arm64/dts-ls1043-ls2080: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Some platforms(NXP Layerscape for example) aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add "aer", "pme" interrupt-names for aer/pme interrupt. With the interrupt-names "aer", "pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This is intend to fixup the Layerscape platforms which aer/pmes interrupts was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" interrupt reason. - add "pme" interrupt. arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 2/3] arm64/dts-ls1043-ls2080: add pcie aer/pme interrupt-name property in the dts @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu Some platforms(NXP Layerscape for example) aer/pme interrupts was not MSI/MSI-X/INTx but using interrupt line independently. This patch add "aer", "pme" interrupt-names for aer/pme interrupt. With the interrupt-names "aer", "pme" code could probe aer/pme interrupt line for pcie root port, replace the aer/pme interrupt service irqs. This is intend to fixup the Layerscape platforms which aer/pmes interrupts was not MSI/MSI-X/INTx, but using interrupt line independently. Since the interrupt-names "intr" never been used. Remove it. Signed-off-by: Po Liu <po.liu@nxp.com> --- changes for v6: - add remove "intr" interrupt reason. - add "pme" interrupt. arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi index e669fbd..654071d 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi @@ -527,9 +527,9 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>, /* controller interrupt */ - <0 117 0x4>; /* PME interrupt */ - interrupt-names = "intr", "pme"; + interrupts = <0 117 0x4>, /* PME interrupt */ + <0 118 0x4>; /* aer interrupt */ + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -552,9 +552,9 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 128 0x4>, - <0 127 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 127 0x4>, + <0 128 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -577,9 +577,9 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 162 0x4>, - <0 161 0x4>; - interrupt-names = "intr", "pme"; + interrupts = <0 161 0x4>, + <0 162 0x4>; + interrupt-names = "pme", "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi index 21023a3..58844e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi @@ -583,8 +583,8 @@ reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 108 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 108 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -607,8 +607,8 @@ reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 113 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 113 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -631,8 +631,8 @@ reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 118 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 118 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; @@ -655,8 +655,8 @@ reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <0 123 0x4>; /* Level high type */ - interrupt-names = "intr"; + interrupts = <0 123 0x4>; /* aer interrupt */ + interrupt-names = "aer"; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode 2016-09-30 9:11 ` Po Liu (?) (?) @ 2016-09-30 9:11 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri, Po Liu On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. When chip support the aer/pme interrupts 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 v6: - modify bindings for "aer""pme"; - changing to the hood method to implement the aer pme interrupt; - add pme interrupt in the same way; .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- include/linux/pci.h | 1 + 5 files changed, 126 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..51ed49e 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,12 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It could include the following entries: + "aer": Asserted for aer interrupt when chip support the aer interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. + "pme": Asserted for pme interrupt when chip support the pme interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +39,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 2f0e077..d2f4869 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -11,6 +11,8 @@ #include <linux/slab.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <asm/mach-types.h> #include <asm/mach/map.h> @@ -64,6 +66,47 @@ void pcibios_report_status(u_int status_mask, int warn) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * We don't use this to fix the device, but initialisation of it. * It's not the correct use for this, but it works. * Note that the arbiter/ISA bridge appears to be buggy, specifically in diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index acf3872..4a3c61a 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -17,6 +17,8 @@ #include <linux/mm.h> #include <linux/of_pci.h> #include <linux/of_platform.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <linux/pci.h> #include <linux/pci-acpi.h> #include <linux/pci-ecam.h> @@ -55,6 +57,47 @@ int pcibios_alloc_irq(struct pci_dev *dev) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * raw_pci_read/write - Platform-specific PCI config space access. */ int raw_pci_read(unsigned int domain, unsigned int bus, diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..34b6dae 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -44,6 +44,19 @@ static void release_pcie_device(struct device *dev) } /** + * pcibios_check_service_irqs - check irqs in the device tree + * @dev: PCI Express port to handle + * @irqs: Array of irqs to populate + * @mask: Bitmask of port capabilities returned by get_port_device_capability() + * + * Return value: 0 means no service irqs in the device tree + * + */ +int __weak pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + return 0; +} +/** * pcie_port_msix_add_entry - add entry to given array of MSI-X entries * @entries: Array of MSI-X entries * @new_entry: Index of the entry to add to the array @@ -200,6 +213,21 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + + /* Check if some platforms owns independent irq pins for AER/PME etc. + * Some platforms may own independent AER/PME interrupts and set + * them in the device tree file. + */ + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = -1; + + ret = pcibios_check_service_irqs(dev, irqs, mask); + if (ret) { + if (dev->irq) + irq = dev->irq; + goto no_msi; + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -226,7 +254,8 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) no_msi: for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + if (irqs[i] == -1) + irqs[i] = irq; irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; if (irq < 0) diff --git a/include/linux/pci.h b/include/linux/pci.h index 2599a98..c80f2d0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1793,6 +1793,7 @@ void pcibios_release_device(struct pci_dev *dev); void pcibios_penalize_isa_irq(int irq, int active); int pcibios_alloc_irq(struct pci_dev *dev); void pcibios_free_irq(struct pci_dev *dev); +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask); #ifdef CONFIG_HIBERNATE_CALLBACKS extern struct dev_pm_ops pcibios_pm_ops; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-arm-kernel On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. When chip support the aer/pme interrupts 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 v6: - modify bindings for "aer""pme"; - changing to the hood method to implement the aer pme interrupt; - add pme interrupt in the same way; .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- include/linux/pci.h | 1 + 5 files changed, 126 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..51ed49e 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,12 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It could include the following entries: + "aer": Asserted for aer interrupt when chip support the aer interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. + "pme": Asserted for pme interrupt when chip support the pme interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +39,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 2f0e077..d2f4869 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -11,6 +11,8 @@ #include <linux/slab.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <asm/mach-types.h> #include <asm/mach/map.h> @@ -64,6 +66,47 @@ void pcibios_report_status(u_int status_mask, int warn) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * We don't use this to fix the device, but initialisation of it. * It's not the correct use for this, but it works. * Note that the arbiter/ISA bridge appears to be buggy, specifically in diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index acf3872..4a3c61a 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -17,6 +17,8 @@ #include <linux/mm.h> #include <linux/of_pci.h> #include <linux/of_platform.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <linux/pci.h> #include <linux/pci-acpi.h> #include <linux/pci-ecam.h> @@ -55,6 +57,47 @@ int pcibios_alloc_irq(struct pci_dev *dev) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * raw_pci_read/write - Platform-specific PCI config space access. */ int raw_pci_read(unsigned int domain, unsigned int bus, diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..34b6dae 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -44,6 +44,19 @@ static void release_pcie_device(struct device *dev) } /** + * pcibios_check_service_irqs - check irqs in the device tree + * @dev: PCI Express port to handle + * @irqs: Array of irqs to populate + * @mask: Bitmask of port capabilities returned by get_port_device_capability() + * + * Return value: 0 means no service irqs in the device tree + * + */ +int __weak pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + return 0; +} +/** * pcie_port_msix_add_entry - add entry to given array of MSI-X entries * @entries: Array of MSI-X entries * @new_entry: Index of the entry to add to the array @@ -200,6 +213,21 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + + /* Check if some platforms owns independent irq pins for AER/PME etc. + * Some platforms may own independent AER/PME interrupts and set + * them in the device tree file. + */ + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = -1; + + ret = pcibios_check_service_irqs(dev, irqs, mask); + if (ret) { + if (dev->irq) + irq = dev->irq; + goto no_msi; + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -226,7 +254,8 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) no_msi: for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + if (irqs[i] == -1) + irqs[i] = irq; irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; if (irq < 0) diff --git a/include/linux/pci.h b/include/linux/pci.h index 2599a98..c80f2d0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1793,6 +1793,7 @@ void pcibios_release_device(struct pci_dev *dev); void pcibios_penalize_isa_irq(int irq, int active); int pcibios_alloc_irq(struct pci_dev *dev); void pcibios_free_irq(struct pci_dev *dev); +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask); #ifdef CONFIG_HIBERNATE_CALLBACKS extern struct dev_pm_ops pcibios_pm_ops; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. When chip support the aer/pme interrupts 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 v6: - modify bindings for "aer""pme"; - changing to the hood method to implement the aer pme interrupt; - add pme interrupt in the same way; .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- include/linux/pci.h | 1 + 5 files changed, 126 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..51ed49e 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,12 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It could include the following entries: + "aer": Asserted for aer interrupt when chip support the aer interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. + "pme": Asserted for pme interrupt when chip support the pme interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +39,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 2f0e077..d2f4869 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -11,6 +11,8 @@ #include <linux/slab.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <asm/mach-types.h> #include <asm/mach/map.h> @@ -64,6 +66,47 @@ void pcibios_report_status(u_int status_mask, int warn) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * We don't use this to fix the device, but initialisation of it. * It's not the correct use for this, but it works. * Note that the arbiter/ISA bridge appears to be buggy, specifically in diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index acf3872..4a3c61a 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -17,6 +17,8 @@ #include <linux/mm.h> #include <linux/of_pci.h> #include <linux/of_platform.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <linux/pci.h> #include <linux/pci-acpi.h> #include <linux/pci-ecam.h> @@ -55,6 +57,47 @@ int pcibios_alloc_irq(struct pci_dev *dev) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * raw_pci_read/write - Platform-specific PCI config space access. */ int raw_pci_read(unsigned int domain, unsigned int bus, diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..34b6dae 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -44,6 +44,19 @@ static void release_pcie_device(struct device *dev) } /** + * pcibios_check_service_irqs - check irqs in the device tree + * @dev: PCI Express port to handle + * @irqs: Array of irqs to populate + * @mask: Bitmask of port capabilities returned by get_port_device_capability() + * + * Return value: 0 means no service irqs in the device tree + * + */ +int __weak pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + return 0; +} +/** * pcie_port_msix_add_entry - add entry to given array of MSI-X entries * @entries: Array of MSI-X entries * @new_entry: Index of the entry to add to the array @@ -200,6 +213,21 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + + /* Check if some platforms owns independent irq pins for AER/PME etc. + * Some platforms may own independent AER/PME interrupts and set + * them in the device tree file. + */ + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = -1; + + ret = pcibios_check_service_irqs(dev, irqs, mask); + if (ret) { + if (dev->irq) + irq = dev->irq; + goto no_msi; + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -226,7 +254,8 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) no_msi: for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + if (irqs[i] == -1) + irqs[i] = irq; irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; if (irq < 0) diff --git a/include/linux/pci.h b/include/linux/pci.h index 2599a98..c80f2d0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1793,6 +1793,7 @@ void pcibios_release_device(struct pci_dev *dev); void pcibios_penalize_isa_irq(int irq, int active); int pcibios_alloc_irq(struct pci_dev *dev); void pcibios_free_irq(struct pci_dev *dev); +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask); #ifdef CONFIG_HIBERNATE_CALLBACKS extern struct dev_pm_ops pcibios_pm_ops; -- 2.1.0.27.g96db324 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-09-30 9:11 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-30 9:11 UTC (permalink / raw) To: linux-pci, linux-arm-kernel, linux-kernel, devicetree Cc: Roy Zang, Arnd Bergmann, Marc Zyngier, Po Liu, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Shawn Guo, Mingkai Hu On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. When chip support the aer/pme interrupts 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 v6: - modify bindings for "aer""pme"; - changing to the hood method to implement the aer pme interrupt; - add pme interrupt in the same way; .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- include/linux/pci.h | 1 + 5 files changed, 126 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt index 41e9f55..51ed49e 100644 --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt @@ -18,8 +18,12 @@ Required properties: - reg: base addresses and lengths of the PCIe controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. -- interrupt-names: Must include the following entries: - "intr": The interrupt that is asserted for controller interrupts +- interrupt-names: It could include the following entries: + "aer": Asserted for aer interrupt when chip support the aer interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. + "pme": Asserted for pme interrupt when chip support the pme interrupt with + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. + ...... - fsl,pcie-scfg: Must include two entries. The first entry must be a link to the SCFG device node The second entry must be '0' or '1' based on physical PCIe controller index. @@ -35,8 +39,9 @@ Example: reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ reg-names = "regs", "config"; - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ - interrupt-names = "intr"; + interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>, /* aer interrupt */ + <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* pme interrupt */ + interrupt-names = "aer", "pme"; fsl,pcie-scfg = <&scfg 0>; #address-cells = <3>; #size-cells = <2>; diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 2f0e077..d2f4869 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -11,6 +11,8 @@ #include <linux/slab.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <asm/mach-types.h> #include <asm/mach/map.h> @@ -64,6 +66,47 @@ void pcibios_report_status(u_int status_mask, int warn) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * We don't use this to fix the device, but initialisation of it. * It's not the correct use for this, but it works. * Note that the arbiter/ISA bridge appears to be buggy, specifically in diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c index acf3872..4a3c61a 100644 --- a/arch/arm64/kernel/pci.c +++ b/arch/arm64/kernel/pci.c @@ -17,6 +17,8 @@ #include <linux/mm.h> #include <linux/of_pci.h> #include <linux/of_platform.h> +#include <linux/of_irq.h> +#include <linux/pcieport_if.h> #include <linux/pci.h> #include <linux/pci-acpi.h> #include <linux/pci-ecam.h> @@ -55,6 +57,47 @@ int pcibios_alloc_irq(struct pci_dev *dev) } /* + * Check device tree if the service interrupts are there + */ +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + int ret, count = 0; + struct device_node *np = NULL; + + if (dev->bus->dev.of_node) + np = dev->bus->dev.of_node; + + if (np == NULL) + return 0; + + if (!IS_ENABLED(CONFIG_OF_IRQ)) + return 0; + + /* If root port doesn't support MSI/MSI-X/INTx in RC mode, + * request irq for aer + */ + if (mask & PCIE_PORT_SERVICE_AER) { + ret = of_irq_get_byname(np, "aer"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_AER_SHIFT] = ret; + count++; + } + } + + if (mask & PCIE_PORT_SERVICE_PME) { + ret = of_irq_get_byname(np, "pme"); + if (ret > 0) { + irqs[PCIE_PORT_SERVICE_PME_SHIFT] = ret; + count++; + } + } + + /* TODO: add more service interrupts if there it is in the device tree*/ + + return count; +} + +/* * raw_pci_read/write - Platform-specific PCI config space access. */ int raw_pci_read(unsigned int domain, unsigned int bus, diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index e9270b4..34b6dae 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c @@ -44,6 +44,19 @@ static void release_pcie_device(struct device *dev) } /** + * pcibios_check_service_irqs - check irqs in the device tree + * @dev: PCI Express port to handle + * @irqs: Array of irqs to populate + * @mask: Bitmask of port capabilities returned by get_port_device_capability() + * + * Return value: 0 means no service irqs in the device tree + * + */ +int __weak pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask) +{ + return 0; +} +/** * pcie_port_msix_add_entry - add entry to given array of MSI-X entries * @entries: Array of MSI-X entries * @new_entry: Index of the entry to add to the array @@ -200,6 +213,21 @@ static int pcie_port_enable_msix(struct pci_dev *dev, int *vectors, int mask) static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) { int i, irq = -1; + int ret; + + /* Check if some platforms owns independent irq pins for AER/PME etc. + * Some platforms may own independent AER/PME interrupts and set + * them in the device tree file. + */ + for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) + irqs[i] = -1; + + ret = pcibios_check_service_irqs(dev, irqs, mask); + if (ret) { + if (dev->irq) + irq = dev->irq; + goto no_msi; + } /* * If MSI cannot be used for PCIe PME or hotplug, we have to use @@ -226,7 +254,8 @@ static int init_service_irqs(struct pci_dev *dev, int *irqs, int mask) no_msi: for (i = 0; i < PCIE_PORT_DEVICE_MAXSERVICES; i++) - irqs[i] = irq; + if (irqs[i] == -1) + irqs[i] = irq; irqs[PCIE_PORT_SERVICE_VC_SHIFT] = -1; if (irq < 0) diff --git a/include/linux/pci.h b/include/linux/pci.h index 2599a98..c80f2d0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1793,6 +1793,7 @@ void pcibios_release_device(struct pci_dev *dev); void pcibios_penalize_isa_irq(int irq, int active); int pcibios_alloc_irq(struct pci_dev *dev); void pcibios_free_irq(struct pci_dev *dev); +int pcibios_check_service_irqs(struct pci_dev *dev, int *irqs, int mask); #ifdef CONFIG_HIBERNATE_CALLBACKS extern struct dev_pm_ops pcibios_pm_ops; -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 201+ messages in thread
* Re: [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-08 20:49 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-10-08 20:49 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > When chip support the aer/pme interrupts 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. Again, explain why you are breaking compatibility. Will an old dtb using "intr" still work with this change? It should normally. There are some exceptions, but you need to say what they are. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v6: > - modify bindings for "aer""pme"; > - changing to the hood method to implement the aer pme interrupt; > - add pme interrupt in the same way; > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ > arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- > include/linux/pci.h | 1 + > 5 files changed, 126 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..51ed49e 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,12 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It could include the following entries: "Could" is not strong enough. Every valid combination of interrupts should correspond to a specific compatible string. A given version of h/w either has these interrupts or not. > + "aer": Asserted for aer interrupt when chip support the aer interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. > + "pme": Asserted for pme interrupt when chip support the pme interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-08 20:49 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-10-08 20:49 UTC (permalink / raw) To: linux-arm-kernel On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > When chip support the aer/pme interrupts 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. Again, explain why you are breaking compatibility. Will an old dtb using "intr" still work with this change? It should normally. There are some exceptions, but you need to say what they are. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v6: > - modify bindings for "aer""pme"; > - changing to the hood method to implement the aer pme interrupt; > - add pme interrupt in the same way; > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ > arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- > include/linux/pci.h | 1 + > 5 files changed, 126 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..51ed49e 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,12 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It could include the following entries: "Could" is not strong enough. Every valid combination of interrupts should correspond to a specific compatible string. A given version of h/w either has these interrupts or not. > + "aer": Asserted for aer interrupt when chip support the aer interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. > + "pme": Asserted for pme interrupt when chip support the pme interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-08 20:49 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-10-08 20:49 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > When chip support the aer/pme interrupts 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. Again, explain why you are breaking compatibility. Will an old dtb using "intr" still work with this change? It should normally. There are some exceptions, but you need to say what they are. > > Signed-off-by: Po Liu <po.liu-3arQi8VN3Tc@public.gmane.org> > --- > changes for v6: > - modify bindings for "aer""pme"; > - changing to the hood method to implement the aer pme interrupt; > - add pme interrupt in the same way; > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > arch/arm/kernel/bios32.c | 43 ++++++++++++++++++++++ > arch/arm64/kernel/pci.c | 43 ++++++++++++++++++++++ > drivers/pci/pcie/portdrv_core.c | 31 +++++++++++++++- > include/linux/pci.h | 1 + > 5 files changed, 126 insertions(+), 5 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > index 41e9f55..51ed49e 100644 > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > @@ -18,8 +18,12 @@ Required properties: > - reg: base addresses and lengths of the PCIe controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > -- interrupt-names: Must include the following entries: > - "intr": The interrupt that is asserted for controller interrupts > +- interrupt-names: It could include the following entries: "Could" is not strong enough. Every valid combination of interrupts should correspond to a specific compatible string. A given version of h/w either has these interrupts or not. > + "aer": Asserted for aer interrupt when chip support the aer interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for aer. > + "pme": Asserted for pme interrupt when chip support the pme interrupt with > + none MSI/MSI-X/INTx mode,but there is interrupt line for pme. > + ...... > - fsl,pcie-scfg: Must include two entries. > The first entry must be a link to the SCFG device node > The second entry must be '0' or '1' based on physical PCIe controller index. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode 2016-10-08 20:49 ` Rob Herring (?) (?) @ 2016-10-09 2:47 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-10-09 2:47 UTC (permalink / raw) To: Rob Herring Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Leo Li, Arnd Bergmann, M.H. Lian, Murali Karicheri Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Sunday, October 09, 2016 4:50 AM > 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; Roy Zang; Mingkai Hu; Stuart Yoder; Leo Li; > Arnd Bergmann; M.H. Lian; Murali Karicheri > Subject: Re: [PATCH v6 3/3] pci:add support aer/pme interrupts with none > MSI/MSI-X/INTx mode > > On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > > When chip support the aer/pme interrupts 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. > > Again, explain why you are breaking compatibility. Will an old dtb using > "intr" still work with this change? It should normally. There are some > exceptions, but you need to say what they are. > Ok, understand. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v6: > > - modify bindings for "aer""pme"; > > - changing to the hood method to implement the aer pme interrupt; > > - add pme interrupt in the same way; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > > arch/arm/kernel/bios32.c | 43 > ++++++++++++++++++++++ > > arch/arm64/kernel/pci.c | 43 > ++++++++++++++++++++++ > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++- > > include/linux/pci.h | 1 + > > 5 files changed, 126 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..51ed49e 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,12 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It could include the following entries: > > "Could" is not strong enough. Every valid combination of interrupts > should correspond to a specific compatible string. A given version of > h/w either has these interrupts or not. Ok, will change to 'must'. > > > + "aer": Asserted for aer interrupt when chip support the aer > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > aer. > > + "pme": Asserted for pme interrupt when chip support the pme > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > pme. > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-09 2:47 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-10-09 2:47 UTC (permalink / raw) To: linux-arm-kernel Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh at kernel.org] > Sent: Sunday, October 09, 2016 4:50 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Bjorn Helgaas; > Shawn Guo; Marc Zyngier; Roy Zang; Mingkai Hu; Stuart Yoder; Leo Li; > Arnd Bergmann; M.H. Lian; Murali Karicheri > Subject: Re: [PATCH v6 3/3] pci:add support aer/pme interrupts with none > MSI/MSI-X/INTx mode > > On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > > When chip support the aer/pme interrupts 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. > > Again, explain why you are breaking compatibility. Will an old dtb using > "intr" still work with this change? It should normally. There are some > exceptions, but you need to say what they are. > Ok, understand. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v6: > > - modify bindings for "aer""pme"; > > - changing to the hood method to implement the aer pme interrupt; > > - add pme interrupt in the same way; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > > arch/arm/kernel/bios32.c | 43 > ++++++++++++++++++++++ > > arch/arm64/kernel/pci.c | 43 > ++++++++++++++++++++++ > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++- > > include/linux/pci.h | 1 + > > 5 files changed, 126 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..51ed49e 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,12 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It could include the following entries: > > "Could" is not strong enough. Every valid combination of interrupts > should correspond to a specific compatible string. A given version of > h/w either has these interrupts or not. Ok, will change to 'must'. > > > + "aer": Asserted for aer interrupt when chip support the aer > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > aer. > > + "pme": Asserted for pme interrupt when chip support the pme > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > pme. > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-09 2:47 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-10-09 2:47 UTC (permalink / raw) To: Rob Herring Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Leo Li, Arnd Bergmann, M.H. Lian, Murali Karicheri SGkgUm9iLA0KDQpCZXN0IHJlZ2FyZHMsDQpMaXUgUG8NCg0KPiAgLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gIEZyb206IFJvYiBIZXJyaW5nIFttYWlsdG86cm9iaEBrZXJuZWwub3JnXQ0K PiAgU2VudDogU3VuZGF5LCBPY3RvYmVyIDA5LCAyMDE2IDQ6NTAgQU0NCj4gIFRvOiBQbyBMaXUN Cj4gIENjOiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmc7DQo+ICBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkZXZpY2V0 cmVlQHZnZXIua2VybmVsLm9yZzsgQmpvcm4gSGVsZ2FhczsNCj4gIFNoYXduIEd1bzsgTWFyYyBa eW5naWVyOyBSb3kgWmFuZzsgTWluZ2thaSBIdTsgU3R1YXJ0IFlvZGVyOyBMZW8gTGk7DQo+ICBB cm5kIEJlcmdtYW5uOyBNLkguIExpYW47IE11cmFsaSBLYXJpY2hlcmkNCj4gIFN1YmplY3Q6IFJl OiBbUEFUQ0ggdjYgMy8zXSBwY2k6YWRkIHN1cHBvcnQgYWVyL3BtZSBpbnRlcnJ1cHRzIHdpdGgg bm9uZQ0KPiAgTVNJL01TSS1YL0lOVHggbW9kZQ0KPiAgDQo+ICBPbiBGcmksIFNlcCAzMCwgMjAx NiBhdCAwNToxMTozN1BNICswODAwLCBQbyBMaXUgd3JvdGU6DQo+ICA+IE9uIHNvbWUgcGxhdGZv cm1zLCByb290IHBvcnQgZG9lc24ndCBzdXBwb3J0IE1TSS9NU0ktWC9JTlR4IGluIFJDIG1vZGUu DQo+ICA+IFdoZW4gY2hpcCBzdXBwb3J0IHRoZSBhZXIvcG1lIGludGVycnVwdHMgd2l0aCBub25l IE1TSS9NU0ktWC9JTlR4DQo+ICA+IG1vZGUsIG1heWJlIHRoZXJlIGlzIGludGVycnVwdCBsaW5l IGZvciBhZXIgcG1lIGV0Yy4gU2VhcmNoIHRoZQ0KPiAgPiBpbnRlcnJ1cHQgbnVtYmVyIGluIHRo ZSBmZHQgZmlsZS4gVGhlbiBmaXh1cCB0aGUgZGV2LT5pcnEgd2l0aCBpdC4NCj4gIA0KPiAgQWdh aW4sIGV4cGxhaW4gd2h5IHlvdSBhcmUgYnJlYWtpbmcgY29tcGF0aWJpbGl0eS4gV2lsbCBhbiBv bGQgZHRiIHVzaW5nDQo+ICAiaW50ciIgc3RpbGwgd29yayB3aXRoIHRoaXMgY2hhbmdlPyBJdCBz aG91bGQgbm9ybWFsbHkuIFRoZXJlIGFyZSBzb21lDQo+ICBleGNlcHRpb25zLCBidXQgeW91IG5l ZWQgdG8gc2F5IHdoYXQgdGhleSBhcmUuDQo+ICANCk9rLCB1bmRlcnN0YW5kLg0KDQo+ICA+DQo+ ICA+IFNpZ25lZC1vZmYtYnk6IFBvIExpdSA8cG8ubGl1QG54cC5jb20+DQo+ICA+IC0tLQ0KPiAg PiBjaGFuZ2VzIGZvciB2NjoNCj4gID4gCS0gbW9kaWZ5IGJpbmRpbmdzIGZvciAiYWVyIiJwbWUi Ow0KPiAgPiAJLSBjaGFuZ2luZyB0byB0aGUgaG9vZCBtZXRob2QgdG8gaW1wbGVtZW50IHRoZSBh ZXIgcG1lIGludGVycnVwdDsNCj4gID4gCS0gYWRkIHBtZSBpbnRlcnJ1cHQgaW4gdGhlIHNhbWUg d2F5Ow0KPiAgPg0KPiAgPiAgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2xheWVyc2NhcGUt cGNpLnR4dCAgICAgfCAxMyArKysrKy0tDQo+ICA+ICBhcmNoL2FybS9rZXJuZWwvYmlvczMyLmMg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQzDQo+ICArKysrKysrKysrKysrKysrKysrKysr DQo+ICA+ICBhcmNoL2FybTY0L2tlcm5lbC9wY2kuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDQzDQo+ICArKysrKysrKysrKysrKysrKysrKysrDQo+ICA+ICBkcml2ZXJzL3BjaS9wY2ll L3BvcnRkcnZfY29yZS5jICAgICAgICAgICAgICAgICAgICB8IDMxDQo+ICArKysrKysrKysrKysr KystDQo+ICA+ICBpbmNsdWRlL2xpbnV4L3BjaS5oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAxICsNCj4gID4gIDUgZmlsZXMgY2hhbmdlZCwgMTI2IGluc2VydGlvbnMoKyksIDUg ZGVsZXRpb25zKC0pDQo+ICA+DQo+ICA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvcGNpL2xheWVyc2NhcGUtcGNpLnR4dA0KPiAgPiBiL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0DQo+ICA+IGluZGV4 IDQxZTlmNTUuLjUxZWQ0OWUgMTAwNjQ0DQo+ICA+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0DQo+ICA+ICsrKyBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbGF5ZXJzY2FwZS1wY2kudHh0DQo+ICA+IEBA IC0xOCw4ICsxOCwxMiBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KPiAgPiAgLSByZWc6IGJhc2Ug YWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIHRoZSBQQ0llIGNvbnRyb2xsZXINCj4gID4gIC0gaW50 ZXJydXB0czogQSBsaXN0IG9mIGludGVycnVwdCBvdXRwdXRzIG9mIHRoZSBjb250cm9sbGVyLiBN dXN0DQo+ICBjb250YWluIGFuDQo+ICA+ICAgIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIHRoZSBp bnRlcnJ1cHQtbmFtZXMgcHJvcGVydHkuDQo+ICA+IC0tIGludGVycnVwdC1uYW1lczogTXVzdCBp bmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cmllczoNCj4gID4gLSAgImludHIiOiBUaGUgaW50ZXJy dXB0IHRoYXQgaXMgYXNzZXJ0ZWQgZm9yIGNvbnRyb2xsZXIgaW50ZXJydXB0cw0KPiAgPiArLSBp bnRlcnJ1cHQtbmFtZXM6IEl0IGNvdWxkIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzOg0K PiAgDQo+ICAiQ291bGQiIGlzIG5vdCBzdHJvbmcgZW5vdWdoLiBFdmVyeSB2YWxpZCBjb21iaW5h dGlvbiBvZiBpbnRlcnJ1cHRzDQo+ICBzaG91bGQgY29ycmVzcG9uZCB0byBhIHNwZWNpZmljIGNv bXBhdGlibGUgc3RyaW5nLiBBIGdpdmVuIHZlcnNpb24gb2YNCj4gIGgvdyBlaXRoZXIgaGFzIHRo ZXNlIGludGVycnVwdHMgb3Igbm90Lg0KDQpPaywgd2lsbCBjaGFuZ2UgdG8gJ211c3QnLg0KDQo+ ICANCj4gID4gKyAgImFlciI6IEFzc2VydGVkIGZvciBhZXIgaW50ZXJydXB0IHdoZW4gY2hpcCBz dXBwb3J0IHRoZSBhZXINCj4gIGludGVycnVwdCB3aXRoDQo+ICA+ICsJCSBub25lIE1TSS9NU0kt WC9JTlR4IG1vZGUsYnV0IHRoZXJlIGlzIGludGVycnVwdCBsaW5lIGZvcg0KPiAgYWVyLg0KPiAg PiArICAicG1lIjogQXNzZXJ0ZWQgZm9yIHBtZSBpbnRlcnJ1cHQgd2hlbiBjaGlwIHN1cHBvcnQg dGhlIHBtZQ0KPiAgaW50ZXJydXB0IHdpdGgNCj4gID4gKwkJIG5vbmUgTVNJL01TSS1YL0lOVHgg bW9kZSxidXQgdGhlcmUgaXMgaW50ZXJydXB0IGxpbmUgZm9yDQo+ICBwbWUuDQo+ICA+ICsgIC4u Li4uLg0KPiAgPiAgLSBmc2wscGNpZS1zY2ZnOiBNdXN0IGluY2x1ZGUgdHdvIGVudHJpZXMuDQo+ ICA+ICAgIFRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIGEgbGluayB0byB0aGUgU0NGRyBkZXZpY2Ug bm9kZQ0KPiAgPiAgICBUaGUgc2Vjb25kIGVudHJ5IG11c3QgYmUgJzAnIG9yICcxJyBiYXNlZCBv biBwaHlzaWNhbCBQQ0llDQo+ICBjb250cm9sbGVyIGluZGV4Lg0K ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode @ 2016-10-09 2:47 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-10-09 2:47 UTC (permalink / raw) To: Rob Herring Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Leo Li, Arnd Bergmann, M.H. Lian, Murali Karicheri [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset="utf-8", Size: 3536 bytes --] Hi Rob, Best regards, Liu Po > -----Original Message----- > From: Rob Herring [mailto:robh@kernel.org] > Sent: Sunday, October 09, 2016 4:50 AM > 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; Roy Zang; Mingkai Hu; Stuart Yoder; Leo Li; > Arnd Bergmann; M.H. Lian; Murali Karicheri > Subject: Re: [PATCH v6 3/3] pci:add support aer/pme interrupts with none > MSI/MSI-X/INTx mode > > On Fri, Sep 30, 2016 at 05:11:37PM +0800, Po Liu wrote: > > On some platforms, root port doesn't support MSI/MSI-X/INTx in RC mode. > > When chip support the aer/pme interrupts 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. > > Again, explain why you are breaking compatibility. Will an old dtb using > "intr" still work with this change? It should normally. There are some > exceptions, but you need to say what they are. > Ok, understand. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v6: > > - modify bindings for "aer""pme"; > > - changing to the hood method to implement the aer pme interrupt; > > - add pme interrupt in the same way; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 13 +++++-- > > arch/arm/kernel/bios32.c | 43 > ++++++++++++++++++++++ > > arch/arm64/kernel/pci.c | 43 > ++++++++++++++++++++++ > > drivers/pci/pcie/portdrv_core.c | 31 > +++++++++++++++- > > include/linux/pci.h | 1 + > > 5 files changed, 126 insertions(+), 5 deletions(-) > > > > diff --git a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > index 41e9f55..51ed49e 100644 > > --- a/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > +++ b/Documentation/devicetree/bindings/pci/layerscape-pci.txt > > @@ -18,8 +18,12 @@ Required properties: > > - reg: base addresses and lengths of the PCIe controller > > - interrupts: A list of interrupt outputs of the controller. Must > contain an > > entry for each entry in the interrupt-names property. > > -- interrupt-names: Must include the following entries: > > - "intr": The interrupt that is asserted for controller interrupts > > +- interrupt-names: It could include the following entries: > > "Could" is not strong enough. Every valid combination of interrupts > should correspond to a specific compatible string. A given version of > h/w either has these interrupts or not. Ok, will change to 'must'. > > > + "aer": Asserted for aer interrupt when chip support the aer > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > aer. > > + "pme": Asserted for pme interrupt when chip support the pme > interrupt with > > + none MSI/MSI-X/INTx mode,but there is interrupt line for > pme. > > + ...... > > - fsl,pcie-scfg: Must include two entries. > > The first entry must be a link to the SCFG device node > > The second entry must be '0' or '1' based on physical PCIe > controller index. N§²æìr¸yúèØb²X¬¶Ç§vØ^)Þº{.nÇ+·zøzÚÞz)í æèw*\x1fjg¬±¨\x1e¶Ý¢j.ïÛ°\½½MúgjÌæa×\x02' ©Þ¢¸\f¢·¦j:+v¨wèjØm¶ÿ¾\a«êçzZ+ùÝ¢j"ú!¶i ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-08-31 6:37 ` Po Liu @ 2016-09-05 2:25 ` Shawn Guo -1 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-05 2:25 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt > line for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- Do not mix up arm dts changes with arm64 ones. Use separate patch please. Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-05 2:25 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-09-05 2:25 UTC (permalink / raw) To: linux-arm-kernel On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt > line for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- Do not mix up arm dts changes with arm64 ones. Use separate patch please. Shawn ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-12 22:13 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-12 22:13 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt > line for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi > index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-12 22:13 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-12 22:13 UTC (permalink / raw) To: linux-arm-kernel On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt > line for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi > index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 2.1.0.27.g96db324 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-12 22:13 ` Bjorn Helgaas 0 siblings, 0 replies; 201+ messages in thread From: Bjorn Helgaas @ 2016-09-12 22:13 UTC (permalink / raw) To: Po Liu Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt > line for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu-3arQi8VN3Tc@public.gmane.org> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi > index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 2.1.0.27.g96db324 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-09-12 22:13 ` Bjorn Helgaas (?) (?) @ 2016-09-13 3:02 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 3:02 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Rob Herring, Roy Zang, Vincent Hu, Stuart Yoder, Leo Li, Arnd Bergmann, M.H. Lian, Murali Karicheri Hi Bjorn, Shawn, Rob, Thanks for reply. I'll upload new patches: - separate the patches with arm and arm64 dts for new version. - Modify the binding comments to make it clear for explain the 'aer' property. Best regards, Liu Po -----Original Message----- From: Bjorn Helgaas [mailto:helgaas@kernel.org] Sent: Tuesday, September 13, 2016 6:14 AM 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; Vincent Hu; Stuart Yoder; Leo Li; Arnd Bergmann; M.H. Lian; Murali Karicheri Subject: Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt line > for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | > 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi > b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 3:02 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 3:02 UTC (permalink / raw) To: linux-arm-kernel Hi Bjorn, Shawn, Rob, Thanks for reply. I'll upload new patches: - separate the patches with arm and arm64 dts for new version. - Modify the binding comments to make it clear for explain the 'aer' property. Best regards, Liu Po -----Original Message----- From: Bjorn Helgaas [mailto:helgaas at kernel.org] Sent: Tuesday, September 13, 2016 6:14 AM To: Po Liu Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Bjorn Helgaas; Shawn Guo; Marc Zyngier; Rob Herring; Roy Zang; Vincent Hu; Stuart Yoder; Leo Li; Arnd Bergmann; M.H. Lian; Murali Karicheri Subject: Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt line > for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | > 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi > b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 2.1.0.27.g96db324 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" > in the body of a message to majordomo at vger.kernel.org More majordomo > info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 3:02 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 3:02 UTC (permalink / raw) To: Bjorn Helgaas Cc: devicetree, Arnd Bergmann, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Vincent Hu, Roy Zang, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, Shawn, Rob, Thanks for reply. I'll upload new patches: - separate the patches with arm and arm64 dts for new version. - Modify the binding comments to make it clear for explain the 'aer' property. Best regards, Liu Po -----Original Message----- From: Bjorn Helgaas [mailto:helgaas@kernel.org] Sent: Tuesday, September 13, 2016 6:14 AM 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; Vincent Hu; Stuart Yoder; Leo Li; Arnd Bergmann; M.H. Lian; Murali Karicheri Subject: Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt line > for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | > 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi > b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-09-13 3:02 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-09-13 3:02 UTC (permalink / raw) To: Bjorn Helgaas Cc: devicetree, Arnd Bergmann, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, M.H. Lian, Murali Karicheri, Vincent Hu, Roy Zang, Bjorn Helgaas, Leo Li, Shawn Guo, linux-arm-kernel Hi Bjorn, Shawn, Rob, Thanks for reply. I'll upload new patches: - separate the patches with arm and arm64 dts for new version. - Modify the binding comments to make it clear for explain the 'aer' property. Best regards, Liu Po -----Original Message----- From: Bjorn Helgaas [mailto:helgaas@kernel.org] Sent: Tuesday, September 13, 2016 6:14 AM 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; Vincent Hu; Stuart Yoder; Leo Li; Arnd Bergmann; M.H. Lian; Murali Karicheri Subject: Re: [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts On Wed, Aug 31, 2016 at 02:37:21PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > With the interrupt-names "aer", code could probe aer interrupt line > for pcie root port, replace the aer interrupt service irq. > This is intend to fixup the Layerscape platforms which aer interrupt > was not MSI/MSI-X/INTx, but using interrupt line independently. > > Signed-off-by: Po Liu <po.liu@nxp.com> Rob and Shawn had comments here, and I'm not sure they ever got resolved. > --- > changes for V4: > - Add comments explain why to add this patch > - Move the binding changes to pci code patch > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | > 16 ++++++++-------- > 3 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/boot/dts/ls1021a.dtsi > b/arch/arm/boot/dts/ls1021a.dtsi index 368e219..443e50b 100644 > --- a/arch/arm/boot/dts/ls1021a.dtsi > +++ b/arch/arm/boot/dts/ls1021a.dtsi > @@ -634,7 +634,8 @@ > reg = <0x00 0x03400000 0x0 0x00010000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */ > + interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 0>; > #address-cells = <3>; > #size-cells = <2>; > @@ -657,7 +658,8 @@ > reg = <0x00 0x03500000 0x0 0x00010000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; > + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */ > + interrupt-names = "aer"; > fsl,pcie-scfg = <&scfg 1>; > #address-cells = <3>; > #size-cells = <2>; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > index e669fbd..654071d 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi > @@ -527,9 +527,9 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x40 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>, /* controller interrupt */ > - <0 117 0x4>; /* PME interrupt */ > - interrupt-names = "intr", "pme"; > + interrupts = <0 117 0x4>, /* PME interrupt */ > + <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -552,9 +552,9 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x48 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 128 0x4>, > - <0 127 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 127 0x4>, > + <0 128 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -577,9 +577,9 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x50 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 162 0x4>, > - <0 161 0x4>; > - interrupt-names = "intr", "pme"; > + interrupts = <0 161 0x4>, > + <0 162 0x4>; > + interrupt-names = "pme", "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > diff --git a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > index 21023a3..58844e8 100644 > --- a/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > +++ b/arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi > @@ -583,8 +583,8 @@ > reg = <0x00 0x03400000 0x0 0x00100000 /* controller registers */ > 0x10 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 108 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 108 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -607,8 +607,8 @@ > reg = <0x00 0x03500000 0x0 0x00100000 /* controller registers */ > 0x12 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 113 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 113 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -631,8 +631,8 @@ > reg = <0x00 0x03600000 0x0 0x00100000 /* controller registers */ > 0x14 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 118 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 118 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > @@ -655,8 +655,8 @@ > reg = <0x00 0x03700000 0x0 0x00100000 /* controller registers */ > 0x16 0x00000000 0x0 0x00002000>; /* configuration space */ > reg-names = "regs", "config"; > - interrupts = <0 123 0x4>; /* Level high type */ > - interrupt-names = "intr"; > + interrupts = <0 123 0x4>; /* aer interrupt */ > + interrupt-names = "aer"; > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > -- > 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 ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-06-14 8:24 ` Po Liu @ 2016-06-16 0:36 ` Shawn Guo -1 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-06-16 0:36 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v3: > - None; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- The bindings shouldn't be part of dts patch but the driver patch who is actually using it. Shawn > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-16 0:36 ` Shawn Guo 0 siblings, 0 replies; 201+ messages in thread From: Shawn Guo @ 2016-06-16 0:36 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v3: > - None; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- The bindings shouldn't be part of dts patch but the driver patch who is actually using it. Shawn > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-06-16 0:36 ` Shawn Guo (?) (?) @ 2016-06-16 10:50 ` Po Liu -1 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-16 10:50 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Thursday, June 16, 2016 8:36 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name > property in the dts > > On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > > interrupt line independently. This patch add a "aer" > > interrupt-names for aer interrupt. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v3: > > - None; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > > The bindings shouldn't be part of dts patch but the driver patch who is > actually using it. > > Shawn Ok, I'll move the doc part to the driver patch. Po Liu >From NXP > > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- > > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++- > ------- > > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-16 10:50 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-16 10:50 UTC (permalink / raw) To: linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo at kernel.org] > Sent: Thursday, June 16, 2016 8:36 AM > To: Po Liu > Cc: linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; > linux-kernel at vger.kernel.org; devicetree at vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name > property in the dts > > On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > > interrupt line independently. This patch add a "aer" > > interrupt-names for aer interrupt. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v3: > > - None; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > > The bindings shouldn't be part of dts patch but the driver patch who is > actually using it. > > Shawn Ok, I'll move the doc part to the driver patch. Po Liu >From NXP > > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- > > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++- > ------- > > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-16 10:50 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-16 10:50 UTC (permalink / raw) To: Shawn Guo Cc: Roy Zang, Arnd Bergmann, devicetree, Marc Zyngier, linux-pci, linux-kernel, Stuart Yoder, Minghuan Lian, Murali Karicheri, Mingkai Hu, Bjorn Helgaas, Yang-Leo Li, linux-arm-kernel Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Thursday, June 16, 2016 8:36 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name > property in the dts > > On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > > interrupt line independently. This patch add a "aer" > > interrupt-names for aer interrupt. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v3: > > - None; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > > The bindings shouldn't be part of dts patch but the driver patch who is > actually using it. > > Shawn Ok, I'll move the doc part to the driver patch. Po Liu >From NXP > > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- > > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++- > ------- > > 4 files changed, 23 insertions(+), 21 deletions(-) _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 201+ messages in thread
* RE: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-16 10:50 ` Po Liu 0 siblings, 0 replies; 201+ messages in thread From: Po Liu @ 2016-06-16 10:50 UTC (permalink / raw) To: Shawn Guo Cc: linux-pci-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Roy Zang, Arnd Bergmann, Marc Zyngier, Stuart Yoder, Yang-Leo Li, Minghuan Lian, Murali Karicheri, Bjorn Helgaas, Mingkai Hu Hi Shawn, > -----Original Message----- > From: Shawn Guo [mailto:shawnguo@kernel.org] > Sent: Thursday, June 16, 2016 8:36 AM > To: Po Liu > Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; Roy Zang; Arnd > Bergmann; Marc Zyngier; Stuart Yoder; Yang-Leo Li; Minghuan Lian; Murali > Karicheri; Bjorn Helgaas; Mingkai Hu > Subject: Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name > property in the dts > > On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > > NXP some platforms aer interrupt was not MSI/MSI-X/INTx but using > > interrupt line independently. This patch add a "aer" > > interrupt-names for aer interrupt. > > > > Signed-off-by: Po Liu <po.liu@nxp.com> > > --- > > changes for v3: > > - None; > > > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > > The bindings shouldn't be part of dts patch but the driver patch who is > actually using it. > > Shawn Ok, I'll move the doc part to the driver patch. Po Liu From NXP > > > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 > +++++++++--------- > > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++- > ------- > > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* Re: [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts 2016-06-14 8:24 ` Po Liu @ 2016-06-16 22:19 ` Rob Herring -1 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-06-16 22:19 UTC (permalink / raw) To: Po Liu Cc: linux-pci, linux-arm-kernel, linux-kernel, devicetree, Bjorn Helgaas, Shawn Guo, Marc Zyngier, Roy Zang, Mingkai Hu, Stuart Yoder, Yang-Leo Li, Arnd Bergmann, Minghuan Lian, Murali Karicheri On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. Please put your explanation why this is okay to change in the commit message. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v3: > - None; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
* [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts @ 2016-06-16 22:19 ` Rob Herring 0 siblings, 0 replies; 201+ messages in thread From: Rob Herring @ 2016-06-16 22:19 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jun 14, 2016 at 04:24:04PM +0800, Po Liu wrote: > NXP some platforms aer interrupt was not MSI/MSI-X/INTx > but using interrupt line independently. This patch add a "aer" > interrupt-names for aer interrupt. Please put your explanation why this is okay to change in the commit message. > > Signed-off-by: Po Liu <po.liu@nxp.com> > --- > changes for v3: > - None; > > .../devicetree/bindings/pci/layerscape-pci.txt | 4 ++-- > arch/arm/boot/dts/ls1021a.dtsi | 6 ++++-- > arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 18 +++++++++--------- > arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 16 ++++++++-------- > 4 files changed, 23 insertions(+), 21 deletions(-) ^ permalink raw reply [flat|nested] 201+ messages in thread
end of thread, other threads:[~2016-10-09 2:47 UTC | newest] Thread overview: 201+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-05-26 6:00 [PATCH 2/2] aer: add support aer interrupt with none MSI/MSI-X/INTx mode Po Liu 2016-05-26 6:00 ` Po Liu 2016-05-26 6:00 ` Po Liu 2016-05-26 6:00 ` Po Liu 2016-06-02 3:48 ` Bjorn Helgaas 2016-06-02 3:48 ` Bjorn Helgaas 2016-06-02 5:01 ` Po Liu 2016-06-02 5:01 ` Po Liu 2016-06-02 5:01 ` Po Liu 2016-06-02 5:01 ` Po Liu 2016-06-02 13:55 ` Bjorn Helgaas 2016-06-02 13:55 ` Bjorn Helgaas 2016-06-02 13:55 ` Bjorn Helgaas 2016-06-02 15:37 ` Murali Karicheri 2016-06-02 15:37 ` Murali Karicheri 2016-06-02 15:37 ` Murali Karicheri 2016-06-03 4:09 ` Bjorn Helgaas 2016-06-03 4:09 ` Bjorn Helgaas 2016-06-03 4:09 ` Bjorn Helgaas 2016-06-03 17:31 ` Murali Karicheri 2016-06-03 17:31 ` Murali Karicheri 2016-06-03 17:31 ` Murali Karicheri 2016-06-04 3:48 ` Bjorn Helgaas 2016-06-04 3:48 ` Bjorn Helgaas 2016-06-04 3:48 ` Bjorn Helgaas 2016-06-06 7:32 ` Po Liu 2016-06-06 7:32 ` Po Liu 2016-06-06 7:32 ` Po Liu 2016-06-06 7:32 ` Po Liu 2016-06-06 14:01 ` Murali Karicheri 2016-06-06 14:01 ` Murali Karicheri 2016-06-06 14:01 ` Murali Karicheri 2016-06-06 18:10 ` Bjorn Helgaas 2016-06-06 18:10 ` Bjorn Helgaas 2016-06-06 18:10 ` Bjorn Helgaas 2016-06-07 10:07 ` Po Liu 2016-06-07 10:07 ` Po Liu 2016-06-07 10:07 ` Po Liu 2016-06-07 10:07 ` Po Liu 2016-06-07 22:46 ` Bjorn Helgaas 2016-06-07 22:46 ` Bjorn Helgaas 2016-06-07 22:46 ` Bjorn Helgaas 2016-06-08 4:56 ` Po Liu 2016-06-08 4:56 ` Po Liu 2016-06-08 4:56 ` Po Liu 2016-06-08 4:56 ` Po Liu 2016-06-14 6:12 ` [PATCH v2 1/2] nxp/dts: add pcie aer interrupt-name property in the dts Po Liu 2016-06-14 6:12 ` Po Liu 2016-06-14 6:12 ` Po Liu 2016-06-14 6:12 ` Po Liu 2016-06-14 6:12 ` [PATCH v2 2/2] pci/aer: interrupt fixup in the quirk Po Liu 2016-06-14 6:12 ` Po Liu 2016-06-14 6:12 ` Po Liu 2016-06-16 13:54 ` Bjorn Helgaas 2016-06-16 13:54 ` Bjorn Helgaas 2016-06-17 3:30 ` Po Liu 2016-06-17 3:30 ` Po Liu 2016-06-17 3:30 ` Po Liu 2016-06-17 3:30 ` Po Liu 2016-07-01 8:46 ` Po Liu 2016-07-01 8:46 ` Po Liu 2016-07-01 8:46 ` Po Liu 2016-07-01 8:46 ` Po Liu 2016-06-14 8:24 ` [PATCH v3 1/2] nxp/dts: add pcie aer interrupt-name property in the dts Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-14 8:24 ` [PATCH v3 2/2] pci/aer: interrupt fixup in the quirk Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-14 8:24 ` Po Liu 2016-06-23 5:43 ` Dongdong Liu 2016-06-23 5:43 ` Dongdong Liu 2016-06-23 5:43 ` Dongdong Liu 2016-07-01 8:40 ` Po Liu 2016-07-01 8:40 ` Po Liu 2016-07-01 8:40 ` Po Liu 2016-07-01 8:40 ` Po Liu 2016-07-04 8:44 ` Dongdong Liu 2016-07-04 8:44 ` Dongdong Liu 2016-07-04 8:44 ` Dongdong Liu 2016-07-05 3:03 ` Po Liu 2016-07-05 3:03 ` Po Liu 2016-07-05 3:03 ` Po Liu 2016-07-05 3:03 ` Po Liu 2016-07-06 8:38 ` Dongdong Liu 2016-07-06 8:38 ` Dongdong Liu 2016-07-06 8:38 ` Dongdong Liu 2016-07-06 8:38 ` Dongdong Liu 2016-07-29 22:41 ` Bjorn Helgaas 2016-07-29 22:41 ` Bjorn Helgaas 2016-07-29 22:41 ` Bjorn Helgaas 2016-07-29 22:41 ` Bjorn Helgaas 2016-08-22 10:09 ` Po Liu 2016-08-22 10:09 ` Po Liu 2016-08-22 10:09 ` Po Liu 2016-08-22 10:09 ` Po Liu 2016-09-20 20:47 ` Bjorn Helgaas 2016-09-20 20:47 ` Bjorn Helgaas 2016-09-20 20:47 ` Bjorn Helgaas 2016-09-21 6:51 ` Po Liu 2016-09-21 6:51 ` Po Liu 2016-09-21 6:51 ` Po Liu 2016-09-21 6:51 ` Po Liu 2016-09-21 21:53 ` Bjorn Helgaas 2016-09-21 21:53 ` Bjorn Helgaas 2016-09-21 21:53 ` Bjorn Helgaas 2016-09-21 21:53 ` Bjorn Helgaas 2016-08-31 6:37 ` [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts Po Liu 2016-08-31 6:37 ` Po Liu 2016-08-31 6:37 ` Po Liu 2016-08-31 6:37 ` [PATCH v4 2/2] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode Po Liu 2016-08-31 6:37 ` Po Liu 2016-08-31 6:37 ` Po Liu 2016-09-02 15:17 ` Rob Herring 2016-09-02 15:17 ` Rob Herring 2016-09-02 15:17 ` Rob Herring 2016-09-05 6:05 ` Po Liu 2016-09-05 6:05 ` Po Liu 2016-09-05 6:05 ` Po Liu 2016-09-05 6:05 ` Po Liu 2016-09-13 4:40 ` [PATCH v5 1/3] arm/dts: add pcie aer interrupt-name property in the dts Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` [PATCH v5 2/3] arm64/dts: " Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` [PATCH v5 3/3] pci:aer: add support aer interrupt with none MSI/MSI-X/INTx mode Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-13 4:40 ` Po Liu 2016-09-18 0:52 ` Shawn Guo 2016-09-18 0:52 ` Shawn Guo 2016-09-18 0:52 ` Shawn Guo 2016-09-18 3:37 ` Po Liu 2016-09-18 3:37 ` Po Liu 2016-09-18 3:37 ` Po Liu 2016-09-18 3:37 ` Po Liu 2016-09-20 12:39 ` Shawn Guo 2016-09-20 12:39 ` Shawn Guo 2016-09-20 12:39 ` Shawn Guo 2016-09-20 12:39 ` Shawn Guo 2016-09-21 6:54 ` Po Liu 2016-09-21 6:54 ` Po Liu 2016-09-21 6:54 ` Po Liu 2016-09-21 6:54 ` Po Liu 2016-09-30 22:13 ` Shawn Guo 2016-09-30 22:13 ` Shawn Guo 2016-09-30 22:13 ` Shawn Guo 2016-09-23 13:06 ` Rob Herring 2016-09-23 13:06 ` Rob Herring 2016-09-23 13:06 ` Rob Herring 2016-09-26 8:25 ` Po Liu 2016-09-26 8:25 ` Po Liu 2016-09-26 8:25 ` Po Liu 2016-09-26 8:25 ` Po Liu 2016-09-21 22:37 ` Bjorn Helgaas 2016-09-21 22:37 ` Bjorn Helgaas 2016-09-21 22:37 ` Bjorn Helgaas 2016-09-21 22:37 ` Bjorn Helgaas 2016-09-22 2:53 ` Po Liu 2016-09-22 2:53 ` Po Liu 2016-09-22 2:53 ` Po Liu 2016-09-22 2:53 ` Po Liu 2016-09-30 9:11 ` [PATCH v6 1/3] arm/dts-ls1021: add pcie aer/pme interrupt-name property in the dts Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` [PATCH v6 2/3] arm64/dts-ls1043-ls2080: " Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` [PATCH v6 3/3] pci:add support aer/pme interrupts with none MSI/MSI-X/INTx mode Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-09-30 9:11 ` Po Liu 2016-10-08 20:49 ` Rob Herring 2016-10-08 20:49 ` Rob Herring 2016-10-08 20:49 ` Rob Herring 2016-10-09 2:47 ` Po Liu 2016-10-09 2:47 ` Po Liu 2016-10-09 2:47 ` Po Liu 2016-10-09 2:47 ` Po Liu 2016-09-05 2:25 ` [PATCH v4 1/2] nxp/dts: add pcie aer interrupt-name property in the dts Shawn Guo 2016-09-05 2:25 ` Shawn Guo 2016-09-12 22:13 ` Bjorn Helgaas 2016-09-12 22:13 ` Bjorn Helgaas 2016-09-12 22:13 ` Bjorn Helgaas 2016-09-13 3:02 ` Po Liu 2016-09-13 3:02 ` Po Liu 2016-09-13 3:02 ` Po Liu 2016-09-13 3:02 ` Po Liu 2016-06-16 0:36 ` [PATCH v3 " Shawn Guo 2016-06-16 0:36 ` Shawn Guo 2016-06-16 10:50 ` Po Liu 2016-06-16 10:50 ` Po Liu 2016-06-16 10:50 ` Po Liu 2016-06-16 10:50 ` Po Liu 2016-06-16 22:19 ` Rob Herring 2016-06-16 22:19 ` Rob Herring
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.