Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "PCI: armada8k: Add support for gpio controlled reset signal"

Revert commit 3d71746c42 ("PCI: armada8k: Add support for gpio controlled
reset signal").

That commit breaks boot on Macchiatobin board when a Mellanox NIC is
present in the PCIe slot.

It turns out that full reset cycle requires first comphy serdes
initialization. Reset signal toggle without comphy initialization makes
access to PCI configuration registers stall indefinitely. U-Boot toggles
the Macchiatobin PCIe reset line already at boot, after initializing the
comphy serdes.

So while commit 3d71746c42 ("PCI: armada8k: Add support for gpio controlled
reset signal") enables PCIe on platforms that U-Boot does not touch the
reset line (like Clearfog GT-8K), it breaks PCIe (and boot) on the
Macchiatobin board.

Revert commit 3d71746c42 ("PCI: armada8k: Add support for gpio controlled
reset signal") entirely to fix the Macchiatobin regression.

Reported-by: Sven Auhagen <sven.auhagen@voleatech.de>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

authored by

Baruch Siach and committed by
Bjorn Helgaas
f14bcc0a 432dd706

-16
-16
drivers/pci/controller/dwc/pcie-armada8k.c
··· 22 22 #include <linux/resource.h> 23 23 #include <linux/of_pci.h> 24 24 #include <linux/of_irq.h> 25 - #include <linux/gpio/consumer.h> 26 25 27 26 #include "pcie-designware.h" 28 27 ··· 29 30 struct dw_pcie *pci; 30 31 struct clk *clk; 31 32 struct clk *clk_reg; 32 - struct gpio_desc *reset_gpio; 33 33 }; 34 34 35 35 #define PCIE_VENDOR_REGS_OFFSET 0x8000 ··· 137 139 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 138 140 struct armada8k_pcie *pcie = to_armada8k_pcie(pci); 139 141 140 - if (pcie->reset_gpio) { 141 - /* assert and then deassert the reset signal */ 142 - gpiod_set_value_cansleep(pcie->reset_gpio, 1); 143 - msleep(100); 144 - gpiod_set_value_cansleep(pcie->reset_gpio, 0); 145 - } 146 142 dw_pcie_setup_rc(pp); 147 143 armada8k_pcie_establish_link(pcie); 148 144 ··· 246 254 if (IS_ERR(pci->dbi_base)) { 247 255 dev_err(dev, "couldn't remap regs base %p\n", base); 248 256 ret = PTR_ERR(pci->dbi_base); 249 - goto fail_clkreg; 250 - } 251 - 252 - /* Get reset gpio signal and hold asserted (logically high) */ 253 - pcie->reset_gpio = devm_gpiod_get_optional(dev, "reset", 254 - GPIOD_OUT_HIGH); 255 - if (IS_ERR(pcie->reset_gpio)) { 256 - ret = PTR_ERR(pcie->reset_gpio); 257 257 goto fail_clkreg; 258 258 } 259 259