]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Apr 2015 12:26:08 +0000 (14:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Apr 2015 12:26:08 +0000 (14:26 +0200)
added patches:
can-flexcan-deferred-on-regulator-return-eprobe_defer.patch
cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch
cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch
dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch
iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch
iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch
usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch
usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch
x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch

queue-3.14/can-flexcan-deferred-on-regulator-return-eprobe_defer.patch [new file with mode: 0644]
queue-3.14/cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch [new file with mode: 0644]
queue-3.14/cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch [new file with mode: 0644]
queue-3.14/dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch [new file with mode: 0644]
queue-3.14/iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch [new file with mode: 0644]
queue-3.14/iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch [new file with mode: 0644]
queue-3.14/series
queue-3.14/usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch [new file with mode: 0644]
queue-3.14/usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch [new file with mode: 0644]
queue-3.14/x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch [new file with mode: 0644]

diff --git a/queue-3.14/can-flexcan-deferred-on-regulator-return-eprobe_defer.patch b/queue-3.14/can-flexcan-deferred-on-regulator-return-eprobe_defer.patch
new file mode 100644 (file)
index 0000000..723b840
--- /dev/null
@@ -0,0 +1,62 @@
+From 555828ef45f825d6ee06559f0304163550eed380 Mon Sep 17 00:00:00 2001
+From: Andreas Werner <kernel@andy89.org>
+Date: Sun, 22 Mar 2015 17:35:52 +0100
+Subject: can: flexcan: Deferred on Regulator return EPROBE_DEFER
+
+From: Andreas Werner <kernel@andy89.org>
+
+commit 555828ef45f825d6ee06559f0304163550eed380 upstream.
+
+Return EPROBE_DEFER if Regulator returns EPROBE_DEFER
+
+If the Flexcan driver is built into kernel and a regulator is used to
+enable the CAN transceiver, the Flexcan driver may not use the regulator.
+
+When initializing the Flexcan device with a regulator defined in the device
+tree, but not initialized, the regulator subsystem returns EPROBE_DEFER, hence
+the Flexcan init fails.
+
+The solution for this is to return EPROBE_DEFER if regulator is not initialized
+and wait until the regulator is initialized.
+
+Signed-off-by: Andreas Werner <kernel@andy89.org>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/can/flexcan.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/can/flexcan.c
++++ b/drivers/net/can/flexcan.c
+@@ -1095,12 +1095,19 @@ static int flexcan_probe(struct platform
+       const struct flexcan_devtype_data *devtype_data;
+       struct net_device *dev;
+       struct flexcan_priv *priv;
++      struct regulator *reg_xceiver;
+       struct resource *mem;
+       struct clk *clk_ipg = NULL, *clk_per = NULL;
+       void __iomem *base;
+       int err, irq;
+       u32 clock_freq = 0;
++      reg_xceiver = devm_regulator_get(&pdev->dev, "xceiver");
++      if (PTR_ERR(reg_xceiver) == -EPROBE_DEFER)
++              return -EPROBE_DEFER;
++      else if (IS_ERR(reg_xceiver))
++              reg_xceiver = NULL;
++
+       if (pdev->dev.of_node)
+               of_property_read_u32(pdev->dev.of_node,
+                                               "clock-frequency", &clock_freq);
+@@ -1162,9 +1169,7 @@ static int flexcan_probe(struct platform
+       priv->pdata = dev_get_platdata(&pdev->dev);
+       priv->devtype_data = devtype_data;
+-      priv->reg_xceiver = devm_regulator_get(&pdev->dev, "xceiver");
+-      if (IS_ERR(priv->reg_xceiver))
+-              priv->reg_xceiver = NULL;
++      priv->reg_xceiver = reg_xceiver;
+       netif_napi_add(dev, &priv->napi, flexcan_poll, FLEXCAN_NAPI_WEIGHT);
diff --git a/queue-3.14/cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch b/queue-3.14/cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch
new file mode 100644 (file)
index 0000000..73e3795
--- /dev/null
@@ -0,0 +1,38 @@
+From c7e8bdf5872c5a8f5a6494e16fe839c38a0d3d3d Mon Sep 17 00:00:00 2001
+From: Thomas Schlichter <thomas.schlichter@web.de>
+Date: Tue, 31 Mar 2015 20:24:39 +0200
+Subject: cpuidle: ACPI: do not overwrite name and description of C0
+
+From: Thomas Schlichter <thomas.schlichter@web.de>
+
+commit c7e8bdf5872c5a8f5a6494e16fe839c38a0d3d3d upstream.
+
+Fix a bug that leads to showing the name and description of C-state C0
+as "<null>" in sysfs after the ACPI C-states changed (e.g. after AC->DC
+or DC->AC
+transition).
+
+The function poll_idle_init() in drivers/cpuidle/driver.c initializes the
+state 0 during cpuidle_register_driver(), so we better do not overwrite it
+again with '\0' during acpi_processor_cst_has_changed().
+
+Signed-off-by: Thomas Schlichter <thomas.schlichter@web.de>
+Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/processor_idle.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/acpi/processor_idle.c
++++ b/drivers/acpi/processor_idle.c
+@@ -962,7 +962,7 @@ static int acpi_processor_setup_cpuidle_
+               return -EINVAL;
+       drv->safe_state_index = -1;
+-      for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
++      for (i = CPUIDLE_DRIVER_STATE_START; i < CPUIDLE_STATE_MAX; i++) {
+               drv->states[i].name[0] = '\0';
+               drv->states[i].desc[0] = '\0';
+       }
diff --git a/queue-3.14/cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch b/queue-3.14/cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch
new file mode 100644 (file)
index 0000000..18607eb
--- /dev/null
@@ -0,0 +1,86 @@
+From d75e4af14e228bbe3f86e29bcecb8e6be98d4e04 Mon Sep 17 00:00:00 2001
+From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+Date: Tue, 31 Mar 2015 20:15:09 +0200
+Subject: cpuidle: remove state_count field from struct cpuidle_device
+
+From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+
+commit d75e4af14e228bbe3f86e29bcecb8e6be98d4e04 upstream.
+
+Thomas Schlichter reports the following issue on his Samsung NC20:
+
+"The C-states C1 and C2 to the OS when connected to AC, and additionally
+ provides the C3 C-state when disconnected from AC.  However, the number
+ of C-states shown in sysfs is fixed to the number of C-states present
+ at boot.
+   If I boot with AC connected, I always only see the C-states up to C2
+   even if I disconnect AC.
+
+   The reason is commit 130a5f692425 (ACPI / cpuidle: remove dev->state_count
+   setting).  It removes the update of dev->state_count, but sysfs uses
+   exactly this variable to show the C-states.
+
+   The fix is to use drv->state_count in sysfs.  As this is currently the
+   last user of dev->state_count, this variable can be completely removed."
+
+Remove dev->state_count as per the above.
+
+Reported-by: Thomas Schlichter <thomas.schlichter@web.de>
+Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
+Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
+Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+[ rjw: Changelog ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/cpuidle/cpuidle.c |    3 ---
+ drivers/cpuidle/sysfs.c   |    5 +++--
+ include/linux/cpuidle.h   |    1 -
+ 3 files changed, 3 insertions(+), 6 deletions(-)
+
+--- a/drivers/cpuidle/cpuidle.c
++++ b/drivers/cpuidle/cpuidle.c
+@@ -252,9 +252,6 @@ int cpuidle_enable_device(struct cpuidle
+       if (!dev->registered)
+               return -EINVAL;
+-      if (!dev->state_count)
+-              dev->state_count = drv->state_count;
+-
+       ret = cpuidle_add_device_sysfs(dev);
+       if (ret)
+               return ret;
+--- a/drivers/cpuidle/sysfs.c
++++ b/drivers/cpuidle/sysfs.c
+@@ -398,7 +398,7 @@ static int cpuidle_add_state_sysfs(struc
+       struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);
+       /* state statistics */
+-      for (i = 0; i < device->state_count; i++) {
++      for (i = 0; i < drv->state_count; i++) {
+               kobj = kzalloc(sizeof(struct cpuidle_state_kobj), GFP_KERNEL);
+               if (!kobj)
+                       goto error_state;
+@@ -430,9 +430,10 @@ error_state:
+  */
+ static void cpuidle_remove_state_sysfs(struct cpuidle_device *device)
+ {
++      struct cpuidle_driver *drv = cpuidle_get_cpu_driver(device);
+       int i;
+-      for (i = 0; i < device->state_count; i++)
++      for (i = 0; i < drv->state_count; i++)
+               cpuidle_free_state_kobj(device, i);
+ }
+--- a/include/linux/cpuidle.h
++++ b/include/linux/cpuidle.h
+@@ -69,7 +69,6 @@ struct cpuidle_device {
+       unsigned int            cpu;
+       int                     last_residency;
+-      int                     state_count;
+       struct cpuidle_state_usage      states_usage[CPUIDLE_STATE_MAX];
+       struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
+       struct cpuidle_driver_kobj *kobj_driver;
diff --git a/queue-3.14/dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch b/queue-3.14/dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch
new file mode 100644 (file)
index 0000000..9923d1f
--- /dev/null
@@ -0,0 +1,40 @@
+From 02d88b735f5a60f04dbf6d051b76e1877a0d0844 Mon Sep 17 00:00:00 2001
+From: Peter Ujfalusi <peter.ujfalusi@ti.com>
+Date: Fri, 27 Mar 2015 13:35:52 +0200
+Subject: dmaengine: omap-dma: Fix memory leak when terminating running transfer
+
+From: Peter Ujfalusi <peter.ujfalusi@ti.com>
+
+commit 02d88b735f5a60f04dbf6d051b76e1877a0d0844 upstream.
+
+In omap_dma_start_desc the vdesc->node is removed from the virt-dma
+framework managed lists (to be precise from the desc_issued list).
+If a terminate_all comes before the transfer finishes the omap_desc will
+not be freed up because it is not in any of the lists and we stopped the
+DMA channel so the transfer will not going to complete.
+There is no special sequence for leaking memory when using cyclic (audio)
+transfer: with every start and stop of a cyclic transfer the driver leaks
+struct omap_desc worth of memory.
+
+Free up the allocated memory directly in omap_dma_terminate_all() since the
+framework will not going to do that for us.
+
+Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
+CC: <linux-omap@vger.kernel.org>
+Signed-off-by: Vinod Koul <vinod.koul@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/dma/omap-dma.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/dma/omap-dma.c
++++ b/drivers/dma/omap-dma.c
+@@ -487,6 +487,7 @@ static int omap_dma_terminate_all(struct
+        * c->desc is NULL and exit.)
+        */
+       if (c->desc) {
++              omap_dma_desc_free(&c->desc->vd);
+               c->desc = NULL;
+               /* Avoid stopping the dma twice */
+               if (!c->paused)
diff --git a/queue-3.14/iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch b/queue-3.14/iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch
new file mode 100644 (file)
index 0000000..590890a
--- /dev/null
@@ -0,0 +1,37 @@
+From 4ce7ca89d6e8eae9e201cd0e972ba323f33e2fb4 Mon Sep 17 00:00:00 2001
+From: Darshana Padmadas <darshanapadmadas@gmail.com>
+Date: Sat, 28 Mar 2015 12:07:14 +0530
+Subject: iio: imu: Use iio_trigger_get for indio_dev->trig assignment
+
+From: Darshana Padmadas <darshanapadmadas@gmail.com>
+
+commit 4ce7ca89d6e8eae9e201cd0e972ba323f33e2fb4 upstream.
+
+This patch uses iio_trigger_get to increment the reference
+count of trigger device, to avoid incorrect assignment.
+Can result in a null pointer dereference during removal if the
+trigger has been changed before removal.
+
+This patch refers to a similar situation encountered through the
+following discussion:
+http://www.spinics.net/lists/linux-iio/msg13669.html
+
+Signed-off-by: Darshana Padmadas <darshanapadmadas@gmail.com>
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iio/imu/adis_trigger.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/imu/adis_trigger.c
++++ b/drivers/iio/imu/adis_trigger.c
+@@ -60,7 +60,7 @@ int adis_probe_trigger(struct adis *adis
+       iio_trigger_set_drvdata(adis->trig, adis);
+       ret = iio_trigger_register(adis->trig);
+-      indio_dev->trig = adis->trig;
++      indio_dev->trig = iio_trigger_get(adis->trig);
+       if (ret)
+               goto error_free_irq;
diff --git a/queue-3.14/iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch b/queue-3.14/iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch
new file mode 100644 (file)
index 0000000..43341ed
--- /dev/null
@@ -0,0 +1,76 @@
+From 4dac0a8eefd55bb1f157d1a5a084531334a2d74c Mon Sep 17 00:00:00 2001
+From: Viorel Suman <viorel.suman@gmail.com>
+Date: Wed, 18 Feb 2015 20:05:21 +0200
+Subject: iio: inv_mpu6050: Clear timestamps fifo while resetting hardware fifo
+
+From: Viorel Suman <viorel.suman@gmail.com>
+
+commit 4dac0a8eefd55bb1f157d1a5a084531334a2d74c upstream.
+
+A hardware fifo reset always imply an invalidation of the
+existing timestamps, so we'll clear timestamps fifo on
+successfull hardware fifo reset.
+
+Signed-off-by: Viorel Suman <viorel.suman@gmail.com>
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c |   25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
++++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+@@ -25,6 +25,16 @@
+ #include <linux/poll.h>
+ #include "inv_mpu_iio.h"
++static void inv_clear_kfifo(struct inv_mpu6050_state *st)
++{
++      unsigned long flags;
++
++      /* take the spin lock sem to avoid interrupt kick in */
++      spin_lock_irqsave(&st->time_stamp_lock, flags);
++      kfifo_reset(&st->timestamps);
++      spin_unlock_irqrestore(&st->time_stamp_lock, flags);
++}
++
+ int inv_reset_fifo(struct iio_dev *indio_dev)
+ {
+       int result;
+@@ -51,6 +61,10 @@ int inv_reset_fifo(struct iio_dev *indio
+                                       INV_MPU6050_BIT_FIFO_RST);
+       if (result)
+               goto reset_fifo_fail;
++
++      /* clear timestamps fifo */
++      inv_clear_kfifo(st);
++
+       /* enable interrupt */
+       if (st->chip_config.accl_fifo_enable ||
+           st->chip_config.gyro_fifo_enable) {
+@@ -84,16 +98,6 @@ reset_fifo_fail:
+       return result;
+ }
+-static void inv_clear_kfifo(struct inv_mpu6050_state *st)
+-{
+-      unsigned long flags;
+-
+-      /* take the spin lock sem to avoid interrupt kick in */
+-      spin_lock_irqsave(&st->time_stamp_lock, flags);
+-      kfifo_reset(&st->timestamps);
+-      spin_unlock_irqrestore(&st->time_stamp_lock, flags);
+-}
+-
+ /**
+  * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt.
+  */
+@@ -185,7 +189,6 @@ end_session:
+ flush_fifo:
+       /* Flush HW and SW FIFOs. */
+       inv_reset_fifo(indio_dev);
+-      inv_clear_kfifo(st);
+       mutex_unlock(&indio_dev->mlock);
+       iio_trigger_notify_done(indio_dev->trig);
index 43f922e325c88fb91da0ec55fa37b8632bedd42e..c0dd61d506c1e0c2b2932d06b0c43de7d9f9613b 100644 (file)
@@ -19,3 +19,12 @@ radeon-do-not-directly-dereference-pointers-to-bios-area.patch
 usb-ftdi_sio-added-custom-pid-for-synapse-wireless-product.patch
 usb-ftdi_sio-use-jtag-quirk-for-snap-connect-e10.patch
 defer-processing-of-req_preempt-requests-for-blocked-devices.patch
+iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch
+iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch
+dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch
+x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch
+can-flexcan-deferred-on-regulator-return-eprobe_defer.patch
+cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch
+cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch
+usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch
+usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch
diff --git a/queue-3.14/usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch b/queue-3.14/usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch
new file mode 100644 (file)
index 0000000..5d952f0
--- /dev/null
@@ -0,0 +1,56 @@
+From 227a4fd801c8a9fa2c4700ab98ec1aec06e3b44d Mon Sep 17 00:00:00 2001
+From: Lu Baolu <baolu.lu@linux.intel.com>
+Date: Mon, 23 Mar 2015 18:27:42 +0200
+Subject: usb: xhci: apply XHCI_AVOID_BEI quirk to all Intel xHCI controllers
+
+From: Lu Baolu <baolu.lu@linux.intel.com>
+
+commit 227a4fd801c8a9fa2c4700ab98ec1aec06e3b44d upstream.
+
+When a device with an isochronous endpoint is plugged into the Intel
+xHCI host controller, and the driver submits multiple frames per URB,
+the xHCI driver will set the Block Event Interrupt (BEI) flag on all
+but the last TD for the URB. This causes the host controller to place
+an event on the event ring, but not send an interrupt. When the last
+TD for the URB completes, BEI is cleared, and we get an interrupt for
+the whole URB.
+
+However, under Intel xHCI host controllers, if the event ring is full
+of events from transfers with BEI set,  an "Event Ring is Full" event
+will be posted to the last entry of the event ring,  but no interrupt
+is generated. Host will cease all transfer and command executions and
+wait until software completes handling the pending events in the event
+ring.  That means xHC stops, but event of "event ring is full" is not
+notified. As the result, the xHC looks like dead to user.
+
+This patch is to apply XHCI_AVOID_BEI quirk to Intel xHC devices. And
+it should be backported to kernels as old as 3.0, that contains the
+commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port switching.").
+
+Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
+Tested-by: Alistair Grant <akgrant0710@gmail.com>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci-pci.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -108,6 +108,7 @@ static void xhci_pci_quirks(struct devic
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
+               xhci->quirks |= XHCI_LPM_SUPPORT;
+               xhci->quirks |= XHCI_INTEL_HOST;
++              xhci->quirks |= XHCI_AVOID_BEI;
+       }
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+                       pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
+@@ -123,7 +124,6 @@ static void xhci_pci_quirks(struct devic
+                * PPT chipsets.
+                */
+               xhci->quirks |= XHCI_SPURIOUS_REBOOT;
+-              xhci->quirks |= XHCI_AVOID_BEI;
+       }
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+           (pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI ||
diff --git a/queue-3.14/usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch b/queue-3.14/usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch
new file mode 100644 (file)
index 0000000..e2870e5
--- /dev/null
@@ -0,0 +1,78 @@
+From 9425183d177aa4a2f09d01a74925124f0778b595 Mon Sep 17 00:00:00 2001
+From: Lu Baolu <baolu.lu@linux.intel.com>
+Date: Mon, 23 Mar 2015 18:27:41 +0200
+Subject: usb: xhci: handle Config Error Change (CEC) in xhci driver
+
+From: Lu Baolu <baolu.lu@linux.intel.com>
+
+commit 9425183d177aa4a2f09d01a74925124f0778b595 upstream.
+
+Linux xHCI driver doesn't report and handle port cofig error change.
+If Port Configure Error for root hub port occurs, CEC bit in PORTSC
+would be set by xHC and remains 1. This happends when the root port
+fails to configure its link partner, e.g. the port fails to exchange
+port capabilities information using Port Capability LMPs.
+
+Then the Port Status Change Events will be blocked until all status
+change bits(CEC is one of the change bits) are cleared('0') (refer to
+xHCI spec 4.19.2). Otherwise, the port status change event for this
+root port will not be generated anymore, then root port would look
+like dead for user and can't be recovered until a Host Controller
+Reset(HCRST).
+
+This patch is to check CEC bit in PORTSC in xhci_get_port_status()
+and set a Config Error in the return status if CEC is set. This will
+cause a ClearPortFeature request, where CEC bit is cleared in
+xhci_clear_port_change_bit().
+
+[The commit log is based on initial Marvell patch posted at
+http://marc.info/?l=linux-kernel&m=142323612321434&w=2]
+
+Reported-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/xhci-hub.c |    9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/host/xhci-hub.c
++++ b/drivers/usb/host/xhci-hub.c
+@@ -383,6 +383,10 @@ static void xhci_clear_port_change_bit(s
+               status = PORT_PLC;
+               port_change_bit = "link state";
+               break;
++      case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
++              status = PORT_CEC;
++              port_change_bit = "config error";
++              break;
+       default:
+               /* Should never happen */
+               return;
+@@ -584,6 +588,8 @@ static u32 xhci_get_port_status(struct u
+                       status |= USB_PORT_STAT_C_LINK_STATE << 16;
+               if ((raw_port_status & PORT_WRC))
+                       status |= USB_PORT_STAT_C_BH_RESET << 16;
++              if ((raw_port_status & PORT_CEC))
++                      status |= USB_PORT_STAT_C_CONFIG_ERROR << 16;
+       }
+       if (hcd->speed != HCD_USB3) {
+@@ -999,6 +1005,7 @@ int xhci_hub_control(struct usb_hcd *hcd
+               case USB_PORT_FEAT_C_OVER_CURRENT:
+               case USB_PORT_FEAT_C_ENABLE:
+               case USB_PORT_FEAT_C_PORT_LINK_STATE:
++              case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
+                       xhci_clear_port_change_bit(xhci, wValue, wIndex,
+                                       port_array[wIndex], temp);
+                       break;
+@@ -1063,7 +1070,7 @@ int xhci_hub_status_data(struct usb_hcd
+        */
+       status = bus_state->resuming_ports;
+-      mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
++      mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC;
+       spin_lock_irqsave(&xhci->lock, flags);
+       /* For each port, did anything change?  If so, set that bit in buf. */
diff --git a/queue-3.14/x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch b/queue-3.14/x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch
new file mode 100644 (file)
index 0000000..04eaa19
--- /dev/null
@@ -0,0 +1,60 @@
+From 80313b3078fcd2ca51970880d90757f05879a193 Mon Sep 17 00:00:00 2001
+From: Stefan Lippers-Hollmann <s.l-h@gmx.de>
+Date: Mon, 30 Mar 2015 22:44:27 +0200
+Subject: x86/reboot: Add ASRock Q1900DC-ITX mainboard reboot quirk
+
+From: Stefan Lippers-Hollmann <s.l-h@gmx.de>
+
+commit 80313b3078fcd2ca51970880d90757f05879a193 upstream.
+
+The ASRock Q1900DC-ITX mainboard (Baytrail-D) hangs randomly in
+both BIOS and UEFI mode while rebooting unless reboot=pci is
+used. Add a quirk to reboot via the pci method.
+
+The problem is very intermittent and hard to debug, it might succeed
+rebooting just fine 40 times in a row - but fails half a dozen times
+the next day. It seems to be slightly less common in BIOS CSM mode
+than native UEFI (with the CSM disabled), but it does happen in either
+mode. Since I've started testing this patch in late january, rebooting
+has been 100% reliable.
+
+Most of the time it already hangs during POST, but occasionally it
+might even make it through the bootloader and the kernel might even
+start booting, but then hangs before the mode switch. The same symptoms
+occur with grub-efi, gummiboot and grub-pc, just as well as (at least)
+kernel 3.16-3.19 and 4.0-rc6 (I haven't tried older kernels than 3.16).
+Upgrading to the most current mainboard firmware of the ASRock
+Q1900DC-ITX, version 1.20, does not improve the situation.
+
+( Searching the web seems to suggest that other Bay Trail-D mainboards
+  might be affected as well. )
+--
+Signed-off-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
+Cc: Matt Fleming <matt.fleming@intel.com>
+Link: http://lkml.kernel.org/r/20150330224427.0fb58e42@mir
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/reboot.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -181,6 +181,16 @@ static struct dmi_system_id __initdata r
+               },
+       },
++      /* ASRock */
++      {       /* Handle problems with rebooting on ASRock Q1900DC-ITX */
++              .callback = set_pci_reboot,
++              .ident = "ASRock Q1900DC-ITX",
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "ASRock"),
++                      DMI_MATCH(DMI_BOARD_NAME, "Q1900DC-ITX"),
++              },
++      },
++
+       /* ASUS */
+       {       /* Handle problems with rebooting on ASUS P4S800 */
+               .callback = set_bios_reboot,