Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1364668
| From | khalasa@piap.pl (Krzysztof Hałasa) |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity |
| Date | 2016-03-25 14:40 +0100 |
| Message-ID | <rgA82-2iN-7@gated-at.bofh.it> (permalink) |
| Organization | linux.* mail to news gateway |
A recent commit 5c5fb40de8f14391a1238db05cef88754faf9229 stated:
Follows: linus/v4.4-rc2
Precedes: linus/v4.5-rc1
PCI: imx6: Add support for active-low reset GPIO
We previously used of_get_named_gpio(), which ignores the OF flags cell, so
the reset GPIO defaulted to "active high." This doesn't work on the Toradex
Apalis SoM with Ixora base board, which has an active-low reset GPIO.
Use devm_gpiod_get_optional() instead so we pay attention to the active
high/low flag. This also adds support for GPIOs described via ACPI.
The (now replaced) code doesn't support the above:
@@ -287,10 +287,10 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
usleep_range(200, 500);
/* Some boards don't have PCIe reset GPIO. */
- if (gpio_is_valid(imx6_pcie->reset_gpio)) {
- gpio_set_value_cansleep(imx6_pcie->reset_gpio, 0);
+ if (imx6_pcie->reset_gpio) {
+ gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 0);
msleep(100);
- gpio_set_value_cansleep(imx6_pcie->reset_gpio, 1);
+ gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 1);
}
return 0;
If the reset_gpio setup code had ignored the flags (haven't checked
that), then clearly the resets were active-low (most reset lines are,
because they can be then driven with open-drain/collector output).
The gpiod_set_value*(0) activates reset, gpiod_set_value(1) -
deactivates.
Now we're told the setup code is now level-aware, but the above sequence
thus _deactivates_ reset for 100 ms, then _activates_ it again. It has
no chance to work, unless a board has a broken DTS file. A quick grep
shows that about half the IMX6 boards specify an active-low PCIe reset,
4 ask for active-high, and another 4 don't bother.
I wonder if all boards (except maybe that Toradex set) use an active-low
PCIe reset and are now broken. Perhaps Toradex uses active-high and thus
works.
I'm not fixing individual DTS files because I don't really know, though
perhaps we should change them all to "active-low", since it would work
the same as before the 5c5fb40de8f14391a1238db05cef88754faf9229 change.
Confirmed to fix Gateworks Laguna GW54xx.
Without the patch, the following happens (as expected):
PCI host bridge /soc/pcie@0x01000000 ranges:
No bus range found for /soc/pcie@0x01000000, using [bus 00-ff]
IO 0x01f80000..0x01f8ffff -> 0x00000000
MEM 0x01000000..0x01efffff -> 0x01000000
imx6q-pcie 1ffc000.pcie: phy link never came up
Signed-off-by: Krzysztof Hałasa <khalasa@piap.pl>
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index fe60096..f17fb02 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -288,9 +288,9 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
/* Some boards don't have PCIe reset GPIO. */
if (imx6_pcie->reset_gpio) {
- gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 0);
- msleep(100);
gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 1);
+ msleep(100);
+ gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 0);
}
return 0;
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
[PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-25 14:40 +0100
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-27 16:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-28 02:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-28 22:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-28 22:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-28 22:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-28 23:40 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 00:10 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-29 00:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-29 07:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-29 07:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-29 07:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Lucas Stach <l.stach@pengutronix.de> - 2016-03-29 11:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-29 12:40 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Lucas Stach <l.stach@pengutronix.de> - 2016-03-29 13:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-29 15:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 15:40 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-29 16:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 16:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-29 17:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 17:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-29 17:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 19:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-29 21:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Marc Zyngier <marc.zyngier@arm.com> - 2016-03-29 20:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Roberto Fichera <kernel@tekno-soft.it> - 2016-03-29 18:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Roberto Fichera <kernel@tekno-soft.it> - 2016-03-29 18:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 19:40 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Roberto Fichera <kernel@tekno-soft.it> - 2016-03-30 10:10 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Arnd Bergmann <arnd@arndb.de> - 2016-03-30 12:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Roberto Fichera <kernel@tekno-soft.it> - 2016-03-30 15:00 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-30 15:40 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Roberto Fichera <kernel@tekno-soft.it> - 2016-03-30 17:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-29 18:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-30 10:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Tim Harvey <tharvey@gateworks.com> - 2016-03-31 18:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-29 16:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity khalasa@piap.pl (Krzysztof Hałasa) - 2016-03-29 07:30 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Petr Štetiar <ynezz@true.cz> - 2016-03-30 14:20 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Fabio Estevam <festevam@gmail.com> - 2016-03-30 14:50 +0200
Re: [PATCH] i.MX6 PCIe: Fix imx6_pcie_deassert_core_reset() polarity Marcel Ziswiler <marcel.ziswiler@toradex.com> - 2016-03-30 18:20 +0200
csiph-web