diff for duplicates of <8520D5D51A55D047800579B094147198258D2C99@XAP-PVEXMBX01.xlnx.xilinx.com>
diff --git a/a/1.txt b/N1/1.txt
index e44940a..6818fb8 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -4,10 +4,12 @@
> >>>> *pcie)
> >>>>> }
> >>>>>
-> >>>>> pcie->legacy_irq_domain = irq_domain_add_linear(legacy_intc_node,
+> >>>>> pcie->legacy_irq_domain =3D irq_domain_add_linear(legacy_intc_n=
+ode,
> >>>>> - INTX_NUM,
> >>>>> + INTX_NUM + 1,
-> >>>>> &legacy_domain_ops,
+> >>>>> &legacy_domain_=
+ops,
> >>>>> pcie);
> >>>>
> >>>> This feels like the wrong thing to do. You have INTX_NUM irqs, so
@@ -43,20 +45,24 @@
> >>>
> >>> In kernel/irq/irqdomain.c function irq_domain_associate
> >>>
-> >>> if (WARN(hwirq >= domain->hwirq_max,
-> >>> "error: hwirq 0x%x is too large for %s\n", (int)hwirq, domain-
+> >>> if (WARN(hwirq >=3D domain->hwirq_max,
+> >>> "error: hwirq 0x%x is too large for %s\n", (int)hwir=
+q, domain-
> >name))
> >>> return -EINVAL;
> >>>
> >>> Here the hwirq and hwirq_max are equal to 4 without the above
> >>> condition
> >> (INTX_NUM + 1) due to which crash is coming.
-> >>> This is happening as the legacy interrupts are starting from 1 (INTA).
+> >>> This is happening as the legacy interrupts are starting from 1 (INTA)=
+.
> >>
-> >> I understood that. I'm still persisting in saying that you have the wrong fix.
+> >> I understood that. I'm still persisting in saying that you have the wr=
+ong fix.
> >>
> >> Your domain should always allocate many interrupts as you have
-> >> interrupt sources. These interrupts (hwirq) should be numbered from 0 to (n-
+> >> interrupt sources. These interrupts (hwirq) should be numbered from 0 =
+to (n-
> 1).
> >
> > Agreed, but here comes the problem the hwirq for legacy interrupts
@@ -64,22 +70,35 @@
> > PCIe specification for legacy interrupts. So these cannot be numbered
> > from 0. So when 0x4 (INTD) for a multi-function device comes the crash
> > occurs.
->
-> So who provides this hwirq? Who calls irq_domain_associate() with hwirq set to
+>=20
+> So who provides this hwirq? Who calls irq_domain_associate() with hwirq s=
+et to
> 4?
->
-PCIe subsystem invokes pcibios_add_device function in arch/arm64/kernel/pci.c for every pci device.
-The purpose of this function is to assign dev->irq using of_irq_parse_and_map_pci.
-of_irq_parse_and_map_pci invokes of_irq_parse_pci where it reads PCI_INTERRUPT_PIN from configuration space and saves it
+>=20
+PCIe subsystem invokes pcibios_add_device function in arch/arm64/kernel/pci=
+.c for every pci device.
+The purpose of this function is to assign dev->irq using of_irq_parse_and_m=
+ap_pci.
+of_irq_parse_and_map_pci invokes of_irq_parse_pci where it reads PCI_INTERR=
+UPT_PIN from configuration space and saves it
in parameter of struct of_phandle_args.
-This structure is passed to irq_create_of_mapping where it invokes irq_create_fwspec_mapping.
-irq_create_fwspec_mapping invokes irq_domain_translate and gets hwirq, here the above saved PCI_INTERRUPT_PIN value is assigned
-to hwirq (*hwirq = fwspec->param[0]).
-And then using this hwirq irq_create_mapping -> irq_domain_associate were invoked and mapping is created for virtual irq with this hwirq.
-So for any end point PCI_INTERRUPT_PIN value starts from 0x1 to 0x4 and so hwirq starts from 0x1 to 0x4.
+This structure is passed to irq_create_of_mapping where it invokes irq_crea=
+te_fwspec_mapping.
+irq_create_fwspec_mapping invokes irq_domain_translate and gets hwirq, here=
+ the above saved PCI_INTERRUPT_PIN value is assigned=20
+to hwirq (*hwirq =3D fwspec->param[0]).
+And then using this hwirq irq_create_mapping -> irq_domain_associate were i=
+nvoked and mapping is created for virtual irq with this hwirq.
+So for any end point PCI_INTERRUPT_PIN value starts from 0x1 to 0x4 and so =
+hwirq starts from 0x1 to 0x4.
-So the values are more generic w.r.t to protocol, that's why hwirq will range from 0x1 to 0x4.
-And then if you check pcie-altera.c they are doing this adding one in their handler and while creating legacy domain.
-
+So the values are more generic w.r.t to protocol, that's why hwirq will ran=
+ge from 0x1 to 0x4.=20
+And then if you check pcie-altera.c they are doing this adding one in their=
+ handler and while creating legacy domain.
+=20
Thanks & Regards,
-Bharat
\ No newline at end of file
+Bharat
+=20
+
+=20
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index bed741b..225b4f4 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -56,10 +56,12 @@
"> >>>> *pcie)\n",
"> >>>>> }\n",
"> >>>>>\n",
- "> >>>>> pcie->legacy_irq_domain = irq_domain_add_linear(legacy_intc_node,\n",
+ "> >>>>> pcie->legacy_irq_domain =3D irq_domain_add_linear(legacy_intc_n=\n",
+ "ode,\n",
"> >>>>> - INTX_NUM,\n",
"> >>>>> + INTX_NUM + 1,\n",
- "> >>>>> &legacy_domain_ops,\n",
+ "> >>>>> &legacy_domain_=\n",
+ "ops,\n",
"> >>>>> pcie);\n",
"> >>>>\n",
"> >>>> This feels like the wrong thing to do. You have INTX_NUM irqs, so\n",
@@ -95,20 +97,24 @@
"> >>>\n",
"> >>> In kernel/irq/irqdomain.c function irq_domain_associate\n",
"> >>>\n",
- "> >>> if (WARN(hwirq >= domain->hwirq_max,\n",
- "> >>> \"error: hwirq 0x%x is too large for %s\\n\", (int)hwirq, domain-\n",
+ "> >>> if (WARN(hwirq >=3D domain->hwirq_max,\n",
+ "> >>> \"error: hwirq 0x%x is too large for %s\\n\", (int)hwir=\n",
+ "q, domain-\n",
"> >name))\n",
"> >>> return -EINVAL;\n",
"> >>>\n",
"> >>> Here the hwirq and hwirq_max are equal to 4 without the above\n",
"> >>> condition\n",
"> >> (INTX_NUM + 1) due to which crash is coming.\n",
- "> >>> This is happening as the legacy interrupts are starting from 1 (INTA).\n",
+ "> >>> This is happening as the legacy interrupts are starting from 1 (INTA)=\n",
+ ".\n",
"> >>\n",
- "> >> I understood that. I'm still persisting in saying that you have the wrong fix.\n",
+ "> >> I understood that. I'm still persisting in saying that you have the wr=\n",
+ "ong fix.\n",
"> >>\n",
"> >> Your domain should always allocate many interrupts as you have\n",
- "> >> interrupt sources. These interrupts (hwirq) should be numbered from 0 to (n-\n",
+ "> >> interrupt sources. These interrupts (hwirq) should be numbered from 0 =\n",
+ "to (n-\n",
"> 1).\n",
"> >\n",
"> > Agreed, but here comes the problem the hwirq for legacy interrupts\n",
@@ -116,25 +122,38 @@
"> > PCIe specification for legacy interrupts. So these cannot be numbered\n",
"> > from 0. So when 0x4 (INTD) for a multi-function device comes the crash\n",
"> > occurs.\n",
- "> \n",
- "> So who provides this hwirq? Who calls irq_domain_associate() with hwirq set to\n",
+ ">=20\n",
+ "> So who provides this hwirq? Who calls irq_domain_associate() with hwirq s=\n",
+ "et to\n",
"> 4?\n",
- "> \n",
- "PCIe subsystem invokes pcibios_add_device function in arch/arm64/kernel/pci.c for every pci device.\n",
- "The purpose of this function is to assign dev->irq using of_irq_parse_and_map_pci.\n",
- "of_irq_parse_and_map_pci invokes of_irq_parse_pci where it reads PCI_INTERRUPT_PIN from configuration space and saves it\n",
+ ">=20\n",
+ "PCIe subsystem invokes pcibios_add_device function in arch/arm64/kernel/pci=\n",
+ ".c for every pci device.\n",
+ "The purpose of this function is to assign dev->irq using of_irq_parse_and_m=\n",
+ "ap_pci.\n",
+ "of_irq_parse_and_map_pci invokes of_irq_parse_pci where it reads PCI_INTERR=\n",
+ "UPT_PIN from configuration space and saves it\n",
"in parameter of struct of_phandle_args.\n",
- "This structure is passed to irq_create_of_mapping where it invokes irq_create_fwspec_mapping.\n",
- "irq_create_fwspec_mapping invokes irq_domain_translate and gets hwirq, here the above saved PCI_INTERRUPT_PIN value is assigned \n",
- "to hwirq (*hwirq = fwspec->param[0]).\n",
- "And then using this hwirq irq_create_mapping -> irq_domain_associate were invoked and mapping is created for virtual irq with this hwirq.\n",
- "So for any end point PCI_INTERRUPT_PIN value starts from 0x1 to 0x4 and so hwirq starts from 0x1 to 0x4.\n",
+ "This structure is passed to irq_create_of_mapping where it invokes irq_crea=\n",
+ "te_fwspec_mapping.\n",
+ "irq_create_fwspec_mapping invokes irq_domain_translate and gets hwirq, here=\n",
+ " the above saved PCI_INTERRUPT_PIN value is assigned=20\n",
+ "to hwirq (*hwirq =3D fwspec->param[0]).\n",
+ "And then using this hwirq irq_create_mapping -> irq_domain_associate were i=\n",
+ "nvoked and mapping is created for virtual irq with this hwirq.\n",
+ "So for any end point PCI_INTERRUPT_PIN value starts from 0x1 to 0x4 and so =\n",
+ "hwirq starts from 0x1 to 0x4.\n",
"\n",
- "So the values are more generic w.r.t to protocol, that's why hwirq will range from 0x1 to 0x4. \n",
- "And then if you check pcie-altera.c they are doing this adding one in their handler and while creating legacy domain.\n",
- " \n",
+ "So the values are more generic w.r.t to protocol, that's why hwirq will ran=\n",
+ "ge from 0x1 to 0x4.=20\n",
+ "And then if you check pcie-altera.c they are doing this adding one in their=\n",
+ " handler and while creating legacy domain.\n",
+ "=20\n",
"Thanks & Regards,\n",
- "Bharat"
+ "Bharat\n",
+ "=20\n",
+ "\n",
+ "=20"
]
-4ff916e10e0e53d83d1054c59a2a52b2cf2962fc15d96fd52ddeac3de7310763
+4657ee144b4011c37b3cd1acdcd2b13b7d865f93b43ebd4a09d3f265db6ea0ab
diff --git a/a/content_digest b/N2/content_digest
index bed741b..bebf1d1 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -20,28 +20,16 @@
"ref\00057C6B7F1.5000001\@arm.com\0"
]
[
- "From\0Bharat Kumar Gogada <bharat.kumar.gogada\@xilinx.com>\0"
+ "From\0bharat.kumar.gogada\@xilinx.com (Bharat Kumar Gogada)\0"
]
[
- "Subject\0RE: [PATCH 3/3] PCI: Xilinx NWL PCIe: Fix Error for multi function device for legacy interrupts.\0"
+ "Subject\0[PATCH 3/3] PCI: Xilinx NWL PCIe: Fix Error for multi function device for legacy interrupts.\0"
]
[
"Date\0Thu, 1 Sep 2016 05:19:55 +0000\0"
]
[
- "To\0Marc Zyngier <marc.zyngier\@arm.com>",
- " robh\@kernel.org <robh\@kernel.org>",
- " bhelgaas\@google.com <bhelgaas\@google.com>",
- " colin.king\@canonical.com <colin.king\@canonical.com>",
- " Soren Brinkmann <sorenb\@xilinx.com>",
- " Michal Simek <michals\@xilinx.com>",
- " arnd\@arndb.de <arnd\@arndb.de>\0"
-]
-[
- "Cc\0linux-arm-kernel\@lists.infradead.org <linux-arm-kernel\@lists.infradead.org>",
- " linux-pci\@vger.kernel.org <linux-pci\@vger.kernel.org>",
- " linux-kernel\@vger.kernel.org <linux-kernel\@vger.kernel.org>",
- " Ravikiran Gummaluri <rgummal\@xilinx.com>\0"
+ "To\0linux-arm-kernel\@lists.infradead.org\0"
]
[
"\0000:1\0"
@@ -137,4 +125,4 @@
"Bharat"
]
-4ff916e10e0e53d83d1054c59a2a52b2cf2962fc15d96fd52ddeac3de7310763
+84bee97a51a35b9a1b6e6ecb265f38b04489832fd3c1036055dba4b62c42e788
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.