--- /dev/null
+From 923adb1646d5ba739d2a1e63ee20d60574d9da8e Mon Sep 17 00:00:00 2001
+From: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
+Date: Wed, 24 Feb 2016 18:27:51 +0100
+Subject: cxl: Fix PSL timebase synchronization detection
+
+From: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
+
+commit 923adb1646d5ba739d2a1e63ee20d60574d9da8e upstream.
+
+The PSL timebase synchronization is seemingly failing for
+configuration not including VIRT_CPU_ACCOUNTING_NATIVE. The driver
+shows the following trace in dmesg:
+PSL: Timebase sync: giving up!
+
+The PSL timebase register is actually syncing correctly, but the cxl
+driver is not detecting it. Fix is to use the proper timebase-to-time
+conversion.
+
+Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
+Acked-by: Michael Neuling <mikey@neuling.org>
+Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
+Acked-by: Ian Munsie <imunsie@au1.ibm.com>
+Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
+Reviewed-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/misc/cxl/pci.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/misc/cxl/pci.c
++++ b/drivers/misc/cxl/pci.c
+@@ -414,7 +414,7 @@ static int cxl_setup_psl_timebase(struct
+ delta = mftb() - psl_tb;
+ if (delta < 0)
+ delta = -delta;
+- } while (cputime_to_usecs(delta) > 16);
++ } while (tb_to_ns(delta) > 16000);
+
+ return 0;
+ }
--- /dev/null
+From 7314d22a2f5bd40468d57768be368c3d9b4bd726 Mon Sep 17 00:00:00 2001
+From: Wolfram Sang <wsa@the-dreams.de>
+Date: Sun, 21 Feb 2016 15:16:48 +0100
+Subject: i2c: brcmstb: allocate correct amount of memory for regmap
+
+From: Wolfram Sang <wsa@the-dreams.de>
+
+commit 7314d22a2f5bd40468d57768be368c3d9b4bd726 upstream.
+
+We want the size of the struct, not of a pointer to it. To be future
+proof, just dereference the pointer to get the desired type.
+
+Fixes: dd1aa2524bc5 ("i2c: brcmstb: Add Broadcom settop SoC i2c controller driver")
+Acked-by: Gregory Fong <gregory.0xf0@gmail.com>
+Acked-by: Florian Fainelli <f.fainelli@gmail.com>
+Reviewed-by: Kamal Dasu <kdasu.kdev@gmail.com>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/i2c/busses/i2c-brcmstb.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/i2c/busses/i2c-brcmstb.c
++++ b/drivers/i2c/busses/i2c-brcmstb.c
+@@ -562,8 +562,7 @@ static int brcmstb_i2c_probe(struct plat
+ if (!dev)
+ return -ENOMEM;
+
+- dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(struct bsc_regs *),
+- GFP_KERNEL);
++ dev->bsc_regmap = devm_kzalloc(&pdev->dev, sizeof(*dev->bsc_regmap), GFP_KERNEL);
+ if (!dev->bsc_regmap)
+ return -ENOMEM;
+
--- /dev/null
+From 56fa81fc9a5445938f3aa2e63d15ab63dc938ad6 Mon Sep 17 00:00:00 2001
+From: Govindraj Raja <govindraj.raja@imgtec.com>
+Date: Mon, 29 Feb 2016 11:41:20 +0000
+Subject: MIPS: scache: Fix scache init with invalid line size.
+
+From: Govindraj Raja <govindraj.raja@imgtec.com>
+
+commit 56fa81fc9a5445938f3aa2e63d15ab63dc938ad6 upstream.
+
+In current scache init cache line_size is determined from
+cpu config register, however if there there no scache
+then mips_sc_probe_cm3 function populates a invalid line_size of 2.
+
+The invalid line_size can cause a NULL pointer deference
+during r4k_dma_cache_inv as r4k_blast_scache is populated
+based on line_size. Scache line_size of 2 is invalid option in
+r4k_blast_scache_setup.
+
+This issue was faced during a MIPS I6400 based virtual platform bring up
+where scache was not available in virtual platform model.
+
+Signed-off-by: Govindraj Raja <Govindraj.Raja@imgtec.com>
+Fixes: 7d53e9c4cd21("MIPS: CM3: Add support for CM3 L2 cache.")
+Cc: Paul Burton <paul.burton@imgtec.com>
+Cc: James Hogan <james.hogan@imgtec.com>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: James Hartley <James.Hartley@imgtec.com>
+Cc: linux-mips@linux-mips.org
+Patchwork: https://patchwork.linux-mips.org/patch/12710/
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/mm/sc-mips.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+--- a/arch/mips/mm/sc-mips.c
++++ b/arch/mips/mm/sc-mips.c
+@@ -164,11 +164,13 @@ static int __init mips_sc_probe_cm3(void
+
+ sets = cfg & CM_GCR_L2_CONFIG_SET_SIZE_MSK;
+ sets >>= CM_GCR_L2_CONFIG_SET_SIZE_SHF;
+- c->scache.sets = 64 << sets;
++ if (sets)
++ c->scache.sets = 64 << sets;
+
+ line_sz = cfg & CM_GCR_L2_CONFIG_LINE_SIZE_MSK;
+ line_sz >>= CM_GCR_L2_CONFIG_LINE_SIZE_SHF;
+- c->scache.linesz = 2 << line_sz;
++ if (line_sz)
++ c->scache.linesz = 2 << line_sz;
+
+ assoc = cfg & CM_GCR_L2_CONFIG_ASSOC_MSK;
+ assoc >>= CM_GCR_L2_CONFIG_ASSOC_SHF;
+@@ -176,9 +178,12 @@ static int __init mips_sc_probe_cm3(void
+ c->scache.waysize = c->scache.sets * c->scache.linesz;
+ c->scache.waybit = __ffs(c->scache.waysize);
+
+- c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
++ if (c->scache.linesz) {
++ c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
++ return 1;
++ }
+
+- return 1;
++ return 0;
+ }
+
+ void __weak platform_early_l2_init(void)
--- /dev/null
+From e723e3f7f9591b79e8c56b3d7c5a204a9c571b55 Mon Sep 17 00:00:00 2001
+From: "Maciej W. Rozycki" <macro@imgtec.com>
+Date: Fri, 4 Mar 2016 01:42:49 +0000
+Subject: MIPS: traps: Fix SIGFPE information leak from `do_ov' and `do_trap_or_bp'
+
+From: Maciej W. Rozycki <macro@imgtec.com>
+
+commit e723e3f7f9591b79e8c56b3d7c5a204a9c571b55 upstream.
+
+Avoid sending a partially initialised `siginfo_t' structure along SIGFPE
+signals issued from `do_ov' and `do_trap_or_bp', leading to information
+leaking from the kernel stack.
+
+Signed-off-by: Maciej W. Rozycki <macro@imgtec.com>
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/kernel/traps.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/arch/mips/kernel/traps.c
++++ b/arch/mips/kernel/traps.c
+@@ -690,15 +690,15 @@ static int simulate_sync(struct pt_regs
+ asmlinkage void do_ov(struct pt_regs *regs)
+ {
+ enum ctx_state prev_state;
+- siginfo_t info;
++ siginfo_t info = {
++ .si_signo = SIGFPE,
++ .si_code = FPE_INTOVF,
++ .si_addr = (void __user *)regs->cp0_epc,
++ };
+
+ prev_state = exception_enter();
+ die_if_kernel("Integer overflow", regs);
+
+- info.si_code = FPE_INTOVF;
+- info.si_signo = SIGFPE;
+- info.si_errno = 0;
+- info.si_addr = (void __user *) regs->cp0_epc;
+ force_sig_info(SIGFPE, &info, current);
+ exception_exit(prev_state);
+ }
+@@ -874,7 +874,7 @@ out:
+ void do_trap_or_bp(struct pt_regs *regs, unsigned int code,
+ const char *str)
+ {
+- siginfo_t info;
++ siginfo_t info = { 0 };
+ char b[40];
+
+ #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP
+@@ -903,7 +903,6 @@ void do_trap_or_bp(struct pt_regs *regs,
+ else
+ info.si_code = FPE_INTOVF;
+ info.si_signo = SIGFPE;
+- info.si_errno = 0;
+ info.si_addr = (void __user *) regs->cp0_epc;
+ force_sig_info(SIGFPE, &info, current);
+ break;
alsa-hdsp-fix-wrong-boolean-ctl-value-accesses.patch
alsa-hdspm-fix-zero-division.patch
alsa-timer-fix-broken-compat-timer-user-status-ioctl.patch
+usb-chipidea-otg-change-workqueue-ci_otg-as-freezable.patch
+usb-cp210x-add-id-for-parrot-nmea-gps-flight-recorder.patch
+usb-qcserial-add-dell-wireless-5809e-gobi-4g-hspa-rev3.patch
+usb-qcserial-add-sierra-wireless-em74xx-device-id.patch
+usb-serial-option-add-support-for-telit-le922-pid-0x1045.patch
+usb-serial-option-add-support-for-quectel-uc20.patch
+mips-scache-fix-scache-init-with-invalid-line-size.patch
+mips-traps-fix-sigfpe-information-leak-from-do_ov-and-do_trap_or_bp.patch
+cxl-fix-psl-timebase-synchronization-detection.patch
+ubi-fix-out-of-bounds-write-in-volume-update-code.patch
+i2c-brcmstb-allocate-correct-amount-of-memory-for-regmap.patch
+thermal-cpu_cooling-fix-out-of-bounds-access-in-time_in_idle.patch
--- /dev/null
+From a53b8394ec3c67255928df6ee9cc99dd1cd452e3 Mon Sep 17 00:00:00 2001
+From: Javi Merino <javi.merino@arm.com>
+Date: Thu, 11 Feb 2016 12:00:51 +0000
+Subject: thermal: cpu_cooling: fix out of bounds access in time_in_idle
+
+From: Javi Merino <javi.merino@arm.com>
+
+commit a53b8394ec3c67255928df6ee9cc99dd1cd452e3 upstream.
+
+In __cpufreq_cooling_register() we allocate the arrays for time_in_idle
+and time_in_idle_timestamp to be as big as the number of cpus in this
+cpufreq device. However, in get_load() we access this array using the
+cpu number as index, which can result in an out of bound access.
+
+Index time_in_idle{,_timestamp} using the index in the cpufreq_device's
+allowed_cpus mask, as we do for the load_cpu array in
+cpufreq_get_requested_power()
+
+Reported-by: Nicolas Boichat <drinkcat@chromium.org>
+Cc: Amit Daniel Kachhap <amit.kachhap@gmail.com>
+Cc: Zhang Rui <rui.zhang@intel.com>
+Cc: Eduardo Valentin <edubezval@gmail.com>
+Tested-by: Nicolas Boichat <drinkcat@chromium.org>
+Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
+Signed-off-by: Javi Merino <javi.merino@arm.com>
+Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/thermal/cpu_cooling.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+--- a/drivers/thermal/cpu_cooling.c
++++ b/drivers/thermal/cpu_cooling.c
+@@ -377,26 +377,28 @@ static u32 cpu_power_to_freq(struct cpuf
+ * get_load() - get load for a cpu since last updated
+ * @cpufreq_device: &struct cpufreq_cooling_device for this cpu
+ * @cpu: cpu number
++ * @cpu_idx: index of the cpu in cpufreq_device->allowed_cpus
+ *
+ * Return: The average load of cpu @cpu in percentage since this
+ * function was last called.
+ */
+-static u32 get_load(struct cpufreq_cooling_device *cpufreq_device, int cpu)
++static u32 get_load(struct cpufreq_cooling_device *cpufreq_device, int cpu,
++ int cpu_idx)
+ {
+ u32 load;
+ u64 now, now_idle, delta_time, delta_idle;
+
+ now_idle = get_cpu_idle_time(cpu, &now, 0);
+- delta_idle = now_idle - cpufreq_device->time_in_idle[cpu];
+- delta_time = now - cpufreq_device->time_in_idle_timestamp[cpu];
++ delta_idle = now_idle - cpufreq_device->time_in_idle[cpu_idx];
++ delta_time = now - cpufreq_device->time_in_idle_timestamp[cpu_idx];
+
+ if (delta_time <= delta_idle)
+ load = 0;
+ else
+ load = div64_u64(100 * (delta_time - delta_idle), delta_time);
+
+- cpufreq_device->time_in_idle[cpu] = now_idle;
+- cpufreq_device->time_in_idle_timestamp[cpu] = now;
++ cpufreq_device->time_in_idle[cpu_idx] = now_idle;
++ cpufreq_device->time_in_idle_timestamp[cpu_idx] = now;
+
+ return load;
+ }
+@@ -598,7 +600,7 @@ static int cpufreq_get_requested_power(s
+ u32 load;
+
+ if (cpu_online(cpu))
+- load = get_load(cpufreq_device, cpu);
++ load = get_load(cpufreq_device, cpu, i);
+ else
+ load = 0;
+
--- /dev/null
+From e4f6daac20332448529b11f09388f1d55ef2084c Mon Sep 17 00:00:00 2001
+From: Richard Weinberger <richard@nod.at>
+Date: Sun, 21 Feb 2016 10:53:03 +0100
+Subject: ubi: Fix out of bounds write in volume update code
+
+From: Richard Weinberger <richard@nod.at>
+
+commit e4f6daac20332448529b11f09388f1d55ef2084c upstream.
+
+ubi_start_leb_change() allocates too few bytes.
+ubi_more_leb_change_data() will write up to req->upd_bytes +
+ubi->min_io_size bytes.
+
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mtd/ubi/upd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/mtd/ubi/upd.c
++++ b/drivers/mtd/ubi/upd.c
+@@ -193,7 +193,7 @@ int ubi_start_leb_change(struct ubi_devi
+ vol->changing_leb = 1;
+ vol->ch_lnum = req->lnum;
+
+- vol->upd_buf = vmalloc(req->bytes);
++ vol->upd_buf = vmalloc(ALIGN((int)req->bytes, ubi->min_io_size));
+ if (!vol->upd_buf)
+ return -ENOMEM;
+
--- /dev/null
+From d144dfea8af7108f613139623e63952ed7e69c0c Mon Sep 17 00:00:00 2001
+From: Peter Chen <peter.chen@nxp.com>
+Date: Wed, 24 Feb 2016 11:05:25 +0800
+Subject: usb: chipidea: otg: change workqueue ci_otg as freezable
+
+From: Peter Chen <peter.chen@nxp.com>
+
+commit d144dfea8af7108f613139623e63952ed7e69c0c upstream.
+
+If we use USB ID pin as wakeup source, and there is a USB block
+device on this USB OTG (ID) cable, the system will be deadlock
+after system resume.
+
+The root cause for this problem is: the workqueue ci_otg may try
+to remove hcd before the driver resume has finished, and hcd will
+disconnect the device on it, then, it will call device_release_driver,
+and holds the device lock "dev->mutex", but it is never unlocked since
+it waits workqueue writeback to run to flush the block information, but
+the workqueue writeback is freezable, it is not thawed before driver
+resume has finished.
+
+When the driver (device: sd 0:0:0:0:) resume goes to dpm_complete, it
+tries to get its device lock "dev->mutex", but it can't get it forever,
+then the deadlock occurs. Below call stacks show the situation.
+
+So, in order to fix this problem, we need to change workqueue ci_otg
+as freezable, then the work item in this workqueue will be run after
+driver's resume, this workqueue will not be blocked forever like above
+case since the workqueue writeback has been thawed too.
+
+Tested at: i.mx6qdl-sabresd and i.mx6sx-sdb.
+
+[ 555.178869] kworker/u2:13 D c07de74c 0 826 2 0x00000000
+[ 555.185310] Workqueue: ci_otg ci_otg_work
+[ 555.189353] Backtrace:
+[ 555.191849] [<c07de4fc>] (__schedule) from [<c07dec6c>] (schedule+0x48/0xa0)
+[ 555.198912] r10:ee471ba0 r9:00000000 r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4
+[ 555.206867] r4:ee470000
+[ 555.209453] [<c07dec24>] (schedule) from [<c07e2fc4>] (schedule_timeout+0x15c/0x1e0)
+[ 555.217212] r4:7fffffff r3:edc2b000
+[ 555.220862] [<c07e2e68>] (schedule_timeout) from [<c07df6c8>] (wait_for_common+0x94/0x144)
+[ 555.229140] r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4 r4:7fffffff
+[ 555.235980] [<c07df634>] (wait_for_common) from [<c07df790>] (wait_for_completion+0x18/0x1c)
+[ 555.244430] r10:00000001 r9:c0b5563c r8:c0042e48 r7:ef086000 r6:eea4372c r5:ef131b00
+[ 555.252383] r4:00000000
+[ 555.254970] [<c07df778>] (wait_for_completion) from [<c0043cb8>] (flush_work+0x19c/0x234)
+[ 555.263177] [<c0043b1c>] (flush_work) from [<c0043fac>] (flush_delayed_work+0x48/0x4c)
+[ 555.271106] r8:ed5b5000 r7:c0b38a3c r6:eea439cc r5:eea4372c r4:eea4372c
+[ 555.277958] [<c0043f64>] (flush_delayed_work) from [<c00eae18>] (bdi_unregister+0x84/0xec)
+[ 555.286236] r4:eea43520 r3:20000153
+[ 555.289885] [<c00ead94>] (bdi_unregister) from [<c02c2154>] (blk_cleanup_queue+0x180/0x29c)
+[ 555.298250] r5:eea43808 r4:eea43400
+[ 555.301909] [<c02c1fd4>] (blk_cleanup_queue) from [<c0417914>] (__scsi_remove_device+0x48/0xb8)
+[ 555.310623] r7:00000000 r6:20000153 r5:ededa950 r4:ededa800
+[ 555.316403] [<c04178cc>] (__scsi_remove_device) from [<c0415e90>] (scsi_forget_host+0x64/0x68)
+[ 555.325028] r5:ededa800 r4:ed5b5000
+[ 555.328689] [<c0415e2c>] (scsi_forget_host) from [<c0409828>] (scsi_remove_host+0x78/0x104)
+[ 555.337054] r5:ed5b5068 r4:ed5b5000
+[ 555.340709] [<c04097b0>] (scsi_remove_host) from [<c04cdfcc>] (usb_stor_disconnect+0x50/0xb4)
+[ 555.349247] r6:ed5b56e4 r5:ed5b5818 r4:ed5b5690 r3:00000008
+[ 555.355025] [<c04cdf7c>] (usb_stor_disconnect) from [<c04b3bc8>] (usb_unbind_interface+0x78/0x25c)
+[ 555.363997] r8:c13919b4 r7:edd3c000 r6:edd3c020 r5:ee551c68 r4:ee551c00 r3:c04cdf7c
+[ 555.371892] [<c04b3b50>] (usb_unbind_interface) from [<c03dc248>] (__device_release_driver+0x8c/0x118)
+[ 555.381213] r10:00000001 r9:edd90c00 r8:c13919b4 r7:ee551c68 r6:c0b546e0 r5:c0b5563c
+[ 555.389167] r4:edd3c020
+[ 555.391752] [<c03dc1bc>] (__device_release_driver) from [<c03dc2fc>] (device_release_driver+0x28/0x34)
+[ 555.401071] r5:edd3c020 r4:edd3c054
+[ 555.404721] [<c03dc2d4>] (device_release_driver) from [<c03db304>] (bus_remove_device+0xe0/0x110)
+[ 555.413607] r5:edd3c020 r4:ef17f04c
+[ 555.417253] [<c03db224>] (bus_remove_device) from [<c03d8128>] (device_del+0x114/0x21c)
+[ 555.425270] r6:edd3c028 r5:edd3c020 r4:ee551c00 r3:00000000
+[ 555.431045] [<c03d8014>] (device_del) from [<c04b1560>] (usb_disable_device+0xa4/0x1e8)
+[ 555.439061] r8:edd3c000 r7:eded8000 r6:00000000 r5:00000001 r4:ee551c00
+[ 555.445906] [<c04b14bc>] (usb_disable_device) from [<c04a8e54>] (usb_disconnect+0x74/0x224)
+[ 555.454271] r9:edd90c00 r8:ee551000 r7:ee551c68 r6:ee551c9c r5:ee551c00 r4:00000001
+[ 555.462156] [<c04a8de0>] (usb_disconnect) from [<c04a8fb8>] (usb_disconnect+0x1d8/0x224)
+[ 555.470259] r10:00000001 r9:edd90000 r8:ee471e2c r7:ee551468 r6:ee55149c r5:ee551400
+[ 555.478213] r4:00000001
+[ 555.480797] [<c04a8de0>] (usb_disconnect) from [<c04ae5ec>] (usb_remove_hcd+0xa0/0x1ac)
+[ 555.488813] r10:00000001 r9:ee471eb0 r8:00000000 r7:ef3d9500 r6:eded810c r5:eded80b0
+[ 555.496765] r4:eded8000
+[ 555.499351] [<c04ae54c>] (usb_remove_hcd) from [<c04d4158>] (host_stop+0x28/0x64)
+[ 555.506847] r6:eeb50010 r5:eded8000 r4:eeb51010
+[ 555.511563] [<c04d4130>] (host_stop) from [<c04d09b8>] (ci_otg_work+0xc4/0x124)
+[ 555.518885] r6:00000001 r5:eeb50010 r4:eeb502a0 r3:c04d4130
+[ 555.524665] [<c04d08f4>] (ci_otg_work) from [<c00454f0>] (process_one_work+0x194/0x420)
+[ 555.532682] r6:ef086000 r5:eeb502a0 r4:edc44480
+[ 555.537393] [<c004535c>] (process_one_work) from [<c00457b0>] (worker_thread+0x34/0x514)
+[ 555.545496] r10:edc44480 r9:ef086000 r8:c0b1a100 r7:ef086034 r6:00000088 r5:edc44498
+[ 555.553450] r4:ef086000
+[ 555.556032] [<c004577c>] (worker_thread) from [<c004bab4>] (kthread+0xdc/0xf8)
+[ 555.563268] r10:00000000 r9:00000000 r8:00000000 r7:c004577c r6:edc44480 r5:eddc15c0
+[ 555.571221] r4:00000000
+[ 555.573804] [<c004b9d8>] (kthread) from [<c000fef0>] (ret_from_fork+0x14/0x24)
+[ 555.581040] r7:00000000 r6:00000000 r5:c004b9d8 r4:eddc15c0
+
+[ 553.429383] sh D c07de74c 0 694 691 0x00000000
+[ 553.435801] Backtrace:
+[ 553.438295] [<c07de4fc>] (__schedule) from [<c07dec6c>] (schedule+0x48/0xa0)
+[ 553.445358] r10:edd3c054 r9:edd3c078 r8:edddbd50 r7:edcbbc00 r6:c1377c34 r5:60000153
+[ 553.453313] r4:eddda000
+[ 553.455896] [<c07dec24>] (schedule) from [<c07deff8>] (schedule_preempt_disabled+0x10/0x14)
+[ 553.464261] r4:edd3c058 r3:0000000a
+[ 553.467910] [<c07defe8>] (schedule_preempt_disabled) from [<c07e0bbc>] (mutex_lock_nested+0x1a0/0x3e8)
+[ 553.477254] [<c07e0a1c>] (mutex_lock_nested) from [<c03e927c>] (dpm_complete+0xc0/0x1b0)
+[ 553.485358] r10:00561408 r9:edd3c054 r8:c0b4863c r7:edddbd90 r6:c0b485d8 r5:edd3c020
+[ 553.493313] r4:edd3c0d0
+[ 553.495896] [<c03e91bc>] (dpm_complete) from [<c03e9388>] (dpm_resume_end+0x1c/0x20)
+[ 553.503652] r9:00000000 r8:c0b1a9d0 r7:c1334ec0 r6:c1334edc r5:00000003 r4:00000010
+[ 553.511544] [<c03e936c>] (dpm_resume_end) from [<c0079894>] (suspend_devices_and_enter+0x158/0x504)
+[ 553.520604] r4:00000000 r3:c1334efc
+[ 553.524250] [<c007973c>] (suspend_devices_and_enter) from [<c0079e74>] (pm_suspend+0x234/0x2cc)
+[ 553.532961] r10:00561408 r9:ed6b7300 r8:00000004 r7:c1334eec r6:00000000 r5:c1334ee8
+[ 553.540914] r4:00000003
+[ 553.543493] [<c0079c40>] (pm_suspend) from [<c0078a6c>] (state_store+0x6c/0xc0)
+
+[ 555.703684] 7 locks held by kworker/u2:13/826:
+[ 555.708140] #0: ("%s""ci_otg"){++++.+}, at: [<c0045484>] process_one_work+0x128/0x420
+[ 555.716277] #1: ((&ci->work)){+.+.+.}, at: [<c0045484>] process_one_work+0x128/0x420
+[ 555.724317] #2: (usb_bus_list_lock){+.+.+.}, at: [<c04ae5e4>] usb_remove_hcd+0x98/0x1ac
+[ 555.732626] #3: (&dev->mutex){......}, at: [<c04a8e28>] usb_disconnect+0x48/0x224
+[ 555.740403] #4: (&dev->mutex){......}, at: [<c04a8e28>] usb_disconnect+0x48/0x224
+[ 555.748179] #5: (&dev->mutex){......}, at: [<c03dc2f4>] device_release_driver+0x20/0x34
+[ 555.756487] #6: (&shost->scan_mutex){+.+.+.}, at: [<c04097d0>] scsi_remove_host+0x20/0x104
+
+Cc: Jun Li <jun.li@nxp.com>
+Signed-off-by: Peter Chen <peter.chen@nxp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/chipidea/otg.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/chipidea/otg.c
++++ b/drivers/usb/chipidea/otg.c
+@@ -158,7 +158,7 @@ static void ci_otg_work(struct work_stru
+ int ci_hdrc_otg_init(struct ci_hdrc *ci)
+ {
+ INIT_WORK(&ci->work, ci_otg_work);
+- ci->wq = create_singlethread_workqueue("ci_otg");
++ ci->wq = create_freezable_workqueue("ci_otg");
+ if (!ci->wq) {
+ dev_err(ci->dev, "can't create workqueue\n");
+ return -ENODEV;
--- /dev/null
+From 3c4c615d70c8cbdc8ba8c79ed702640930652a79 Mon Sep 17 00:00:00 2001
+From: Vittorio Alfieri <vittorio88@gmail.com>
+Date: Sun, 28 Feb 2016 14:40:24 +0100
+Subject: USB: cp210x: Add ID for Parrot NMEA GPS Flight Recorder
+
+From: Vittorio Alfieri <vittorio88@gmail.com>
+
+commit 3c4c615d70c8cbdc8ba8c79ed702640930652a79 upstream.
+
+The Parrot NMEA GPS Flight Recorder is a USB composite device
+consisting of hub, flash storage, and cp210x usb to serial chip.
+It is an accessory to the mass-produced Parrot AR Drone 2.
+The device emits standard NMEA messages which make the it compatible
+with NMEA compatible software. It was tested using gpsd version 3.11-3
+as an NMEA interpreter and using the official Parrot Flight Recorder.
+
+Signed-off-by: Vittorio Alfieri <vittorio88@gmail.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/cp210x.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -164,6 +164,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */
+ { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */
+ { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */
++ { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */
+ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
+ { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
+ { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */
--- /dev/null
+From 013dd239d6220a4e0dfdf0d45a82c34f1fd73deb Mon Sep 17 00:00:00 2001
+From: Patrik Halfar <patrik_halfar@halfarit.cz>
+Date: Sat, 20 Feb 2016 18:49:56 +0100
+Subject: USB: qcserial: add Dell Wireless 5809e Gobi 4G HSPA+ (rev3)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Patrik Halfar <patrik_halfar@halfarit.cz>
+
+commit 013dd239d6220a4e0dfdf0d45a82c34f1fd73deb upstream.
+
+New revision of Dell Wireless 5809e Gobi 4G HSPA+ Mobile Broadband Card
+has new idProduct.
+
+Bus 002 Device 006: ID 413c:81b3 Dell Computer Corp.
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x413c Dell Computer Corp.
+ idProduct 0x81b3
+ bcdDevice 0.06
+ iManufacturer 1 Sierra Wireless, Incorporated
+ iProduct 2 Dell Wireless 5809e Gobi™ 4G HSPA+ Mobile Broadband Card
+ iSerial 3
+ bNumConfigurations 2
+
+Signed-off-by: Patrik Halfar <patrik_halfar@halfarit.cz>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/qcserial.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -165,6 +165,7 @@ static const struct usb_device_id id_tab
+ {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
+ {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
+ {DEVICE_SWI(0x413c, 0x81b1)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card */
++ {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
+
+ /* Huawei devices */
+ {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */
--- /dev/null
+From 04fdbc825ffc02fb098964b92de802fff44e73fd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Tue, 1 Mar 2016 14:36:32 +0100
+Subject: USB: qcserial: add Sierra Wireless EM74xx device ID
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit 04fdbc825ffc02fb098964b92de802fff44e73fd upstream.
+
+The MC74xx and EM74xx modules use different IDs by default, according
+to the Lenovo EM7455 driver for Windows.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/qcserial.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -157,8 +157,10 @@ static const struct usb_device_id id_tab
+ {DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */
+ {DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */
+ {DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */
+- {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx/EM74xx */
+- {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx/EM74xx */
++ {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx */
++ {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx */
++ {DEVICE_SWI(0x1199, 0x9078)}, /* Sierra Wireless EM74xx */
++ {DEVICE_SWI(0x1199, 0x9079)}, /* Sierra Wireless EM74xx */
+ {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
+ {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
+ {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
--- /dev/null
+From c0992d0f54847d0d1d85c60fcaa054f175ab1ccd Mon Sep 17 00:00:00 2001
+From: Yegor Yefremov <yegorslists@googlemail.com>
+Date: Mon, 29 Feb 2016 16:39:57 +0100
+Subject: USB: serial: option: add support for Quectel UC20
+
+From: Yegor Yefremov <yegorslists@googlemail.com>
+
+commit c0992d0f54847d0d1d85c60fcaa054f175ab1ccd upstream.
+
+Add support for Quectel UC20 and blacklist the QMI interface.
+
+Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
+[johan: amend commit message ]
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1133,6 +1133,8 @@ static const struct usb_device_id option
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
++ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9003), /* Quectel UC20 */
++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
+ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
+ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
--- /dev/null
+From 5deef5551c77e488922cc4bf4bc76df63be650d0 Mon Sep 17 00:00:00 2001
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Mon, 29 Feb 2016 15:36:11 +0100
+Subject: USB: serial: option: add support for Telit LE922 PID 0x1045
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+commit 5deef5551c77e488922cc4bf4bc76df63be650d0 upstream.
+
+This patch adds support for 0x1045 PID of Telit LE922.
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/option.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -270,6 +270,7 @@ static void option_instat_callback(struc
+ #define TELIT_PRODUCT_UE910_V2 0x1012
+ #define TELIT_PRODUCT_LE922_USBCFG0 0x1042
+ #define TELIT_PRODUCT_LE922_USBCFG3 0x1043
++#define TELIT_PRODUCT_LE922_USBCFG5 0x1045
+ #define TELIT_PRODUCT_LE920 0x1200
+ #define TELIT_PRODUCT_LE910 0x1201
+
+@@ -1183,6 +1184,8 @@ static const struct usb_device_id option
+ .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG3),
+ .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg3 },
++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG5, 0xff),
++ .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
+ .driver_info = (kernel_ulong_t)&telit_le910_blacklist },
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),