]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 May 2020 12:58:09 +0000 (14:58 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 May 2020 12:58:09 +0000 (14:58 +0200)
added patches:
powerpc-pci-of-parse-unassigned-resources.patch

queue-4.14/powerpc-pci-of-parse-unassigned-resources.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/powerpc-pci-of-parse-unassigned-resources.patch b/queue-4.14/powerpc-pci-of-parse-unassigned-resources.patch
new file mode 100644 (file)
index 0000000..407afb1
--- /dev/null
@@ -0,0 +1,64 @@
+From dead1c845dbe97e0061dae2017eaf3bd8f8f06ee Mon Sep 17 00:00:00 2001
+From: Alexey Kardashevskiy <aik@ozlabs.ru>
+Date: Wed, 26 Jun 2019 12:37:46 +1000
+Subject: powerpc/pci/of: Parse unassigned resources
+
+From: Alexey Kardashevskiy <aik@ozlabs.ru>
+
+commit dead1c845dbe97e0061dae2017eaf3bd8f8f06ee upstream.
+
+The pseries platform uses the PCI_PROBE_DEVTREE method of PCI probing
+which reads "assigned-addresses" of every PCI device and initializes
+the device resources. However if the property is missing or zero sized,
+then there is no fallback of any kind and the PCI resources remain
+undiscovered, i.e. pdev->resource[] array remains empty.
+
+This adds a fallback which parses the "reg" property in pretty much same
+way except it marks resources as "unset" which later make Linux assign
+those resources proper addresses.
+
+This has an effect when:
+1. a hypervisor failed to assign any resource for a device;
+2. /chosen/linux,pci-probe-only=0 is in the DT so the system may try
+assigning a resource.
+Neither is likely to happen under PowerVM.
+
+Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Cc: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/kernel/pci_of_scan.c |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/arch/powerpc/kernel/pci_of_scan.c
++++ b/arch/powerpc/kernel/pci_of_scan.c
+@@ -82,10 +82,16 @@ static void of_pci_parse_addrs(struct de
+       const __be32 *addrs;
+       u32 i;
+       int proplen;
++      bool mark_unset = false;
+       addrs = of_get_property(node, "assigned-addresses", &proplen);
+-      if (!addrs)
+-              return;
++      if (!addrs || !proplen) {
++              addrs = of_get_property(node, "reg", &proplen);
++              if (!addrs || !proplen)
++                      return;
++              mark_unset = true;
++      }
++
+       pr_debug("    parse addresses (%d bytes) @ %p\n", proplen, addrs);
+       for (; proplen >= 20; proplen -= 20, addrs += 5) {
+               flags = pci_parse_of_flags(of_read_number(addrs, 1), 0);
+@@ -110,6 +116,8 @@ static void of_pci_parse_addrs(struct de
+                       continue;
+               }
+               res->flags = flags;
++              if (mark_unset)
++                      res->flags |= IORESOURCE_UNSET;
+               res->name = pci_name(dev);
+               region.start = base;
+               region.end = base + size - 1;
index 7e569cb550310bff978ff4c80880b4dcffdf6c84..ace00595c2705fcc3c31c55065488069c76ba296 100644 (file)
@@ -1 +1,2 @@
 vhost-vsock-kick-send_pkt-worker-once-device-is-started.patch
+powerpc-pci-of-parse-unassigned-resources.patch