From: Greg Kroah-Hartman Date: Fri, 17 Apr 2015 12:26:08 +0000 (+0200) Subject: 3.14-stable patches X-Git-Tag: v3.10.75~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d06286161a4e64f2d436283804369b1211e24f94;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches 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 --- 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 index 00000000000..723b840437e --- /dev/null +++ b/queue-3.14/can-flexcan-deferred-on-regulator-return-eprobe_defer.patch @@ -0,0 +1,62 @@ +From 555828ef45f825d6ee06559f0304163550eed380 Mon Sep 17 00:00:00 2001 +From: Andreas Werner +Date: Sun, 22 Mar 2015 17:35:52 +0100 +Subject: can: flexcan: Deferred on Regulator return EPROBE_DEFER + +From: Andreas Werner + +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 +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..73e3795d549 --- /dev/null +++ b/queue-3.14/cpuidle-acpi-do-not-overwrite-name-and-description-of-c0.patch @@ -0,0 +1,38 @@ +From c7e8bdf5872c5a8f5a6494e16fe839c38a0d3d3d Mon Sep 17 00:00:00 2001 +From: Thomas Schlichter +Date: Tue, 31 Mar 2015 20:24:39 +0200 +Subject: cpuidle: ACPI: do not overwrite name and description of C0 + +From: Thomas Schlichter + +commit c7e8bdf5872c5a8f5a6494e16fe839c38a0d3d3d upstream. + +Fix a bug that leads to showing the name and description of C-state C0 +as "" 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 +Reviewed-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..18607eb42bf --- /dev/null +++ b/queue-3.14/cpuidle-remove-state_count-field-from-struct-cpuidle_device.patch @@ -0,0 +1,86 @@ +From d75e4af14e228bbe3f86e29bcecb8e6be98d4e04 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Tue, 31 Mar 2015 20:15:09 +0200 +Subject: cpuidle: remove state_count field from struct cpuidle_device + +From: Bartlomiej Zolnierkiewicz + +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 +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Kyungmin Park +Acked-by: Daniel Lezcano +[ rjw: Changelog ] +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..9923d1fa1c3 --- /dev/null +++ b/queue-3.14/dmaengine-omap-dma-fix-memory-leak-when-terminating-running-transfer.patch @@ -0,0 +1,40 @@ +From 02d88b735f5a60f04dbf6d051b76e1877a0d0844 Mon Sep 17 00:00:00 2001 +From: Peter Ujfalusi +Date: Fri, 27 Mar 2015 13:35:52 +0200 +Subject: dmaengine: omap-dma: Fix memory leak when terminating running transfer + +From: Peter Ujfalusi + +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 +CC: +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..590890adf56 --- /dev/null +++ b/queue-3.14/iio-imu-use-iio_trigger_get-for-indio_dev-trig-assignment.patch @@ -0,0 +1,37 @@ +From 4ce7ca89d6e8eae9e201cd0e972ba323f33e2fb4 Mon Sep 17 00:00:00 2001 +From: Darshana Padmadas +Date: Sat, 28 Mar 2015 12:07:14 +0530 +Subject: iio: imu: Use iio_trigger_get for indio_dev->trig assignment + +From: Darshana Padmadas + +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 +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..43341eddb93 --- /dev/null +++ b/queue-3.14/iio-inv_mpu6050-clear-timestamps-fifo-while-resetting-hardware-fifo.patch @@ -0,0 +1,76 @@ +From 4dac0a8eefd55bb1f157d1a5a084531334a2d74c Mon Sep 17 00:00:00 2001 +From: Viorel Suman +Date: Wed, 18 Feb 2015 20:05:21 +0200 +Subject: iio: inv_mpu6050: Clear timestamps fifo while resetting hardware fifo + +From: Viorel Suman + +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 +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + #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); + diff --git a/queue-3.14/series b/queue-3.14/series index 43f922e325c..c0dd61d506c 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -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 index 00000000000..5d952f0dc88 --- /dev/null +++ b/queue-3.14/usb-xhci-apply-xhci_avoid_bei-quirk-to-all-intel-xhci-controllers.patch @@ -0,0 +1,56 @@ +From 227a4fd801c8a9fa2c4700ab98ec1aec06e3b44d Mon Sep 17 00:00:00 2001 +From: Lu Baolu +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 + +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 +Tested-by: Alistair Grant +Signed-off-by: Mathias Nyman +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..e2870e57e42 --- /dev/null +++ b/queue-3.14/usb-xhci-handle-config-error-change-cec-in-xhci-driver.patch @@ -0,0 +1,78 @@ +From 9425183d177aa4a2f09d01a74925124f0778b595 Mon Sep 17 00:00:00 2001 +From: Lu Baolu +Date: Mon, 23 Mar 2015 18:27:41 +0200 +Subject: usb: xhci: handle Config Error Change (CEC) in xhci driver + +From: Lu Baolu + +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 +Signed-off-by: Lu Baolu +Signed-off-by: Mathias Nyman +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..04eaa197b02 --- /dev/null +++ b/queue-3.14/x86-reboot-add-asrock-q1900dc-itx-mainboard-reboot-quirk.patch @@ -0,0 +1,60 @@ +From 80313b3078fcd2ca51970880d90757f05879a193 Mon Sep 17 00:00:00 2001 +From: Stefan Lippers-Hollmann +Date: Mon, 30 Mar 2015 22:44:27 +0200 +Subject: x86/reboot: Add ASRock Q1900DC-ITX mainboard reboot quirk + +From: Stefan Lippers-Hollmann + +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 +Cc: Matt Fleming +Link: http://lkml.kernel.org/r/20150330224427.0fb58e42@mir +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + 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,