PCI irq mapping fixes and cleanups
Subsystems (9)
v2 cover PCI irq mapping fixes and cleanups
This series cleans up the PCI irq mapping for all the ARM PCI host drivers, so they handle it in the way defined in the common PCI bindings.
I've worked in all the feedback I received on the first round of this series and left out the i.MX pcie driver changes, as these need more work includig breaking of the existing binding, which I'll send as a separate series.
Lucas Stach (6):
ARM: dts: tegra: add PCIe interrupt mapping properties
PCI: tegra: use new OF interrupt mapping when possible
PCI: rcar: use new OF interrupt mapping when possible
ARM: dts: exynos5440: fix PCIe interrupt mapping
ARM: dts: imx6: add PCIe interrupt mapping properties
PCI: designware: use new OF interrupt mapping when possible
.../devicetree/bindings/pci/nvidia,tegra20-pcie.txt | 8 ++++++++ arch/arm/boot/dts/exynos5440.dtsi | 6 ++++-- arch/arm/boot/dts/imx6qdl.dtsi | 8 ++++++++ arch/arm/boot/dts/tegra20.dtsi | 4 ++++ arch/arm/boot/dts/tegra30.dtsi | 4 ++++ drivers/pci/host/pci-rcar-gen2.c | 12 +++++++++--- drivers/pci/host/pci-tegra.c | 7 ++++++- drivers/pci/host/pcie-designware.c | 12 +++++++++--- 8 files changed, 52 insertions(+), 9 deletions(-)
Signature · 1 line
1.9.0
PATCH v2 1/6 ARM: dts: tegra: add PCIe interrupt mapping properties
Those are defined by the common PCI binding.
--- Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt | 8 ++++++++ arch/arm/boot/dts/tegra20.dtsi | 4 ++++ arch/arm/boot/dts/tegra30.dtsi | 4 ++++ 3 files changed, 16 insertions(+)
Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt +8 -0
@@ -42,6 +42,10 @@ Required properties: - 0xc2000000: prefetchable memory region Please refer to the standard PCI bus binding document for a more detailed explanation. +- #interrupt-cells: Size representation for interrupts (must be 1) +- interrupt-map-mask and interrupt-map: Standard PCI IRQ mapping properties + Please refer to the standard PCI bus binding document for a more detailed + explanation. - clocks: Must contain an entry for each entry in clock-names. See ../clocks/clock-bindings.txt for details. - clock-names: Must include the following entries:
@@ -86,6 +90,10 @@ SoC DTSI: 0 99 0x04>; /* MSI interrupt */ interrupt-names = "intr", "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0>; + interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; + bus-range = <0x00 0xff>; #address-cells = <3>; #size-cells = <2>;
arch/arm/boot/dts/tegra20.dtsi +4 -0
@@ -552,6 +552,10 @@ GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */ interrupt-names = "intr", "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0>; + interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; + bus-range = <0x00 0xff>; #address-cells = <3>; #size-cells = <2>;
arch/arm/boot/dts/tegra30.dtsi +4 -0
@@ -28,6 +28,10 @@ GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */ interrupt-names = "intr", "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0>; + interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; + bus-range = <0x00 0xff>; #address-cells = <3>; #size-cells = <2>;
Signature · 1 line
1.9.0
PATCH v2 1/6 ARM: dts: tegra: add PCIe interrupt mapping properties
Quoted 1 line · Lucas Stach
Those are defined by the common PCI binding.
It sounds like there's no dependency between pathces 1/6 and 2/6, so I should apply 1/6 to the Tegra tree, and Bjorn apply 2/6 to the PCI tree?
PATCH v2 1/6 ARM: dts: tegra: add PCIe interrupt mapping properties
Am Mittwoch, den 05.03.2014, 14:55 -0700 schrieb Stephen Warren:
Quoted 5 lines · Lucas Stach
Quoted 1 line
Those are defined by the common PCI binding.
It sounds like there's no dependency between pathces 1/6 and 2/6, so I should apply 1/6 to the Tegra tree, and Bjorn apply 2/6 to the PCI tree?
Right, that's why I split the patches between driver and DT changes. As this change should be fully backward compatible to old DTs there shouldn't be any harm.
Regards,
Lucas
Signature · 4 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-5076 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Stephen Warren
AppliedPATCH v2 1/6 ARM: dts: tegra: add PCIe interrupt mapping properties
In reply to Lucas StachQuoted 1 line · Lucas Stach
Those are defined by the common PCI binding.
I've applied this to Tegra's for-3.15/dt branch.
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
In reply to Lucas StachThis is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.
--- drivers/pci/host/pci-tegra.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/pci/host/pci-tegra.c +6 -1
@@ -639,10 +639,15 @@ static int tegra_pcie_setup(int nr, struct pci_sys_data *sys)static int tegra_pcie_map_irq (const struct pci_dev *pdev,u8 slot,u8 pin) {struct tegra_pcie *pcie =sys_to_pcie (pdev->bus->sysdata); +int irq;tegra_cpuidle_pcie_irqs_in_use (); -return pcie->irq; + irq =of_irq_parse_and_map_pci (pdev, slot, pin); +if (!irq) + irq = pcie->irq; + +return irq; }static void tegra_pcie_add_bus (struct pci_bus *bus)
Signature · 1 line
1.9.0
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 3 lines · Lucas Stach
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.
I tested both with and without patch 1/6, and the PCIe-based NIC on Beaver worked fine either way. Without patch 1/6, I do see:
pci 0000:00:01.0: of_irq_parse_pci() failed with rc=-22
... but that seems reasonable given that the DT that of_irq_parse_pci() parses is missing, and did correctly trigger the fallback path, so everything still worked.
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Am Donnerstag, den 06.03.2014, 10:36 -0700 schrieb Stephen Warren:
Quoted 7 lines · Lucas Stach
Quoted 3 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Tested-by Stephen Warren <[email protected]>
Quoted 8 lines
I tested both with and without patch 1/6, and the PCIe-based NIC on Beaver worked fine either way. Without patch 1/6, I do see:
pci 0000:00:01.0:
of_irq_parse_pci()failed with rc=-22... but that seems reasonable given that the DT that
of_irq_parse_pci()parses is missing, and did correctly trigger the fallback path, so everything still worked.
Yes, this should be normal. It spits this error for old DTs, but keeps doing the right thing. I'm not sure if we should downgrade this to info or dbg.
Regards,
Lucas
Signature · 4 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-5076 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 13 lines · Lucas Stach
Am Donnerstag, den 06.03.2014, 10:36 -0700 schrieb Stephen Warren:
Quoted 12 lines · Lucas Stach
Quoted 3 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Tested-by Stephen Warren <[email protected]>I tested both with and without patch 1/6, and the PCIe-based NIC on Beaver worked fine either way. Without patch 1/6, I do see:
pci 0000:00:01.0:
of_irq_parse_pci()failed with rc=-22
Quoted 7 lines
Quoted 3 lines
... but that seems reasonable given that the DT that
of_irq_parse_pci()parses is missing, and did correctly trigger the fallback path, so everything still worked.Yes, this should be normal. It spits this error for old DTs, but keeps doing the right thing. I'm not sure if we should downgrade this to info or dbg.
No, I think printing an error like this is appropriate: it is an incentive to update the dts files, but doesn't look too urgent as long as everything still works.
Arnd
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 18 lines · Arnd Bergmann
Quoted 17 lines · Lucas Stach
Am Donnerstag, den 06.03.2014, 10:36 -0700 schrieb Stephen Warren:
Quoted 15 lines · Lucas Stach
Quoted 3 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Tested-by Stephen Warren <[email protected]>I tested both with and without patch 1/6, and the PCIe-based NIC on Beaver worked fine either way. Without patch 1/6, I do see:
pci 0000:00:01.0:
of_irq_parse_pci()failed with rc=-22... but that seems reasonable given that the DT that
of_irq_parse_pci()parses is missing, and did correctly trigger the fallback path, so everything still worked.
Quoted 7 lines
Quoted 3 lines
Yes, this should be normal. It spits this error for old DTs, but keeps doing the right thing. I'm not sure if we should downgrade this to info or dbg.
No, I think printing an error like this is appropriate: it is an incentive to update the dts files, but doesn't look too urgent as long as everything still works.
+1
I agree with Arnd's opinion. I think that all dts files should be updated properly. This error message can be the good way to do it. Thank you.
Best regards,
Jingoo Han
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
In reply to Lucas StachHi Lucas/Tanmay,
Quoted 13 lines · Lucas Stach
Am Donnerstag, den 06.03.2014, 10:36 -0700 schrieb Stephen Warren:
Quoted 12 lines · Lucas Stach
Quoted 3 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Tested-by Stephen Warren <[email protected]>I tested both with and without patch 1/6, and the PCIe-based NIC on Beaver worked fine either way. Without patch 1/6, I do see:
pci 0000:00:01.0:
of_irq_parse_pci()failed with rc=-22
Quoted 7 lines
Quoted 3 lines
... but that seems reasonable given that the DT that
of_irq_parse_pci()parses is missing, and did correctly trigger the fallback path, so everything still worked.Yes, this should be normal. It spits this error for old DTs, but keeps doing the right thing. I'm not sure if we should downgrade this to info or dbg.
I see this error too on my setup (Xilinx PCIe Root Complex Driver),
https://lkml.org/lkml/2014/3/3/183
After digging into it, I see I need to override the API pcibios_get_phb_of_node()
to pass my device node. Is this the only possible way?
Quoted 1 line
From the discussion in this thread, I feel am missing something in the dt node.
Below is my dt node, please let me know if you see any issues.
+++++++++++++++++++++++
pcie{
reg = <XXXX>;
ranges = <YYYY>;
interrupts = <0 52 4>;
pcie_intc: interrupt-controller {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <1>;
} interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc 1>,
<0 0 0 2 &pcie_intc 2>,
<0 0 0 3 &pcie_intc 3>,
<0 0 0 4 &pcie_intc 4>;
};Thanks in advance,
Srikanth.
Quoted 13 lines
Regards,
Lucas
--Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-5076 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |--
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
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 5 lines · Srikanth Thokala
I see this error too on my setup (Xilinx PCIe Root Complex Driver),
https://lkml.org/lkml/2014/3/3/183After digging into it, I see I need to override the API
pcibios_get_phb_of_node()
No, as I pointed out before, the DT node comes in through pci_scan_root_bus:
+static struct pci_bus __init *xilinx_pcie_scan_bus(int nr,
+ struct pci_sys_data *sys)
+{
+ struct xilinx_pcie_port *port = sys_to_pcie(sys);
+ struct pci_bus *bus;
+
+ if (port) {
+ port->root_busno = sys->busnr;
+ bus = pci_scan_root_bus(NULL, sys->busnr, &xilinx_pcie_ops,
^^^^^^
You can't pass NULL here and have DT work properly.
See http://www.spinics.net/lists/arm-kernel/msg312392.html
Jason
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 10 lines · Jason Gunthorpe
Quoted 5 lines · Srikanth Thokala
I see this error too on my setup (Xilinx PCIe Root Complex Driver),
https://lkml.org/lkml/2014/3/3/183After digging into it, I see I need to override the API
pcibios_get_phb_of_node()No, as I pointed out before, the DT node comes in through
pci_scan_root_bus:
Thanks Jason for the advice, it is working.
Srikanth
Quoted 17 lines
(quoted diff) +9
-0+static struct pci_bus __init *xilinx_pcie_scan_bus(int nr, + struct pci_sys_data *sys) +{ + struct xilinx_pcie_port *port = sys_to_pcie(sys); + struct pci_bus *bus; + + if (port) { + port->root_busno = sys->busnr; + bus = pci_scan_root_bus(NULL, sys->busnr, &xilinx_pcie_ops, ^^^^^^You can't pass NULL here and have DT work properly.
See http://www.spinics.net/lists/arm-kernel/msg312392.html
Jason
Bjorn Helgaas
maintainerPATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
In reply to Lucas StachQuoted 6 lines · Lucas Stach
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Applied with Stephen's Tested-by to my pending/host-tegra branch. I'll rebase and rename it after v3.15-rc1, and I think we can squeeze it into v3.15 shortly after that. Thanks.
Quoted 32 lines
--- drivers/pci/host/pci-tegra.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)drivers/pci/host/pci-tegra.c +6
-1@@ -639,10 +639,15 @@ static int tegra_pcie_setup(int nr, struct pci_sys_data *sys)static int tegra_pcie_map_irq (const struct pci_dev *pdev,u8 slot,u8 pin) {struct tegra_pcie *pcie =sys_to_pcie (pdev->bus->sysdata); +int irq;tegra_cpuidle_pcie_irqs_in_use (); -return pcie->irq; + irq =of_irq_parse_and_map_pci (pdev, slot, pin); +if (!irq) + irq = pcie->irq; + +return irq; }static void tegra_pcie_add_bus (struct pci_bus *bus)Signature · 6 lines
1.9.0 -- 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
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Hi Bjorn,
Am Freitag, den 04.04.2014, 10:55 -0600 schrieb Bjorn Helgaas:
Quoted 5 lines · Lucas Stach
Quoted 4 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.
Quoted 7 lines
Quoted 2 lines
Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>Applied with Stephen's Tested-by to my pending/host-tegra branch. I'll rebase and rename it after v3.15-rc1, and I think we can squeeze it into v3.15 shortly after that. Thanks.
Are you still planning to push this into 3.15, or has this slipped to 3.16?
Regards,
Lucas
Signature · 2 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ |
Bjorn Helgaas
maintainerPATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 11 lines · Lucas Stach
Hi Bjorn,
Am Freitag, den 04.04.2014, 10:55 -0600 schrieb Bjorn Helgaas:
Quoted 8 lines · Lucas Stach
Quoted 6 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Quoted 7 lines
Quoted 4 lines
Applied with Stephen's Tested-by to my pending/host-tegra branch. I'll rebase and rename it after v3.15-rc1, and I think we can squeeze it into v3.15 shortly after that. Thanks.
Are you still planning to push this into 3.15, or has this slipped to 3.16?
Yes, I'm hoping to put them in v3.15. I assume these actually fix something, e.g., we need these changes to boot with new devicetrees, or something?
The changelogs don't make it clear that these are fixes, and I want to heed Linus' guidance: "Anyway, because -rc1 is already pretty darn big, I do *not* want to hear about 'sorry this missed the window, can I still sneak in'. Fixes only."
I should have applied these sooner to make the merge window; I apologize for that. Anyway, if you outline what these fix, I'll update the changelogs in my tree.
Bjorn
PATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Am Dienstag, den 15.04.2014, 12:30 -0600 schrieb Bjorn Helgaas:
Quoted 24 lines · Lucas Stach
Quoted 11 lines
Hi Bjorn,
Am Freitag, den 04.04.2014, 10:55 -0600 schrieb Bjorn Helgaas:
Quoted 8 lines · Lucas Stach
Quoted 6 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>Quoted 7 lines
Quoted 4 lines
Applied with Stephen's Tested-by to my pending/host-tegra branch. I'll rebase and rename it after v3.15-rc1, and I think we can squeeze it into v3.15 shortly after that. Thanks.
Are you still planning to push this into 3.15, or has this slipped to 3.16?
Yes, I'm hoping to put them in v3.15. I assume these actually fix something, e.g., we need these changes to boot with new devicetrees, or something?
Quoted 9 lines
The changelogs don't make it clear that these are fixes, and I want to heed Linus' guidance: "Anyway, because -rc1 is already pretty darn big, I do *not* want to hear about 'sorry this missed the window, can I still sneak in'. Fixes only."
I should have applied these sooner to make the merge window; I apologize for that. Anyway, if you outline what these fix, I'll update the changelogs in my tree.
Actually they are a bit on the fence.
The i.MX and thus the designware patch actually fixes wrong behavior, where all PCI legacy interrupts would be mapped to a single GIC interrupt, which would leave INT B,C,D nonfunctional on i.MX.
The others only make DT interrupt mapping functional for all drivers, so they would be useful if you need to remap interrupts across bridges or something. But apparently nobody had the need to to this on platforms other than i.MX until now, so those patches only fix a theoretical issue.
Regards,
Lucas
Signature · 2 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ |
Bjorn Helgaas
maintainerPATCH v2 2/6 PCI: tegra: use new OF interrupt mapping when possible
Quoted 40 lines · Lucas Stach
Am Dienstag, den 15.04.2014, 12:30 -0600 schrieb Bjorn Helgaas:
Quoted 24 lines · Lucas Stach
Quoted 11 lines
Hi Bjorn,
Am Freitag, den 04.04.2014, 10:55 -0600 schrieb Bjorn Helgaas:
Quoted 8 lines · Lucas Stach
Quoted 6 lines
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>Quoted 7 lines
Quoted 4 lines
Applied with Stephen's Tested-by to my pending/host-tegra branch. I'll rebase and rename it after v3.15-rc1, and I think we can squeeze it into v3.15 shortly after that. Thanks.
Are you still planning to push this into 3.15, or has this slipped to 3.16?
Yes, I'm hoping to put them in v3.15. I assume these actually fix something, e.g., we need these changes to boot with new devicetrees, or something?
Quoted 9 lines
The changelogs don't make it clear that these are fixes, and I want to heed Linus' guidance: "Anyway, because -rc1 is already pretty darn big, I do *not* want to hear about 'sorry this missed the window, can I still sneak in'. Fixes only."
I should have applied these sooner to make the merge window; I apologize for that. Anyway, if you outline what these fix, I'll update the changelogs in my tree.
Actually they are a bit on the fence.
The i.MX and thus the designware patch actually fixes wrong behavior, where all PCI legacy interrupts would be mapped to a single GIC interrupt, which would leave INT B,C,D nonfunctional on i.MX.
Quoted 5 lines
The others only make DT interrupt mapping functional for all drivers, so they would be useful if you need to remap interrupts across bridges or something. But apparently nobody had the need to to this on platforms other than i.MX until now, so those patches only fix a theoretical issue.
It sounds like the others should fix real problems; it's just that nobody has actually tested relevant configurations yet. I think that's fair game, so I updated the changelogs and put them in my for-linus branch for v3.15.
This includes the designware, rcar, and tegra patches.
Bjorn
PATCH v2 3/6 PCI: rcar: use new OF interrupt mapping when possible
In reply to Lucas StachThis is the recommended method of doing the IRQ mapping. Still fall back to the old method in order to not break the just submitted board files.
---
v2: pass in parent device to pci_common_init(), to
make DT parsing work.
--- drivers/pci/host/pci-rcar-gen2.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/pci/host/pci-rcar-gen2.c +9 -3
@@ -15,6 +15,7 @@#include <linux/io.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h>
@@ -160,8 +161,13 @@ static int __init rcar_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) {struct pci_sys_data *sys = dev->bus->sysdata;struct rcar_pci_priv *priv = sys->private_data; +int irq; + + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = priv->irq; -return priv->irq; +return irq; }/* PCI host controller setup */
@@ -249,6 +255,8 @@ static int __init rcar_pci_add_controller(struct rcar_pci_priv *priv)void **private_data;int count; +pci_common_init_dev (priv->dev, &rcar_hw_pci); +if (rcar_hw_pci.nr_controllers < rcar_pci_count) goto add_priv;
@@ -322,8 +330,6 @@ static int __init rcar_pci_init(void)int retval; retval =platform_driver_probe (&rcar_pci_driver, rcar_pci_probe); -if (!retval) -pci_common_init (&rcar_hw_pci);/* Private data pointer array is not needed any more */ kfree (rcar_hw_pci.private_data);
Signature · 1 line
1.9.0
PATCH v2 3/6 PCI: rcar: use new OF interrupt mapping when possible
Quoted 5 lines · Lucas Stach
This is the recommended method of doing the IRQ mapping. Still fall back to the old method in order to not break the just submitted board files.
Signed-off-by Lucas Stach <[email protected]>
Assuming that it does what it says on the wrapper:
Quoted 60 lines
---
v2: pass in parent device topci_common_init(), to
make DT parsing work.--- drivers/pci/host/pci-rcar-gen2.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)drivers/pci/host/pci-rcar-gen2.c +9
-3@@ -15,6 +15,7 @@#include <linux/io.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> @@ -160,8 +161,13 @@ static int __init rcar_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) {struct pci_sys_data *sys = dev->bus->sysdata;struct rcar_pci_priv *priv = sys->private_data; +int irq; + + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = priv->irq; -return priv->irq; +return irq; }/* PCI host controller setup */ @@ -249,6 +255,8 @@ static int __init rcar_pci_add_controller(struct rcar_pci_priv *priv)void **private_data;int count; +pci_common_init_dev (priv->dev, &rcar_hw_pci); +if (rcar_hw_pci.nr_controllers < rcar_pci_count) goto add_priv;@@ -322,8 +330,6 @@ static int __init rcar_pci_init(void)int retval; retval =platform_driver_probe (&rcar_pci_driver, rcar_pci_probe); -if (!retval) -pci_common_init (&rcar_hw_pci);/* Private data pointer array is not needed any more */ kfree (rcar_hw_pci.private_data);Signature · 6 lines
1.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas
maintainerPATCH v2 3/6 PCI: rcar: use new OF interrupt mapping when possible
In reply to Lucas StachQuoted 3 lines · Lucas Stach
This is the recommended method of doing the IRQ mapping. Still fall back to the old method in order to not break the just submitted board files.
Hi Lucas, can you rebase this to Linus' current tree? This doesn't apply anymore because of conflicts with 546cadda3575 ("PCI: rcar: Register each instance independently"). Thanks!
Quoted 56 lines
Signed-off-by Lucas Stach <[email protected]>---
v2: pass in parent device topci_common_init(), to
make DT parsing work.--- drivers/pci/host/pci-rcar-gen2.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)drivers/pci/host/pci-rcar-gen2.c +9
-3@@ -15,6 +15,7 @@#include <linux/io.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> @@ -160,8 +161,13 @@ static int __init rcar_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) {struct pci_sys_data *sys = dev->bus->sysdata;struct rcar_pci_priv *priv = sys->private_data; +int irq; + + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = priv->irq; -return priv->irq; +return irq; }/* PCI host controller setup */ @@ -249,6 +255,8 @@ static int __init rcar_pci_add_controller(struct rcar_pci_priv *priv)void **private_data;int count; +pci_common_init_dev (priv->dev, &rcar_hw_pci); +if (rcar_hw_pci.nr_controllers < rcar_pci_count) goto add_priv;@@ -322,8 +330,6 @@ static int __init rcar_pci_init(void)int retval; retval =platform_driver_probe (&rcar_pci_driver, rcar_pci_probe); -if (!retval) -pci_common_init (&rcar_hw_pci);/* Private data pointer array is not needed any more */ kfree (rcar_hw_pci.private_data);Signature · 1 line
1.9.0
PATCH v2 1/1 PCI: rcar: use new OF interrupt mapping when possible
This is the recommended method of doing the IRQ mapping. Still fall back to the old method in order to not break the just submitted board files.
---
v2: pass in parent device to pci_common_init(), to
make DT parsing work.
--- drivers/pci/host/pci-rcar-gen2.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/pci/host/pci-rcar-gen2.c +7 -1
@@ -15,6 +15,7 @@#include <linux/io.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h>
@@ -180,8 +181,13 @@ static int rcar_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) {struct pci_sys_data *sys = dev->bus->sysdata;struct rcar_pci_priv *priv = sys->private_data; +int irq; + + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = priv->irq; -return priv->irq; +return irq; }#ifdef CONFIG_PCI_DEBUG
Signature · 1 line
1.9.1
PATCH v2 4/6 ARM: dts: exynos5440: fix PCIe interrupt mapping
In reply to Lucas StachSo it actually works.
---
v2: fix build breakage by including arm-gic.h
--- arch/arm/boot/dts/exynos5440.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/arm/boot/dts/exynos5440.dtsi +4 -2
@@ -9,6 +9,8 @@ * published by the Free Software Foundation. */ +#include <dt-bindings/interrupt-controller/arm-gic.h> + #include "skeleton.dtsi" / {
@@ -274,7 +276,7 @@ 0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */ #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; - interrupt-map = <0x0 0 &gic 53>; + interrupt-map = <0 0 0 0 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; num-lanes = <4>; status = "disabled"; };
@@ -295,7 +297,7 @@ 0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */ #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; - interrupt-map = <0x0 0 &gic 56>; + interrupt-map = <0 0 0 0 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; num-lanes = <4>; status = "disabled"; };
Signature · 1 line
1.9.0
PATCH v2 4/6 ARM: dts: exynos5440: fix PCIe interrupt mapping
Quoted 5 lines · Lucas Stach
So it actually works.
Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
It works properly on Exynos platform.
Thank you.
Best regards,
Jingoo Han
Quoted 39 lines
---
v2: fix build breakage by includingarm-gic.h--- arch/arm/boot/dts/exynos5440.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)arch/arm/boot/dts/exynos5440.dtsi +4
-3@@ -9,6 +9,8 @@ * published by the Free Software Foundation. */ +#include <dt-bindings/interrupt-controller/arm-gic.h> + #include "skeleton.dtsi" / {@@ -274,7 +276,7 @@ 0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */ #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; - interrupt-map = <0x0 0 &gic 53>; + interrupt-map = <0 0 0 0 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; num-lanes = <4>; status = "disabled"; };@@ -295,7 +297,7 @@ 0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */ #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; - interrupt-map = <0x0 0 &gic 56>; + interrupt-map = <0 0 0 0 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; num-lanes = <4>; status = "disabled"; }; --1.9.0
PATCH v2 5/6 ARM: dts: imx6: add PCIe interrupt mapping properties
In reply to Lucas StachAs defined by the common PCI bindings.
---
v2: drop blank lines
--- arch/arm/boot/dts/imx6qdl.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+)
arch/arm/boot/dts/imx6qdl.dtsi +8 -0
@@ -10,6 +10,8 @@ * http://www.gnu.org/copyleft/gpl.html */ +#include <dt-bindings/interrupt-controller/arm-gic.h> + #include "skeleton.dtsi" / {
@@ -127,6 +129,12 @@ 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ num-lanes = <1>; interrupts = <0 123 0x04>; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>; clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi"; status = "disabled";
Signature · 1 line
1.9.0
Shawn Guo
AppliedPATCH v2 5/6 ARM: dts: imx6: add PCIe interrupt mapping properties
Quoted 4 lines · Lucas Stach
As defined by the common PCI bindings.
Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Applied, thanks.
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
In reply to Lucas StachThis is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.
---
v2: pass in parent dev to relevant functions, to make DT parsing
work (spotted by Tim Harvey <[email protected]>)
--- drivers/pci/host/pcie-designware.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/pci/host/pcie-designware.c +9 -3
@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/msi.h> #include <linux/of_address.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/pci_regs.h> #include <linux/types.h>
@@ -492,7 +493,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp) dw_pci.nr_controllers =1 ; dw_pci.private_data = (void **)&pp; -pci_common_init (&dw_pci); +pci_common_init_dev (pp->dev, &dw_pci);pci_assign_unassigned_resources ();#ifdef CONFIG_PCI_DOMAINS dw_pci.domain++;
@@ -725,7 +726,7 @@ static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys)if (pp) { pp->root_bus_nr = sys->busnr; - bus =pci_scan_root_bus (NULL , sys->busnr, &dw_pcie_ops, + bus =pci_scan_root_bus (pp->dev, sys->busnr, &dw_pcie_ops, sys, &sys->resources); }else { bus =NULL ;
@@ -738,8 +739,13 @@ static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys)static int dw_pcie_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {struct pcie_port *pp =sys_to_pcie (dev->bus->sysdata); +int irq; -return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq; + +return irq; }static void dw_pcie_add_bus (struct pci_bus *bus)
Signature · 1 line
1.9.0
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
drivers/pci/host/pcie-designware.c static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) · line 746
Quoted 4 lines · Lucas Stach
drivers/pci/host/pcie-designware.c +3
-1-return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq;
In light of the two bugs that Tim found, it might be wise to throw a 'dev_warn(FW_BUG "Missing DT interrupt mapping")' in the fall back path, so it doesn't continue to silently cover up errors on the OF/DT side..
Regards,
Jason
Bjorn Helgaas
maintainerPATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Quoted 10 lines · Jason Gunthorpe
drivers/pci/host/pcie-designware.c static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) · line 746
Quoted 4 lines · Lucas Stach
drivers/pci/host/pcie-designware.c +3
-1-return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq;In light of the two bugs that Tim found, it might be wise to throw a '
dev_warn(FW_BUG "Missing DT interrupt mapping")' in the fall back path, so it doesn't continue to silently cover up errors on the OF/DT side..
This sounds like a reasonable thing to do, but I didn't see a response to this comment. Should I merge it as-is, or do you want to add the message?
Bjorn Helgaas
maintainerPATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Quoted 12 lines · Bjorn Helgaas
Quoted 10 lines · Jason Gunthorpe
drivers/pci/host/pcie-designware.c static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) · line 746
Quoted 4 lines · Lucas Stach
drivers/pci/host/pcie-designware.c +3
-1-return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq;In light of the two bugs that Tim found, it might be wise to throw a '
dev_warn(FW_BUG "Missing DT interrupt mapping")' in the fall back path, so it doesn't continue to silently cover up errors on the OF/DT side..
Quoted 2 lines
This sounds like a reasonable thing to do, but I didn't see a response to this comment. Should I merge it as-is, or do you want to add the message?
Oh, and I suppose the same question applies to the other host drivers in this series (tegra, rcar)?
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Hi Bjorn,
Am Freitag, den 04.04.2014, 11:05 -0600 schrieb Bjorn Helgaas:
Quoted 13 lines · Bjorn Helgaas
Quoted 12 lines · Jason Gunthorpe
Quoted 10 lines · Lucas Stach
drivers/pci/host/pcie-designware.c static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) · line 746
Quoted 4 lines
drivers/pci/host/pcie-designware.c +3
-1-return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq;In light of the two bugs that Tim found, it might be wise to throw a '
dev_warn(FW_BUG "Missing DT interrupt mapping")' in the fall back path, so it doesn't continue to silently cover up errors on the OF/DT side..
Quoted 5 lines
Quoted 2 lines
This sounds like a reasonable thing to do, but I didn't see a response to this comment. Should I merge it as-is, or do you want to add the message?
Oh, and I suppose the same question applies to the other host drivers in this series (tegra, rcar)?
Please apply as-is. of_irq_parse_and_map_pci() already prints an error message if it isn't able to establish the mapping, thus right before we fall into the fallback path. So any the warning would be redundant.
Regards,
Lucas
Signature · 4 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-5076 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Quoted 17 lines · Lucas Stach
Am Freitag, den 04.04.2014, 11:05 -0600 schrieb Bjorn Helgaas:
Quoted 16 lines · Bjorn Helgaas
Quoted 14 lines · Jason Gunthorpe
Quoted 10 lines · Lucas Stach
drivers/pci/host/pcie-designware.c static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) · line 746
Quoted 4 lines
drivers/pci/host/pcie-designware.c +3
-1-return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq;In light of the two bugs that Tim found, it might be wise to throw a '
dev_warn(FW_BUG "Missing DT interrupt mapping")' in the fall back path, so it doesn't continue to silently cover up errors on the OF/DT side..This sounds like a reasonable thing to do, but I didn't see a response to this comment. Should I merge it as-is, or do you want to add the message?
Quoted 6 lines
Quoted 2 lines
Oh, and I suppose the same question applies to the other host drivers in this series (tegra, rcar)?
Please apply as-is.
of_irq_parse_and_map_pci()already prints an error message if it isn't able to establish the mapping, thus right before we fall into the fallback path. So any the warning would be redundant.
+1
I agree with Lucas Stach's opinion. of_irq_parse_and_map_pci() already prints an error as below. So, additional warning message of host controller looks superfluous.
ret = of_irq_parse_pci(dev, &oirq);
if (ret) {
dev_err(&dev->dev, "of_irq_parse_pci() failed with rc=%d\n", ret);
return 0; /* Proper return code 0 == NO_IRQ */Best regards,
Jingoo Han
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
In reply to Lucas StachQuoted 7 lines · Lucas Stach
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
(+cc Mohit KUMAR, Richard Zhu, Pratyush Anand, Marek Vasut,
Kishon Vijay Abraham I)
It works properly on Exynos platform.
Thank you.
Best regards,
Jingoo Han
Quoted 54 lines
---
v2: pass in parent dev to relevant functions, to make DT parsing
work (spotted by Tim Harvey <[email protected]>)--- drivers/pci/host/pcie-designware.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)drivers/pci/host/pcie-designware.c +9
-4@@ -17,6 +17,7 @@#include <linux/module.h> #include <linux/msi.h> #include <linux/of_address.h> +#include <linux/of_pci.h> #include <linux/pci.h> #include <linux/pci_regs.h> #include <linux/types.h> @@ -492,7 +493,7 @@ int __init dw_pcie_host_init(struct pcie_port *pp) dw_pci.nr_controllers =1 ; dw_pci.private_data = (void **)&pp; -pci_common_init (&dw_pci); +pci_common_init_dev (pp->dev, &dw_pci);pci_assign_unassigned_resources ();#ifdef CONFIG_PCI_DOMAINS dw_pci.domain++;@@ -725,7 +726,7 @@ static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys)if (pp) { pp->root_bus_nr = sys->busnr; - bus =pci_scan_root_bus (NULL , sys->busnr, &dw_pcie_ops, + bus =pci_scan_root_bus (pp->dev, sys->busnr, &dw_pcie_ops, sys, &sys->resources); }else { bus =NULL ;@@ -738,8 +739,13 @@ static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys)static int dw_pcie_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {struct pcie_port *pp =sys_to_pcie (dev->bus->sysdata); +int irq; -return pp->irq; + irq =of_irq_parse_and_map_pci (dev, slot, pin); +if (!irq) + irq = pp->irq; + +return irq; }static void dw_pcie_add_bus (struct pci_bus *bus) --1.9.0
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Quoted 8 lines · Jingoo Han
Quoted 6 lines · Lucas Stach
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Quoted 7 lines
(+cc Mohit KUMAR, Richard Zhu, Pratyush Anand, Marek Vasut,
Kishon Vijay Abraham I)Acked-by Jingoo Han <[email protected]>It works properly on Exynos platform.
Thank you.
Looks reasonable,
+CC Troy if he wants to test it on SL/N6X .
Best regards,
Marek Vasut
PATCH v2 6/6 PCI: designware: use new OF interrupt mapping when possible
Quoted 12 lines · Marek Vasut
Quoted 11 lines · Jingoo Han
Quoted 6 lines · Lucas Stach
This is the recommended method of doing the IRQ
mapping. For old devicetrees we fall back to the
previous practice.Signed-off-by Lucas Stach <[email protected]>Acked-by Arnd Bergmann <[email protected]>(+cc Mohit KUMAR, Richard Zhu, Pratyush Anand, Marek Vasut,
Kishon Vijay Abraham I)
Quoted 9 lines
Quoted 4 lines
Acked-by Jingoo Han <[email protected]>It works properly on Exynos platform.
Thank you.Looks reasonable,
Reviewed-by Marek Vasut <[email protected]>
I've tested this on the Gateworks Ventana products with P2P bridges and with the patch I just submitted here:
http://thread.gmane.org/gmane.linux.kernel.pci/30017
Tim
v2 cover PCI irq mapping fixes and cleanups
In reply to Lucas StachFriendly ping.
Bjorn could you please pick the patches labeled "PCI: ..." up? Both the Tegra and i.MX dts changes are already queued up for 3.15 and I think all patches gathered enough acks and tested-bys for this to be low risk.
Regards,
Lucas
Am Mittwoch, den 05.03.2014, 14:25 +0100 schrieb Lucas Stach:
Quoted 28 lines
This series cleans up the PCI irq mapping for all the ARM PCI host drivers, so they handle it in the way defined in the common PCI bindings.
I've worked in all the feedback I received on the first round of this series and left out the i.MX pcie driver changes, as these need more work includig breaking of the existing binding, which I'll send as a separate series.
Lucas Stach (6):
ARM: dts: tegra: add PCIe interrupt mapping properties
PCI: tegra: use new OF interrupt mapping when possible
PCI: rcar: use new OF interrupt mapping when possible
ARM: dts: exynos5440: fix PCIe interrupt mapping
ARM: dts: imx6: add PCIe interrupt mapping properties
PCI: designware: use new OF interrupt mapping when possible.../devicetree/bindings/pci/nvidia,tegra20-pcie.txt | 8 ++++++++ arch/arm/boot/dts/exynos5440.dtsi | 6 ++++-- arch/arm/boot/dts/imx6qdl.dtsi | 8 ++++++++ arch/arm/boot/dts/tegra20.dtsi | 4 ++++ arch/arm/boot/dts/tegra30.dtsi | 4 ++++ drivers/pci/host/pci-rcar-gen2.c | 12 +++++++++--- drivers/pci/host/pci-tegra.c | 7 ++++++- drivers/pci/host/pcie-designware.c | 12 +++++++++--- 8 files changed, 52 insertions(+), 9 deletions(-)
Signature · 4 lines
Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-5076 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |