]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Jan 2018 16:37:11 +0000 (17:37 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Jan 2018 16:37:11 +0000 (17:37 +0100)
added patches:
arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.patch
dm-btree-fix-serious-bug-in-btree_split_beneath.patch
dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch
input-88pm860x-ts-fix-child-node-lookup.patch
input-twl4030-vibra-fix-error-bad-of_node_put-warning.patch
input-twl4030-vibra-fix-sibling-node-lookup.patch
input-twl6040-vibra-fix-child-node-lookup.patch
input-twl6040-vibra-fix-dt-node-memory-management.patch
phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch

queue-3.18/arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.patch [new file with mode: 0644]
queue-3.18/dm-btree-fix-serious-bug-in-btree_split_beneath.patch [new file with mode: 0644]
queue-3.18/dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch [new file with mode: 0644]
queue-3.18/input-88pm860x-ts-fix-child-node-lookup.patch [new file with mode: 0644]
queue-3.18/input-twl4030-vibra-fix-error-bad-of_node_put-warning.patch [new file with mode: 0644]
queue-3.18/input-twl4030-vibra-fix-sibling-node-lookup.patch [new file with mode: 0644]
queue-3.18/input-twl6040-vibra-fix-child-node-lookup.patch [new file with mode: 0644]
queue-3.18/input-twl6040-vibra-fix-dt-node-memory-management.patch [new file with mode: 0644]
queue-3.18/phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch [new file with mode: 0644]
queue-3.18/series

diff --git a/queue-3.18/arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.patch b/queue-3.18/arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.patch
new file mode 100644 (file)
index 0000000..5ad1956
--- /dev/null
@@ -0,0 +1,76 @@
+From 56aeb07c914a616ab84357d34f8414a69b140cdf Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Thu, 4 Jan 2018 17:53:12 +0100
+Subject: ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7
+
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+commit 56aeb07c914a616ab84357d34f8414a69b140cdf upstream.
+
+MPP7 is currently muxed as "gpio", but this function doesn't exist for
+MPP7, only "gpo" is available. This causes the following error:
+
+kirkwood-pinctrl f1010000.pin-controller: unsupported function gpio on pin mpp7
+pinctrl core: failed to register map default (6): invalid type given
+kirkwood-pinctrl f1010000.pin-controller: error claiming hogs: -22
+kirkwood-pinctrl f1010000.pin-controller: could not claim hogs: -22
+kirkwood-pinctrl f1010000.pin-controller: unable to register pinctrl driver
+kirkwood-pinctrl: probe of f1010000.pin-controller failed with error -22
+
+So the pinctrl driver is not probed, all device drivers (including the
+UART driver) do a -EPROBE_DEFER, and therefore the system doesn't
+really boot (well, it boots, but with no UART, and no devices that
+require pin-muxing).
+
+Back when the Device Tree file for this board was introduced, the
+definition was already wrong. The pinctrl driver also always described
+as "gpo" this function for MPP7. However, between Linux 4.10 and 4.11,
+a hog pin failing to be muxed was turned from a simple warning to a
+hard error that caused the entire pinctrl driver probe to bail
+out. This is probably the result of commit 6118714275f0a ("pinctrl:
+core: Fix pinctrl_register_and_init() with pinctrl_enable()").
+
+This commit fixes the Device Tree to use the proper "gpo" function for
+MPP7, which fixes the boot of OpenBlocks A7, which was broken since
+Linux 4.11.
+
+Fixes: f24b56cbcd9d ("ARM: kirkwood: add support for OpenBlocks A7 platform")
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/boot/dts/kirkwood-openblocks_a7.dts |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
++++ b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
+@@ -53,7 +53,8 @@
+               };
+               pinctrl: pin-controller@10000 {
+-                      pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header>;
++                      pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header
++                                   &pmx_gpio_header_gpo>;
+                       pinctrl-names = "default";
+                       pmx_uart0: pmx-uart0 {
+@@ -85,11 +86,16 @@
+                        * ground.
+                        */
+                       pmx_gpio_header: pmx-gpio-header {
+-                              marvell,pins = "mpp17", "mpp7", "mpp29", "mpp28",
++                              marvell,pins = "mpp17", "mpp29", "mpp28",
+                                              "mpp35", "mpp34", "mpp40";
+                               marvell,function = "gpio";
+                       };
++                      pmx_gpio_header_gpo: pxm-gpio-header-gpo {
++                              marvell,pins = "mpp7";
++                              marvell,function = "gpo";
++                      };
++
+                       pmx_gpio_init: pmx-init {
+                               marvell,pins = "mpp38";
+                               marvell,function = "gpio";
diff --git a/queue-3.18/dm-btree-fix-serious-bug-in-btree_split_beneath.patch b/queue-3.18/dm-btree-fix-serious-bug-in-btree_split_beneath.patch
new file mode 100644 (file)
index 0000000..c93d233
--- /dev/null
@@ -0,0 +1,72 @@
+From bc68d0a43560e950850fc69b58f0f8254b28f6d6 Mon Sep 17 00:00:00 2001
+From: Joe Thornber <thornber@redhat.com>
+Date: Wed, 20 Dec 2017 09:56:06 +0000
+Subject: dm btree: fix serious bug in btree_split_beneath()
+
+From: Joe Thornber <thornber@redhat.com>
+
+commit bc68d0a43560e950850fc69b58f0f8254b28f6d6 upstream.
+
+When inserting a new key/value pair into a btree we walk down the spine of
+btree nodes performing the following 2 operations:
+
+  i) space for a new entry
+  ii) adjusting the first key entry if the new key is lower than any in the node.
+
+If the _root_ node is full, the function btree_split_beneath() allocates 2 new
+nodes, and redistibutes the root nodes entries between them.  The root node is
+left with 2 entries corresponding to the 2 new nodes.
+
+btree_split_beneath() then adjusts the spine to point to one of the two new
+children.  This means the first key is never adjusted if the new key was lower,
+ie. operation (ii) gets missed out.  This can result in the new key being
+'lost' for a period; until another low valued key is inserted that will uncover
+it.
+
+This is a serious bug, and quite hard to make trigger in normal use.  A
+reproducing test case ("thin create devices-in-reverse-order") is
+available as part of the thin-provision-tools project:
+  https://github.com/jthornber/thin-provisioning-tools/blob/master/functional-tests/device-mapper/dm-tests.scm#L593
+
+Fix the issue by changing btree_split_beneath() so it no longer adjusts
+the spine.  Instead it unlocks both the new nodes, and lets the main
+loop in btree_insert_raw() relock the appropriate one and make any
+neccessary adjustments.
+
+Reported-by: Monty Pavel <monty_pavel@sina.com>
+Signed-off-by: Joe Thornber <thornber@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/persistent-data/dm-btree.c |   19 ++-----------------
+ 1 file changed, 2 insertions(+), 17 deletions(-)
+
+--- a/drivers/md/persistent-data/dm-btree.c
++++ b/drivers/md/persistent-data/dm-btree.c
+@@ -572,23 +572,8 @@ static int btree_split_beneath(struct sh
+       pn->keys[1] = rn->keys[0];
+       memcpy_disk(value_ptr(pn, 1), &val, sizeof(__le64));
+-      /*
+-       * rejig the spine.  This is ugly, since it knows too
+-       * much about the spine
+-       */
+-      if (s->nodes[0] != new_parent) {
+-              unlock_block(s->info, s->nodes[0]);
+-              s->nodes[0] = new_parent;
+-      }
+-      if (key < le64_to_cpu(rn->keys[0])) {
+-              unlock_block(s->info, right);
+-              s->nodes[1] = left;
+-      } else {
+-              unlock_block(s->info, left);
+-              s->nodes[1] = right;
+-      }
+-      s->count = 2;
+-
++      unlock_block(s->info, left);
++      unlock_block(s->info, right);
+       return 0;
+ }
diff --git a/queue-3.18/dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch b/queue-3.18/dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch
new file mode 100644 (file)
index 0000000..66ca19a
--- /dev/null
@@ -0,0 +1,54 @@
+From 490ae017f54e55bde382d45ea24bddfb6d1a0aaf Mon Sep 17 00:00:00 2001
+From: Dennis Yang <dennisyang@qnap.com>
+Date: Tue, 12 Dec 2017 18:21:40 +0800
+Subject: dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6
+
+From: Dennis Yang <dennisyang@qnap.com>
+
+commit 490ae017f54e55bde382d45ea24bddfb6d1a0aaf upstream.
+
+For btree removal, there is a corner case that a single thread
+could takes 6 locks which is more than THIN_MAX_CONCURRENT_LOCKS(5)
+and leads to deadlock.
+
+A btree removal might eventually call
+rebalance_children()->rebalance3() to rebalance entries of three
+neighbor child nodes when shadow_spine has already acquired two
+write locks. In rebalance3(), it tries to shadow and acquire the
+write locks of all three child nodes. However, shadowing a child
+node requires acquiring a read lock of the original child node and
+a write lock of the new block. Although the read lock will be
+released after block shadowing, shadowing the third child node
+in rebalance3() could still take the sixth lock.
+(2 write locks for shadow_spine +
+ 2 write locks for the first two child nodes's shadow +
+ 1 write lock for the last child node's shadow +
+ 1 read lock for the last child node)
+
+Signed-off-by: Dennis Yang <dennisyang@qnap.com>
+Acked-by: Joe Thornber <thornber@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/dm-thin-metadata.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/dm-thin-metadata.c
++++ b/drivers/md/dm-thin-metadata.c
+@@ -81,10 +81,14 @@
+ #define SECTOR_TO_BLOCK_SHIFT 3
+ /*
++ * For btree insert:
+  *  3 for btree insert +
+  *  2 for btree lookup used within space map
++ * For btree remove:
++ *  2 for shadow spine +
++ *  4 for rebalance 3 child node
+  */
+-#define THIN_MAX_CONCURRENT_LOCKS 5
++#define THIN_MAX_CONCURRENT_LOCKS 6
+ /* This should be plenty */
+ #define SPACE_MAP_ROOT_SIZE 128
diff --git a/queue-3.18/input-88pm860x-ts-fix-child-node-lookup.patch b/queue-3.18/input-88pm860x-ts-fix-child-node-lookup.patch
new file mode 100644 (file)
index 0000000..859c424
--- /dev/null
@@ -0,0 +1,72 @@
+From 906bf7daa0618d0ef39f4872ca42218c29a3631f Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Mon, 8 Jan 2018 17:20:18 -0800
+Subject: Input: 88pm860x-ts - fix child-node lookup
+
+From: Johan Hovold <johan@kernel.org>
+
+commit 906bf7daa0618d0ef39f4872ca42218c29a3631f upstream.
+
+Fix child node-lookup during probe, which ended up searching the whole
+device tree depth-first starting at parent rather than just matching on
+its children.
+
+To make things worse, the parent node was prematurely freed, while the
+child node was leaked.
+
+Fixes: 2e57d56747e6 ("mfd: 88pm860x: Device tree support")
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/touchscreen/88pm860x-ts.c |   16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+--- a/drivers/input/touchscreen/88pm860x-ts.c
++++ b/drivers/input/touchscreen/88pm860x-ts.c
+@@ -126,7 +126,7 @@ static int pm860x_touch_dt_init(struct p
+       int data, n, ret;
+       if (!np)
+               return -ENODEV;
+-      np = of_find_node_by_name(np, "touch");
++      np = of_get_child_by_name(np, "touch");
+       if (!np) {
+               dev_err(&pdev->dev, "Can't find touch node\n");
+               return -EINVAL;
+@@ -144,13 +144,13 @@ static int pm860x_touch_dt_init(struct p
+       if (data) {
+               ret = pm860x_reg_write(i2c, PM8607_GPADC_MISC1, data);
+               if (ret < 0)
+-                      return -EINVAL;
++                      goto err_put_node;
+       }
+       /* set tsi prebias time */
+       if (!of_property_read_u32(np, "marvell,88pm860x-tsi-prebias", &data)) {
+               ret = pm860x_reg_write(i2c, PM8607_TSI_PREBIAS, data);
+               if (ret < 0)
+-                      return -EINVAL;
++                      goto err_put_node;
+       }
+       /* set prebias & prechg time of pen detect */
+       data = 0;
+@@ -161,10 +161,18 @@ static int pm860x_touch_dt_init(struct p
+       if (data) {
+               ret = pm860x_reg_write(i2c, PM8607_PD_PREBIAS, data);
+               if (ret < 0)
+-                      return -EINVAL;
++                      goto err_put_node;
+       }
+       of_property_read_u32(np, "marvell,88pm860x-resistor-X", res_x);
++
++      of_node_put(np);
++
+       return 0;
++
++err_put_node:
++      of_node_put(np);
++
++      return -EINVAL;
+ }
+ #else
+ #define pm860x_touch_dt_init(x, y, z) (-1)
diff --git a/queue-3.18/input-twl4030-vibra-fix-error-bad-of_node_put-warning.patch b/queue-3.18/input-twl4030-vibra-fix-error-bad-of_node_put-warning.patch
new file mode 100644 (file)
index 0000000..8f5d725
--- /dev/null
@@ -0,0 +1,53 @@
+From e661d0a04462dd98667f8947141bd8defab5b34a Mon Sep 17 00:00:00 2001
+From: Marek Belisko <marek@goldelico.com>
+Date: Wed, 29 Jul 2015 14:02:19 -0700
+Subject: Input: twl4030-vibra - fix ERROR: Bad of_node_put() warning
+
+From: Marek Belisko <marek@goldelico.com>
+
+commit e661d0a04462dd98667f8947141bd8defab5b34a upstream.
+
+Fix following:
+[    8.862274] ERROR: Bad of_node_put() on /ocp/i2c@48070000/twl@48/audio
+[    8.869293] CPU: 0 PID: 1003 Comm: modprobe Not tainted 4.2.0-rc2-letux+ #1175
+[    8.876922] Hardware name: Generic OMAP36xx (Flattened Device Tree)
+[    8.883514] [<c00159e0>] (unwind_backtrace) from [<c0012488>] (show_stack+0x10/0x14)
+[    8.891693] [<c0012488>] (show_stack) from [<c05cb810>] (dump_stack+0x78/0x94)
+[    8.899322] [<c05cb810>] (dump_stack) from [<c02cfd5c>] (kobject_release+0x68/0x7c)
+[    8.907409] [<c02cfd5c>] (kobject_release) from [<bf0040c4>] (twl4030_vibra_probe+0x74/0x188 [twl4030_vibra])
+[    8.917877] [<bf0040c4>] (twl4030_vibra_probe [twl4030_vibra]) from [<c03816ac>] (platform_drv_probe+0x48/0x90)
+[    8.928497] [<c03816ac>] (platform_drv_probe) from [<c037feb4>] (really_probe+0xd4/0x238)
+[    8.937103] [<c037feb4>] (really_probe) from [<c0380160>] (driver_probe_device+0x30/0x48)
+[    8.945678] [<c0380160>] (driver_probe_device) from [<c03801e0>] (__driver_attach+0x68/0x8c)
+[    8.954589] [<c03801e0>] (__driver_attach) from [<c037ea60>] (bus_for_each_dev+0x50/0x84)
+[    8.963226] [<c037ea60>] (bus_for_each_dev) from [<c037f828>] (bus_add_driver+0xcc/0x1e4)
+[    8.971832] [<c037f828>] (bus_add_driver) from [<c0380b60>] (driver_register+0x9c/0xe0)
+[    8.980255] [<c0380b60>] (driver_register) from [<c00097e0>] (do_one_initcall+0x100/0x1b8)
+[    8.988983] [<c00097e0>] (do_one_initcall) from [<c00b8008>] (do_init_module+0x58/0x1c0)
+[    8.997497] [<c00b8008>] (do_init_module) from [<c00b8cac>] (SyS_init_module+0x54/0x64)
+[    9.005950] [<c00b8cac>] (SyS_init_module) from [<c000ed20>] (ret_fast_syscall+0x0/0x54)
+[    9.015838] input: twl4030:vibrator as /devices/platform/68000000.ocp/48070000.i2c/i2c-0/0-0048/48070000.i2c:twl@48:audio/input/input2
+
+node passed to of_find_node_by_name is put inside that function and new node
+is returned if found. Free returned node not already freed node.
+
+Signed-off-by: Marek Belisko <marek@goldelico.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/misc/twl4030-vibra.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/input/misc/twl4030-vibra.c
++++ b/drivers/input/misc/twl4030-vibra.c
+@@ -185,7 +185,8 @@ static bool twl4030_vibra_check_coexist(
+       if (pdata && pdata->coexist)
+               return true;
+-      if (of_find_node_by_name(node, "codec")) {
++      node = of_find_node_by_name(node, "codec");
++      if (node) {
+               of_node_put(node);
+               return true;
+       }
diff --git a/queue-3.18/input-twl4030-vibra-fix-sibling-node-lookup.patch b/queue-3.18/input-twl4030-vibra-fix-sibling-node-lookup.patch
new file mode 100644 (file)
index 0000000..e3ceea1
--- /dev/null
@@ -0,0 +1,43 @@
+From 5b189201993ab03001a398de731045bfea90c689 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Mon, 8 Jan 2018 17:15:06 -0800
+Subject: Input: twl4030-vibra - fix sibling-node lookup
+
+From: Johan Hovold <johan@kernel.org>
+
+commit 5b189201993ab03001a398de731045bfea90c689 upstream.
+
+A helper purported to look up a child node based on its name was using
+the wrong of-helper and ended up prematurely freeing the parent of-node
+while searching the whole device tree depth-first starting at the parent
+node.
+
+Fixes: 64b9e4d803b1 ("input: twl4030-vibra: Support for DT booted kernel")
+Fixes: e661d0a04462 ("Input: twl4030-vibra - fix ERROR: Bad of_node_put() warning")
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/misc/twl4030-vibra.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/input/misc/twl4030-vibra.c
++++ b/drivers/input/misc/twl4030-vibra.c
+@@ -180,12 +180,14 @@ static SIMPLE_DEV_PM_OPS(twl4030_vibra_p
+                        twl4030_vibra_suspend, twl4030_vibra_resume);
+ static bool twl4030_vibra_check_coexist(struct twl4030_vibra_data *pdata,
+-                            struct device_node *node)
++                            struct device_node *parent)
+ {
++      struct device_node *node;
++
+       if (pdata && pdata->coexist)
+               return true;
+-      node = of_find_node_by_name(node, "codec");
++      node = of_get_child_by_name(parent, "codec");
+       if (node) {
+               of_node_put(node);
+               return true;
diff --git a/queue-3.18/input-twl6040-vibra-fix-child-node-lookup.patch b/queue-3.18/input-twl6040-vibra-fix-child-node-lookup.patch
new file mode 100644 (file)
index 0000000..b1056a5
--- /dev/null
@@ -0,0 +1,42 @@
+From dcaf12a8b0bbdbfcfa2be8dff2c4948d9844b4ad Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Mon, 8 Jan 2018 17:17:48 -0800
+Subject: Input: twl6040-vibra - fix child-node lookup
+
+From: Johan Hovold <johan@kernel.org>
+
+commit dcaf12a8b0bbdbfcfa2be8dff2c4948d9844b4ad upstream.
+
+Fix child-node lookup during probe, which ended up searching the whole
+device tree depth-first starting at parent rather than just matching on
+its children.
+
+Later sanity checks on node properties (which would likely be missing)
+should prevent this from causing much trouble however, especially as the
+original premature free of the parent node has already been fixed
+separately (but that "fix" was apparently never backported to stable).
+
+Fixes: e7ec014a47e4 ("Input: twl6040-vibra - update for device tree support")
+Fixes: c52c545ead97 ("Input: twl6040-vibra - fix DT node memory management")
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
+Tested-by: H. Nikolaus Schaller <hns@goldelico.com> (on Pyra OMAP5 hardware)
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/misc/twl6040-vibra.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/input/misc/twl6040-vibra.c
++++ b/drivers/input/misc/twl6040-vibra.c
+@@ -264,8 +264,7 @@ static int twl6040_vibra_probe(struct pl
+       int vddvibr_uV = 0;
+       int error;
+-      of_node_get(twl6040_core_dev->of_node);
+-      twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node,
++      twl6040_core_node = of_get_child_by_name(twl6040_core_dev->of_node,
+                                                "vibra");
+       if (!twl6040_core_node) {
+               dev_err(&pdev->dev, "parent of node is missing?\n");
diff --git a/queue-3.18/input-twl6040-vibra-fix-dt-node-memory-management.patch b/queue-3.18/input-twl6040-vibra-fix-dt-node-memory-management.patch
new file mode 100644 (file)
index 0000000..ff73048
--- /dev/null
@@ -0,0 +1,37 @@
+From c52c545ead97fcc2f4f8ea38f1ae3c23211e09a8 Mon Sep 17 00:00:00 2001
+From: "H. Nikolaus Schaller" <hns@goldelico.com>
+Date: Mon, 9 May 2016 17:01:01 -0700
+Subject: Input: twl6040-vibra - fix DT node memory management
+
+From: H. Nikolaus Schaller <hns@goldelico.com>
+
+commit c52c545ead97fcc2f4f8ea38f1ae3c23211e09a8 upstream.
+
+commit e7ec014a47e4 ("Input: twl6040-vibra - update for device tree support")
+
+made the separate vibra DT node to a subnode of the twl6040.
+
+It now calls of_find_node_by_name() to locate the "vibra" subnode.
+This function has a side effect to call of_node_put on() for the twl6040
+parent node passed in as a parameter. This causes trouble later on.
+
+Solution: we must call of_node_get() before of_find_node_by_name()
+
+Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/misc/twl6040-vibra.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/input/misc/twl6040-vibra.c
++++ b/drivers/input/misc/twl6040-vibra.c
+@@ -264,6 +264,7 @@ static int twl6040_vibra_probe(struct pl
+       int vddvibr_uV = 0;
+       int error;
++      of_node_get(twl6040_core_dev->of_node);
+       twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node,
+                                                "vibra");
+       if (!twl6040_core_node) {
diff --git a/queue-3.18/phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch b/queue-3.18/phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch
new file mode 100644 (file)
index 0000000..12c93dc
--- /dev/null
@@ -0,0 +1,79 @@
+From b7563e2796f8b23c98afcfea7363194227fa089d Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Fri, 12 Jan 2018 11:12:05 +0100
+Subject: phy: work around 'phys' references to usb-nop-xceiv devices
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit b7563e2796f8b23c98afcfea7363194227fa089d upstream.
+
+Stefan Wahren reports a problem with a warning fix that was merged
+for v4.15: we had lots of device nodes with a 'phys' property pointing
+to a device node that is not compliant with the binding documented in
+Documentation/devicetree/bindings/phy/phy-bindings.txt
+
+This generally works because USB HCD drivers that support both the generic
+phy subsystem and the older usb-phy subsystem ignore most errors from
+phy_get() and related calls and then use the usb-phy driver instead.
+
+However, it turns out that making the usb-nop-xceiv device compatible with
+the generic-phy binding changes the phy_get() return code from -EINVAL to
+-EPROBE_DEFER, and the dwc2 usb controller driver for bcm2835 now returns
+-EPROBE_DEFER from its probe function rather than ignoring the failure,
+breaking all USB support on raspberry-pi when CONFIG_GENERIC_PHY is
+enabled. The same code is used in the dwc3 driver and the usb_add_hcd()
+function, so a reasonable assumption would be that many other platforms
+are affected as well.
+
+I have reviewed all the related patches and concluded that "usb-nop-xceiv"
+is the only USB phy that is affected by the change, and since it is by far
+the most commonly referenced phy, all the other USB phy drivers appear
+to be used in ways that are are either safe in DT (they don't use the
+'phys' property), or in the driver (they already ignore -EPROBE_DEFER
+from generic-phy when usb-phy is available).
+
+To work around the problem, this adds a special case to _of_phy_get()
+so we ignore any PHY node that is compatible with "usb-nop-xceiv",
+as we know that this can never load no matter how much we defer. In the
+future, we might implement a generic-phy driver for "usb-nop-xceiv"
+and then remove this workaround.
+
+Since we generally want older kernels to also want to work with the
+fixed devicetree files, it would be good to backport the patch into
+stable kernels as well (3.13+ are possibly affected), even though they
+don't contain any of the patches that may have caused regressions.
+
+Fixes: 014d6da6cb25 ARM: dts: bcm283x: Fix DTC warnings about missing phy-cells
+Fixes: c5bbf358b790 arm: dts: nspire: Add missing #phy-cells to usb-nop-xceiv
+Fixes: 44e5dced2ef6 arm: dts: marvell: Add missing #phy-cells to usb-nop-xceiv
+Fixes: f568f6f554b8 ARM: dts: omap: Add missing #phy-cells to usb-nop-xceiv
+Fixes: d745d5f277bf ARM: dts: imx51-zii-rdu1: Add missing #phy-cells to usb-nop-xceiv
+Fixes: 915fbe59cbf2 ARM: dts: imx: Add missing #phy-cells to usb-nop-xceiv
+Link: https://marc.info/?l=linux-usb&m=151518314314753&w=2
+Link: https://patchwork.kernel.org/patch/10158145/
+Cc: Felipe Balbi <balbi@kernel.org>
+Cc: Eric Anholt <eric@anholt.net>
+Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
+Acked-by: Rob Herring <robh@kernel.org>
+Tested-by: Hans Verkuil <hans.verkuil@cisco.com>
+Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/phy/phy-core.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -319,6 +319,10 @@ static struct phy *_of_phy_get(struct de
+       if (ret)
+               return ERR_PTR(-ENODEV);
++      /* This phy type handled by the usb-phy subsystem for now */
++      if (of_device_is_compatible(args.np, "usb-nop-xceiv"))
++              return ERR_PTR(-ENODEV);
++
+       mutex_lock(&phy_provider_mutex);
+       phy_provider = of_phy_provider_lookup(args.np);
+       if (IS_ERR(phy_provider) || !try_module_get(phy_provider->owner)) {
index 0e6eb2595752236e69f67b550fc37a0d6148ab3f..b8240b90dd42610eb8b02e31c4c23f63f63ba8d7 100644 (file)
@@ -6,3 +6,12 @@ alsa-hda-apply-the-existing-quirk-to-imac-14-1.patch
 af_key-fix-buffer-overread-in-verify_address_len.patch
 af_key-fix-buffer-overread-in-parse_exthdrs.patch
 pipe-avoid-round_pipe_size-nr_pages-overflow-on-32-bit.patch
+input-88pm860x-ts-fix-child-node-lookup.patch
+input-twl6040-vibra-fix-dt-node-memory-management.patch
+input-twl6040-vibra-fix-child-node-lookup.patch
+input-twl4030-vibra-fix-error-bad-of_node_put-warning.patch
+input-twl4030-vibra-fix-sibling-node-lookup.patch
+phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch
+arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.patch
+dm-btree-fix-serious-bug-in-btree_split_beneath.patch
+dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch