aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch
diff options
context:
space:
mode:
authorDENG Qingfang <dengqf6@mail2.sysu.edu.cn>2020-03-04 20:46:10 +0800
committerHauke Mehrtens <hauke@hauke-m.de>2020-04-13 22:41:37 +0200
commit70193703a9ef796be74e3afe963d5c463b8cbccc (patch)
tree9111a658f481984275dd90f75682df1d3d47d333 /target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch
parent85ef69b20299c2c4f42d6bfbfaf807358ebe2078 (diff)
downloadupstream-70193703a9ef796be74e3afe963d5c463b8cbccc.tar.gz
upstream-70193703a9ef796be74e3afe963d5c463b8cbccc.tar.bz2
upstream-70193703a9ef796be74e3afe963d5c463b8cbccc.zip
mvebu: copy files and patches to 5.4
Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn>
Diffstat (limited to 'target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch')
-rw-r--r--target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch b/target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch
new file mode 100644
index 0000000000..2bbb647153
--- /dev/null
+++ b/target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch
@@ -0,0 +1,60 @@
+From 287b9df160b6159f8d385424904f8bac501280c1 Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@armlinux.org.uk>
+Date: Sat, 9 Jul 2016 10:58:16 +0100
+Subject: pci: mvebu: time out reset on link up
+
+If the port reports that the link is up while we are resetting, there's
+little point in waiting for the full duration.
+
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+---
+ drivers/pci/controller/pci-mvebu.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+--- a/drivers/pci/controller/pci-mvebu.c
++++ b/drivers/pci/controller/pci-mvebu.c
+@@ -1112,6 +1112,7 @@ static int mvebu_pcie_powerup(struct mve
+
+ if (port->reset_gpio) {
+ u32 reset_udelay = PCI_PM_D3COLD_WAIT * 1000;
++ unsigned int i;
+
+ of_property_read_u32(port->dn, "reset-delay-us",
+ &reset_udelay);
+@@ -1119,7 +1120,13 @@ static int mvebu_pcie_powerup(struct mve
+ udelay(100);
+
+ gpiod_set_value_cansleep(port->reset_gpio, 0);
+- msleep(reset_udelay / 1000);
++ for (i = 0; i < reset_udelay; i += 1000) {
++ if (mvebu_pcie_link_up(port))
++ break;
++ msleep(1);
++ }
++
++ printk("%s: reset completed in %dus\n", port->name, i);
+ }
+
+ return 0;
+@@ -1283,15 +1290,16 @@ static int mvebu_pcie_probe(struct platf
+ if (!child)
+ continue;
+
+- ret = mvebu_pcie_powerup(port);
+- if (ret < 0)
+- continue;
+-
+ port->base = mvebu_pcie_map_registers(pdev, child, port);
+ if (IS_ERR(port->base)) {
+ dev_err(dev, "%s: cannot map registers\n", port->name);
+ port->base = NULL;
+- mvebu_pcie_powerdown(port);
++ continue;
++ }
++
++ ret = mvebu_pcie_powerup(port);
++ if (ret < 0) {
++ port->base = NULL;
+ continue;
+ }
+